--- a/genericpositioningplugins/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/genericpositioningplugins/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -18,13 +18,13 @@
#include <platform_paths.hrh>
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
#include "../locationnpppsy/group/bld.inf"
#include "../locationsuplpsy/group/bld.inf"
PRJ_EXPORTS
-../cenrep/10282266_s60.cre z:/private/10202be9/10282266_s60.cre
+//../cenrep/10282266_s60.cre z:/private/10202be9/10282266_s60.cre
../cenrep/1028224B_s60.cre z:/private/10202be9/1028224B_s60.cre
../rom/prifw_cenrep.iby CORE_MW_LAYER_IBY_EXPORT_PATH(prifw_cenrep.iby)
--- a/genericpositioningplugins/locationnpppsy/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/genericpositioningplugins/locationnpppsy/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -18,7 +18,7 @@
#include <platform_paths.hrh>
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
PRJ_EXPORTS
../rom/nla_npppsy.iby CORE_MW_LAYER_IBY_EXPORT_PATH(nla_npppsy.iby)
--- a/genericpositioningplugins/locationnpppsy/inc/npppsysingletonhandler.h Tue Jun 15 11:38:32 2010 +0100
+++ b/genericpositioningplugins/locationnpppsy/inc/npppsysingletonhandler.h Thu Jul 22 16:37:56 2010 +0100
@@ -51,7 +51,7 @@
* status.
* @reuturn the pointer the the singleton handler
*/
- static CNppPsySingletonHandler* CNppPsySingletonHandler::GetInstanceL(
+ static CNppPsySingletonHandler* GetInstanceL(
MPositionerStatus& aStatusInterface );
/**
--- a/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -17,7 +17,7 @@
PRJ_PLATFORMS
-WINSCW ARMV5
+WINSCW ARMV5 GCCE
#include "../genericpositioningplugins/group/bld.inf"
#include "../landmarks/group/bld.inf"
--- a/landmarks/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/landmarks/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -19,7 +19,7 @@
PRJ_PLATFORMS
-WINSCW ARMV5
+WINSCW ARMV5 GCCE
#include "../locationlandmarks/group/bld.inf"
--- a/landmarks/locationlandmarks/dbmanclientlib/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/landmarks/locationlandmarks/dbmanclientlib/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -20,7 +20,7 @@
#include <platform_paths.hrh>
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
PRJ_EXPORTS
--- a/landmarks/locationlandmarks/dbmanclientlib/src/EPos_HPosLmDatabaseInfo.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/landmarks/locationlandmarks/dbmanclientlib/src/EPos_HPosLmDatabaseInfo.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -254,9 +254,16 @@
sizeof(TInt) +
aDatabaseUri.Size();
+#if defined(__GCCE__)
+ // allocate memory
+ return User::AllocL(_FOFF(HPosLmDatabaseInfo,
+ iBuffer) + requiredBufferSize * sizeof (typeof(iBuffer)));
+#else
// allocate memory
return User::AllocL(_FOFF_DYNAMIC(HPosLmDatabaseInfo,
- iBuffer[requiredBufferSize]));
+ iBuffer[requiredBufferSize]));
+#endif
+
}
--- a/landmarks/locationlandmarks/internalservices/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/landmarks/locationlandmarks/internalservices/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -43,10 +43,8 @@
../inc/EPos_CPosLmSettingsHandler.h |../../../inc/epos_cposlmsettingshandler.h
../inc/EPos_PosLmLongTextColHandler.h |../../../inc/epos_poslmlongtextcolhandler.h
-../data/101FE99B.txt /epoc32/release/winscw/udeb/z/private/10202be9/101fe99b.txt
PRJ_MMPFILES
-//gnumakefile epos_landmarksglobalcategories_icons.mk
EPos_LmInternalServices.mmp
EPos_LandmarksGlobalCategories.mmp
--- a/landmarks/locationlandmarks/localaccess/inc/epos_cposlmlocaldatabase.h Tue Jun 15 11:38:32 2010 +0100
+++ b/landmarks/locationlandmarks/localaccess/inc/epos_cposlmlocaldatabase.h Thu Jul 22 16:37:56 2010 +0100
@@ -360,7 +360,7 @@
* full information.
* @return The landmark.
*/
- CPosLandmark* CPosLmLocalDatabase::ReadLmLC(
+ CPosLandmark* ReadLmLC(
TPosLmItemId aLandmarkId,
TBool aIsPartial );
--- a/landmarks/locationlandmarks/server/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/landmarks/locationlandmarks/server/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -25,7 +25,7 @@
// Internal APIs
../inc/EPos_PosLmServerCommon.h |../../../inc/epos_poslmservercommon.h
-../data/backup_registration.xml /epoc32/data/z/private/101fdf81/backup_registration.xml
+../data/backup_registration.xml z:/private/101fdf81/backup_registration.xml
PRJ_MMPFILES
EPos_LandmarksServer.mmp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/Bmarm/LandMarksTestModuleu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/Bwins/LandMarksTestModuleu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/Script/lmtm.bat Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,23 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Symbian Foundation License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+md e:\results
+
+md e:\results\LandMarksTestModule
+
+ATSINTERFACE.EXE -testmodule testscripter -config c:\testframework\LandMarksTestModule1.cfg
+
+copy c:\Logs\TestFramework\TestReport.txt e:\results\LandMarksTestModule\TestReport_LandMarksTestModule1.txt
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/group/ABLD.BAT Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,31 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Symbian Foundation License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\work\mrt\TestProvider\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/group/BC34B3.tmp has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/group/FT_DbManPluginsTest.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET dbmanpluginstest.dll
+TARGETTYPE PLUGIN // From SOS9.0
+UID 0x10009D8D 0x04440010
+
+//VENDORID VID_DEFAULT
+CAPABILITY ALL -TCB
+
+SOURCEPATH ../src
+SOURCE DbManPluginsTestMain.cpp
+SOURCE CDbManTestPluginBase.cpp
+
+SOURCEPATH ../resource
+start resource 04440010.rss
+#ifdef SYMBIAN_SECURE_ECOM
+TARGET dbmanpluginstest.rsc
+#endif
+end
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/ecom
+
+SYSTEMINCLUDE /epoc32/include
+
+
+
+USERINCLUDE ../inc
+USERINCLUDE ../src
+
+LIBRARY euser.lib
+LIBRARY bafl.lib
+LIBRARY ecom.lib
+LIBRARY eposlmdbmanlib.lib
+LIBRARY FT_lmservlib.lib
+EXPORTUNFROZEN
+SMPSAFE
+
+// END OF FILE
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Build info file for Landmarks Database Management Provider
+*
+*/
+
+PRJ_PLATFORMS
+WINSCW ARMV5
+
+PRJ_EXPORTS
+
+
+PRJ_MMPFILES
+FT_DbManPluginsTest.mmp
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/group/dbmanpluginstest_UID_.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,21 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+// Makmake-generated uid source file
+#include <e32cmn.h>
+#pragma data_seg(".SYMBIAN")
+__EMULATOR_IMAGE_HEADER2(0x10000079,0x10009d8d,0x04440010,EPriorityForeground,0x000ffffeu,0x00000000u,0x04440010,0,0x00010000,0)
+#pragma data_seg()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/inc/CDbManTestPluginBase.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,351 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CDBMANTESTPLUGINBASE_H
+#define CDBMANTESTPLUGINBASE_H
+
+// INCLUDES
+#include <EPos_CPosLmDatabaseManagerPluginBase.h>
+
+// CLASS DECLARATION
+
+class CDbManTestPluginBase : public CPosLmDatabaseManagerPluginBase
+ {
+ public:
+
+ /**
+ * Destructor.
+ */
+ ~CDbManTestPluginBase();
+
+
+ static CDbManTestPluginBase* NewL(TAny* aConstructionParams);
+
+
+ public: // Functions from base classes.
+
+ /**
+ * Lists the URIs to all landmark databases handled by this
+ * plug-in.
+ *
+ * The client takes ownership of the returned array.
+ *
+ * If no databases are found, an empty array is returned.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since Series 60 3.0
+ * @return The list of database URIs.
+ */
+ CDesCArray* ListDatabasesLC();
+
+ /**
+ * Lists information about each landmark database handled by this
+ * plug-in.
+ *
+ * The client specifies an array which is populated by this function.
+ * The client takes ownership of all information objects in the array.
+ *
+ * If no databases are found, the input array is not modified.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseInfoArray On return, contains information about
+ * the landmark databases.
+ */
+ void ListDatabasesL(
+ /* OUT */ RPointerArray<HPosLmDatabaseInfo>& aDatabaseInfoArray
+ );
+
+ /**
+ * Registers a landmark database.
+ *
+ * The landmark database is then returned when listing landmark
+ * databases.
+ *
+ * Some protocols like "file" does not allow registering of databases
+ * and will leave with error code @p KErrNotSupported. To add a
+ * "file"-protocol database, the client must call @ref CreateDatabaseL.
+ *
+ * The client supplies an information object containing the URI of the
+ * database to register. The information object can also contain
+ * database settings, e.g. a display name for the database.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseInfo Information about the landmark database to
+ * register.
+ * @par Leave codes:
+ * @p KErrNotSupported The protocol specified in the URI is not
+ * supported by this plug-in or the protocol does not allow
+ * registering landmark databases.\n
+ * @p KErrArgument The URI is incorrect.\n
+ * @p KErrAlreadyExists The database already exists in the registry.
+ */
+ void RegisterDatabaseL(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * Unregisters a landmark database.
+ *
+ * After this, the landmark database will not be returned when listing
+ * landmark databases.
+ *
+ * Some protocols like "file" does not allow unregistering of databases
+ * and will leave with error code @p KErrNotSupported. To remove a
+ * "file"-protocol database, the client must call @ref DeleteDatabaseL.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseUri The URI of the database to register.
+ * @par Leave codes:
+ * @p KErrNotSupported The protocol specified in the URI is not
+ * supported by this plug-in or the protocol does not allow
+ * unregistering landmark databases.\n
+ * @p KErrArgument The URI is incorrect.
+ */
+ void UnregisterDatabaseL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * Unregisters all landmark database which are accessed through this
+ * plug-in
+ *
+ * After this, the landmark databases will not be returned when listing
+ * landmark databases.
+ *
+ * Some protocols like "file" does not allow unregistering of databases
+ * and will leave with error code @p KErrNotSupported. To remove a
+ * "file"-protocol database, the client must call @ref DeleteDatabaseL.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since Series 60 3.0
+ * @par Leave codes:
+ * @p KErrNotSupported This plug-in does not allow unregistering
+ * landmark databases.
+ */
+ void UnregisterAllDatabasesL();
+
+ /**
+ * Modifies the settings for a landmark database.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseUri The URI of the database to modify settings for.
+ * @param aDatabaseSettings The new settings for the database.
+ * @par Leave codes:
+ * @p KErrNotSupported The protocol specified in the URI is not
+ * supported by this plug-in.\n
+ * @p KErrNotFound The specified database is not found.
+ */
+ void ModifyDatabaseSettingsL(
+ /* IN */ const TDesC& aDatabaseUri,
+ /* IN */ const TPosLmDatabaseSettings& aDatabaseSettings
+ );
+
+ /**
+ * Retrieve information about a landmark database.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseInfo An information object containing the URI of the
+ * landmark database. On return, the object contains information about
+ * the landmark database, including any database settings.
+ * @par Leave codes:
+ * @p KErrNotSupported The protocol specified in the URI is not
+ * supported by this plug-in.\n
+ * @p KErrNotFound The specified database is not found.
+ */
+ void GetDatabaseInfoL(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * Checks if the specified landmark database exists.
+ *
+ * The database to check is specified by passing a URI to this function.
+ * URI construction is described in the class description for
+ * @ref CPosLmDatabaseManager.
+ *
+ * This function requires @p ReadUserData capability. If the database is
+ * remote, @p NetworkServices capability is also needed.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseUri The URI of the database which should be checked
+ * for existence.
+ * @return @p ETrue if the database exists, otherwise @p EFalse.
+ * @par Leave codes:
+ * @p KErrArgument The URI is incorrect or the protocol specified in the
+ * URI is not supported by this plug-in.\n
+ */
+ TBool DatabaseExistsL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * Creates a landmark database.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities. If the database is remote, @p NetworkServices
+ * capability is also needed.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseUri The URI of the new database.
+ * @par Leave codes:
+ * @p KErrNotSupported The operation is not supported by the plug-in.\n
+ * @p KErrArgument The URI is incorrect or the protocol specified in the
+ * URI is not supported by this plug-in.\n
+ * @p KErrAlreadyExists There is already a database at this URI.
+ */
+ void CreateDatabaseL(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * Deletes a landmark database.
+ *
+ * The database to delete is specified by passing a URI to this
+ * function. URI construction is described in the class description for
+ * @ref CPosLmDatabaseManager. The URI must specify the protocol which
+ * is handled by this database manager plug-in.
+ *
+ * If the specified database does not exist, the call is ignored.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities. If the database is remote, @p NetworkServices
+ * capability is also needed.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseUri The URI of the database to delete.
+ * @par Leave codes:
+ * @p KErrNotSupported The operation is not supported by the plug-in.\n
+ * @p KErrArgument The URI is incorrect or the protocol specified in the
+ * URI is not supported by this plug-in.\n
+ * @p KErrInUse The database is in use by some client.\n
+ * @p KErrAccessDenied The database is read-only.
+ */
+ void DeleteDatabaseL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * Copies a landmark database to a new location.
+ *
+ * Database locations are specified as URIs. URI construction is
+ * described in the class description for @ref CPosLmDatabaseManager.
+ * The target and source URIs must specify the protocol which is handled
+ * by this database manager plug-in.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities. If the database is remote, @p NetworkServices
+ * capability is also needed.
+ *
+ * @since Series 60 3.0
+ * @param aSourceUri The URI of the database to copy.
+ * @param aTargetUri The URI of the new database location.
+ * @par Leave codes:
+ * @p KErrNotSupported The operation is not supported by the plug-in.\n
+ * @p KErrArgument A URI is incorrect or the protocol specified in a
+ * URI is not supported by this plug-in.\n
+ * @p KErrInUse There is a write-lock on the database, e.g. some client
+ * is currently modifying the database.\n
+ * @p KErrNotFound There is no database at the source URI.\n
+ */
+ void CopyDatabaseL(
+ /* IN */ const TDesC& aSourceUri,
+ /* IN */ const TDesC& aTargetUri
+ );
+
+
+ /**
+ * Retrieves the type of media where a landmark database resides.
+ *
+ * This function does not validate the URI. If the URI is invalid, this
+ * function will just return @p EMediaUnknown.
+ *
+ * @since Series 60 3.0
+ * @param aDatabaseUri The URI of the database to check media for.
+ * @return Type of storage media.
+ */
+ TMediaType DatabaseMedia(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * Retrieves the drive letter for the drive where a landmark database
+ * resides.
+ *
+ * If the landmark database is remote or otherwise the drive letter is
+ * not applicable, 0 is returned.
+ *
+ * This function does not validate the URI. If the URI is invalid, this
+ * function will just return 0.
+ *
+ * @param aDatabaseUri The URI of the database to check drive letter
+ * for.
+ * @return The drive letter, or 0 if drive letter is not applicable.
+ */
+ TChar DatabaseDrive(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * From CPosLmDatabaseManagerPluginBase
+ *
+ * @since Series 60 3.0
+ * @return Pointer to the protocol descriptor, e.g. "file"
+ */
+ TPtrC Protocol();
+
+ protected:
+
+ CDbManTestPluginBase();
+
+ private:
+
+ TInt FindUri(const TDesC& aUri);
+
+ // By default, prohibit copy constructor
+ CDbManTestPluginBase(
+ const CDbManTestPluginBase& );
+ // Prohibit assigment operator
+ CDbManTestPluginBase& operator=(
+ const CDbManTestPluginBase& );
+
+ private: // Data
+
+ RPointerArray<HPosLmDatabaseInfo> iDatabases;
+
+ };
+
+#endif // CDBMANTESTPLUGINBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/inc/FT_CPosLmDatabaseManagerImpl.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSLMDATABASEMANAGERIMPL_H
+#define CPOSLMDATABASEMANAGERIMPL_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_TPosLmDatabaseEvent.h>
+#include <EPos_TPosLmDatabaseSettings.h>
+#include <EPos_HPosLmDatabaseInfo.h>
+#include "FT_RPosLandmarkServer.h"
+#include "EPos_RPosLmDatabaseEventListener.h"
+
+// FORWARD DECLARATIONS
+class CPosLmSettingsHandler;
+class CPosLmDbManPluginStore;
+class CPosLmDatabaseManagerPluginBase;
+
+// CLASS DECLARATION
+
+/**
+* This class is used to manage landmark databases. It implements the common
+* database management methods in @refCPosLmDatabaseManager and loads
+* protocol-specific database management provider implementations.
+*
+* @p CPosLmDatabaseManagerImpl contains functions for listing registering,
+* unregistering, creating, deleting, copying landmark databases, etc.
+* It also has functions for managing the default landmark database. The
+* client can listen to events related to database management.
+*
+* @lib eposlmdbmanprov.lib
+* @since Series 60 3.0
+* @version $Revision: 1.1 $, $Date: 2005/03/07 15:36:15 $
+*/
+class CPosLmDatabaseManagerImpl : public CPosLmDatabaseManager
+ {
+ public:
+
+ /**
+ * Two-phased constructor.
+ *
+ * @since Series 60 3.0
+ */
+ static CPosLmDatabaseManagerImpl* NewL();
+
+ /**
+ * Destructor.
+ *
+ * @since Series 60 3.0
+ */
+ virtual ~CPosLmDatabaseManagerImpl();
+
+ public: // Functions from base classes
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @return The URI of the default landmark database. The client takes
+ * ownership of the descriptor object.
+ */
+ HBufC* DefaultDatabaseUriLC();
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseUri The URI of the database which should be set as
+ * default.
+ */
+ void SetDefaultDatabaseUriL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aEvent Contains the event information when an event
+ * occurs.
+ * @param aStatus Is completed with @p KErrNone if an event
+ * occurs or an error code if some error is encountered.
+ */
+ void NotifyDatabaseEvent(
+ /* OUT */ TPosLmDatabaseEvent& aEvent,
+ /* OUT */ TRequestStatus& aStatus
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @return @p KErrNone if the request was successfully cancelled,
+ * otherwise a system wide error code.
+ */
+ TInt CancelNotifyDatabaseEvent();
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @return The database URI associated with the event. The client takes
+ * ownership of the descriptor object.
+ */
+ HBufC* DatabaseUriFromLastEventLC();
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aProtocol The protocol for which database URIs should be
+ * listed. If no protocol is specified, i.e. if an empty string is
+ * specified, all known database URIs are listed.
+ * @return The list of database URIs.
+ */
+ CDesCArray* ListDatabasesLC(
+ /* IN */ const TDesC& aProtocol = KNullDesC
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseInfoArray On return, contains information about
+ * the landmark databases. Any objects which are in the array when
+ * it is passed to this function are not be removed.
+ * @param aProtocol The protocol for which database URIs should be
+ * listed. If no protocol is specified, i.e. if an empty string is
+ * specified, all known database URIs are listed.
+ */
+ void ListDatabasesL(
+ /* OUT */ RPointerArray<HPosLmDatabaseInfo>& aDatabaseInfoArray,
+ /* IN */ const TDesC& aProtocol = KNullDesC
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseInfo Information about the landmark database to
+ * register.
+ */
+ void RegisterDatabaseL(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseUri The URI of the database to register.
+ */
+ void UnregisterDatabaseL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aProtocol The protocol to unregister all databases for.
+ */
+ void UnregisterAllDatabasesL(
+ /* IN */ const TDesC& aProtocol
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseUri The URI of the database to modify settings for.
+ * @param aDatabaseSettings The new settings for the database.
+ */
+ void ModifyDatabaseSettingsL(
+ /* IN */ const TDesC& aDatabaseUri,
+ /* IN */ const TPosLmDatabaseSettings& aDatabaseSettings
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseInfo An information object containing the URI of the
+ * landmark database. On return, the object contains information about
+ * the landmark database, including any database settings.
+ */
+ void GetDatabaseInfoL(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseUri The URI of the database which should be checked
+ * for existence.
+ * @return @p ETrue if the database exists, otherwise @p EFalse.
+ */
+ TBool DatabaseExistsL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseUri The URI of the new database.
+ */
+ void CreateDatabaseL(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aDatabaseUri The URI of the database to delete.
+ */
+ void DeleteDatabaseL(
+ /* IN */ const TDesC& aDatabaseUri
+ );
+
+ /**
+ * From CPosLmDatabaseManager.
+ *
+ * @param aSourceUri The URI of the database to copy.
+ * @param aTargetUri The URI of the new database location.
+ */
+ void CopyDatabaseL(
+ /* IN */ const TDesC& aSourceUri,
+ /* IN */ const TDesC& aTargetUri
+ );
+
+ protected:
+
+ /**
+ * C++ default constructor.
+ */
+ CPosLmDatabaseManagerImpl();
+
+ private:
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Validates URI and extracts protocol.
+ * Leaves with @p KErrArgument if the protocol is empty or
+ * does not exist.
+ */
+ static const TPtrC GetProtocolFromUriL(
+ /* IN */ const TDesC& aUri
+ );
+
+ /**
+ * Validates URI, i.e. checks that there is a protocol separator
+ * and the protocol part is not empty.
+ * Leaves with @p KErrArgument if the protocol is empty or
+ * does not exist.
+ */
+ static void ValidateUriL(
+ /* IN */ const TDesC& aUri
+ );
+
+ /**
+ * Returns @p ETrue if database URI starts with "file".
+ */
+ TBool IsLocalDatabase(
+ /* IN */ const TDesC& aUri
+ );
+
+ /**
+ * Retrieves the default database display name from the resource file.
+ */
+ HBufC* DefaultDatabaseDisplayNameL();
+
+ /**
+ * Fills in default flag, database drive and media type in
+ * each object in the array. Helper for the list method.
+ */
+ void FillInDbInfoListL(
+ /* IN/OUT */ RPointerArray<HPosLmDatabaseInfo>& aDatabaseInfoArray,
+ /* IN */ CPosLmDatabaseManagerPluginBase* aPlugin
+ );
+
+ /**
+ * Fills in default flag, database drive and media type in
+ * the object. Helper for the list method.
+ */
+ void FillInDbInfo(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo,
+ /* IN */ CPosLmDatabaseManagerPluginBase* aPlugin,
+ /* IN */ const TDesC& aDefaultDbUri
+ );
+
+
+ // By default, prohibit copy constructor
+ CPosLmDatabaseManagerImpl( const CPosLmDatabaseManagerImpl& );
+ // Prohibit assigment operator
+ CPosLmDatabaseManagerImpl& operator= ( const CPosLmDatabaseManagerImpl& );
+
+ private: // Data
+
+ CPosLmSettingsHandler* iSettingsHandler;
+ CPosLmDbManPluginStore* iPlugins;
+ RPosLandmarkServer iSession;
+ RPosLmDatabaseEventListener iEventListener;
+ HBufC* iDefaultDatabaseDisplayName;
+
+ };
+
+#endif // CPOSLMDATABASEMANAGERIMPL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/inc/FT_LandmarksDbManagerUids.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*/
+
+
+#ifndef LANDMARKSDBMANAGERUIDS_H
+#define LANDMARKSDBMANAGERUIDS_H
+
+// Landmark Database Manager interface UID
+#define KPosLmDbManagerIfUid 0x101FDF79
+
+// Landmark Database Manager implementation UID
+#define KPosLmDbManagerImplUid 0x101FDF7C
+
+// Landmark Database Manager Base interface UID
+#define KPosLmDbManagerBaseIfUid 0x101FE975
+
+// Local Landmarks Database Management Provider implementaton UID
+#define KPosLmLocalDbManagerImplUid 0x101FE976
+
+
+#endif // LANDMARKSDBMANAGERUIDS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/inc/FT_RPosLandmarkServer.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*/
+
+
+#ifndef RPOSLANDMARKSERVER_H
+#define RPOSLANDMARKSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <badesca.h>
+#include <EPos_TPosLmDatabaseEvent.h>
+#include <EPos_TPosLmDatabaseSettings.h>
+#include <EPos_HPosLmDatabaseInfo.h>
+
+// FORWARD DECLARATIONS
+class CPosLandmarkServerExtension;
+
+// CLASS DECLARATION
+
+/**
+* Client API for the landmark server.
+*
+* @lib eposlmservlib.lib
+* @since S60 3.0
+* @version $Revision: 1.4 $, $Date: 2005/07/07 13:40:03 $
+*/
+class RPosLandmarkServer : public RSessionBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ IMPORT_C RPosLandmarkServer();
+
+ public: // New functions
+
+
+ /**
+ * Connect to the landmark server.
+ *
+ * The server is started if it is not already running.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since S60 3.0
+ * @return @p KErrNone if successful, otherwise a system-wide error
+ * code.
+ */
+ IMPORT_C TInt Connect();
+
+ /**
+ * Closes the session to the server
+ *
+ * @since S60 3.0
+ */
+ IMPORT_C void Close();
+
+ /**
+ * Lists all URIs in the server's database registry for a certain
+ * protocol.
+ *
+ * The client specifies a protocol string as input to this function.
+ * The function only returns a list of the databases which are
+ * accessed through this protocol.
+ *
+ * The client takes ownership of the returned array.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since S60 3.0
+ * @param aProtocol The protocol for which database URIs should be
+ * listed.
+ * @return The list of database URIs.
+ */
+ IMPORT_C CDesCArray* ListDatabasesLC(
+ /* IN */ const TDesC& aProtocol
+ );
+
+ /**
+ * Lists information about each landmark database in the
+ * server's database registry.
+ *
+ * The client specifies a protocol string as input to this function.
+ * The function only returns information about the databases
+ * which are accessed through this protocol.
+ *
+ * The client specifies an array which is populated by this function.
+ * The client takes ownership of all information objects in the array.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since S60 3.0
+ * @param aDatabaseInfoArray On return, contains information about
+ * the landmark databases. Any objects which are in the array when
+ * it is passed to this function will be not be removed.
+ * @param aProtocol The protocol for which database URIs should be
+ * listed.
+ */
+ IMPORT_C void ListDatabasesL(
+ /* OUT */ RPointerArray<HPosLmDatabaseInfo>& aDatabaseInfoArray,
+ /* IN */ const TDesC& aProtocol = KNullDesC
+ );
+
+ /**
+ * Registers a landmark database.
+ *
+ * The landmark database is then returned when listing landmark
+ * databases.
+ *
+ * The client supplies an information object containing the URI of the
+ * database to register. The information object can also contain
+ * database settings, e.g. a display name for the database.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since S60 3.0
+ * @param aDatabaseInfo Information about the landmark database to
+ * register.
+ * @return @p KErrNone if successful.\n
+ * @p KErrArgument if the URI is incorrect.\n
+ * @p KErrAlreadyExists if the database has already been registered.
+ */
+ IMPORT_C TInt RegisterDatabase(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * Unregisters a landmark database.
+ *
+ * After this, the landmark database will not be returned when listing
+ * landmark databases.
+ *
+ * If the database has not been registered, nothing happens.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since S60 3.0
+ * @param aDatabaseUri The URI of the database to unregister.
+ * @param aDriveLetter The drive where the database resides. If
+ * drive is not applicable, 0 should be specified.
+ * @return @p KErrNone if successful.\n
+ * @p KErrArgument if the URI is incorrect.
+ */
+ IMPORT_C TInt UnregisterDatabase(
+ /* IN */ const TDesC& aDatabaseUri,
+ /* IN */ TChar aDriveLetter = 0
+ );
+
+ /**
+ * Unregisters all landmark databases which are accessed through a
+ * certain protocol.
+ *
+ * After this, the landmark databases will not be returned when listing
+ * landmark databases.
+ *
+ * If the protocol is not known or if there are no databases for
+ * the protocol, nothing happens.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since S60 3.0
+ * @param aProtocol The protocol to unregister all databases for.
+ * @return @p KErrNone if successful, otherwise a system-wide error
+ * code.
+ */
+ IMPORT_C TInt UnregisterAllDatabases(
+ /* IN */ const TDesC& aProtocol
+ );
+
+ /**
+ * Modifies the settings for a landmark database.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since S60 3.0
+ * @param aDatabaseUri The URI of the database to modify settings for.
+ * @param aDatabaseSettings The new settings for the database.
+ * @param aDriveLetter The drive where the database resides. If
+ * drive is not applicable, 0 should be specified.
+ * @return @p KErrNone if successful.\n
+ * @p KErrArgument if the URI is incorrect.\n
+ * @p KErrNotFound if the URI does not exist in the registry.
+ */
+ IMPORT_C TInt ModifyDatabaseSettings(
+ /* IN */ const TDesC& aDatabaseUri,
+ /* IN */ const TPosLmDatabaseSettings& aDatabaseSettings,
+ /* IN */ TChar aDriveLetter = 0
+ );
+
+ /**
+ * Retrieve information about a landmark database.
+ *
+ * This function requires @p ReadUserData capability.
+ *
+ * @since S60 3.0
+ * @param aDatabaseInfo An information object containing the URI of the
+ * landmark database. On return, the object contains information about
+ * the landmark database, including any database settings.
+ * @return @p KErrNone if successful.\n
+ * @p KErrArgument if the URI is incorrect.\n
+ * @p KErrNotFound if the URI does not exist in the registry.
+ */
+ IMPORT_C TInt GetDatabaseInfo(
+ /* IN/OUT */ HPosLmDatabaseInfo& aDatabaseInfo
+ );
+
+ /**
+ * Reports a database management event.
+ *
+ * The event is distributed to all listening clients.
+ *
+ * A database URI can be specified to indicate which database the
+ * event is about.
+ *
+ * This function requires @p ReadUserData and @p WriteUserData
+ * capabilities.
+ *
+ * @since S60 3.0
+ * @param aEvent Event information
+ * @param aDatabaseUri The URI of the database which the event is about.
+ * @return @p KErrNone if successful, otherwise a system-wide error
+ * code.
+ */
+ IMPORT_C TInt ReportEvent(
+ /* IN */ const TPosLmDatabaseEvent& aEvent,
+ /* IN */ const TDesC& aDatabaseUri = KNullDesC
+ );
+
+ private:
+
+ HBufC8* SendMessageLC(
+ /* IN */ TInt aFunction,
+ /* IN */ const TDesC& aDes,
+ /* IN */ TInt aLength,
+ /* IN/OUT */ TInt& aAllocLength
+ );
+
+ void PopulateArrayL(
+ /* OUT */ RPointerArray<HPosLmDatabaseInfo>& aDatabaseInfoArray,
+ /* IN */ HBufC8* aBuffer
+ );
+
+ void PopulateArrayL(
+ /* OUT */ CDesCArray* aArray,
+ /* IN */ HBufC8* aBuffer
+ );
+
+ void FreeResources();
+
+ static void FreeRsc(TAny* aParam);
+ /**
+ * Starts the server.
+ *
+ * @return KErrNone on success, otherwise any system wide error.
+ */
+ TInt StartServer();
+
+ private: // Data
+
+ CPosLandmarkServerExtension* iExtension;
+ };
+
+#endif // RPOSLANDMARKSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/resource/04440010.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 0444 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "RegistryInfo.rh"
+#include "FT_LandmarksDbManagerUids.hrh"
+
+// RESOURCE DEFINITIONS
+// -----------------------------------------------------------------------------
+//
+// r_dbmantestprov
+// ECOM registry information for Database Management Provider test plugins
+//
+// -----------------------------------------------------------------------------
+//
+RESOURCE REGISTRY_INFO r_dbmantestprov
+ {
+ dll_uid = 0x04440010;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KPosLmDbManagerBaseIfUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x04440011;
+ version_no = 1;
+ display_name = "Protocol 1";
+ default_data = "p1"; // supports p1 protocol
+ }
+ };
+ }
+ };
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/src/CDbManTestPluginBase.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,322 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+
+// INCLUDE FILES
+//#include <EPos_PosLmDbInfoExtension.h>
+#include "CDbManTestPluginBase.h"
+#include "FT_RPosLandmarkServer.h"
+
+
+// CONSTANTS
+_LIT(KPluginProtocol, "test");
+
+// MEMBER FUNCTIONS
+
+// Destructor
+CDbManTestPluginBase::~CDbManTestPluginBase()
+ {
+ iDatabases.ResetAndDestroy();
+ }
+
+CDbManTestPluginBase::CDbManTestPluginBase()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CDbManTestPluginBase::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CDbManTestPluginBase* CDbManTestPluginBase::NewL(TAny* aConstructionParams)
+ {
+ CDbManTestPluginBase* self = new( ELeave ) CDbManTestPluginBase;
+ CleanupStack::PushL(self);
+ self->BaseConstructL(aConstructionParams);
+ CleanupStack::Pop(self);
+ return self;
+
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::ListDatabasesLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CDesCArray* CDbManTestPluginBase::ListDatabasesLC()
+ {
+ TInt count = iDatabases.Count();
+ CDesCArrayFlat* result =
+ new(ELeave) CDesCArrayFlat(count == 0 ? 1 : count);
+ CleanupStack::PushL(result);
+
+ for (TInt i = 0; i < count; i++)
+ {
+ result->AppendL(iDatabases[i]->DatabaseUri());
+ }
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::ListDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::ListDatabasesL(
+ RPointerArray<HPosLmDatabaseInfo>& aDatabaseInfoArray
+ )
+ {
+ TInt count = iDatabases.Count();
+
+ for (TInt i = 0; i < count; i++)
+ {
+ HPosLmDatabaseInfo* tmpDbInfo =
+ HPosLmDatabaseInfo::NewLC(*(iDatabases[i]));
+ aDatabaseInfoArray.AppendL(tmpDbInfo);
+ CleanupStack::Pop(tmpDbInfo);
+ }
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::RegisterDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::RegisterDatabaseL(
+ HPosLmDatabaseInfo& aDatabaseInfo
+ )
+ {
+ if (DatabaseExistsL(aDatabaseInfo.DatabaseUri()))
+ {
+ User::Leave(KErrAlreadyExists);
+ }
+ HPosLmDatabaseInfo* tmpDbInfo =
+ HPosLmDatabaseInfo::NewLC(aDatabaseInfo);
+ iDatabases.AppendL(tmpDbInfo);
+ CleanupStack::Pop(tmpDbInfo);
+
+ TPosLmDatabaseEvent event;
+ event.iEventType = EPosLmDbDatabaseRegistered;
+ Session().ReportEvent(event, aDatabaseInfo.DatabaseUri());
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::UnregisterDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::UnregisterDatabaseL(
+ const TDesC& aDatabaseUri
+ )
+ {
+ TInt index = FindUri(aDatabaseUri);
+ User::LeaveIfError(index);
+ delete iDatabases[index];
+ iDatabases.Remove(index);
+
+ TPosLmDatabaseEvent event;
+ event.iEventType = EPosLmDbDatabaseUnregistered;
+ Session().ReportEvent(event, aDatabaseUri);
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::UnregisterAllDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::UnregisterAllDatabasesL()
+ {
+ iDatabases.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::ModifyDatabaseSettingsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::ModifyDatabaseSettingsL(
+ const TDesC& aDatabaseUri,
+ const TPosLmDatabaseSettings& aDatabaseSettings
+ )
+ {
+ TInt index = FindUri(aDatabaseUri);
+ User::LeaveIfError(index);
+ iDatabases[index]->Settings() = aDatabaseSettings;
+
+ TPosLmDatabaseEvent event;
+ event.iEventType = EPosLmDbSettingsModified;
+ Session().ReportEvent(event, aDatabaseUri);
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::GetDatabaseInfoL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::GetDatabaseInfoL(
+ HPosLmDatabaseInfo& aDatabaseInfo
+ )
+ {
+ TInt index = FindUri(aDatabaseInfo.DatabaseUri());
+ User::LeaveIfError(index);
+ HPosLmDatabaseInfo* dbInfo = iDatabases[index];
+ aDatabaseInfo.Settings() = dbInfo->Settings();
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::DatabaseExistsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CDbManTestPluginBase::DatabaseExistsL(
+ const TDesC& aDatabaseUri
+ )
+ {
+ return FindUri(aDatabaseUri) >= 0 ? ETrue : EFalse;
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::CreateDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::CreateDatabaseL(
+ HPosLmDatabaseInfo& aDatabaseInfo
+ )
+ {
+ // Do nothing
+ //RegisterDatabaseL(aDatabaseInfo);
+ //
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::DeleteDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::DeleteDatabaseL(
+ const TDesC& aDatabaseUri
+ )
+ {
+ UnregisterDatabaseL(aDatabaseUri);
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::CopyDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CDbManTestPluginBase::CopyDatabaseL(
+ const TDesC& aSourceUri,
+ const TDesC& aTargetUri
+ )
+ {
+ TInt srcIndex = FindUri(aSourceUri);
+ User::LeaveIfError(srcIndex);
+ TInt trgIndex = FindUri(aTargetUri);
+ if (trgIndex >= 0)
+ {
+ User::Leave(KErrAlreadyExists);
+ }
+ HPosLmDatabaseInfo* trgInfo =
+ HPosLmDatabaseInfo::NewLC(aTargetUri);
+ iDatabases.AppendL(trgInfo);
+ CleanupStack::Pop(trgInfo);
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::DatabaseMedia
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TMediaType CDbManTestPluginBase::DatabaseMedia(
+ const TDesC& /* aDatabaseUri */
+ )
+ {
+ return EMediaRemote;
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::DatabaseDrive
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TChar CDbManTestPluginBase::DatabaseDrive(
+ const TDesC& /* aDatabaseUri */
+ )
+ {
+ return 'U';
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::Protocol
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPtrC CDbManTestPluginBase::Protocol()
+ {
+ return TPtrC(KPluginProtocol);
+ }
+
+// ---------------------------------------------------------
+// CDbManTestPluginBase::FindUri
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CDbManTestPluginBase::FindUri(const TDesC& aUri)
+ {
+ TInt index;
+ TInt count = iDatabases.Count();
+ TBool found = EFalse;
+
+ for (index = 0; index < count && !found; index++)
+ {
+ if (aUri.Compare(iDatabases[index]->DatabaseUri()) == 0)
+ {
+ found = ETrue;
+ }
+ }
+ index--;
+
+ if (!found)
+ {
+ index = KErrNotFound;
+ }
+ return index;
+ }
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/src/DbManPluginsTestMain.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDE FILES
+#include <ImplementationProxy.h>
+#include "FT_LandmarksDbManagerUids.hrh"
+//#include "CDbManTestPlugin1.h"
+#include "CDbManTestPluginBase.h"
+//#include "CDbManTestPlugin2.h"
+//#include "CDbManTestPlugin3.h"
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// Define the interface UIDs
+const TImplementationProxy KPosLmLocalImplTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(0x04440011, CDbManTestPluginBase::NewL),
+ //IMPLEMENTATION_PROXY_ENTRY(0x04440012, CDbManTestPlugin2::NewL),
+ //IMPLEMENTATION_PROXY_ENTRY(0x04440013, CDbManTestPlugin3::NewL)
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(KPosLmLocalImplTable) / sizeof(TImplementationProxy);
+
+ return KPosLmLocalImplTable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/TestProvider/src/FT_LmDbManProviderMain.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Provider.
+*
+*/
+
+
+// INCLUDE FILES
+#include <ImplementationProxy.h>
+#include "FT_LandmarksDbManagerUids.hrh"
+#include "FT_CPosLmDatabaseManagerImpl.h"
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// Define the interface UIDs
+const TImplementationProxy KPosLmLocalImplTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(KPosLmDbManagerImplUid, CPosLmDatabaseManagerImpl::NewL)
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(KPosLmLocalImplTable) / sizeof(TImplementationProxy);
+
+ return KPosLmLocalImplTable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/conf/LandMarksTestModule1.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,617 @@
+
+[Test]
+title TP1
+create LandMarksTestModule foobar
+foobar FT_CPosTp1
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP3
+create LandMarksTestModule foobar
+foobar FT_CPosTp3
+delete foobar
+[Endtest]
+
+[Test]
+title TP4
+create LandMarksTestModule foobar
+foobar FT_CPosTp4
+delete foobar
+[Endtest]
+
+[Test]
+title TP5
+create LandMarksTestModule foobar
+foobar FT_CPosTp5
+delete foobar
+[Endtest]
+
+[Test]
+title TP6
+create LandMarksTestModule foobar
+foobar FT_CPosTp6
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP7
+create LandMarksTestModule foobar
+foobar FT_CPosTp7
+delete foobar
+[Endtest]
+
+[Test]
+title TP8
+create LandMarksTestModule foobar
+foobar FT_CPosTp8
+delete foobar
+[Endtest]
+
+[Test]
+title TP9
+create LandMarksTestModule foobar
+foobar FT_CPosTp9
+delete foobar
+[Endtest]
+
+[Test]
+title TP10
+create LandMarksTestModule foobar
+foobar FT_CPosTp10
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP11
+create LandMarksTestModule foobar
+foobar FT_CPosTp11
+delete foobar
+[Endtest]
+
+[Test]
+title TP12
+create LandMarksTestModule foobar
+foobar FT_CPosTp12
+delete foobar
+[Endtest]
+
+[Test]
+title TP13
+create LandMarksTestModule foobar
+foobar FT_CPosTp13 1
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP18
+create LandMarksTestModule foobar
+foobar FT_CPosTp18
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP19
+create LandMarksTestModule foobar
+foobar FT_CPosTp19
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP20
+create LandMarksTestModule foobar
+foobar FT_CPosTp20
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP21
+create LandMarksTestModule foobar
+foobar FT_CPosTp21
+delete foobar
+[Endtest]
+
+
+
+
+[Test]
+title TP23
+create LandMarksTestModule foobar
+foobar FT_CPosTp23
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP24
+create LandMarksTestModule foobar
+foobar FT_CPosTp24
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP25
+create LandMarksTestModule foobar
+foobar FT_CPosTp25
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP26
+create LandMarksTestModule foobar
+foobar FT_CPosTp26
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP28
+create LandMarksTestModule foobar
+foobar FT_CPosTp28
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP35
+create LandMarksTestModule foobar
+foobar FT_CPosTp35
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP36
+create LandMarksTestModule foobar
+foobar FT_CPosTp36
+delete foobar
+[Endtest]
+
+[Test]
+title TP37
+create LandMarksTestModule foobar
+foobar FT_CPosTp37
+delete foobar
+[Endtest]
+
+[Test]
+title TP38
+create LandMarksTestModule foobar
+foobar FT_CPosTp38
+delete foobar
+[Endtest]
+
+[Test]
+title TP42
+create LandMarksTestModule foobar
+foobar FT_CPosTp42
+delete foobar
+[Endtest]
+
+[Test]
+title TP43
+create LandMarksTestModule foobar
+foobar FT_CPosTp43
+delete foobar
+[Endtest]
+
+[Test]
+title TP44
+create LandMarksTestModule foobar
+foobar FT_CPosTp44
+delete foobar
+[Endtest]
+
+[Test]
+title TP45
+create LandMarksTestModule foobar
+foobar FT_CPosTp45
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP47
+create LandMarksTestModule foobar
+foobar FT_CPosTp47
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP48
+create LandMarksTestModule foobar
+foobar FT_CPosTp48
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP51
+create LandMarksTestModule foobar
+foobar FT_CPosTp51
+delete foobar
+[Endtest]
+
+[Test]
+title TP52
+create LandMarksTestModule foobar
+foobar FT_CPosTp52
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP100
+create LandMarksTestModule foobar
+foobar FT_CPosTp100
+delete foobar
+[Endtest]
+
+[Test]
+title TP101
+create LandMarksTestModule foobar
+foobar FT_CPosTp101
+delete foobar
+[Endtest]
+
+[Test]
+title TP102
+create LandMarksTestModule foobar
+foobar FT_CPosTp102
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP103
+create LandMarksTestModule foobar
+foobar FT_CPosTp103
+delete foobar
+[Endtest]
+
+[Test]
+title TP104
+create LandMarksTestModule foobar
+foobar FT_CPosTp104
+delete foobar
+[Endtest]
+
+[Test]
+title TP106
+create LandMarksTestModule foobar
+foobar FT_CPosTp106
+delete foobar
+[Endtest]
+
+[Test]
+title TP116
+create LandMarksTestModule foobar
+foobar FT_CPosTp116
+delete foobar
+[Endtest]
+
+[Test]
+title TP117
+create LandMarksTestModule foobar
+foobar FT_CPosTp117
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP119
+create LandMarksTestModule foobar
+foobar FT_CPosTp119
+delete foobar
+[Endtest]
+
+[Test]
+title TP120
+create LandMarksTestModule foobar
+foobar FT_CPosTp120
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP121
+create LandMarksTestModule foobar
+foobar FT_CPosTp121
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP122
+create LandMarksTestModule foobar
+foobar FT_CPosTp122
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP123
+create LandMarksTestModule foobar
+foobar FT_CPosTp123
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP124
+create LandMarksTestModule foobar
+foobar FT_CPosTp124
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP125
+create LandMarksTestModule foobar
+foobar FT_CPosTp125
+delete foobar
+[Endtest]
+
+[Test]
+title TP126
+create LandMarksTestModule foobar
+foobar FT_CPosTp126
+delete foobar
+[Endtest]
+
+[Test]
+title TP130
+create LandMarksTestModule foobar
+foobar FT_CPosTp130
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP131
+create LandMarksTestModule foobar
+foobar FT_CPosTp131
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP132
+create LandMarksTestModule foobar
+foobar FT_CPosTp132
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP133
+create LandMarksTestModule foobar
+foobar FT_CPosTp133
+delete foobar
+[Endtest]
+
+[Test]
+title TP134
+create LandMarksTestModule foobar
+foobar FT_CPosTp134
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP135
+create LandMarksTestModule foobar
+foobar FT_CPosTp135
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP136
+create LandMarksTestModule foobar
+foobar FT_CPosTp136
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP137
+create LandMarksTestModule foobar
+foobar FT_CPosTp137
+delete foobar
+[Endtest]
+
+
+[Test]
+title TP139
+create LandMarksTestModule foobar
+foobar FT_CPosTp139
+delete foobar
+[Endtest]
+
+
+
+[Test]
+title TP141
+create LandMarksTestModule foobar
+foobar FT_CPosTp141
+delete foobar
+[Endtest]
+
+[Test]
+title TP143 - Counters
+create LandMarksTestModule foobar
+foobar FT_CPosTp143
+delete foobar
+[Endtest]
+
+[Test]
+title TP144
+create LandMarksTestModule foobar
+foobar FT_CPosTp144
+delete foobar
+[Endtest]
+
+[Test]
+title TP145
+create LandMarksTestModule foobar
+foobar FT_CPosTp145
+delete foobar
+[Endtest]
+
+[Test]
+title TP146
+create LandMarksTestModule foobar
+foobar FT_CPosTp146
+delete foobar
+[Endtest]
+
+[Test]
+title TP147
+create LandMarksTestModule foobar
+foobar FT_CPosTp147
+delete foobar
+[Endtest]
+
+[Test]
+title TP148
+create LandMarksTestModule foobar
+foobar FT_CPosTp148
+delete foobar
+[Endtest]
+
+[Test]
+title TP149
+create LandMarksTestModule foobar
+foobar FT_CPosTp149
+delete foobar
+[Endtest]
+
+[Test]
+title TP150
+create LandMarksTestModule foobar
+foobar FT_CPosTp150
+delete foobar
+[Endtest]
+
+[Test]
+title TP151
+create LandMarksTestModule foobar
+foobar FT_CPosTp151
+delete foobar
+[Endtest]
+
+[Test]
+title TP152
+create LandMarksTestModule foobar
+foobar FT_CPosTp152
+delete foobar
+[Endtest]
+
+[Test]
+title TP153
+create LandMarksTestModule foobar
+foobar FT_CPosTp153
+delete foobar
+[Endtest]
+
+[Test]
+title TP154
+create LandMarksTestModule foobar
+foobar FT_CPosTp154
+delete foobar
+[Endtest]
+
+[Test]
+title TP155
+create LandMarksTestModule foobar
+foobar FT_CPosTp155
+delete foobar
+[Endtest]
+
+[Test]
+title TP156
+create LandMarksTestModule foobar
+foobar FT_CPosTp156
+delete foobar
+[Endtest]
+
+[Test]
+title TP157
+create LandMarksTestModule foobar
+foobar FT_CPosTp157
+delete foobar
+[Endtest]
+
+[Test]
+title TP158
+create LandMarksTestModule foobar
+foobar FT_CPosTp158
+delete foobar
+[Endtest]
+
+[Test]
+title TP159
+create LandMarksTestModule foobar
+foobar FT_CPosTp159
+delete foobar
+[Endtest]
+
+[Test]
+title TP160
+create LandMarksTestModule foobar
+foobar FT_CPosTp160
+delete foobar
+[Endtest]
+
+[Test]
+title TP161
+create LandMarksTestModule foobar
+foobar FT_CPosTp161
+delete foobar
+[Endtest]
+
+[Test]
+title TP162
+create LandMarksTestModule foobar
+foobar FT_CPosTp162
+delete foobar
+[Endtest]
+
+[Test]
+title TP163
+create LandMarksTestModule foobar
+foobar FT_CPosTp163
+delete foobar
+[Endtest]
+
+[Test]
+title TP164
+create LandMarksTestModule foobar
+foobar FT_CPosTp164
+delete foobar
+[Endtest]
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/552410208-landmarksDb.xls has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/CompositelandmarksDb.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,110 @@
+#CategoryId CategoryName Icon name Icon index Id In Categories LandmarkName CoverageRadius Description Icon name Icon index Street PostalCode City LocationName Country Media Link 1 Media Link 2 Lat Long Hor. Acc Vert. Acc
+1 Pizzeria z:\\system\\test\\landmarkstestsicon.mbm 1 1 1 LOG 1 jadajadjada ikon slask 1 Halmstad Drivhuset Plan7 html/text/http://www.idg.se/to.html1 html/text/https://www.aftonbladet.s 45,5 -44,5 10 10
+2 Hamburgerbar z:\\system\\test\\landmarkstestsicon.mbm 1 2 1 LOG11 2 jadajadjada ikon snask 1 Berghemsgatan 2 531 37 Kållered Västra Götaland Sverige html/text/http://www.idg.se/to.html2 html/text/https://www.aftonbladet.se 46 44 14 10
+3 Kinarestaurang z:\\system\\test\\landmarkstestsicon.mbm 1 3 2 God 23 ikon skask 1 431 31 Mölndal Västra Götaland Sverige1 html/text/http://www.idg.se/to.html3 html/text/https://www.aftonbladet.se 45 45 11 10
+4 Garaget z:\\system\\test\\landmarkstestsicon.mbm 1 4 2 vegetariskt 5 jadajadjada ikon spask 1 Berghemsgatan 10 Mölndal Västra Götaland Sverige1 html/text/http://www.idg.se/to.html4 html/text/https://www.aftonbladet.se -45,5 -44,5 0 10
+5 Bilverkstad z:\\system\\test\\landmarkstestsicon.mbm 2 5 3 Inte sa bra 6 jadajadjada Berghemsgatan 4 431 31 Västra Götaland Sverige1 html/text/http://www.idg.se/to.html5 html/text/https://www.aftonbladet.se -46,105 46,105 0 10
+6 Pasta Restaurang z:\\system\\test\\landmarkstestsicon.mbm 2 6 3 Dyrt 7 jadajadjada ikon PelleFant 2 Berghemsgatan 7 431 31 Mölndal Sverige1 html/text/http://www.idg.se/to.html6 html/text/https://www.aftonbladet.se 70 70 180 10
+7 Bilia 2 7 1-3,14-17 Billigt 8 jadajadjada ikon Abibblan 2 Berghemsgatan 6 431 31 Mölndal Västra Götaland html/text/http://www.idg.se/to.html7 html/text/https://www.aftonbladet.se 63 23 18 10
+8 VolksWagen sddsa 2 8 3 Medel 1 MLFW ikon bibblan123 2 Berghemsgatan 8 431 31 Mölndal Västra Götaland Sverige1 html/text/http://www.idg.se/to.html8 5 37,6 37,6 10
+9 Taxi Göteborg dasdsada 2 9 3 Medel2 1 jadajadjada ikon bibblan123 2 Berghemsgatan 5 431 31 Mölndal Västra Götaland Sverige1 html/text/http://www.idg.se/to.html9 5 37,6 37,6 10
+10 Taxi dsa 2 10 3 MLFW2 1 MLFW ikon PelleFant 2 Berghemsgatan 9 431 31 Mölndal Västra Götaland Sverige1 html/text/http://www.idg.se/to.html10 html/text/http://www.idg.se -1 -81 25 0
+11 Stadsbibliotek aaa 2 11 MLFW 1 aaaaaa ikon PelleFant 2 MLFW 351 25 HalmstadA BSverige1 html/text/http://www.idg.se/to.html11 html/text/http://www.idg.se 0 -67 48 0
+12 Systembolag aaa 3 12 3 GatesB 1 bbbbbbb ikon PelleFant 3 PastaGatan L MLFW HalmstadB BSverige2 html/text/http://www.idg.se/to.html12 html/text/http://www.hotmail.com 1 -81 7 0
+13 Nokia Kontor aaa 3 13 3 Text'''1 1 ccccccc ikon PelleFant 3 PastaGatan N MLFW MLFW BSverige3 html/text/http://www.idg.se/to.html13 html/text/http://www.idg.se 45 -45 18 0
+14 TietoEnator kontor aaa 3 14 5 GatesF 1 dddddddd ikon PelleFant 3 MLFW 351 29 HalmstadJ BSverige4 html/text/http://www.idg.se/to.html14 html/text/http://www.idg.se -1 -80 168 0
+15 Thai Restaurang bbb 3 15 5 xStekt 1 MLFW ikon PelleFant 3 Berghemsgatan 11 431 31 Mölndal Västra Götaland html/text/http://www.idg.se/to.html15 html/text/http://www.idg.se -5 25
+16 McDonalds bbb 3 16 3 Akorthus 1 fffffffffffffffff ikon PelleFant 3 AStora biblioteksgatan 24 A123 45 AStorGöteborg AÖstra Götaland html/text/http://www.idg.se/to.html16 html/text/http://www.idg.se 1 -81 12 50
+17 BurgerKing bbb 3 17 17 Stadskortxhus 1 ggghhhhhh ikon PelleFant 3 Stora biblioteksgatan 25 321 32 StorGöteborg123 Östra Götaland123 html/text/http://www.idg.se/to.html17 html/text/http://www.idg.se 57 11 11 9
+18 Frisör bbb 3 18 18 enat?r 1 iiiijjjjjj ikon PelleFant 3 Stora biblioteksgatan 25 321 32 StorGöteborg123 Östra Götaland123 html/text/http://www.idg.se/to.html18 html/text/http://www.idg.se 0 -80,5 10,2 1,5
+19 Hunddagis bbb 4 19 19 enator 1 kkkkklll Gårdaikonen 4 Berghemsgatan 1 Finland html/text/http://www.idg.se/to.html19 23 23 10,2 1,5
+20 Veterinär bbb 4 20 21 LOG2 1 mmmm Gårdaikonen 4 Berghemsgatan 2 431 32 Mölndal Västra Götaland html/text/http://www.idg.se/to.html20 html/text/https://www.aftonbladet.se -1 80 10,2 1,5
+21 Kyrkogård bbb 4 21 19 LOG3 1 nnnxnnn Gårdaikonen 4 Berghemsgatan 3 431 33 Mölndal Västra Götaland html/text/http://www.idg.se/to.html21 html/text/https://www.aftonbladet.se 1 80 25 300
+22 Museum bbb 4 22 22 LOG4 1 ooooooo Gårdaikonen 4 Berghemsgatan 4 431 34 Mölndal Västra Götaland html/text/http://www.idg.se/to.html22 html/text/http://www.idg.se -1 81 10,2 1,55
+23 Dagis bbb 4 23 23 LOG5 1 ppppppx Gårdaikonen 4 Berghemsgatan 5 431 35 Mölndal Västra Götaland html/text/http://www.idg.se/to.html23 html/text/https://www.aftonbladet.se 1 81 18 120
+24 StadsPark bbb 4 24 24 LOG6 1 asd Gårdaikonen 4 Berghemsgxatan 6 431 36 Mölndal Västra Götaland html/text/http://www.idg.se/to.html24 html/text/http://www.idg.se 0 80,5 168,9 7000
+25 Sjukhus bbb 4 25 25 x 1 r Gårdaikonen 4 Berghemsgatan 7 x431 37 Mölndal Västra Götaland html/text/http://www.idg.se/to.html25 html/text/https://www.aftonbladet.se -84 12,4 12,5 10
+26 Läkare bbb 5 26 26 LOG8 1 x Gårdaikonen 5 Berghemsgatan 8 431 38 xMölndal Västra Götaland html/text/http://www.idg.se/to.html26 html/text/https://www.aftonbladet.se 5 25 59 2000
+ 27 11-17 LOG9 1 ttttt Gårdaikonen 5 Berghemsgatan 9 431 39 Mölndal x Västra Götaland html/text/http://www.idg.se/to.html27 html/text/https://www.aftonbladet.se -84 12
+ 28 11 LOG10 1 v Gårdaikonen 5 Berghemsgatan 10 431 40 Mölndal Västra Götalandx html/text/http://www.idg.se/to.html28 html/text/https://www.aftonbladet.se 10 14 13,9 6000
+ 29 26 Unique 1 Gårdaikonen 5 256 78 Mölndal Daanmark html/text/http://www.idg.se/to.html29 html/text/https://www.aftonbladet.se 45,5 -0,5 0 1200
+ 30 26 Text'1 1 Unique Gårdaikonen 5 256 78 Götet Daanmark html/text/http://www.idg.se/to.html30 html/text/https://wwwx.aftonbladet.se 45,5 0 0 112
+ 31 26 Text1 1 Focus Torget1 56 Unique 256 78 Mölndal Daanmark html/text/http://www.idg.se/to.html31 html/text/https://www.aftonbladet.se 45,5 0,5 0 0
+ 32 Text2 1 Focus Torget1 6 256 78 Unique Daanmark html/text/http://www.idg.se/to.html32 html/text/https://www.aftonbladet.se 89 -15 0 0
+ 33 26 Text3 1 Focus Torget1 6 256 78 Götet Daanmark html/text/http://www.idg.se/to.html33 html/text/https://www.aftonbladet.se 5 37,6 0 0
+ 34 26 Text4 1 Focus Torget1 66 256 78 Götet Daanmark html/text/http://www.idg.se/to.html34 html/text/http://www.idg.se 63 23 18 0
+ 35 26 Text5 1 Focus Torget1 6 256 78 Götet Daanmark html/text/http://www.idg.se/to.html35 html/text/https://www.aftonbladet.se -84,2 -2,67 168,9 0
+ 36 Text6 1 Focus Torget1 6 256 78 Götet Daanmark html/text/http://www.idg.se/to.html36 html/text/http://www.idg.se 5 37,6 37,6 0
+ 37 26 Text7 1 Focus Torget1 6 256 78 Götet Daanmark html/text/http://www.idg.se/to.html37 o 5 37,6 37,6 0
+ 38 26 Text8 1 256 78 Götet Daanmark html/text/http://www.idg.se/to.html38 html/text/http://www.idg.se 5 37,6 0 0
+ 39 Text9 1 256 78 Götet Daanmark html/text/http://www.idg.se/to.html39 5 25 59 2000
+ 40 26 Text10 1 256 78 Götet Daanmark html/text/http://www.idg.se/to.html40 0 180 168,9 4500
+ 41 26 q 1 256 78 Götet Daanmark html/text/http://www.idg.se/to.html41 -1 180 37,6 2
+ 42 26 asd 1 256 78 html/text/http://www.idg.se/to.html42 1 180 37,6 1
+ 43 asdf 1 256 78 html/text/http://www.idg.se/to.html43 0 -179
+ 44 26 dfdsf 1 256 78 html/text/http://www.idg.se/to.html44 0 179
+ 45 26 Several 1 Several Several 1 Several Several Several Several Several html/text/http://www.idg.se/to.html45 Several -1 -179
+ 46 26 oki 1 aaa aaa html/text/http://www.idg.se/to.html46 -1 179
+ 47 26 abab 1 oki aaa html/text/http://www.idg.se/to.html47 1 -179
+ 48 26 Nokia 1 aaa aaa oki html/text/http://www.idg.se/to.html48 1 179
+ 49 26 aba 1 Nokia aaa aaa aaa html/text/http://www.idg.se/to.html49 -25 34
+ 50 26 aca 1 aaa aaa Noki html/text/http://www.idg.se/to.html50 65 -76,6
+ 51 1 PellesPizza 1 IconName1 Berghemsgatan1 Sverige html/text/http://www.idg.se/to.html51 12,89 156
+ 52 19 Kalles Hundgård 1 IconName2 Berghemsgatan2 Sverige html/text/http://www.idg.se/to.html52 -45 -1 12 50
+ 53 21 Sjömanskyrkan 1 IconName3 Berghemsgatan3 Sverige html/text/http://www.idg.se/to.html53 25,05 -5,5 13 49
+ 54 14 TE, Gårda 10 IconName4 Berghemsgatan4 Sverige html/text/http://www.idg.se/to.html54 -45 -5 14 48
+ 55 14 TE, Eriksberg 20 IconName5 Berghemsgatan5 Sverige html/text/http://www.idg.se/to.html55 -35 0 15 47
+ 56 TE, Lund 30 IconName6 Berghemsgatan6 Sverige html/text/http://www.idg.se/to.html56 -25 5 16 46
+ 57 14 TE, Karlstad 40 IconName7 Berghemsgatan7 Sverige html/text/http://www.idg.se/to.html57 -15 10
+ 58 14 TE, Kista 50 IconName8 Berghemsgatan8 Sverige html/text/http://www.idg.se/to.html58 -5 15
+ 59 14 TE, Stockholm 60 IconName9 Berghemsgatan9 Sverige html/text/http://www.idg.se/to.html59 5 20
+ 60 14 TE, Oulu 70 IconName10 Berghemsgatan10 Finland html/text/http://www.idg.se/to.html60 15 25
+ 61 14 TE, Tampere 80 IconName11 Berghemsgatan11 Finland html/text/http://www.idg.se/to.html61 25 30
+ 62 13 Nokia, Köpenhamn 1 IconName12 Berghemsgatan12 Danmark html/text/http://www.idg.se/to.html62 90 1
+ 63 13 Nokia, Stockholm 1 IconName13 Berghemsgatan13 Sverige html/text/http://www.idg.se/to.html63 90 -180
+ 64 13 Oulu 1 IconName14 Berghemsgatan14 Sverige html/text/http://www.idg.se/to.html64 67 123
+ 65 13 Tampere 5 IconName15 Berghemsgatan15 Sverige html/text/http://www.idg.se/to.html65 67 123
+ 66 13 Helsinki 10 IconName16 Berghemsgatan16 Sverige html/text/http://www.idg.se/to.html66 67 123
+ 67 13 Bengtfors 15 IconName17 Berghemsgatan17 Sverige html/text/http://www.idg.se/to.html67 67 123
+ 68 13 Karlstad 20 IconName18 Berghemsgatan18 Sverige html/text/http://www.idg.se/to.html68 67 123
+ 69 13 Mölndal 25 IconName19 Berghemsgatan19 Sverige html/text/http://www.idg.se/to.html69 67 123
+ 70 13 Göteborg 30 IconName20 Berghemsgatan20 Sverige html/text/http://www.idg.se/to.html70 67 123
+ 71 13 PallesPalör 35 IconName21 Berghemsgatan21 Sverige html/text/http://www.idg.se/to.html71 89 0
+ 72 26 Läkare utan gränser 1 IconName22 Berghemsgatan22 Sverige html/text/http://www.idg.se/to.html72 179 120,58
+ 73 26 Mölndal 1 IconName23 Berghemsgatan23 Sverige html/text/http://www.idg.se/to.html73 -89 -180
+ 74 26 Läkargruppen 1 IconName24 Berghemsgatan24 Sverige html/text/http://www.idg.se/to.html74 -89 180
+ 75 26 Läkarhuset 1 IconName25 Berghemsgatan25 Sverige html/text/http://www.idg.se/to.html75 -90 180
+ 76 26 Sahlgrenska 1 IconName26 Berghemsgatan26 Sverige html/text/http://www.idg.se/to.html76 -90 -180
+ 77 26 östra sjukhuset 1 IconName27 Berghemsgatan27 Sverige html/text/http://www.idg.se/to.html77 -90 0
+ 78 20 Blå stjärnan 1 IconName28 Berghemsgatan28 Sverige html/text/http://www.idg.se/to.html78 -89 0
+ 79 10 MiniTaxi 1 IconName29 Berghemsgatan29 Sverige html/text/http://www.idg.se/to.html79 137 36,65
+ 80 10 GöteborgsTaxi 1 IconName30 Berghemsgatan30 Sverige html/text/http://www.idg.se/to.html80 -89 20
+ 81 10 LandvetterTaxi 1 IconName31 Berghemsgatan31 Sverige html/text/http://www.idg.se/to.html81 -89 -20
+ 82 10 TaxiStockholm 1 IconName32 Berghemsgatan32 Sverige html/text/http://www.idg.se/to.html82 -90 20
+ 83 10 SvartTaxi 1 IconName33 Berghemsgatan33 Sverige html/text/http://www.idg.se/to.html83 113 -11,31
+ 84 22 Länsmuseumet 1 IconName34 Berghemsgatan34 Sverige html/text/http://www.idg.se/to.html84 107 -23,3
+ 85 22 Sjöfartsmuseumet 1 IconName35 Berghemsgatan35 Sverige html/text/http://www.idg.se/to.html85 0 0
+ 86 22 KinaMuseumet 1 IconName36 Berghemsgatan36 Sverige html/text/http://www.idg.se/to.html86 -0,5 0
+ 87 22 Naturhistoriska 1 IconName37 Berghemsgatan37 Sverige html/text/http://www.idg.se/to.html87 0,5 0
+ 88 Etnogfrafiska 1 IconName38 Berghemsgatan38 Sverige html/text/http://www.idg.se/to.html88 0 0,5
+ 89 22 TekniskaMuseumet 1 IconName39 Berghemsgatan39 Sverige html/text/http://www.idg.se/to.html89 0 -0,5
+ 90 23 Krokslätts dagis 1 IconName40 Berghemsgatan40 Sverige html/text/http://www.idg.se/to.html90 0,5 0,5
+ 91 23 Centrum dagiset 1 IconName41 Berghemsgatan41 Sverige html/text/http://www.idg.se/to.html91 0,5 -0,5
+ 92 Dagis Majorna 1 IconName42 Berghemsgatan42 Sverige html/text/http://www.idg.se/to.html92 -0,5 0,5
+ 93 23 Lackarbäcks daghem 1 IconName43 Berghemsgatan43 Sverige html/text/http://www.idg.se/to.html93 -0,5 -0,5
+ 94 23 Saab dagis 1 IconName44 Berghemsgatan44 Sverige html/text/http://www.idg.se/to.html94 47 -143,2
+ 95 23 TE dagis 1 IconName45 Berghemsgatan45 Sverige html/text/http://www.idg.se/to.html95 41 -155,19
+ 96 23 TietoEnator Lekstugan 1 IconName46 Berghemsgatan46 Sverige html/text/http://www.idg.se/to.html96 11,00005 11,00005
+ 97 18 Panache 1 IconName47 Berghemsgatan47 Sverige html/text/http://www.idg.se/to.html97 29 32
+ 98 18 Börjessons herrfrisör 1 IconName48 Berghemsgatan48 Sverige html/text/http://www.idg.se/to.html98 23 4
+ 99 18 Modefrisörerna 1 IconName49 Berghemsgatan49 Sverige html/text/http://www.idg.se/to.html99 17 55
+ 100 18 krokslätts frisörerna 1 IconName50 Berghemsgatan50 Sverige html/text/http://www.idg.se/to.html100 11 66
+ 101 12 Gårda 1 IconName51 Berghemsgatan51 Sverige html/text/http://www.idg.se/to.html101 5 77
+ 102 12 Mölndal 1 IconName52 Berghemsgatan52 Sverige html/text/http://www.idg.se/to.html102 -1 88
+ 103 Kållered 1 IconName53 Berghemsgatan53 Sverige html/text/http://www.idg.se/to.html103 -7 56,56
+ 104 12 Nordstan 1 IconName54 Berghemsgatan54 Sverige html/text/http://www.idg.se/to.html104 -13 54,45
+ 105 12 Munkebäck 1 IconName55 Berghemsgatan55 Sverige html/text/http://www.idg.se/to.html105 17,0005 17,0005
+#
+#
+#
+#
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EMPTY_EPOSLMGLOBALCATEGORIES.R01 has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLMASYNCOPS.RSC has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLMGLOBALCATEGORIES.R01 has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLMGLOBALCATEGORIES.R02 has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLMGLOBALCATEGORIES.R03 has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLMINTSERVICES_198KB.RSC has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLMINTSERVICES_453KB.RSC has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLM_020.LDB has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLM_040.LDB has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLM_060.LDB has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLM_080.LDB has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/EPOSLM_105.LDB has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/LmRecognizerData.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,33 @@
+#Note that when saving from Excel additional " charachters may be added, thus causing the test to fail
+#Buffer Result Mime Comment
+<?xml *?><lm:lmx xmlns="http://www.nokia.com/schemas/location/landmarks/" # ECertain lmx OK
+<?xml *?><gpx xmlns="http://www.topografix.com/GPX/" # ECertain gpx OK
+<?xml *?><lala:lmx xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # ECertain lmx OK
+<?xml *?><gps:gpx xmlns="http://www.topografix.com/GPX/" # ECertain gpx OK
+<?xml *?><!-- Comment --> <lm:lmxsdfsdf xmlns="http://www.nokia.com/schemas/location/landmarks/""<*lmx>" # ECertain lmx OK
+<?xml *?><!-- Comment2 --> <lm:gpxsdfsdf xmlns="http://www.topografix.com/GPX/""<*gpx>" # ECertain gpx OK
+<?xml k?> <lm:lmx*> # EProbable lmx OK
+<?xml k?> <lm:gpx*> # EProbable gpx OK
+<?xml *?> <lala:lmx> # EProbable lmx OK
+<?xml *?> <lala:gpx> # EProbable gpx OK
+<?xml *?><lala:lmx>< xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # EProbable lmx link not in same tag as lmx
+<?xml *?><lala:gpx>< xmlns:n="http://www.topografix.com/GPX/" # EProbable gpx link not in same tag as lmx
+<?xml ?><xmlns="http://www.nokia.com/schemas/location/landmarks/" # None none missing lmx
+<?xml ?><xmlns="http://www.topografix.com/GPX/" # None none missing lmx
+<?xml *?>,<lm:lmx xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # None none Comma between tags
+<?xml dsf><lm:lmx xmlns="http://www.nokia.com/schemas/location/landmarks/" # None none No ?> at end of tag
+<?xml?> < *lm:lMx*> # None none Capitals
+<? xml ?> < *lm:lmx*> # None none space in tag
+<?XML ?> < *lmx*> # None none wrong prolog
+<?XML ?> < *gpx*> # None none wrong prolog
+Thomas<?xml k?>, < *lmx*> # None none wrong start
+Thomas<?xml k?>, < *gpx*> # None none wrong start
+ <?xml k?> < *lm:lmx*> # None none white spaces
+ <?xml k?> < *gps:gpx*> # None none white spaces
+<*lmx><?xml ?> # None none wrong prolog
+<*gpx><?xml ?> # None none wrong prolog
+<*lmx><xmlns="http://www.nokia.com/schemas/location/landmarks/"<?xml ?>" # None none wrong prolog
+<*gpx><xmlns="http://www.topografix.com/GPX/"<?xml ?>" # None none wrong prolog
+<kalllmxdd><xmlns="http://www.nokia.com/schemas/location/landmarks/" # None none wrong start
+<kalllmxdd><xmlns="http://www.topografix.com/GPX/" # None none wrong start
+kjsadflkj # None none bullshit
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/LmRecognizerDataFile.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,39 @@
+#Note that when saving from Excel additional " charachters may be added, thus causing the test to fail
+#Buffer Result Mime Comment
+<?xml *?><lm:lmx xmlns="http://www.nokia.com/schemas/location/landmarks/" # ECertain lmx OK
+<?xml *?><gpx xmlns="http://www.topografix.com/GPX/" # ECertain gpx OK
+<?xml *?><lala:lmx xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # ECertain lmx OK
+<?xml *?><gps:gpx xmlns="http://www.topografix.com/GPX/" # ECertain gpx OK
+<?xml *?><!-- Comment --> <lm:lmxsdfsdf xmlns="http://www.nokia.com/schemas/location/landmarks/""<*lmx>" # ECertain lmx OK
+<?xml *?><!-- Comment2 --> <lm:gpxsdfsdf xmlns="http://www.topografix.com/GPX/""<*gpx>" # ECertain gpx OK
+<?xml k?> <lm:lmx*> # EProbable lmx OK
+<?xml k?> <lm:gpx*> # EProbable gpx OK
+<?xml *?> <lala:lmx> # EProbable lmx OK
+<?xml *?> <lala:gpx> # EProbable gpx OK
+<?xml *?><lala:lmx>< xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # EProbable lmx link not in same tag as lmx
+<?xml *?><lala:gpx>< xmlns:n="http://www.topografix.com/GPX/" # EProbable gpx link not in same tag as lmx
+<?xml ?><xmlns="http://www.nokia.com/schemas/location/landmarks/" # None none missing lmx
+<?xml ?><xmlns="http://www.topografix.com/GPX/" # None none missing lmx
+<?xml *?>,<lm:lmx xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # None none Comma between tags
+<?xml dsf><lm:lmx xmlns="http://www.nokia.com/schemas/location/landmarks/" # None none No ?> at end of tag
+<?xml?> < *lm:lMx*> # None none Capitals
+<? xml ?> < *lm:lmx*> # None none space in tag
+<?XML ?> < *lmx*> # None none wrong prolog
+<?XML ?> < *gpx*> # None none wrong prolog
+Thomas<?xml k?>, < *lmx*> # None none wrong start
+Thomas<?xml k?>, < *gpx*> # None none wrong start
+ <?xml k?> < *lm:lmx*> # None none white spaces
+ <?xml k?> < *gps:gpx*> # None none white spaces
+<*lmx><?xml ?> # None none wrong prolog
+<*gpx><?xml ?> # None none wrong prolog
+<*lmx><xmlns="http://www.nokia.com/schemas/location/landmarks/"<?xml ?>" # None none wrong prolog
+<*gpx><xmlns="http://www.topografix.com/GPX/"<?xml ?>" # None none wrong prolog
+<kalllmxdd><xmlns="http://www.nokia.com/schemas/location/landmarks/" # None none wrong start
+<kalllmxdd><xmlns="http://www.topografix.com/GPX/" # None none wrong start
+kjsadflkj # None none bullshit
+Pell xml*?><?^¨~|QWERTYhttp://www.nokia.com/schemas/location/landmarks/+?!"#¤%&/()= # None none not correct
+Sell xml*?><?^¨~|QWERTYhttp://www.topografix.com/GPX/+?!"#¤%&/()= # None none not correct
+Pell xml*?><?^¨~|QWERTY<xmlns:n="http://www.nokia.com/schemas/location/landmarks/"+?!"#¤%&/()= # None none Should be certain
+Sell xml*?><?^¨~|QWERTY<xmlns:n="http://www.topografix.com/GPX/"+?!"#¤%&/()= # None none Should be certain
+ <?xml *?><!-- Comment QWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQ--><!--QWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTY--><lala:lmx xmlns:n="http://www.nokia.com/schemas/location/landmarks/" # None none white spaces
+ <?xml *?><!-- Comment QWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQ--><!--QWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTYQWERTY--><lala:gpx xmlns:n="http://www.topografix.com/GPX/" # None none white spaces
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/SRVeposcontact.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/SRVeposdamaged.ldb has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/SRVepostext.ldb Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,10 @@
+Thomas Takanen Thomas Takanen Thomas Takanen Thomas Takanen Thomas Takanen Thomas Takanen Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
+Thomas Takanen Thomas Takanen
\ No newline at end of file
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP10Test.ldb has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP118HALFLMDB_2.LDB Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,20 @@
+P ¾ #cåÎ ®† Ä” @
+@i € @ 0 ›@i 0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc @ € > Û / @ P Ø@i 0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr @ *€ Û / î @ p 8Ai 0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod @ +€ € 1 k " @ `Ai 0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmt_lmcat lmc_lmid$lmc_catid
+ @ >€
+ ¯ Û / î k " @ ° ŒAi
+0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath @ +€ € % h ö Y @ §Ai
+0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc lmi_lmid lmc_lmid ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath 3€ € % K ö Y + @ ÄAi
+0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc lmi_lmid lmc_lmid ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmi_catid $lmc_catid $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath R€ I Û / î k " ö Y + ) @ åAi
+0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc lmi_lmid lmc_lmid ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmi_catid $lmc_catid ,lmi_glcatid ,lmc_glcatid $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath #€ € ƒ c @ Bi
+0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc lmi_lmid lmc_lmid ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmi_catid $lmc_catid ,lmi_glcatid ,lmc_glcatid ,lmi_catname ,lmc_catname| $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath +€ € ¯ c @ %Bi
+0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc lmi_lmid lmc_lmid ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmi_catid $lmc_catid ,lmi_glcatid ,lmc_glcatid ,lmi_catname ,lmc_catname| $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath (lmi_iconid (lmc_iconid 3€ € c ä B 0 @ 1 @ A @
+ @ f€ Ÿ ‘ b î k " ö Y q ) c ä ` @ 1 @ A @ @ ;€ € € ¶ I A ! € B p B p B p @ q @@ @ A @0 0 A @ A @
+ @ p€ A î — ö Y ! æ Æ ¦ ä ‘ “ • @ q @ A @ A @ A @ @ [€ € + ‘ à À € € € € @ SBi 0lmt_landmark lmc_lmidlmc_lat lmc_long lmc_alt lmc_hacc lmc_vacc (lmc_covrad (lmc_iconid (lmc_iconnr lmc_name lmc_desc lmi_lmid lmc_lmid ,lmt_lmfield lmc_lmid4lmc_fieldtype0lmc_fieldstr lmt_cat$lmc_catid,lmc_glcatid (lmc_iconid (lmc_iconnr ,lmc_catname |,lmc_namemod $lmi_catid $lmc_catid ,lmi_glcatid ,lmc_glcatid ,lmi_catname ,lmc_catname| $lmt_lmcat lmc_lmid$lmc_catid
+ lmt_icon(lmc_iconid0lmc_iconpath (lmi_iconid (lmc_iconid 0lmt_settings0lmc_language lmc_init @ p€ € A î ‘ ö Y ! à À ä Ô p € B q r s t u v w x y z
+ { | } ~ B q ¸ r p s (# t à. u ˜: v PF w R x À] y xi z 0u { è€ | Œ } X˜ ~ ¤ ȯ B q A c c o m m o d a t i o n r B u s i n e s s @ r @` ` A ÀÀ@PB ÀÀ@PB@P P A p§@ p§@@@ @ A ð? ð?@ , ¸
\ No newline at end of file
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP131Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP13_EPOSLMGLOBALCATEGORIES.R06 has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP13_eposlmglobalcategoriesR06.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,199 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <uikon.rh>
+#include <EPos_LmCatDef.rh>
+#include "EPos_LmCatLanguages.hrh"
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// POS_LM_CATEGORY_SPECIFICATION
+// Global category specification.
+//
+// -----------------------------------------------------------------------------
+//
+
+RESOURCE POS_LM_CATEGORY_SPECIFICATION glcategories
+ {
+ icon_files =
+ {
+ "c:\\system\\data\\test13_1.mbm",
+ "c:\\system\\data\\test13_2.mbm",
+ "c:\\system\\data\\test13_3.mbm",
+ "c:\\system\\data\\test13_4.mbm",
+ "c:\\system\\data\\test13_5.mbm",
+ "c:\\system\\data\\test13_6.mbm",
+ "c:\\system\\data\\test13_7.mbm",
+ "c:\\system\\data\\test13_8.mbm",
+ "c:\\system\\data\\test13_9.mbm",
+ "c:\\system\\data\\test13_10.mbm",
+ "c:\\system\\data\\test13_11.mbm",
+ "c:\\system\\data\\test13_12.mbm",
+ "c:\\system\\data\\test13_13.mbm",
+ "c:\\system\\data\\test13_14.mbm",
+ "c:\\system\\data\\test13_15.mbm",
+ "c:\\system\\data\\test13_16.mbm"
+ };
+
+ categories =
+ {
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 3000;
+ category_name = "Hotel";
+ icon_index = 0;
+ icon_mask_index = 0;
+ icon_file_index = 0;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 6000;
+ category_name = "Affärer";
+ icon_index = 1;
+ icon_mask_index = 1;
+ icon_file_index = 1;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 9000;
+ category_name = "Kommunikationer";
+ icon_index = 2;
+ icon_mask_index = 2;
+ icon_file_index = 2;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 12000;
+ category_name = "Läroverks Institut";
+ icon_index = 3;
+ icon_mask_index = 3;
+ icon_file_index = 3;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 15000;
+ category_name = "Nöje";
+ icon_index = 4;
+ icon_mask_index = 4;
+ icon_file_index = 4;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 18000;
+ category_name = "Mat & Dryck";
+ icon_index = 5;
+ icon_mask_index = 5;
+ icon_file_index = 5;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 21000;
+ category_name = "Geografiskt Område";
+ icon_index = 6;
+ icon_mask_index = 6;
+ icon_file_index = 6;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 24000;
+ category_name = "Utomhus aktiviteter";
+ icon_index = 7;
+ icon_mask_index = 7;
+ icon_file_index = 7;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 27000;
+ category_name = "Människor";
+ icon_index = 8;
+ icon_mask_index = 8;
+ icon_file_index = 8;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 30000;
+ category_name = "Kommunala Tjänster";
+ icon_index = 9;
+ icon_mask_index = 9;
+ icon_file_index = 9;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 33000;
+ category_name = "Kyrkor";
+ icon_index = 10;
+ icon_mask_index = 10;
+ icon_file_index = 10;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 36000;
+ category_name = "Handel";
+ icon_index = 11;
+ icon_mask_index = 11;
+ icon_file_index = 11;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 39000;
+ category_name = "Turistande";
+ icon_index = 12;
+ icon_mask_index = 12;
+ icon_file_index = 12;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 42000;
+ category_name = "Sport";
+ icon_index = 13;
+ icon_mask_index = 13;
+ icon_file_index = 13;
+ },
+/* Do not include this one
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 45000;
+ category_name = "Transporter";
+ },
+*/
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 48000;
+ category_name = "Kinarestaurang";
+ icon_index = 14;
+ icon_mask_index = 14;
+ icon_file_index = 14;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 51000;
+ category_name = "BallongFärder";
+ icon_index = 15;
+ icon_mask_index = 15;
+ icon_file_index = 15;
+ }
+ };
+ }
+
+// End of File
+
+
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP1Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP25Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP4Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/TP8Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/Tp116Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/Tp28Test.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/compositeeposlm.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/corrupt_EPOSLMGLOBALCATEGORIES.R06 has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposEmpty.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlm.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlm_1000_LMs.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlm_5000_LMs.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlm_tp13.ldb has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlmasyncops.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* transaction for an aysynchronous operation.
+*
+*/
+
+
+// INCLUDES
+#include <uikon.rh>
+
+// RESOURCE SIGNATURE
+RESOURCE RSS_SIGNATURE { }
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_ADD_CAT_TO_LMS_OP
+// Number of landmarks to change with addition of new category within each
+// transaction for the CPosLmLocalCategoryManager::AddCategoryToLandmarksL
+// operation.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_add_cat_to_lms_op
+ {
+ value="5";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_REMOVE_LMS_OP
+// Number of landmarks to remove within each transaction for the
+// CPosLmLocalDatabase::RemoveLandmarksL operation.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_remove_lms_op
+ {
+ value="5";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_REMOVE_ALL_LMS_OP
+// Number of landmarks to remove within each transaction for the
+// CPosLmLocalDatabase::RemoveAllLandmarksL operation.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_remove_all_lms_op
+ {
+ value="5";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_REMOVE_CAT_OP
+// Deletes a category from all landmarks in one transaction (one SQL query).
+// Because of this there is no need for setting a value of removing a single
+// category (reserved for future changes).
+// Limits: value = 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_remove_cat_op
+ {
+ value="0";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_REMOVE_CATS_OP
+// Number of categories to remove within each transaction for the
+// CPosLmLocalCategoryManager::RemoveCategoriesL operation.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_remove_cats_op
+ {
+ value="-2";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_REMOVE_CAT_FROM_LMS_OP
+// Number of landmarks to change with removal of category within each
+// transaction for the CPosLmLocalCategoryManager::RemoveCategoryFromLandmarksL
+// operation.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_remove_cat_from_lms_op
+ {
+ value="5";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_READ_PARTIAL_LMS_OP
+// Number of partial landmarks to read before notifying the observer.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_read_partial_lms_op
+ {
+ value="5";
+ }
+
+// -----------------------------------------------------------------------------
+//
+// R_POS_LM_LOCAL_RESET_GLOBAL_CATEGORIES_OP
+// Number of global categories to reset within each transaction for the
+// CPosLmLocalCategoryManager::ResetGlobalCategoriesL operation.
+// Limits: value > 0
+//
+// -----------------------------------------------------------------------------
+
+RESOURCE NUMBER_INT32 r_pos_lm_local_reset_global_categories_op
+ {
+ value="3";
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlmglobalcategoriesR01.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <uikon.rh>
+#include <EPos_LmCatDef.rh>
+#include "EPos_LmCatLanguages.hrh"
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// POS_LM_CATEGORY_SPECIFICATION
+// Global category specification.
+//
+// -----------------------------------------------------------------------------
+//
+
+RESOURCE POS_LM_CATEGORY_SPECIFICATION glcategories
+ {
+ icon_files =
+ {
+ "c:\\system\\data\\test1.mbm",
+ "c:\\system\\data\\test2.mbm",
+ "c:\\system\\data\\test3.mbm"
+ };
+
+ categories =
+ {
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 1;
+ category_name = Restaurant;
+ icon_index = 1;
+ icon_mask_index = 2;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 2;
+ category_name = Bar;
+ icon_index = 2;
+ icon_mask_index = 1;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 3;
+ category_name = "Gas station";
+ icon_index = 5;
+ icon_mask_index = 2;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 4;
+ category_name = Hotel;
+ icon_index = 2;
+ icon_mask_index = 2;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 5;
+ category_name = Shop;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 6;
+ category_name = Sight;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 7;
+ category_name = "Sports ground";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 8;
+ category_name = Garage;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 9;
+ category_name = "Car park";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 10;
+ category_name = "Bus stop";
+ }
+ };
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlmglobalcategoriesR02.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <uikon.rh>
+#include <EPos_LmCatDef.rh>
+#include "EPos_LmCatLanguages.hrh"
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// POS_LM_CATEGORY_SPECIFICATION
+// Global category specification.
+//
+// -----------------------------------------------------------------------------
+//
+
+RESOURCE POS_LM_CATEGORY_SPECIFICATION glcategories
+ {
+ icon_files =
+ {
+ "c:\\system\\data\\test1.mbm",
+ "c:\\system\\data\\test2.mbm",
+ "c:\\system\\data\\test3.mbm"
+ };
+
+ categories =
+ {
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 1;
+ category_name = Restaurant;
+ icon_index = 1;
+ icon_mask_index = 0;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 2;
+ category_name = Bar;
+ icon_index = 2;
+ icon_mask_index = 2;
+ icon_file_index = 1;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 3;
+ category_name = "Gas station";
+ icon_index = 5;
+ icon_mask_index = 2;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 4;
+ category_name = Hotel;
+ icon_index = 2;
+ icon_mask_index = 1;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 5;
+ category_name = Shop;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 6;
+ category_name = Sight;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 9;
+ category_name = "Car park";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 10;
+ category_name = "Bus stop";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 11;
+ category_name = Pools;
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 12;
+ category_name = "Shopping streets";
+ }
+ };
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlmglobalcategoriesR03.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <uikon.rh>
+#include <EPos_LmCatDef.rh>
+#include "EPos_LmCatLanguages.hrh"
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// POS_LM_CATEGORY_SPECIFICATION
+// Global category specification.
+//
+// -----------------------------------------------------------------------------
+//
+
+RESOURCE POS_LM_CATEGORY_SPECIFICATION glcategories
+ {
+ icon_files =
+ {
+ };
+
+ categories =
+ {
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 202;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901201";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 203;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901202";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 204;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901203";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 205;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901204";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 206;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901205";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 207;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901206";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 208;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901207";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 209;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901208";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 210;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901209";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 211;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901210";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 212;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901211";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 213;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901212";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 214;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901213";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 215;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901214";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 216;
+ category_name = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901215";
+ }
+ };
+ }
+
+// End of File
+
+
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/eposlmnearestsearch.ldb has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/landmarksDb.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,110 @@
+#CategoryId CategoryName Icon name Icon index Id In Categories LandmarkName CoverageRadius Description Icon name Icon index Street PostalCode City LocationName Country Media Link 1 Media Link 2 Lat Long Hor. Acc Vert. Acc
+1 Pizzeria z:\\system\\test\\landmarkstestsicon.mbm 1 1 1 LOG 40 jadajadjada ikon slask 1 Halmstad Drivhuset Plan7 Don't forget field medialinks https://www.aftonbladet.s 45,5 -44,5 10 10
+2 Hamburgerbar z:\\system\\test\\landmarkstestsicon.mbm 1 2 1 LOG11 jadajadjada ikon snask 1 Berghemsgatan 2 531 37 Kållered Västra Götaland Sverige will be automatically set to no. https://www.aftonbladet.se 46 44 14 10
+3 Kinarestaurang z:\\system\\test\\landmarkstestsicon.mbm 1 3 2 God 40 ikon skask 1 431 31 Mölndal Västra Götaland Sverige1 medialinks. https://www.aftonbladet.se 45 45 11 10
+4 Garaget z:\\system\\test\\landmarkstestsicon.mbm 1 4 2 vegetariskt 40 jadajadjada ikon spask 1 Berghemsgatan 10 Mölndal Västra Götaland Sverige1 url=http://www.come.co/to.html https://www.aftonbladet.se -45,5 -44,5 0 10
+5 Bilverkstad z:\\system\\test\\landmarkstestsicon.mbm 2 5 3 Inte sa bra 40 jadajadjada Berghemsgatan 4 431 31 Västra Götaland Sverige1 url=http://www.come.do/to.html https://www.aftonbladet.se -46,105 46,105 0 10
+6 Pasta Restaurang z:\\system\\test\\landmarkstestsicon.mbm 2 6 3 Dyrt 50 jadajadjada ikon PelleFant 2 Berghemsgatan 7 431 31 Mölndal Sverige1 url=http://www.pelle.com/pel.html https://www.aftonbladet.se 70 70 180 10
+7 Bilia 2 7 1-3,14-17 Billigt 50 jadajadjada ikon Abibblan 2 Berghemsgatan 6 431 31 Mölndal Västra Götaland url=http://www.pelle.com/pel.html https://www.aftonbladet.se 63 23 18 10
+8 VolksWagen sddsa 2 8 3 Medel 50 MLFW ikon bibblan123 2 Berghemsgatan 8 431 31 Mölndal Västra Götaland Sverige1 5 37,6 37,6 10
+9 Taxi Göteborg dasdsada 2 9 3 Medel2 50 jadajadjada ikon bibblan123 2 Berghemsgatan 5 431 31 Mölndal Västra Götaland Sverige1 url=http://www.bibblan.com/bibl.html 5 37,6 37,6 10
+10 Taxi dsa 2 10 3 MLFW2 50 MLFW ikon PelleFant 2 Berghemsgatan 9 431 31 Mölndal Västra Götaland Sverige1 url=http://www.bibblan.com/bibl.html http://www.idg.se -1 -81 25 0
+11 Stadsbibliotek aaa 2 11 3 MLFW 60 aaaaaa ikon PelleFant 2 MLFW 351 25 HalmstadA BSverige1 url=http://www.pelle.com/pel.html http://www.idg.se 0 -67 48 0
+12 Systembolag aaa 3 12 3 GatesB 60 bbbbbbb ikon PelleFant 3 PastaGatan L MLFW HalmstadB BSverige2 url=http://www.pelle.com/pel.html http://www.hotmail.com 1 -81 7 0
+13 Nokia Kontor aaa 3 13 3 Text'''1 60 ccccccc ikon PelleFant 3 PastaGatan N MLFW MLFW BSverige3 url=http://www.pelle.com/pel.html http://www.idg.se 45 -45 18 0
+14 TietoEnator kontor aaa 3 14 5 GatesF 60 dddddddd ikon PelleFant 3 MLFW 351 29 HalmstadJ BSverige4 url=http://www.svt.se http://www.idg.se -1 -80 168 0
+15 Thai Restaurang bbb 3 15 5 xStekt 70 MLFW ikon PelleFant 3 Berghemsgatan 11 431 31 Mölndal Västra Götaland url=http://www.pelle.com/pel.html http://www.idg.se -5 25
+16 McDonalds bbb 3 16 3 Akorthus 70 fffffffffffffffff ikon PelleFant 3 AStora biblioteksgatan 24 A123 45 AStorGöteborg AÖstra Götaland url=http://www.pelle.com/pel.html http://www.idg.se 1 -81 12 50
+17 BurgerKing bbb 3 17 17 Stadskortxhus 70 ggghhhhhh ikon PelleFant 3 Stora biblioteksgatan 25 321 32 StorGöteborg123 Östra Götaland123 url=http://www.pelle.com/pel.html http://www.idg.se 57 11 11 9
+18 Frisör bbb 3 18 18 enat?r 70 iiiijjjjjj ikon PelleFant 3 Stora biblioteksgatan 25 321 32 StorGöteborg123 Östra Götaland123 url=http://www.pelle.com/pel.html http://www.idg.se 0 -80,5 10,2 1,5
+19 Hunddagis bbb 4 19 19 enator 70 kkkkklll Gårdaikonen 4 Berghemsgatan 1 Finland url=http://www.pelle.com/pel.html 23 23 10,2 1,5
+20 Veterinär bbb 4 20 21 LOG2 70 mmmm Gårdaikonen 4 Berghemsgatan 2 431 32 Mölndal Västra Götaland url=http://www.gårda.com/sb.html https://www.aftonbladet.se -1 80 10,2 1,5
+21 Kyrkogård bbb 4 21 19 LOG3 70 nnnxnnn Gårdaikonen 4 Berghemsgatan 3 431 33 Mölndal Västra Götaland url=http://www.gårda.com/sb.html https://www.aftonbladet.se 1 80 25 300
+22 Museum bbb 4 22 22 LOG4 70 ooooooo Gårdaikonen 4 Berghemsgatan 4 431 34 Mölndal Västra Götaland url=http://www.gårda.com/sb.html http://www.idg.se -1 81 10,2 1,55
+23 Dagis bbb 4 23 23 LOG5 70 ppppppx Gårdaikonen 4 Berghemsgatan 5 431 35 Mölndal Västra Götaland url=http://www.gårda.com/sb.html https://www.aftonbladet.se 1 81 18 120
+24 StadsPark bbb 4 24 24 LOG6 70 asd Gårdaikonen 4 Berghemsgxatan 6 431 36 Mölndal Västra Götaland url=http://www.gårda.com/sb.html http://www.idg.se 0 80,5 168,9 7000
+25 Sjukhus bbb 4 25 25 x 70 r Gårdaikonen 4 Berghemsgatan 7 x431 37 Mölndal Västra Götaland url=http://www.gårda.com/sb.html https://www.aftonbladet.se -84 12,4 12,5 10
+26 Läkare bbb 5 26 26 LOG8 70 x Gårdaikonen 5 Berghemsgatan 8 431 38 xMölndal Västra Götaland url=http://www.gårda.com/sb.html https://www.aftonbladet.se 5 25 59 2000
+ 27 11-17 LOG9 70 ttttt Gårdaikonen 5 Berghemsgatan 9 431 39 Mölndal x Västra Götaland url=http://www.gårda.com/sb.html https://www.aftonbladet.se -84 12
+ 28 11 LOG10 70 v Gårdaikonen 5 Berghemsgatan 10 431 40 Mölndal Västra Götalandx url=http://www.gårda.com/sb.html https://www.aftonbladet.se 10 14 13,9 6000
+ 29 26 Unique 80 Gårdaikonen 5 256 78 Mölndal Daanmark url=http://www.gårda.com/xsb.html https://www.aftonbladet.se 45,5 -0,5 0 1200
+ 30 26 Text'1 80 Unique Gårdaikonen 5 256 78 Götet Daanmark url=http://www.gårda.com/sb.html https://wwwx.aftonbladet.se 45,5 0 0 112
+ 31 26 Text1 80 Focus Torget1 56 Unique 256 78 Mölndal Daanmark url=http://www.gårda.com/sb.html https://www.aftonbladet.se 45,5 0,5 0 0
+ 32 26 Text2 80 Focus Torget1 6 256 78 Unique Daanmark z:\gårda\ikon https://www.aftonbladet.se 89 -15 0 0
+ 33 26 Text3 80 Focus Torget1 6 256 78 Götet Daanmark z:\gårda\ikon https://www.aftonbladet.se 5 37,6 0 0
+ 34 26 Text4 80 Focus Torget1 66 256 78 Götet Daanmark z:\gårda\ikon http://www.idg.se 63 23 18 0
+ 35 26 Text5 80 Focus Torget1 6 256 78 Götet Daanmark z:\gårda\ikon https://www.aftonbladet.se -84,2 -2,67 168,9 0
+ 36 26 Text6 80 Focus Torget1 6 256 78 Götet Daanmark z:\gårda\ikon http://www.idg.se 5 37,6 37,6 0
+ 37 26 Text7 80 Focus Torget1 6 256 78 Götet Daanmark z:\gårda\ikon o 5 37,6 37,6 0
+ 38 26 Text8 80 256 78 Götet Daanmark z:\gårda\ikon http://www.idg.se 5 37,6 0 0
+ 39 26 Text9 80 256 78 Götet Daanmark 5 25 59 2000
+ 40 26 Text10 80 256 78 Götet Daanmark 0 180 168,9 4500
+ 41 26 q 80 256 78 Götet Daanmark -1 180 37,6 2
+ 42 26 asd 80 256 78 1 180 37,6 1
+ 43 26 asdf 256 78 0 -179
+ 44 26 dfdsf 256 78 0 179
+ 45 26 Several Several Several 1 Several Several Several Several Several Several Several -1 -179
+ 46 26 oki aaa aaa -1 179
+ 47 26 abab oki aaa 1 -179
+ 48 26 Nokia aaa aaa oki 1 179
+ 49 26 aba Nokia aaa aaa aaa
+ 50 26 aca aaa aaa Noki
+ 51 1 PellesPizza IconName1 Berghemsgatan1 Sverige
+ 52 19 Kalles Hundgård IconName2 Berghemsgatan2 Sverige -45 -1 12 50
+ 53 21 Sjömanskyrkan IconName3 Berghemsgatan3 Sverige 25,05 -5,5 13 49
+ 54 14 TE, Gårda IconName4 Berghemsgatan4 Sverige -45,5 0 14 48
+ 55 14 TE, Eriksberg IconName5 Berghemsgatan5 Sverige -46 1 15 47
+ 56 14 TE, Lund IconName6 Berghemsgatan6 Sverige 19,95 78 16 46
+ 57 14 TE, Karlstad IconName7 Berghemsgatan7 Sverige 45 -44
+ 58 14 TE, Kista IconName8 Berghemsgatan8 Sverige 25,05 19,5
+ 59 14 TE, Stockholm IconName9 Berghemsgatan9 Sverige 10,05 24,5
+ 60 14 TE, Oulu IconName10 Berghemsgatan10 Finland 89 -180
+ 61 14 TE, Tampere IconName11 Berghemsgatan11 Finland 89 180
+ 62 13 Nokia, Köpenhamn IconName12 Berghemsgatan12 Danmark 90 1
+ 63 13 Nokia, Stockholm IconName13 Berghemsgatan13 Sverige 90 -180
+ 64 13 Oulu IconName14 Berghemsgatan14 Sverige 90 0
+ 65 13 Tampere IconName15 Berghemsgatan15 Sverige 89 0
+ 66 13 Helsinki IconName16 Berghemsgatan16 Sverige -19,95 59,5
+ 67 13 Bengtfors IconName17 Berghemsgatan17 Sverige 89 20
+ 68 13 Karlstad IconName18 Berghemsgatan18 Sverige 89 -20
+ 69 13 Mölndal IconName19 Berghemsgatan19 Sverige 90 20
+ 70 13 Göteborg IconName20 Berghemsgatan20 Sverige 90 0
+ 71 13 PallesPalör IconName21 Berghemsgatan21 Sverige 89 0
+ 72 26 Läkare utan gränser IconName22 Berghemsgatan22 Sverige 179 120,58
+ 73 26 Mölndal IconName23 Berghemsgatan23 Sverige -89 -180
+ 74 26 Läkargruppen IconName24 Berghemsgatan24 Sverige -89 180
+ 75 26 Läkarhuset IconName25 Berghemsgatan25 Sverige -90 180
+ 76 26 Sahlgrenska IconName26 Berghemsgatan26 Sverige -90 -180
+ 77 26 östra sjukhuset IconName27 Berghemsgatan27 Sverige -90 0
+ 78 20 Blå stjärnan IconName28 Berghemsgatan28 Sverige -89 0
+ 79 10 MiniTaxi IconName29 Berghemsgatan29 Sverige 137 36,65
+ 80 10 GöteborgsTaxi IconName30 Berghemsgatan30 Sverige -89 20
+ 81 10 LandvetterTaxi IconName31 Berghemsgatan31 Sverige -89 -20
+ 82 10 TaxiStockholm IconName32 Berghemsgatan32 Sverige -90 20
+ 83 10 SvartTaxi IconName33 Berghemsgatan33 Sverige 113 -11,31
+ 84 22 Länsmuseumet IconName34 Berghemsgatan34 Sverige 107 -23,3
+ 85 22 Sjöfartsmuseumet IconName35 Berghemsgatan35 Sverige 0 0
+ 86 22 KinaMuseumet IconName36 Berghemsgatan36 Sverige -0,5 0
+ 87 22 Naturhistoriska IconName37 Berghemsgatan37 Sverige 0,5 0
+ 88 22 Etnogfrafiska IconName38 Berghemsgatan38 Sverige 0 0,5
+ 89 22 TekniskaMuseumet IconName39 Berghemsgatan39 Sverige 0 -0,5
+ 90 23 Krokslätts dagis IconName40 Berghemsgatan40 Sverige 0,5 0,5
+ 91 23 Centrum dagiset IconName41 Berghemsgatan41 Sverige 0,5 -0,5
+ 92 23 Dagis Majorna IconName42 Berghemsgatan42 Sverige -0,5 0,5
+ 93 23 Lackarbäcks daghem IconName43 Berghemsgatan43 Sverige -0,5 -0,5
+ 94 23 Saab dagis IconName44 Berghemsgatan44 Sverige 47 -143,2
+ 95 23 TE dagis IconName45 Berghemsgatan45 Sverige 41 -155,19
+ 96 23 TietoEnator Lekstugan IconName46 Berghemsgatan46 Sverige 11,00005 11,00005
+ 97 18 Panache IconName47 Berghemsgatan47 Sverige 29 32
+ 98 18 Börjessons herrfrisör IconName48 Berghemsgatan48 Sverige 23 4
+ 99 18 Modefrisörerna IconName49 Berghemsgatan49 Sverige 17 55
+ 100 18 krokslätts frisörerna IconName50 Berghemsgatan50 Sverige 11 66
+ 101 12 Gårda IconName51 Berghemsgatan51 Sverige 5 77
+ 102 12 Mölndal IconName52 Berghemsgatan52 Sverige -1 88
+ 103 12 Kållered IconName53 Berghemsgatan53 Sverige -7 56,56
+ 104 12 Nordstan IconName54 Berghemsgatan54 Sverige -13 54,45
+ 105 12 Munkebäck IconName55 Berghemsgatan55 Sverige 17,0005 17,0005
+#
+#
+#
+#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbAreaSearchResult.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,185 @@
+#SouthLat NorthLat WestLong EastLong ErrorCode Redefined SearchResult Comment
+45 46,00 -45,00 -44,00 0 1,13,57 NV globe
+45 46,00 44,00 45,00 0 2,3 NE globe
+-46,00 -45,00 -45,00 -44,00 0 4 SW globe
+-46,11 -46,10 46,10 46,11 0 5 SE globe
+#
+-1,00 1,00 -81,00 -80,00 0 10,12,14,16,18 W crossing 0 latitude
+-1,00 1,00 80,00 81,00 0 20-24 E crossing 0 latitude
+45,00 46,00 -1,00 1,00 0 29-31 N crossing 0 longitude
+-46,00 -45,00 -1,00 1,00 0 52,54,55 E crossing 0 latitude
+#
+89,00 90,00 -180,00 180,00 0 32,60-65,67-71 North pole
+89,00 90,00 20,00 -20,00 0 60,61,63,67,68,69 Nort Pole expect a ^
+89,00 90,00 -20,00 20,00 0 32,62,64,65,67-71 Nort Pole ^
+#
+-90,00 -89,00 -180,00 180,00 0 73-78,80-82 South pole
+-90,00 -89,00 20,00 -20,00 0 73-76,80-82 South pole expect a ^
+-90,00 -89,00 -20,00 20,00 0 77,78,80-82 South pole ^
+#
+-1,00 1,00 -1,00 1,00 0 85-93 Crossing 0 latitude and 0 longitude
+0,00 1,00 -1,00 0,00 0 1 85,87,89,91
+-1,00 1,00 179,00 -179,00 0 40-48 Crossing 0 latitude and 180 longitude
+#
+19,00 20,00 78,00 78,00 0 56 WestLong =EastLong
+19,00 20,00 78,11235 78,11235 0 WestLong =EastLong
+#
+-20,00 -19,99 16,00 16,01 0
+17,00 17,001 17,00 17,001 0 105 100*100 square
+11,00 11,0001 11,00 11,0001 0 96 10*10 square
+#
+-91,00 -90,00 13,00 14,00 -6
+45,00 44,99 13,00 14,00 -6
+85,00 91,00 13,00 14,00 -6
+78,00 79,00 -181,00 -179,00 -6
+-45,00 -44,00 181,00 179,00 -6
+23,00 24,00 -179,00 -181,00 -6
+23,00 24,00 179,00 181,00 -6
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbCatLandmarkSearchResult.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,181 @@
+#CategoryName Category Id LmSearchResult (Id's) Redefined seach Comment
+Pizzeria 1 1-2,7,51
+Hamburgerbar 2 3-4,7
+Kinarestaurang 3 5-13,16
+Garaget 4
+Bilverkstad 5 14-15
+Pasta Restaurang 6
+Bilia 7
+VolksWagen 8
+Taxi Göteborg 9
+Taxi 10 79-83
+Stadsbibliotek 11 27-28
+Systembolag 12 27,101-105
+Nokia Kontor 13 27,62-71
+TietoEnator kontor 14 7,27,54-61
+Thai Restaurang 15 7,27
+McDonalds 16 7,27
+BurgerKing 17 7,17,27
+Frisör 18 18,97-100
+Hunddagis 19 19,21,52
+Veterinär 20 78
+Kyrkogård 21 20,53
+Museum 22 22,84-89
+Dagis 23 23,90-96
+StadsPark 24 24
+Sjukhus 25 25
+Läkare 26 26,29-50,72-77
+TietoEnator kontor 14 7,27,54-61
+TietoEnator kontor 14 7,27,54-61 1
+Thai Restaurang 15 7 1
+TietoEnator kontor 14 7,27,54-61
+Thai Restaurang 15 7,27 1
+TietoEnator kontor 14 7,27,54-61
+BurgerKing 17 7,27 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbCategorySearchResult.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,125 @@
+#TextCriteria CategorySearchResult (Id's) Redefined seach Comment
+* 1-26
+* 1-26
+** 1-26
+* 1-26 1
+Frisör 18
+?
+Unique
+T* 9,10,14,15
+N* 13
+*oki* 13
+Noki?
+Nokia?
+Nok* 13
+x
+enat?r
+Text'1
+Text'''1
+*Enator* 14
+*estaurang 3,6,15
+*ontor 13,14 1
+Nokia* 13
+*okia
+Nokia?
+Tax? 10
+T??? 10
+???? 10
+#
+#
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbCompositeSearchResult.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,84 @@
+# TEXT TextCriteria Attributes (bitmask) PositionFields Comment
+# AREA SouthLat NorthLat WestLong EastLong ErrorCode Comment
+# CATEGORY CategoryName Category Id Comment
+# NEAREST Index Latitude Longitude UseCoverageRadius MaxDistance Comment
+# IDLIST Ids Comment
+# RESULT LmSearchResultIds Redefined search Comment
+# SEPARATOR Separates a composite search
+#
+#>>>>>>>>>>>>>>1<<<<<<<<<<<<<
+AREA -90 90 -180 180
+TEXT *
+CATEGORY Taxi 10
+RESULT 79-83
+SEPARATOR
+#>>>>>>>>>>>>>>2<<<<<<<<<<<<<
+AREA -90 90 -180 180
+TEXT Te*
+IDLIST 33,35,37,38,48-54
+RESULT 33,35,37,38,54
+SEPARATOR
+#>>>>>>>>>>>>>>3<<<<<<<<<<<<<
+AREA -80 80 -180 180
+NEAREST -45,5 -44,5 0 300
+TEXT *
+RESULT 4
+SEPARATOR
+#>>>>>>>>>>>>>>4<<<<<<<<<<<<<
+AREA -80 80 -180 180
+NEAREST -45,5 -44,5 1 10
+TEXT *
+RESULT 4
+SEPARATOR
+#>>>>>>>>>>>>>>5<<<<<<<<<<<<<
+TEXT *
+# Search for uncatetegorized landmarks
+CATEGORY
+RESULT 11,32,36,39,43,56,88,92,103
+SEPARATOR
+#>>>>>>>>>>>>>>6<<<<<<<<<<<<<
+NEAREST 45 45 0 300
+TEXT *
+RESULT 3
+SEPARATOR
+#>>>>>>>>>>>>>>7<<<<<<<<<<<<<
+IDLIST 82-95,105
+TEXT *
+CATEGORY Taxi 10
+RESULT 82,83
+SEPARATOR
+#>>>>>>>>>>>>>>8<<<<<<<<<<<<<
+TEXT *
+CATEGORY Taxi 10
+RESULT 79-83
+SEPARATOR
+#>>>>>>>>>>>>>>9<<<<<<<<<<<<<
+TEXT Sv* 0x0021 401,404,406,408,409
+IDLIST 1-85
+RESULT 83 1
+SEPARATOR
+#>>>>>>>>>>>>>>10<<<<<<<<<<<<<
+IDLIST 1-24,45
+TEXT Pelle* 0x0021
+RESULT
+SEPARATOR
+#>>>>>>>>>>>>>>11<<<<<<<<<<<<< Note that La* also founds Lä, Lå
+IDLIST 1-105
+TEXT La* 0x0021
+RESULT 72,74,75,81,84,93
+SEPARATOR
+#
+#>>>>>>>>>>>>>>12<<<<<<<<<<<<<
+IDLIST 1-105
+TEXT * 0x0021
+CATEGORY 26
+AREA -90 10 -180 180
+NEAREST -84,2 -2,67 1 10
+RESULT 35
+SEPARATOR
+#
+#>>>>>>>>>>>>>>13<<<<<<<<<<<<<
+TEXT vegetariskt 0x0021
+RESULT 4
+SEPARATOR
+#
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbNearestSearch.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,255 @@
+#LandmarkId Lat Long Coverage radius Comment Earth radius Distance to #1 Distance to #2 Distance to #3 Distance to #4 Distance to #5 Distance to #6 Distance to #7 Distance to #8 Distance to #9 Distance to #10 Distance to #11 Distance to #12 Distance to #13 Distance to #14 Distance to #15 Distance to #16 Distance to #17 Distance to #18 Distance to #19 Distance to #20
+1 59 18 10 6371010 0 5242849,306 6726499,853 444780,4047 6657988,273 3179522,311 6746270,233 6746270,233 6746270,233 8754746,717 8765401,845 839088,753 16600956 13268847,98 3447048,137 16568070,08 444780,4047 6876240,873 6876240,873 6881699,191
+2 12 13 10 5242849,306 0 1880092,384 4801299,905 1969934,453 2952874,753 1959411,776 1959411,776 1959411,776 4303424,735 4310977,898 4447804,047 11366716,59 18055706,44 8673217,892 11341900,32 4801299,905 2116602,56 2116602,56 2120432,31
+3 12 13,00001 10,5 5242849,24 1,08 1880093,161 4801299,825 1969935,317 2952874,081 1959412,584 1959412,584 1959412,584 4303425,524 4310978,685 4447804,047 11366716,61 18055705,63 8673217,892 11341900,32 4801299,825 2116603,366 2116603,366 2120433,115
+4 12 13,0001 10 5242848,64 10,8762218 1880100,159 4801299,1103 1969943,098 2952868,036 1959419,858 1959419,858 1959419,858 4303432,624 4310985,771 4447804,047 11366716,78 18055698,35 8673217,892 11341900,32 4801299,11 2116610,626 2116610,626 2120440,362
+5 12,00001 13 10 5242848,197 1,107128048 1880093,161 4801298,796 1969935,127 2952873,878 1959412,52 1959412,52 1959412,52 4303425,501 4310978,665 4447802,935 11366717,7 18055705,69 8673216,78 11341901,43 4801298,796 2116603,306 2116603,306 2120433,057
+6 0,001 0,001 100 6746140,607 1959254,585 111083,9617 6331418,596 157249,6947 4893842,046 157,253626 157,253626 157,253626 2345326,538 2353064,742 5908617,126 10007672,22 20014960,96 10007447,91 10007670,3 6331418,596 157406,8817 157406,8817 161385,8107
+7 0,01 0,01 100 6744974,009 1957839,871 110088,7654 6330228,87 157257,3694 4892431,525 1572,536195 1572,536195 1572,536195 2346741,608 2354479,719 5907458,296 10008690,29 20013545,68 10006447,15 10008671,06 6330228,87 158822,1643 158822,1643 162800,6742
+8 0,001 0 100 6746160,906 1959335,409 111195,1568 6331442,111 157171,015 4893913,966 111,1951053 111,1951053 111,1951053 2345249,287 2352987,77 5908636,374 10007670,28 20015007,02 10007447,91 10007670,3 6331442,111 157328,2805 157328,2805 161309,1491
+9 -0,02 0 100 6748456,77 1960939,795 111217,3357 6333724,404 158830,0661 4895695,05 2223,902024 2223,902024 2223,902024 2343570,242 2351303,089 5910936,23 10005335,54 20012894,31 10009783,01 10005335,2 6333724,404 155684,9114 155684,9114 159625,4332
+10 0 1,04 100 6725731,124 1876984,859 4447,804047 6307749,85 252615,5308 4819844,893 115642,9052 115642,9052 115642,9052 2426872,52 2434325,503 5889494,49 10009577,24 19899475,31 10007559,11 10007559,11 6307749,85 252615,5308 252615,5308 255110,597
+11 0 -0,03 1000 6746879,687 1961837,727 114530,9542 6332256,807 154908,9624 4896156,872 3335,853035 3335,853035 3335,853035 2342852,908 2350599,484 5909323,955 10007500,89 20011782,36 10007559,11 10007559,11 6332256,807 154908,9624 154908,9624 158946,568
+12 -0,01 0,01 10000 6747160,579 1959367,855 110088,7654 6332402,524 158822,1643 4894127,834 1572,536195 1572,536195 1572,536195 2345142,559 2352875,305 5909648,677 10006466,73 20013545,68 10008671,06 10006447,15 6332402,524 157257,3694 157257,3694 161197,7974
+13 -0,01 -0,02 6747769,658 1961792,028 113424,4532 6333108,099 156481,3163 4896285,287 2486,39804 2486,39804 2486,39804 2342824,623 2350565,73 5910226,244 10006408,51 20012631,81 10008671,06 10006447,15 6333108,099 154892,8798 154892,8798 158891,9809
+14 55 18,0001 444780,4048 4801300,7 6308643,159 6,377655644 6247287,593 2783666,395 6331553,143 6331553,143 6331553,143 8380367,281 8390891,544 469514,466 16156386,43 13683565,07 3891828,541 16123289,67 6,377655644 6464113,809 6464113,809 6469537,573
+15 55,002 18 444558,0145 4801520,563 6308849,281 222,3902106 6247489,705 2783863,993 6331757,514 6331757,514 6331757,514 8380550,458 8391074,795 469662,1277 16156608,54 13683360,7 3891606,151 16123512,06 222,3902106 6464316,771 6464316,771 6469740,555
+16 55,01 18 1000 443668,4537 4802403,194 6309682,694 1111,951006 6248308,154 2784642,055 6332584,409 6332584,409 6332584,409 8381297,045 8391821,663 470271,9243 16157497,72 13682533,8 3890716,59 16124401,62 1111,951006 6465138,403 6465138,403 6470562,264
+17 1 81 8405977,84 7592934,844 8895779,19 8234948,892 9116311,394 6178074,48 9006956,881 9006956,881 9006956,881 10680751,21 10680636,22 8434890,116 10228579,76 11008161,33 9896364,005 10118754,21 8234948,892 9120230,559 9120230,559 9120342,498
+18 0 -80,5 10493037,7 10388227,13 9062400,746 10548342,45 8840190,384 12113298,8 8951205,645 8951205,645 8951205,645 7381867,639 7383174,345 10247071,42 9897889,13 11063912,57 10007559,11 10007559,11 10548342,45 8840190,384 8840190,384 8840208,817
+19 0 0,1 6744245,572 1951344,059 100075,5911 6329205,251 165298,8067 4886812,703 11119,51012 11119,51012 11119,51012 2352907,523 2360617,918 5906828,185 10007753,17 20003998,7 10007559,11 10007559,11 6329205,251 165298,8067 165298,8067 169088,3961
+20 -1 80 8549935,397 7534450,155 8784601,607 8365199,925 9009075,192 6235166,042 8895779,19 8895779,19 8895779,19 10515587,42 10515147,01 8550134,848 10005870,15 11119339,02 10118754,21 9896364,005 8365199,925 9005145,798 9005145,798 9005063,319
+21 1 -1,001 1000 6658009,827 1970020,91 248729,1599 6247310,084 111,1781233 4883175,07 157328,2686 157328,2686 157328,2686 2352853,344 2361118,717 5819482,501 10116794,81 19857789,94 9896364,005 10118754,21 6247310,084 222390,2302 222390,2302 227949,9845
+22 0,999 -0,999 200 6658075,806 1969917,912 248480,5504 6247368,457 157,2416757 4883109,951 157092,3864 157092,3864 157092,3864 2352912,537 2361177,13 5819549,874 10116687,51 19858025,83 9896475,2 10118643,01 6247368,457 222279,0351 222279,0351 227838,7894
+23 1 -1,002 6658031,381 1970107,371 248828,6247 6247335,075 222,3563277 4883249,109 157406,9483 157406,9483 157406,9483 2352781,377 2361047,024 5819503,422 10116792,87 19857711,26 9896364,005 10118754,21 6247335,075 222390,3135 222390,3135 227950,0659
+24 1,01 -1 6656897,419 1969235,542 249128,7875 6246201,598 1111,95101 4882271,546 158037,7921 158037,7921 158037,7921 2353772,942 2362040,36 5818369,493 10117908,53 19857080,42 9895252,054 10119866,16 6246201,598 223502,1534 223502,1534 229061,9084
+25 1,01 -1,02 1488 6657328,734 1970965,737 251115,7971 6246701,67 2486,092063 4883752,698 159610,1869 159610,1869 159610,1869 2352334,613 2360607,509 5818788,198 10117869,73 19855508,03 9895252,054 10119866,16 6246701,67 223513,2161 223513,2161 229072,7026
+26 5 25 6034601,244 1531328,507 2722622,271 5595094,778 2920515,557 3089469,621 2831421,555 2831421,555 2831421,555 4936186,789 4940672,651 5341947,646 10610455,95 17183696,66 9451583,6 10563534,61 5595094,778 2964013,219 2964013,219 2965291,378
+27 -15 -15 1000 8754746,717 4303424,735 2423681,4 8380363,813 2352925,313 7235492,363 2345169,308 2345169,308 2345169,308 0 11119,51012 7924786,668 8311097,422 17669948,9 11675485,62 8339632,588 8380363,813 2187944,693 2187944,693 2183945,098
+28 -14,9 -15 1000 8744091,905 4295884,638 2416244,361 8369840,075 2344682,727 7227382,472 2337457,125 2337457,125 2337457,125 11119,51012 22239,02024 7914197,995 8322215,235 17677661,09 11664366,11 8350752,098 8369840,075 2180223,397 2180223,397 2176238,285
+29 -15 -14,8 1000 8748618,545 4287675,777 2407782,693 8373445,93 2338590,261 7220816,338 2329771,233 2329771,233 2329771,233 21481,24327 24184,10739 7918250,997 8311472,947 17685346,98 11675485,62 8339632,588 8373445,93 2172569,251 2172569,251 2168542,658
+30 -15 -15,2 1000 8760906,734 4319228,505 2439674,426 8387317,005 2367377,873 7250200,464 2360671,513 2360671,513 2360671,513 21481,24327 24184,10739 7931363,092 8310722,242 17654446,7 11675485,62 8339632,588 8387317,005 2203431,659 2203431,659 2199458,866
+31 0,532 0,53 6677448,59 1875950,34 78934,2415 6261374,359 177894,5288 4810769,197 83501,22271 83501,22271 83501,22271 2428660,922 2436394,314 5840417,486 10067734,41 19931616,99 9948403,312 10066714,9 6261374,359 240750,7596 240750,7596 244715,824
+32 89 -15 3354284,524 8575085,16 9900671,927 3798993,778 9788473,186 6373809,825 9900153,251 9900153,251 9900153,251 11564290,52 11575410,03 4127514,782 19838687,52 10114964,96 111195,1012 19903923,11 3798993,778 10010861,41 10010861,41 10016421,11
+33 32,0002 32 1000 3179500,838 2952890,362 4822687,564 2783648,478 4883114,806 22,23922369 4894013,155 4894013,155 4894013,155 7235506,307 7243620,44 2704435,409 13624308,23 15121105,06 6449293,629 13565824,58 2783648,478 5050747,872 5050747,872 5054981,361
+34 54 23,005 634783,882 4752849,437 6335638,325 341682,6316 6289792,285 2548523,94 6365429,705 6365429,705 6365429,705 8476703,415 8487022,461 704774,0083 16054406,83 13649688,51 4003023,642 16012094,57 341682,6316 6503059,843 6503059,843 6508396,517
+35 31,99 32 2000 3180595,93 2952094,417 4821937,418 2784719,977 4882412,43 1111,951014 4893279,637 4893279,637 4893279,637 7234795,196 7242908,167 2705426,272 13623174,22 15121838,57 6450427,819 13564690,39 2784719,977 5050016,809 5050016,809 5054249,609
+36 5,5 37,6 6181285,063 2796529,349 4109071,53 5776442,598 4312958,48 3003683,719 4218876,239 4218876,239 4218876,239 6227083,65 6230430,03 5642931,917 10686916,44 15796241,97 9395986,049 10619132,16 5776442,598 4346870,94 4346870,94 4347838,485
+37 5 37,6 6235657,044 2812923,628 4102273,061 5830366,2 4308152,908 3058366,121 4212316,554 4212316,554 4212316,554 6206176,51 6209419,252 5695417,694 10631324,26 15802801,66 9451583,6 10563534,61 5830366,2 4339028,578 4339028,578 4339920,98
+38 0 0,01 6746067,292 1958603,701 110083,1502 6331315,694 158037,7921 4893279,637 1111,95101 1111,95101 1111,95101 2345941,962 2353677,392 5908553,484 10007578,51 20014006,26 10007559,11 10007559,11 6331315,694 158037,7921 158037,7921 161997,4024
+39 0,01 0,01 6744974,009 1957839,871 110088,7654 6330228,87 157257,3694 4892431,525 1572,536195 1572,536195 1572,536195 2346741,608 2354479,719 5907458,296 10008690,29 20013545,68 10006447,15 10008671,06 6330228,87 158822,1643 158822,1643 162800,6742
+40 0,02 0 6744083,709 1957885,048 111217,3357 6329377,201 155684,9114 4892302,828 2223,902024 2223,902024 2223,902024 2346769,345 2354512,918 5906555,568 10009782,67 20012894,31 10005335,2 10009783,01 6329377,201 158830,0661 158830,0661 162846,3604
+41 0 -0,001 6746290,532 1959492,599 111306,2963 6331574,308 157171,0269 4894070,691 111,1951053 111,1951053 111,1951053 2345092,057 2352830,55 5908765,139 10007557,17 20015007,02 10007559,11 10007559,11 6331574,308 157171,0269 157171,0269 161151,9445
+42 -0,003 -0,001 6746618,512 1959721,711 111306,7961 6331900,348 157407,2198 4894325,108 351,6297846 351,6297846 351,6297846 2344852,128 2352589,816 5909093,688 10007223,63 20014766,58 10007892,69 10007225,52 6331900,348 156935,1876 156935,1876 160910,4133
+43 0,004 -0,004 6745914,136 1959429,686 111640,7675 6331210,149 156620,6136 4893947,257 629,0144755 629,0144755 629,0144755 2345180,289 2352920,691 5908384,83 10007996,06 20014489,2 10007114,33 10008003,89 6331210,149 157250,9338 157250,9338 161245,2183
+44 -0,004 -0,005 6746809,045 1960121,361 111751,9617 6332103,101 157172,6479 4894697,59 711,9960426 711,9960426 711,9960426 2344463,137 2352201,672 5909280,208 10007104,69 20014406,22 10008003,89 10007114,33 6332103,101 156542,0126 156542,0126 160523,1268
+45 -0,003 0,003 6746537,321 1959398,471 110862,0177 6331806,292 157721,389 4894037,448 471,760859 471,760859 471,760859 2345161,178 2352897,752 5909016,706 10007231,39 20014646,45 10007892,69 10007225,52 6331806,292 157250,2997 157250,2997 161217,7525
+46 -89 -90 16600956 11366716,59 10009499,63 16156386,24 10116796,75 13624286 10007559,11 10007559,11 10007559,11 8311097,422 8299979,61 15813531,66 0 10007559,11 19903923,11 111195,1012 16156386,24 9894440,413 9894440,413 9888881,505
+47 -89 -89,8 16600583,48 11366337,95 10009111,55 16156014,15 10116408,7 13623954,58 10007170,98 10007170,98 10007170,98 8310722,242 8299604,427 15813151,53 388,1242177 10007947,23 19903923,11 111195,1012 16156014,15 9894052,358 9894052,358 9888493,45
+48 179 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+49 3 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+50 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+51 -0,004 1 6726937,925 1880410,371 444,780401 6309076,672 248828,9832 4823016,082 111195,9906 111195,9906 111195,9906 2423371,392 2430834,066 5890645,522 10009054,92 19903922,22 10008003,89 10007114,33 6309076,672 248431,0631 248431,0631 250957,9198
+52 -0,004 2 6708233,683 1804370,9 111195,9906 6287389,649 351754,6893 4752917,693 222390,647 222390,647 222390,647 2504252,84 2511449,861 5873533,24 10010994,85 19792727,56 10008003,89 10007114,33 6287389,649 351473,2442 351473,2442 353262,9062
+53 -0,004 3 6690605,702 1732029,554 222390,647 6266939,057 458555,4026 4684099,917 333585,5998 333585,5998 333585,5998 2587272,039 2594212,711 5857860,928 10012933,6 19681532,61 10008003,89 10007114,33 6266939,057 458339,4668 458339,4668 459712,3049
+54 -0,004 4 6674064,346 1663869,042 333585,5998 6247738,854 567045,8079 4616622,121 444780,6267 444780,6267 444780,6267 2672229,289 2678923,16 5843641,38 10014870,58 19570337,59 10008003,89 10007114,33 6247738,854 566871,1206 566871,1206 567980,6707
+55 -0,004 5 6658619,431 1600423,887 444780,6267 6229802,296 676413,3585 4550545,951 555975,6833 555975,6833 555975,6833 2758945,08 2765401,754 5830886,315 10016805,2 19459142,53 10008003,89 10007114,33 6229802,296 676266,8408 676266,8408 677196,1273
+56 -0,004 6 6644280,201 1542276,375 555975,6833 6213141,909 786292,1239 4485935,327 667170,7548 667170,7548 667170,7548 2847258,251 2853487,241 5819606,339 10018736,86 19347947,46 10008003,89 10007114,33 6213141,909 786166,0012 786166,0012 786964,4574
+57 -0,004 7 6631055,309 1490047,062 667170,7548 6197769,448 896494,1503 4422856,399 778365,8347 778365,8347 778365,8347 2937024,207 2943034,833 5809810,906 10020664,99 19236752,38 10008003,89 10007114,33 6197769,448 896383,4491 896383,4491 897082,7303
+58 -0,004 8 6618952,795 1444378,302 778365,8347 6183695,864 1006913,303 4361377,49 889560,9199 889560,9199 889560,9199 3028113,237 3033914,547 5801508,284 10022588,99 19125557,29 10008003,89 10007114,33 6183695,864 1006814,657 1006814,657 1007436,198
+59 -0,004 9 6607980,07 1405909,739 889560,9199 6170931,273 1117485,218 4301569,009 1000756,009 1000756,009 1000756,009 3120408,948 3126009,67 5794705,52 10024508,28 19014362,2 10008003,89 10007114,33 6170931,273 1117396,248 1117396,248 1117955,212
+60 -0,004 10 6598143,893 1375245,864 1000756,009 6159484,926 1228168,635 4243503,328 1111951,1 1111951,1 1111951,1 3213806,843 3219215,348 5789408,419 10026422,27 18903167,11 10008003,89 10007114,33 6159484,926 1228087,597 1228087,597 1228595,094
+61 -0,004 11 6589450,361 1352917,574 1111951,1 6149365,181 1338935,899 4187254,632 1223146,193 1223146,193 1223146,193 3308213,023 3313437,31 5785621,519 10028330,38 18791972,02 10008003,89 10007114,33 6149365,181 1338861,478 1338861,478 1339325,889
+62 -0,004 12 6581904,888 1339341,905 1223146,193 6140579,472 1449767,789 4132898,728 1334341,287 1334341,287 1334341,287 3403543,029 3408590,713 5783348,074 10030232,03 18680776,92 10008003,89 10007114,33 6140579,472 1449698,971 1449698,971 1450126,767
+63 -0,004 13 6575512,196 1334785,995 1334341,287 6133134,296 1560650,535 4080512,812 1445536,383 1445536,383 1445536,383 3499720,799 3504599,115 5782590,042 10032126,64 18569581,83 10008003,89 10007114,33 6133134,296 1560586,518 1560586,518 1560982,802
+64 -0,004 14 6570276,299 1339341,905 1445536,383 6127035,182 1671574,013 4030175,193 1556731,479 1556731,479 1556731,479 3596677,745 3601393,55 5783348,074 10034013,63 18458386,73 10008003,89 10007114,33 6127035,182 1671514,156 1671514,156 1671883,019
+65 -0,004 15 6566200,496 1352917,574 1556731,479 6122286,681 1782530,617 3981964,975 1667926,576 1667926,576 1667926,576 3694351,933 3698911,716 5785621,519 10035892,44 18347191,64 10008003,89 10007114,33 6122286,681 1782474,397 1782474,397 1782819,171
+66 -0,004 16 6563287,364 1375245,864 1667926,576 6118892,345 1893514,521 3935961,688 1779121,673 1779121,673 1779121,673 3792687,348 3797097,247 5789408,419 10037762,47 18235996,54 10008003,89 10007114,33 6118892,345 1893461,507 1893461,507 1893784,939
+67 -0,004 17 6561538,746 1405909,739 1779121,673 6116854,723 2004521,188 3892244,872 1890316,771 1890316,771 1890316,771 3891633,259 3895899,068 5794705,52 10039623,18 18124801,44 10008003,89 10007114,33 6116854,723 2004471,02 2004471,02 2004775,403
+68 -0,004 18 6560955,75 1444378,302 1890316,771 6116175,345 2115547,031 3850893,614 2001511,869 2001511,869 2001511,869 3991143,642 3995270,833 5801508,284 10041473,98 18013606,34 10008003,89 10007114,33 6116175,345 2115499,407 2115499,407 2115786,673
+69 -0,004 19 6561538,746 1490047,062 2001511,869 6116854,723 2226589,181 3811986,043 2112706,967 2112706,967 2112706,967 4091176,681 4095170,416 5809810,906 10043314,33 17902411,24 10008003,89 10007114,33 6116854,723 2226543,841 2226543,841 2226815,635
+70 -0,004 20 6563287,364 1542276,375 2112706,967 6118892,345 2337645,309 3775598,779 2223902,066 2223902,066 2223902,066 4191694,318 4195559,468 5819606,339 10045143,64 17791216,15 10008003,89 10007114,33 6118892,345 2337602,033 2337602,033 2337859,766
+71 -0,004 21 6566200,496 1600423,887 2223902,066 6122286,681 2448713,512 3741806,349 2335097,165 2335097,165 2335097,165 4292661,863 4296403,023 5830886,315 10046961,38 17680021,05 10008003,89 10007114,33 6122286,681 2448672,108 2448672,108 2448916,997
+72 -0,004 22 6570276,299 1663869,042 2335097,165 6127035,182 2559792,216 3710680,568 2446292,264 2446292,264 2446292,264 4394047,643 4397669,147 5843641,38 10048766,98 17568825,95 10008003,89 10007114,33 6127035,182 2559752,516 2559752,516 2559985,623
+73 -0,004 23 6575512,196 1732029,554 2446292,264 6133134,296 2670880,106 3682289,906 2557487,364 2557487,364 2557487,364 4495822,697 4499328,631 5857860,928 10050559,9 17457630,85 10008003,89 10007114,33 6133134,296 2670841,966 2670841,966 2671064,217
+74 -0,004 24 6581904,888 1804370,9 2557487,364 6140579,472 2781976,081 3656698,841 2668682,463 2668682,463 2668682,463 4597960,494 4601354,718 5873533,24 10052339,59 17346435,75 10008003,89 10007114,33 6140579,472 2781939,371 2781939,371 2782151,584
+75 -0,004 25 6589450,361 1880410,371 2668682,463 6149365,181 2893079,205 3633967,211 2779877,563 2779877,563 2779877,563 4700436,7 4703722,853 5890645,522 10054105,5 17235240,65 10008003,89 10007114,33 6149365,181 2893043,813 2893043,813 2893246,708
+76 -0,004 26 6598143,893 1959717,276 2779877,563 6159484,926 3004188,683 3614149,583 2891072,662 2891072,662 2891072,662 4803228,955 4806410,473 5909183,957 10055857,11 17124045,55 10008003,89 10007114,33 6159484,926 3004154,507 3004154,507 3004348,728
+77 -0,004 27 6607980,07 2041910,662 2891072,662 6170931,273 3115303,832 3597294,651 3002267,762 3002267,762 3002267,762 4906316,683 4909396,811 5929133,744 10057593,86 17012850,45 10008003,89 10007114,33 6170931,273 3115270,781 3115270,781 3115456,901
+78 -0,004 28 6618952,795 2126655,59 3002267,762 6183695,864 3226424,064 3583444,67 3113462,862 3113462,862 3113462,862 5009680,921 5012662,723 5950479,156 10059315,25 16901655,35 10008003,89 10007114,33 6183695,864 3226392,057 3226392,057 3226570,589
+79 -0,004 29 6631055,309 2213658,745 3113462,862 6197769,448 3337548,867 3572634,959 3224657,962 3224657,962 3224657,962 5113304,168 5116190,538 5973203,584 10061020,74 16790460,25 10008003,89 10007114,33 6197769,448 3337517,831 3337517,831 3337689,237
+80 -0,004 30 6644280,201 2302663,864 3224657,962 6213141,909 3448677,797 3564893,463 3335853,062 3335853,062 3335853,062 5217170,244 5219963,918 5997289,596 10062709,81 16679265,15 10008003,89 10007114,33 6213141,909 3448647,666 3448647,666 3448812,364
+81 -0,004 31 6658619,431 2393447,304 3335853,062 6229802,296 3559810,464 3560240,404 3447048,162 3447048,162 3447048,162 5321264,172 5323967,736 6022718,987 10064381,95 16568070,05 10008003,89 10007114,33 6229802,296 3559781,179 3559781,179 3559939,546
+82 -0,004 32 6674064,346 2485813,915 3447048,162 6247738,854 3670946,526 3558688,018 3558243,263 3558243,263 3558243,263 5425572,068 5428187,968 6049472,837 10066036,65 16456874,95 10008003,89 10007114,33 6247738,854 3670918,032 3670918,032 3671070,411
+83 -0,004 33 6690605,702 2579593,31 3558243,263 6266939,057 3782085,681 3560240,404 3669438,363 3669438,363 3669438,363 5530081,043 5532611,59 6077531,564 10067673,4 16345679,85 10008003,89 10007114,33 6266939,057 3782057,927 3782057,927 3782204,633
+84 -0,004 34 6708233,683 2674636,549 3669438,363 6287389,649 3893227,66 3564893,463 3780633,463 3780633,463 3780633,463 5634779,111 5637226,495 6106874,981 10069291,71 16234484,75 10008003,89 10007114,33 6287389,649 3893200,602 3893200,602 3893341,918
+85 -0,004 35 6726937,925 2770813,237 3780633,463 6309076,672 4004372,226 3572634,959 3891828,563 3891828,563 3891828,563 5739655,116 5742021,408 6137482,351 10070891,09 16123289,65 10008003,89 10007114,33 6309076,672 4004345,821 4004345,821 4004482,01
+86 -0,004 36 6746707,539 2868008,998 3891828,563 6331985,512 4115519,165 3583444,67 4003023,664 4003023,664 4003023,664 5844698,656 5846985,817 6169332,439 10072471,04 16012094,55 10008003,89 10007114,33 6331985,512 4115493,375 4115493,375 4115624,677
+87 -0,004 37 6767531,134 2966123,296 4003023,664 6356100,932 4226668,288 3597294,651 4114218,764 4114218,764 4114218,764 5949900,021 5952109,906 6202403,569 10074031,08 15900899,45 10008003,89 10007114,33 6356100,932 4226643,078 4226643,078 4226769,713
+88 -0,004 38 6789396,839 3065067,563 4114218,764 6381407,114 4337819,423 3614149,583 4225413,865 4225413,865 4225413,865 6055250,132 6057384,499 6236673,677 10075570,75 15789704,35 10008003,89 10007114,33 6381407,114 4337794,759 4337794,759 4337916,931
+89 -0,004 39 6812292,331 3164763,585 4225413,865 6407887,696 4448972,415 3633967,211 4336608,965 4336608,965 4336608,965 6160740,492 6162801,005 6272120,356 10077089,57 15678509,25 10008003,89 10007114,33 6407887,696 4448948,268 4448948,268 4449066,165
+90 -0,004 40 6836204,859 3265142,127 4336608,965 6435525,812 4560127,127 3656698,841 4447804,066 4447804,066 4447804,066 6266363,135 6268351,371 6308720,916 10078587,07 15567314,15 10008003,89 10007114,33 6435525,812 4560103,468 4560103,468 4560217,264
+91 -0,004 41 6861121,267 3366141,752 4447804,066 6464304,134 4671283,431 3682289,906 4558999,166 4558999,166 4558999,166 6372110,582 6374028,034 6346452,42 10080062,8 15456119,05 10008003,89 10007114,33 6464304,134 4671260,234 4671260,234 4671370,09
+92 -0,004 42 6887028,019 3467707,805 4558999,166 6494204,909 4782441,214 3710680,568 4670194,267 4670194,267 4670194,267 6477975,806 6479823,889 6385291,742 10081516,32 15344923,95 10008003,89 10007114,33 6494204,909 4782418,454 4782418,454 4782524,52
+93 -0,004 43 6913911,228 3569791,547 4670194,267 6525209,995 4893600,371 3741806,349 4781389,367 4781389,367 4781389,367 6583952,193 6585732,245 6425215,601 10082947,18 15233728,84 10008003,89 10007114,33 6525209,995 4893578,025 4893578,025 4893680,439
+94 -0,004 44 6941756,676 3672349,408 4781389,367 6557300,907 5004760,806 3775598,779 4892584,468 4892584,468 4892584,468 6690033,507 6691746,798 6466200,609 10084354,94 15122533,74 10008003,89 10007114,33 6557300,907 5004738,854 5004738,854 5004837,746
+95 -0,004 45 6970549,842 3775342,347 4892584,468 6590458,843 5115922,434 3811986,043 5003779,569 5003779,569 5003779,569 6796213,866 6797861,596 6508223,311 10085739,17 15011338,64 10008003,89 10007114,33 6590458,843 5115900,855 5115900,855 5115996,346
+96 -0,004 46 7000275,926 3878735,297 5003779,569 6624664,732 5227085,175 3850893,614 5114974,669 5114974,669 5114974,669 6902487,709 6904071,016 6551260,219 10087099,46 14900143,54 10008003,89 10007114,33 6624664,732 5227063,95 5227063,95 5227156,152
+97 -0,004 47 7030919,869 3982496,687 5114974,669 6659899,262 5338248,955 3892244,872 5226169,77 5226169,77 5226169,77 7008849,774 7010369,734 6595287,849 10088435,39 14788948,44 10008003,89 10007114,33 6659899,262 5338228,067 5338228,067 5338317,084
+98 -0,004 48 7062466,384 4086598,031 5226169,77 6696142,915 5449413,707 3935961,688 5337364,87 5337364,87 5337364,87 7115295,076 7116752,706 6640282,755 10089746,54 14677753,34 10008003,89 10007114,33 6696142,915 5449393,138 5449393,138 5449479,07
+99 -0,004 49 7094899,97 4191013,571 5337364,87 6733376,004 5560579,369 3981964,975 5448559,971 5448559,971 5448559,971 7221818,882 7223215,144 6686221,56 10091032,53 14566558,24 10008003,89 10007114,33 6733376,004 5560559,104 5560559,104 5560642,043
+100 -0,004 50 7128204,944 4295719,96 5448559,971 6771578,7 5671745,883 4030175,193 5559755,072 5559755,072 5559755,072 7328416,694 7329752,498 6733080,982 10092292,96 14455363,14 10008003,89 10007114,33 6771578,7 5671725,908 5671725,908 5671805,939
+101 -0,004 51 7162365,453 4400696 5559755,072 6810731,064 5782913,197 4080512,812 5670950,173 5670950,173 5670950,173 7435084,233 7436360,438 6780837,862 10093527,44 14344168,04 10008003,89 10007114,33 6810731,064 5782893,498 5782893,498 5782970,702
+102 -0,004 52 7197365,503 4505922,397 5670950,173 6850813,079 5894081,262 4132898,728 5782145,273 5782145,273 5782145,273 7541817,42 7543034,834 6829469,189 10094735,6 14232972,94 10008003,89 10007114,33 6850813,079 5894061,824 5894061,824 5894136,277
+103 -0,004 53 7233188,974 4611381,562 5782145,273 6891804,671 6005250,031 4187254,632 5893340,374 5893340,374 5893340,374 7648612,36 7649771,748 6878952,119 10095917,07 14121777,84 10008003,89 10007114,33 6891804,671 6005230,842 6005230,842 6005302,616
+104 -0,004 54 7269819,642 4717057,423 5893340,374 6933685,743 6116419,462 4243503,328 6004535,475 6004535,475 6004535,475 7755465,331 7756567,41 6929263,999 10097071,5 14010582,74 10008003,89 10007114,33 6933685,743 6116400,511 6116400,511 6116469,672
+105 -0,004 55 7307241,197 4822935,27 6004535,475 6976436,191 6227589,516 4301569,009 6115730,576 6115730,576 6115730,576 7862372,767 7863418,213 6980382,381 10098198,52 13899387,64 10008003,89 10007114,33 6976436,191 6227570,791 6227570,791 6227637,402
+106 -0,004 56 7345437,261 4929001,615 6115730,576 7020035,933 6338760,155 4361377,49 6226925,676 6226925,676 6226925,676 7969331,251 7970320,698 7032285,037 10099297,8 13788192,54 10008003,89 10007114,33 7020035,933 6338741,645 6338741,645 6338805,766
+107 -0,004 57 7384391,404 5035244,065 6226925,676 7064464,928 6449931,346 4422856,399 6338120,777 6338120,777 6338120,777 8076337,498 8077271,541 7084949,979 10100369 13676997,43 10008003,89 10007114,33 7064464,928 6449913,04 6449913,04 6449974,726
+108 -0,004 58 7424087,161 5141651,217 6338120,777 7109703,198 6561103,055 4485935,327 6449315,878 6449315,878 6449315,878 8183388,348 8184267,543 7138355,465 10101411,79 13565802,33 10008003,89 10007114,33 7109703,198 6561084,944 6561084,944 6561144,247
+109 -0,004 59 7464508,047 5248212,558 6449315,878 7155730,841 6672275,252 4550545,951 6560510,979 6560510,979 6560510,979 8290480,757 8291305,622 7192480,011 10102425,86 13454607,23 10008003,89 10007114,33 7155730,841 6672257,326 6672257,326 6672314,296
+110 -0,004 60 7505637,571 5354918,38 6560510,979 7202528,054 6783447,909 4616622,121 6671706,08 6671706,08 6671706,08 8397611,784 8398382,801 7247302,404 10103410,9 13343412,13 10008003,89 10007114,33 7202528,054 6783430,159 6783430,159 6783484,842
+111 -0,004 61 7547459,248 5461759,704 6671706,08 7250075,146 6894620,998 4684099,917 6782901,18 6782901,18 6782901,18 8504778,585 8505496,201 7302801,701 10104366,61 13232217,03 10008003,89 10007114,33 7250075,146 6894603,416 6894603,416 6894655,856
+112 -0,004 62 7589956,616 5568728,213 6782901,18 7298352,552 7005794,495 4752917,693 6894096,281 6894096,281 6894096,281 8611978,405 8612643,033 7358957,244 10105292,69 13121021,93 10008003,89 10007114,33 7298352,552 7005777,071 7005777,071 7005827,309
+113 -0,004 63 7633113,243 5675816,188 6894096,281 7347340,845 7116968,375 4823016,082 7005291,382 7005291,382 7005291,382 8719208,567 8719820,588 7415748,658 10106188,86 13009826,83 10008003,89 10007114,33 7347340,845 7116951,102 7116951,102 7116999,177
+114 -0,004 64 7676912,738 5783016,456 7005291,382 7397020,75 7228142,616 4894338 7116486,483 7116486,483 7116486,483 8826466,47 8827026,232 7473155,858 10107054,86 12898631,73 10008003,89 10007114,33 7397020,75 7228125,487 7228125,487 7228171,434
+115 -0,004 65 7721338,765 5890322,341 7116486,483 7447373,15 7339317,196 4966828,625 7227681,584 7227681,584 7227681,584 8933749,578 8934257,397 7531159,048 10107890,41 12787436,63 10008003,89 10007114,33 7447373,15 7339300,203 7339300,203 7339344,057
+116 -0,004 66 7766375,048 5997727,619 7227681,584 7498379,099 7450492,096 5040435,367 7338876,685 7338876,685 7338876,685 9041055,414 9041511,576 7589738,726 10108695,26 12676241,53 10008003,89 10007114,33 7498379,099 7450475,23 7450475,23 7450517,024
+117 -0,004 67 7812005,38 6105226,48 7338876,685 7550019,828 7561667,294 5115107,822 7450071,785 7450071,785 7450071,785 9148381,557 9148786,317 7648875,679 10109469,17 12565046,43 10008003,89 10007114,33 7550019,828 7561650,551 7561650,551 7561690,314
+118 -0,004 68 7858213,634 6212813,492 7450071,785 7602276,751 7672842,775 5190797,724 7561266,886 7561266,886 7561266,886 9255725,631 9256079,214 7708550,986 10110211,9 12453851,33 10008003,89 10007114,33 7602276,751 7672826,145 7672826,145 7672863,907
+119 -0,004 69 7904983,764 6320483,568 7561266,886 7655131,473 7784018,518 5267458,886 7672461,987 7672461,987 7672461,987 9363085,3 9363387,903 7768746,015 10110923,23 12342656,22 10008003,89 10007114,33 7655131,473 7784001,997 7784001,997 7784037,783
+120 -0,004 70 7952299,816 6428231,938 7672461,987 7708565,791 7895194,509 5345047,138 7783657,088 7783657,088 7783657,088 9470458,268 9470710,058 7829442,421 10111602,93 12231461,12 10008003,89 10007114,33 7708565,791 7895178,09 7895178,09 7895211,924
+121 -0,004 71 8000145,93 6536054,123 7783657,088 7762561,7 8006370,73 5423520,258 7894852,189 7894852,189 7894852,189 9577842,267 9578043,383 7890622,138 10112250,8 12120266,02 10008003,89 10007114,33 7762561,7 8006354,407 8006354,407 8006386,313
+122 -0,004 72 8048506,347 6643945,912 7894852,189 7817101,395 8117547,167 5502837,903 8006047,29 8006047,29 8006047,29 9685235,054 9685385,607 7952267,383 10112866,64 12009070,92 10008003,89 10007114,33 7817101,395 8117530,933 8117530,933 8117560,934
+123 -0,004 73 8097365,411 6751903,337 8006047,29 7872167,276 8228723,804 5582961,538 8117242,391 8117242,391 8117242,391 9792634,407 9792734,48 8014360,646 10113450,27 11897875,82 10008003,89 10007114,33 7872167,276 8228707,654 8228707,654 8228735,769
+124 -0,004 74 8146707,574 6859922,655 8117242,391 7927741,942 8339900,628 5663854,36 8228437,492 8228437,492 8228437,492 9900038,118 9900087,766 8076884,683 10114001,51 11786680,72 10008003,89 10007114,33 7927741,942 8339884,555 8339884,555 8339910,803
+125 -0,004 75 8196517,397 6968000,334 8228437,492 7983808,198 8451077,624 5745481,231 8339632,592 8339632,592 8339632,592 10007443,99 10007443,24 8139822,516 10114520,18 11675485,62 10008003,89 10007114,33 7983808,198 8451061,624 8451061,624 8451086,021
+126 -0,004 76 8246779,555 7076133,028 8339632,592 8040349,052 8562254,78 5827808,6 8450827,693 8450827,693 8450827,693 10114849,83 10114798,68 8203157,423 10115006,14 11564290,52 10008003,89 10007114,33 8040349,052 8562238,846 8562238,846 8562261,409
+127 -0,004 77 8297478,834 7184317,572 8450827,693 8097347,713 8673432,082 5910804,435 8562022,794 8562022,794 8562022,794 10222253,44 10222151,87 8266872,932 10115459,23 11453095,42 10008003,89 10007114,33 8097347,713 8673416,21 8673416,21 8673436,953
+128 -0,004 78 8348600,136 7292550,96 8562022,794 8154787,592 8784609,517 5994438,151 8673217,895 8673217,895 8673217,895 10329652,63 10329500,57 8330952,813 10115879,31 11341900,32 10008003,89 10007114,33 8154787,592 8784593,702 8784593,702 8784612,639
+129 -0,004 79 8400128,48 7400830,336 8673217,895 8212652,297 8895787,075 6078680,542 8784412,996 8784412,996 8784412,996 10437045,18 10436842,57 8395381,074 10116266,26 11230705,22 10008003,89 10007114,33 8212652,297 8895771,311 8895771,311 8895788,453
+130 -0,004 80 8452048,997 7509152,983 8784412,996 8270925,633 9006964,743 6163503,714 8895608,097 8895608,097 8895608,097 10544428,89 10544175,59 8460141,951 10116619,96 11119510,12 10008003,89 10007114,33 8270925,633 9006949,024 9006949,024 9006964,384
+131 -0,004 81 8504346,936 7617516,311 8895608,097 8329591,596 9118142,509 6248881,023 9006803,198 9006803,198 9006803,198 10651801,49 10651497,39 8525219,897 10116940,3 11008315,01 10008003,89 10007114,33 8329591,596 9118126,832 9118126,832 9118140,417
+132 -0,004 82 8557007,658 7725917,846 9006803,198 8388634,37 9229320,363 6334787,006 9117998,299 9117998,299 9117998,299 10759160,73 10758805,64 8590599,581 10117227,18 10897119,91 10008003,89 10007114,33 8388634,37 9229304,721 9229304,721 9229316,542
+133 -0,004 83 8610016,638 7834355,225 9117998,299 8448038,327 9340498,292 6421197,328 9229193,4 9229193,4 9229193,4 10866504,31 10866098,04 8656265,875 10117480,51 10785924,81 10008003,89 10007114,33 8448038,327 9340482,682 9340482,682 9340492,745
+134 -0,004 84 8663359,465 7942826,181 9229193,4 8507788,015 9451676,287 6508088,72 9340388,501 9340388,501 9340388,501 10973829,89 10973372,21 8722203,845 10117700,23 10674729,71 10008003,89 10007114,33 8507788,015 9451660,703 9451660,703 9451669,014
+135 -0,004 85 8717021,833 8051328,543 9340388,501 8567868,161 9562854,336 6595438,922 9451583,601 9451583,601 9451583,601 11081135,09 11080625,75 8788398,745 10117886,25 10563534,61 10008003,89 10007114,33 8567868,161 9562838,773 9562838,773 9562845,339
+136 -0,004 86 8770989,548 8159860,222 9451583,601 8628263,658 9674032,43 6683226,636 9562778,702 9562778,702 9562778,702 11188417,49 11187856,21 8854836,006 10118038,53 10452339,51 10008003,89 10007114,33 8628263,658 9674016,883 9674016,883 9674021,707
+137 -0,004 87 8825248,519 8268419,207 9562778,702 8688959,567 9785210,556 6771431,466 9673973,803 9673973,803 9673973,803 11295674,62 11295061,07 8921501,229 10118157,02 10341144,41 10008003,89 10007114,33 8688959,567 9785195,022 9785195,022 9785198,107
+138 -0,004 88 8879784,756 8377003,559 9673973,803 8749941,108 9896388,706 6860033,878 9785168,904 9785168,904 9785168,904 11402903,94 11402237,78 8988380,173 10118241,68 10229949,31 10008003,89 10007114,33 8749941,108 9896373,179 9896373,179 9896374,527
+139 -0,004 89 8934584,37 8485611,404 9785168,904 8811193,651 10007566,87 6949015,146 9896364,005 9896364,005 9896364,005 11510102,84 11509383,68 9055458,749 10118292,49 10118754,21 10008003,89 10007114,33 8811193,651 10007551,34 10007551,34 10007550,96
+140 -0,004 90 8989633,568 8594240,929 9896364,005 8872702,717 10118745,03 7038357,312 10007559,11 10007559,11 10007559,11 11617268,64 11616496,08 9122723,011 10118309,43 10007559,11 10008003,89 10007114,33 8872702,717 10118729,51 10118729,51 10118727,38
+141 -0,004 91 9044918,648 8702890,375 10007559,11 8934453,964 10229923,19 7128043,144 10118754,21 10118754,21 10118754,21 11724398,6 11723572,19 9190159,142 10118292,49 9896364,005 10008003,89 10007114,33 8934453,964 10229907,66 10229907,66 10229903,79
+142 -0,004 92 9100425,997 8811558,03 10118754,21 8996433,187 10341101,33 7218056,093 10229949,31 10229949,31 10229949,31 11831489,86 11830609,11 9257753,452 10118241,68 9785168,904 10008003,89 10007114,33 8996433,187 10341085,78 10341085,78 10341080,18
+143 -0,004 93 9156142,088 8920242,231 10229949,31 9058626,306 10452279,44 7308380,254 10341144,41 10341144,41 10341144,41 11938539,48 11937603,88 9325492,361 10118157,02 9673973,803 10008003,89 10007114,33 9058626,306 10452263,88 10452263,88 10452256,53
+144 -0,004 94 9212053,473 9028941,354 10341144,41 9121019,361 10563457,51 7399000,334 10452339,51 10452339,51 10452339,51 12045544,42 12044553,41 9393362,396 10118038,53 9562778,702 10008003,89 10007114,33 9121019,361 10563441,93 10563441,93 10563432,83
+145 -0,004 95 9268146,78 9137653,808 10452339,51 9183598,509 10674635,53 7489901,612 10563534,61 10563534,61 10563534,61 12152501,51 12151454,49 9461350,176 10117886,25 9451583,601 10008003,89 10007114,33 9183598,509 10674619,92 10674619,92 10674609,08
+146 -0,004 96 9324408,709 9246378,039 10563534,61 9246350,009 10785813,49 7581069,909 10674729,71 10674729,71 10674729,71 12259407,47 12258303,81 9529442,41 10117700,23 9340388,501 10008003,89 10007114,33 9246350,009 10785797,85 10785797,85 10785785,25
+147 -0,004 97 9380826,029 9355112,516 10674729,71 9309260,221 10896991,38 7672491,554 10785924,81 10785924,81 10785924,81 12366258,88 12365097,9 9597625,877 10117480,51 9229193,4 10008003,89 10007114,33 9309260,221 10896975,7 10896975,7 10896961,33
+148 -0,004 98 9437385,568 9463855,737 10785924,81 9372315,599 11008169,19 7764153,358 10897119,91 10897119,91 10897119,91 12473052,17 12471833,16 9665887,428 10117227,18 9117998,299 10008003,89 10007114,33 9372315,599 11008153,47 11008153,47 11008137,32
+149 -0,004 99 9494074,214 9572606,217 10897119,91 9435502,676 11119346,9 7856042,578 11008315,01 11008315,01 11008315,01 12579783,61 12578505,8 9734213,969 10116940,3 9006803,198 10008003,89 10007114,33 9435502,676 11119331,14 11119331,14 11119313,21
+150 -0,004 100 9550878,909 9681362,491 11008315,01 9498808,068 11230524,51 7948146,899 11119510,12 11119510,12 11119510,12 12686449,31 12685111,89 9802592,451 10116619,96 8895608,097 10008003,89 10007114,33 9498808,068 11230508,69 11230508,69 11230488,97
+151 -0,004 101 9607786,639 9790123,103 11119510,12 9562218,456 11341702 8040454,4 11230705,22 11230705,22 11230705,22 12793045,19 12791647,3 9871009,867 10116266,26 8784412,996 10008003,89 10007114,33 9562218,456 11341686,13 11341686,13 11341664,59
+152 -0,004 102 9664784,435 9898886,612 11230705,22 9625720,584 11452879,37 8132953,531 11341900,32 11341900,32 11341900,32 12899566,95 12898107,69 9939453,236 10115879,31 8673217,895 10008003,89 10007114,33 9625720,584 11452863,43 11452863,43 11452840,07
+153 -0,004 103 9721859,365 10007651,58 11341900,32 9689301,252 11564056,59 8225633,094 11453095,42 11453095,42 11453095,42 13006010,11 13004488,5 10007909,6 10115459,23 8562022,794 10008003,89 10007114,33 9689301,252 11564040,59 11564040,59 11564015,39
+154 -0,004 104 9778998,529 10116416,58 11453095,42 9752947,304 11675233,66 8318482,213 11564290,52 11564290,52 11564290,52 13112369,93 13110784,96 10076366 10115006,14 8450827,693 10008003,89 10007114,33 9752947,304 11675217,58 11675217,58 11675190,53
+155 -0,004 105 9836189,054 10225180,17 11564290,52 9816645,624 11786410,56 8411490,318 11675485,62 11675485,62 11675485,62 13218641,41 13216992,01 10144809,49 10114520,18 8339632,592 10008003,89 10007114,33 9816645,624 11786394,41 11786394,41 11786365,49
+156 -0,004 106 9893418,089 10333940,91 11675485,62 9880383,126 11897587,28 8504647,119 11786680,72 11786680,72 11786680,72 13324819,29 13323104,32 10213227,11 10114001,51 8228437,492 10008003,89 10007114,33 9880383,126 11897571,04 11897571,04 11897540,23
+157 -0,004 107 9950672,798 10442697,38 11786680,72 9944146,75 12008763,81 8597942,592 11897875,82 11897875,82 11897875,82 13430898,01 13429116,26 10281605,87 10113450,27 8117242,391 10008003,89 10007114,33 9944146,75 12008747,48 12008747,48 12008714,76
+158 -0,004 108 10007940,36 10551448,1 11897875,82 10007923,45 12119940,12 8691366,954 12009070,92 12009070,92 12009070,92 13536871,68 13535021,88 10349932,78 10112866,64 8006047,29 10008003,89 10007114,33 10007923,45 12119923,7 12119923,7 12119889,05
+159 -0,004 109 10065207,95 10660191,62 12009070,92 10071700,18 12231116,21 8784910,648 12120266,02 12120266,02 12120266,02 13642734,05 13640814,87 10418194,77 10112250,8 7894852,189 10008003,89 10007114,33 10071700,18 12231099,69 12231099,69 12231063,08
+160 -0,004 110 10122462,75 10768926,45 12120266,02 10135463,92 12342292,07 8878564,323 12231461,12 12231461,12 12231461,12 13748478,52 13746488,54 10486378,77 10111602,93 7783657,088 10008003,89 10007114,33 10135463,92 12342275,44 12342275,44 12342236,84
+161 -0,004 111 10179691,94 10877651,09 12231461,12 10199201,6 12453467,66 8972318,82 12342656,22 12342656,22 12342656,22 13854098,03 13852035,76 10554471,61 10110923,23 7672461,987 10008003,89 10007114,33 10199201,6 12453450,92 12453450,92 12453410,32
+162 -0,004 112 10236882,68 10986364,01 12342656,22 10262900,18 12564642,98 9066165,151 12453851,33 12453851,33 12453851,33 13959585,12 13957448,98 10622460,07 10110211,9 7561266,886 10008003,89 10007114,33 10262900,18 12564626,12 12564626,12 12564583,48
+163 -0,004 113 10294022,12 11095063,66 12453851,33 10326546,56 12675818,01 9160094,486 12565046,43 12565046,43 12565046,43 14064931,81 14062720,14 10690330,87 10109469,17 7450071,785 10008003,89 10007114,33 10326546,56 12675801,02 12675801,02 12675756,31
+164 -0,004 114 10351097,39 11203748,44 12565046,43 10390127,63 12786992,73 9254098,135 12676241,53 12676241,53 12676241,53 14170129,6 14167840,63 10758070,63 10108695,26 7338876,685 10008003,89 10007114,33 10390127,63 12786975,6 12786975,6 12786928,79
+165 -0,004 115 10408095,58 11312416,73 12676241,53 10453630,23 12898167,11 9348167,536 12787436,63 12787436,63 12787436,63 14275169,39 14272801,27 10825665,87 10107890,41 7227681,584 10008003,89 10007114,33 10453630,23 12898149,84 12898149,84 12898100,9
+166 -0,004 116 10465003,77 11421066,88 12787436,63 10517041,16 13009341,14 9442294,237 12898631,73 12898631,73 12898631,73 14380041,48 14377592,25 10893103,01 10107054,86 7116486,483 10008003,89 10007114,33 10517041,16 13009323,72 13009323,72 13009272,61
+167 -0,004 117 10521808,99 11529697,16 12898631,73 10580347,17 13120514,8 9536469,883 13009826,83 13009826,83 13009826,83 14484735,44 14482203,03 10960368,35 10106188,86 7005291,382 10008003,89 10007114,33 10580347,17 13120497,21 13120497,21 13120443,89
+168 -0,004 118 10578498,21 11638305,83 13009826,83 10643534,94 13231688,05 9630686,199 13121021,93 13121021,93 13121021,93 14589240,12 14586622,34 11027448,1 10105292,69 6894096,281 10008003,89 10007114,33 10643534,94 13231670,3 13231670,3 13231614,73
+169 -0,004 119 10635058,39 11746891,07 13121021,93 10706591,08 13342860,89 9724934,981 13232217,03 13232217,03 13232217,03 14693543,53 14690838,06 11094328,28 10104366,61 6782901,18 10008003,89 10007114,33 10706591,08 13342842,96 13342842,96 13342785,09
+170 -0,004 120 10691476,41 11855451 13232217,03 10769502,13 13454033,27 9819208,078 13343412,13 13343412,13 13343412,13 14797632,75 14794837,16 11160994,83 10103410,9 6671706,08 10008003,89 10007114,33 10769502,13 13454015,16 13454015,16 13453954,95
+171 -0,004 121 10747739,1 11963983,69 13343412,13 10832254,53 13565205,17 9913497,38 13454607,23 13454607,23 13454607,23 14901493,91 14898605,59 11227433,49 10102425,86 6560510,979 10008003,89 10007114,33 10832254,53 13565186,87 13565186,87 13565124,27
+172 -0,004 122 10803833,23 12072487,14 13454607,23 10894834,65 13676376,57 10007794,8 13565802,33 13565802,33 13565802,33 15005112 15002128,23 11293629,87 10101411,79 6449315,878 10008003,89 10007114,33 10894834,65 13676358,06 13676358,06 13676293,01
+173 -0,004 123 10859745,49 12180959,25 13565802,33 10957228,76 13787547,42 10102092,28 13676997,43 13676997,43 13676997,43 15108470,84 15105388,72 11359569,4 10100369 6338120,777 10008003,89 10007114,33 10957228,76 13787528,7 13787528,7 13787461,15
+174 -0,004 124 10915462,52 12289397,85 13676997,43 11019422,99 13898717,7 10196381,74 13788192,54 13788192,54 13788192,54 15211552,91 15208369,38 11425237,32 10099297,8 6226925,676 10008003,89 10007114,33 11019422,99 13898698,75 13898698,75 13898628,64
+175 -0,004 125 10970970,86 12397800,68 13788192,54 11081403,4 14009887,37 10290655,09 13899387,64 13899387,64 13899387,64 15314339,24 15311051,05 11490618,72 10098198,52 6115730,576 10008003,89 10007114,33 11081403,4 14009868,18 14009868,18 14009795,45
+176 -0,004 126 11026256,99 12506165,37 13899387,64 11143155,9 14121056,39 10384904,24 14010582,74 14010582,74 14010582,74 15416809,24 15413412,96 11555698,45 10097071,5 6004535,475 10008003,89 10007114,33 11143155,9 14121036,95 14121036,95 14120961,53
+177 -0,004 127 11081307,3 12614489,47 14010582,74 11204666,29 14232224,71 10479121,02 14121777,84 14121777,84 14121777,84 15518940,52 15515432,51 11620461,19 10095917,07 5893340,374 10008003,89 10007114,33 11204666,29 14232205,01 14232205,01 14232126,83
+178 -0,004 128 11136108,07 12722770,37 14121777,84 11265920,23 14343392,3 10573297,23 14232972,94 14232972,94 14232972,94 15620708,75 15617085,14 11684891,39 10094735,6 5782145,273 10008003,89 10007114,33 11265920,23 14343372,33 14343372,33 14343291,3
+179 -0,004 129 11190645,53 12831005,37 14232972,94 11326903,23 14454559,11 10667424,61 14344168,04 14344168,04 14344168,04 15722087,36 15718344,07 11748973,28 10093527,44 5670950,173 10008003,89 10007114,33 11326903,23 14454538,84 14454538,84 14454454,89
+180 -0,004 130 11244905,77 12939191,6 14344168,04 11387600,67 14565725,07 10761494,79 14455363,14 14455363,14 14455363,14 15823047,39 15819180,08 11812690,87 10092292,96 5559755,072 10008003,89 10007114,33 11387600,67 14565704,51 14565704,51 14565617,55
+181 -0,004 131 11298874,81 13047326,08 14455363,14 11447997,76 14676890,15 10855499,33 14566558,24 14566558,24 14566558,24 15923557,13 15919561,22 11876027,93 10091032,53 5448559,971 10008003,89 10007114,33 11447997,76 14676869,26 14676869,26 14676779,2
+182 -0,004 132 11352538,55 13155405,63 14566558,24 11508079,56 14788054,26 10949429,65 14677753,34 14677753,34 14677753,34 16023581,88 16019452,48 11938967,99 10089746,54 5337364,87 10008003,89 10007114,33 11508079,56 14788033,04 14788033,04 14787939,77
+183 -0,004 133 11405882,81 13263426,92 14677753,34 11567830,97 14899217,36 11043277,08 14788948,44 14788948,44 14788948,44 16123083,55 16118815,51 12001494,33 10088435,39 5226169,77 10008003,89 10007114,33 11567830,97 14899195,78 14899195,78 14899099,21
+184 -0,004 134 11458893,27 13371386,4 14788948,44 11627236,71 15010379,36 11137032,79 14900143,54 14900143,54 14900143,54 16222020,31 16217608,16 12063589,95 10087099,46 5114974,669 10008003,89 10007114,33 11627236,71 15010357,41 15010357,41 15010257,42
+185 -0,004 135 11511555,52 13479280,36 14900143,54 11686281,34 15121540,19 11230687,78 15011338,64 15011338,64 15011338,64 16320346,1 16315784,04 12125237,63 10085739,17 5003779,569 10008003,89 10007114,33 11686281,34 15121517,84 15121517,84 15121414,31
+186 -0,004 136 11563855,03 13587104,82 15011338,64 11744949,21 15232699,76 11324232,9 15122533,74 15122533,74 15122533,74 16418010,16 16413292,06 12186419,85 10084354,94 4892584,468 10008003,89 10007114,33 11744949,21 15232677 15232677 15232569,79
+187 -0,004 137 11615777,18 13694855,57 15122533,74 11803224,52 15343857,98 11417658,8 15233728,84 15233728,84 15233728,84 16514956,46 16510075,83 12247118,82 10082947,18 4781389,367 10008003,89 10007114,33 11803224,52 15343834,78 15343834,78 15343723,77
+188 -0,004 138 11667307,19 13802528,15 15233728,84 11861091,26 15455014,74 11510955,92 15344923,95 15344923,95 15344923,95 16611123,04 16606073,01 12307316,48 10081516,32 4670194,267 10008003,89 10007114,33 11861091,26 15454991,09 15454991,09 15454876,11
+189 -0,004 139 11718430,21 13910117,78 15344923,95 11918533,23 15566169,94 11604114,48 15456119,05 15456119,05 15456119,05 16706441,26 16701214,62 12366994,48 10080062,8 4558999,166 10008003,89 10007114,33 11918533,23 15566145,8 15566145,8 15566026,69
+190 -0,004 140 11769131,25 14017619,38 15456119,05 11975534,03 15677323,45 11697124,47 15567314,15 15567314,15 15567314,15 16800835,04 16795424,17 12426134,18 10078587,07 4447804,066 10008003,89 10007114,33 11975534,03 15677298,79 15677298,79 15677175,38
+191 -0,004 141 11819395,21 14125027,54 15567314,15 12032077,09 15788475,13 11789975,58 15678509,25 15678509,25 15678509,25 16894219,89 16888616,79 12484716,67 10077089,57 4336608,965 10008003,89 10007114,33 12032077,09 15788449,92 15788449,92 15788322,03
+192 -0,004 142 11869206,88 14232336,44 15678509,25 12088145,6 15899624,84 11882657,25 15789704,35 15789704,35 15789704,35 16986501,88 16980698,19 12542722,73 10075570,75 4225413,865 10008003,89 10007114,33 12088145,6 15899599,05 15899599,05 15899466,46
+193 -0,004 143 11918550,92 14339539,87 15789704,35 12143722,58 16010772,39 11975158,61 15900899,45 15900899,45 15900899,45 17077576,48 17071563,47 12600132,85 10074031,08 4114218,764 10008003,89 10007114,33 12143722,58 16010745,99 16010745,99 16010608,48
+194 -0,004 144 11967411,91 14446631,15 15900899,45 12198790,82 16121917,61 12067468,46 16012094,55 16012094,55 16012094,55 17167327,28 17161095,91 12656927,24 10072471,04 4003023,664 10008003,89 10007114,33 12198790,82 16121890,55 16121890,55 16121747,88
+195 -0,004 145 12015774,28 14553603,13 16012094,55 12253332,92 16233060,28 12159575,26 16123289,65 16123289,65 16123289,65 17255624,53 17249165,49 12713085,81 10070891,09 3891828,563 10008003,89 10007114,33 12253332,92 16233032,53 16233032,53 16232884,44
+196 -0,004 146 12063622,39 14660448,1 16123289,65 12307331,29 16344200,18 12251467,07 16234484,75 16234484,75 16234484,75 17342323,63 17335627,42 12768588,17 10069291,71 3780633,463 10008003,89 10007114,33 12307331,29 16344171,69 16344171,69 16344017,88
+197 -0,004 147 12110940,46 14767157,73 16234484,75 12360768,1 16455337,03 12343131,6 16345679,85 16345679,85 16345679,85 17427263,41 17420320,42 12823413,68 10067673,4 3669438,363 10008003,89 10007114,33 12360768,1 16455307,75 16455307,75 16455147,92
+198 -0,004 148 12157712,65 14873723,08 16345679,85 12413625,37 16566470,55 12434556,09 16456874,95 16456874,95 16456874,95 17510264,34 17503065,05 12877541,39 10066036,65 3558243,263 10008003,89 10007114,33 12413625,37 16566440,42 16566440,42 16566274,21
+199 -0,004 149 12203922,98 14980134,43 16456874,95 12465884,88 16677600,38 12525727,37 16568070,05 16568070,05 16568070,05 17591126,76 17583661,87 12930950,07 10064381,95 3447048,162 10008003,89 10007114,33 12465884,88 16677569,34 16677569,34 16677396,39
+200 -0,004 150 12249555,43 15086381,29 16568070,05 12517528,23 16788726,16 12616631,76 16679265,15 16679265,15 16679265,15 17669628,97 17661889,69 12983618,24 10062709,81 3335853,062 10008003,89 10007114,33 12517528,23 16788694,15 16788694,15 16788514,02
+201 -0,004 151 12294593,84 15192452,26 16679265,15 12568536,84 16899847,43 12707255,08 16790460,25 16790460,25 16790460,25 17745525,57 17737503,89 13035524,17 10061020,74 3224657,962 10008003,89 10007114,33 12568536,84 16899814,38 16899814,38 16899626,61
+202 -0,004 152 12339022,03 15298334,97 16790460,25 12618891,93 17010963,71 12797582,62 16901655,35 16901655,35 16901655,35 17818545,99 17810235,12 13086645,84 10059315,25 3113462,862 10008003,89 10007114,33 12618891,93 17010929,53 17010929,53 17010733,6
+203 -0,004 153 12382823,7 15404015,94 16901655,35 12668574,56 17122074,4 12887599,09 17012850,45 17012850,45 17012850,45 17888393,51 17879788,3 13136961,04 10057593,86 3002267,762 10008003,89 10007114,33 12668574,56 17122039,01 17122039,01 17121834,34
+204 -0,004 154 12425982,52 15509480,47 17012850,45 12717565,61 17233178,84 12977288,58 17124045,55 17124045,55 17124045,55 17954745 17945842,54 13186447,31 10055857,11 2891072,662 10008003,89 10007114,33 12717565,61 17233142,13 17233142,13 17232928,09
+205 -0,004 155 12468482,09 15614712,52 17124045,55 12765845,79 17344276,25 13066634,55 17235240,65 17235240,65 17235240,65 18017251,7 18008051,93 13235081,99 10054105,5 2779877,563 10008003,89 10007114,33 12765845,79 17344238,11 17344238,11 17344013,95
+206 -0,004 156 12510305,99 15719694,5 17235240,65 12813395,69 17455365,7 13155619,76 17346435,75 17346435,75 17346435,75 18075541,49 18066047,9 13282842,25 10052339,59 2668682,463 10008003,89 10007114,33 12813395,69 17455326 17455326 17455090,91
+207 -0,004 157 12551437,75 15824407,15 17346435,75 12860195,72 17566446,1 13244226,27 17457630,85 17457630,85 17457630,85 18129222,96 18119443,37 13329705,05 10050559,9 2557487,364 10008003,89 10007114,33 12860195,72 17566404,7 17566404,7 17566157,74
+208 -0,004 158 12591860,87 15928829,29 17457630,85 12906226,2 17677516,18 13332435,34 17568825,95 17568825,95 17568825,95 18177891,82 18167839,04 13375647,23 10048766,98 2446292,264 10008003,89 10007114,33 12906226,2 17677472,9 17677472,9 17677213,01
+209 -0,004 159 12631558,87 16032937,59 17568825,95 12951467,32 17788574,37 13420227,45 17680021,05 17680021,05 17680021,05 18221139,76 18210832,23 13420645,52 10046961,38 2335097,165 10008003,89 10007114,33 12951467,32 17788529,03 17788529,03 17788254,98
+210 -0,004 160 12670515,26 16136706,33 17680021,05 12995899,17 17899618,81 13507582,2 17791216,15 17791216,15 17791216,15 18258566,08 18248028,35 13464676,53 10045143,64 2223902,066 10008003,89 10007114,33 12995899,17 17899571,18 17899571,18 17899281,54
+211 -0,004 161 12708713,56 16240107,03 17791216,15 13039501,77 18010647,19 13594478,3 17902411,24 17902411,24 17902411,24 18289791,67 18279054,5 13507716,8 10043314,33 2112706,967 10008003,89 10007114,33 13039501,77 18010597,02 18010597,02 18010290,14
+212 -0,004 162 12746137,36 16343108,16 17902411,24 13082255,08 18121656,7 13680893,49 18013606,34 18013606,34 18013606,34 18314474,76 18303574,93 13549742,86 10041473,98 2001511,869 10008003,89 10007114,33 13082255,08 18121603,69 18121603,69 18121277,62
+213 -0,004 163 12782770,25 16445674,69 18013606,34 13124139,01 18232643,81 13766804,5 18124801,44 18124801,44 18124801,44 18332327,29 18321306,94 13590731,19 10039623,18 1890316,771 10008003,89 10007114,33 13124139,01 18232587,59 18232587,59 18232240,02
+214 -0,004 164 12818595,94 16547767,6 18124801,44 13165133,46 18343604,06 13852186,99 18235996,54 18235996,54 18235996,54 18343130,34 18332035,86 13630658,36 10037762,47 1779121,673 10008003,89 10007114,33 13165133,46 18343544,2 18343544,2 18343172,36
+215 -0,004 165 12853598,2 16649343,36 18235996,54 13205218,32 18454531,69 13937015,52 18347191,64 18347191,64 18347191,64 18346746,91 18335627,4 13669500,95 10035892,44 1667926,576 10008003,89 10007114,33 13205218,32 18454467,68 18454467,68 18454068,21
+216 -0,004 166 12887760,9 16750353,28 18347191,64 13244373,51 18565419,24 14021263,43 18458386,73 18458386,73 18458386,73 18343130,34 18332035,86 13707235,68 10034013,63 1556731,479 10008003,89 10007114,33 13244373,51 18565350,42 18565350,42 18564919,21
+217 -0,004 167 12921068,04 16850742,74 18458386,73 13282579,02 18676256,73 14104902,83 18569581,83 18569581,83 18569581,83 18332327,29 18321306,94 13743839,43 10032126,64 1445536,383 10008003,89 10007114,33 13282579,02 18676182,31 18676182,31 18675714,21
+218 -0,004 168 12953503,77 16950450,35 18569581,83 13319814,89 18787030,62 14187904,53 18680776,92 18680776,92 18680776,92 18314474,76 18303574,93 13779289,24 10030232,03 1334341,287 10008003,89 10007114,33 13319814,89 18786949,58 18786949,58 18786438,06
+219 -0,004 169 12985052,4 17049406,92 18680776,92 13356061,3 18897721,96 14270237,92 18791972,02 18791972,02 18791972,02 18289791,67 18279054,5 13813562,43 10028330,38 1223146,193 10008003,89 10007114,33 13356061,3 18897632,99 18897632,99 18897069,63
+220 -0,004 170 13015698,44 17147534,3 18791972,02 13391298,55 19008303,55 14351871 18903167,11 18903167,11 18903167,11 18258566,08 18248028,35 13846636,57 10026422,27 1111951,1 10008003,89 10007114,33 13391298,55 19008204,91 19008204,91 19007578,5
+221 -0,004 171 13045426,57 17244743,98 18903167,11 13425507,13 19118734,76 14432770,19 19014362,2 19014362,2 19014362,2 18221139,76 18210832,23 13878489,61 10024508,28 1000756,009 10008003,89 10007114,33 13425507,13 19118624,06 19118624,06 19117919,34
+222 -0,004 172 13074221,76 17340935,46 19014362,2 13458667,71 19228952,21 14512900,37 19125557,29 19125557,29 19125557,29 18177891,82 18167839,04 13909099,85 10022588,99 889560,9199 10008003,89 10007114,33 13458667,71 19228826,09 19228826,09 19228021,46
+223 -0,004 173 13102069,18 17435994,45 19125557,29 13490761,21 19338851,37 14592224,73 19236752,38 19236752,38 19236752,38 18129222,96 18119443,37 13938446,06 10020664,99 778365,8347 10008003,89 10007114,33 13490761,21 19338704,85 19338704,85 19337768,45
+224 -0,004 174 13128954,32 17529790,6 19236752,38 13521768,84 19448247,09 14670704,74 19347947,46 19347947,46 19347947,46 18075541,49 18066047,9 13966507,48 10018736,86 667170,7548 10008003,89 10007114,33 13521768,84 19448072,4 19448072,4 19446954,48
+225 -0,004 175 13154862,96 17622175,04 19347947,46 13551672,1 19556778,75 14748300,05 19459142,53 19459142,53 19459142,53 18017251,7 18008051,93 13993263,94 10016805,2 555975,6833 10008003,89 10007114,33 13551672,1 19556562,81 19556562,81 19555179,85
+226 -0,004 176 13179781,2 17712977,44 19459142,53 13580452,85 19663644,97 14824968,44 19570337,59 19570337,59 19570337,59 17954745 17945842,54 14018695,84 10014870,58 444780,6267 10008003,89 10007114,33 13580452,85 19663363,52 19663363,52 19661561,29
+227 -0,004 177 13203695,51 17802002,69 19570337,59 13608093,33 19766687,15 14900665,73 19681532,61 19681532,61 19681532,61 17888393,51 17879788,3 14042784,25 10012933,6 333585,5998 10008003,89 10007114,33 13608093,33 19766289,23 19766289,23 19763746,69
+228 -0,004 178 13226592,72 17889027,19 19681532,61 13634576,2 19858182,8 14975345,73 19792727,56 19792727,56 19792727,56 17818545,99 17810235,12 14065510,97 10010994,85 222390,647 10008003,89 10007114,33 13634576,2 19857553,74 19857553,74 19853567,21
+229 -0,004 179 13248460,09 17973794,7 19792727,56 13659884,59 19904367,89 15048960,18 19903922,22 19903922,22 19903922,22 17745525,57 17737503,89 14086858,55 10009054,92 111195,9906 10008003,89 10007114,33 13659884,59 19903478,33 19903478,33 19897918,58
+230 -0,004 180 13269285,29 18056011,89 19903922,22 13684002,14 19858182,8 15121458,66 20014673,43 20014673,43 20014673,43 17669628,97 17661889,69 14106810,39 10007114,39 444,780401 10008003,89 10007114,33 13684002,14 19857553,74 19857553,74 19853567,21
+231 1 1 6616998,631 1802230,908 111195,1012 6199731,305 222356,3278 4737290,961 157249,6281 157249,6281 157249,6281 2502396,932 2510125,377 5780469,209 10120677,8 19857868,58 9896364,005 10118754,21 6199731,305 314499,2562 314499,2562 318454,5485
+232 2 2 6488454,864 1645089,172 248629,7051 6068688,46 351517,2925 4580630,66 314475,2987 314475,2987 314475,2987 2659604,169 2667324,155 5653200,605 10233795,92 19700642,91 9785168,904 10229949,31 6068688,46 471724,9241 471724,9241 475672,7783
+233 3 3 6360668,664 1488018,069 400863,2537 5938459,261 497016,924 4424038,172 471653,0288 471653,0288 471653,0288 2816767,439 2824480,271 5526991,391 10346912,9 19543465,18 9673973,802 10341144,41 5938459,261 628902,635 628902,635 632847,6364
+234 4 3 6250896,665 1414799,079 497198,7813 5829206,616 555595,928 4339320,116 555812,8141 555812,8141 555812,8141 2897403,955 2905335,234 5416910,521 10458091,05 19459305,4 9562778,701 10452339,51 5829206,616 711812,4839 711812,4839 716164,8262
+235 5 3 6141158,077 1346700,128 598699,0435 5720006,385 628519,155 4255623,327 648155,2615 648155,2615 648155,2615 2979874,321 2988007,303 5306864,158 10569269,15 19366962,95 9451583,6 10563534,61 5720006,385 801575,8867 801575,8867 806211,1301
+236 6 3 6031454,984 1284535,957 703130,9174 5610861,929 711388,9706 4173010,731 745646,4517 745646,4517 745646,4517 3064029,828 3072349,159 5196854,642 10680447,2 19269471,76 9340388,499 10674729,71 5610861,929 896135,6706 896135,6706 900971,1763
+237 7 3 5921789,615 1229207,467 809360,3904 5501776,866 801124,5902 4091549,448 846509,3133 846509,3133 846509,3133 3149734,757 3158226,375 5086884,512 10791625,19 19168608,9 9229193,398 10785924,81 5501776,866 994124,0676 994124,0676 999104,6074
+238 8 3 5812164,356 1181675,372 916762,7785 5392755,092 895664,7245 4011311,033 949670,1358 949670,1358 949670,1358 3236865,365 3245516,407 4976956,523 10902803,11 19065448,08 9117998,297 10897119,92 5392755,092 1094620,662 1094620,662 1099708,68
+239 9 3 5702581,769 1142912,926 1024969,424 5283800,812 993638,9046 3932371,725 1054454,664 1054454,664 1054454,664 3325308,904 3334107,606 4867073,675 11013980,94 18960663,55 9006803,195 11008315,02 5283800,812 1196993,839 1196993,839 1202163,244
+240 10 3 5593044,605 1113836,178 1133750,063 5174918,575 1094124,973 3854812,681 1160423,105 1160423,105 1160423,105 3414962,666 3423898,273 4757239,236 11125158,67 18854695,11 8895608,094 11119510,12 5174918,575 1300800,577 1300800,577 1306032,84
+241 11 3 5483555,826 1095216,903 1242953,991 5066113,305 1196490,187 3778720,21 1267278,48 1267278,48 1267278,48 3505733,09 3514795,767 4647456,778 11236336,3 18747839,73 8784412,993 11230705,22 5066113,305 1405723,286 1405723,286 1411004,967
+242 12 3 5374118,625 1087592,366 1352478,668 4957390,345 1300290,779 3704185,972 1374813,978 1374813,978 1374813,978 3597534,923 3606715,677 4537730,212 11347513,8 18640304,23 8673217,892 11341900,32 4957390,345 1511529,552 1511529,552 1516850,705
+243 13 3 5264736,453 1091193,08 1462252,013 4848755,506 1405208,661 3631307,165 1482881,62 1482881,62 1482881,62 3690290,45 3699581,05 4428063,829 11458691,18 18532236,59 8562022,791 11453095,42 4848755,506 1618046,014 1618046,014 1623399,147
+244 14 3 5155413,04 1105909,399 1572221,931 4740215,115 1511011,074 3560186,663 1591372,977 1591372,977 1591372,977 3783928,781 3793321,691 4318462,348 11569868,41 18423745,24 8450827,689 11564290,52 4740215,115 1725141,088 1725141,088 1730520,461
+245 15 3 5046152,432 1131307,589 1682349,864 4631776,076 1617524,417 3490933,107 1700206,915 1700206,915 1700206,915 3878385,202 3887873,517 4208930,972 11681045,48 18314911,3 8339632,588 11675485,62 4631776,076 1832713,303 1832713,303 1838114,452
+246 16 3 4936959,023 1166690,184 1792606,678 4523445,94 1724616,933 3423660,928 1809321,593 1809321,593 1809321,593 3973600,588 3983177,976 4099475,453 11792222,38 18205796,62 8228437,487 11786680,72 4523445,94 1940683,275 1940683,275 1946102,683
+247 17 3 4827837,591 1211182,39 1902969,963 4415232,982 1832187,025 3358490,286 1918669,09 1918669,09 1918669,09 4069520,868 4079181,515 3990102,162 11903399,1 18096449,12 8117242,386 11897875,83 4415232,982 2048988,087 2048988,087 2054422,946
+248 18 3 4718793,347 1263822,375 2013422,199 4307146,29 1940155,22 3295546,916 2028211,728 2028211,728 2028211,728 4166096,541 4175835,105 3880818,182 12014575,63 17986906,48 8006047,285 12009070,93 4307146,29 2157577,272 2157577,272 2163025,318
+249 19 3 4609831,983 1323638,289 2123949,499 4199195,866 2048458,528 3234961,844 2137919,488 2137919,488 2137919,488 4263282,24 4273093,809 3771631,402 12125751,94 17877198,72 7894852,184 12120266,03 4199195,866 2266409,916 2266409,916 2271869,299
+250 20 3 4500959,731 1389703,702 2234540,713 4091392,745 2157046,432 3176870,966 2247768,168 2247768,168 2247768,168 4361036,342 4370916,39 3662550,642 12236928,02 17767350,04 7783657,082 12231461,13 4091392,745 2375452,512 2375452,512 2380921,712
+251 21 3 4392183,425 1461171,02 2345186,789 3983749,133 2265877,973 3121414,466 2357738,048 2357738,048 2357738,048 4459320,612 4469264,968 3553585,789 12348103,85 17657380,16 7672461,981 12342656,23 3983749,133 2484677,376 2484677,376 2490155,131
+252 22 3 4283510,581 1537286,876 2455880,301 3876278,562 2374919,615 3068736,046 2467812,901 2467812,901 2467812,901 4558099,886 4568104,7 3444747,968 12459279,43 17547305,31 7561266,88 12453851,33 3876278,562 2594061,441 2594061,441 2599546,694
+253 23 3 4174949,484 1617394,942 2566615,1 3768996,075 2484143,649 3018981,966 2577979,255 2577979,255 2577979,255 4657341,785 4667403,5 3336049,733 12570454,73 17437138,96 7450071,779 12565046,43 3768996,075 2703585,341 2703585,341 2709077,2
+254 24 3 4066509,284 1700931,074 2677386,053 3661918,443 2593526,986 2972299,864 2688225,837 2688225,837 2688225,837 4757016,456 4767131,781 3227505,31 12681629,73 17326892,37 7338876,678 12676241,53 3661918,443 2813232,698 2813232,698 2818730,408
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbNearestSearchResult.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,26 @@
+#Index Latitude Longitude UseCoverageRadius MaxDistance ErrorCode Redefined MaxSearchResult SearchResult (Not used) Comment
+1 59 18 0 1-254 All lm's in db
+2 12 13 11 0 1,2,5,4 Low max distance
+3 0 1 3334 0 No landmarks within range
+4 55 18 1 300 0 14,16,15 Use of coverage radius
+#
+5 1 -1 1 1000 0 21,22,25 Use of coverage radius > distance
+6 32 32 1 50 0 33,35 Use of overlapping coverage radius > distance
+7 0 0 3000 0 Lm's in all diretions within 3km
+8 0 0 1000 0 1 6,8,41-45 Redefined with less MaxDistance
+#
+9 0 0 3000 0 1 6,8,41-45 Redefined with greater MaxDistance
+10 -15 -15 1500 0
+11 -15,1 -15 1 1500 0 Redefined with use coverage radius
+#
+12 52 13 0 10 Max Search result
+13 -89 -90 5000 0 50 Max search Result > search result
+14 0 180 0
+#
+15 90 0 0 Nort pole
+16 -90 0 0 South pole
+17 55 18 0
+#
+18 -1 -1 0
+19 -1 -1 1 500000 0 20
+20 -1,05 -1 0 1 19
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/lmDbSearchResult.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,184 @@
+#TextCriteria Attributes (bitmask) PositionFields LmSearchResult (Id's) Redefined seach Comment
+* 0X0021 1-105 Maka sure Pos. fields an id's are comma seperated with no extra space inbetween
+* 0x0001 1-105
+* 0x0020 1-105
+? 0x0000 1-7,9-38,41,45 All field searched -> medialinks field will contain one character if any media link set.
+? 0x0001 25,41
+? 0x0000 401
+? 0x0000 404,406
+? 0x0000 803 37
+Unique 0x0021 406 29-31
+Götet 0x0021 404 30 1 The search is performed on the previous result.
+Several 0x0001 45
+MLFW 0x0021 401,404,406,408,409 8,10-15
+MLFW 0x0021 8,10,11,15 1 The search is performed on the previous result.
+MLFW 0x0021 8,10,11,15
+adx 0x0021 401,404,406,408,409
+*oki* 0x0021 401,404,406,408,409 46-50,62-63
+Noki? 0x0021 401,404,406,408,409 48,49
+Nokia? 0x0021 401,404,406,408,409
+Nok* 0x0021 401,404,406,408,409 48-50,62-63
+*okia 0x0021 401,404,406,408,409 48,49
+#
+#
+#
+#
+x 0x0000 25-27 All attributes and fields is searched
+q 0x0001 41
+enat?r 0x0001 18,19
+Daanmark 0x0000 401 29-41
+veg??ariskt 0x0001 4
+Text'1 0x0001 30
+Text'''1 0x0001 13
+Kalles* 0x0001 52
+Kalles Hundgård 0x0001 52
+kalles* 0x0001 52 Tests Symbian TR in TeamTrack INC043475 will fail until the TR is solved
+kalles Hundgård 0x0001 52 Tests Symbian TR in TeamTrack INC043475 will fail until the TR is solved
+# ENoAttribute = 0x0000 Country = 401
+# ELandmarkName= 0x0001 000001 City = 404
+# EPosition= 0x0002 000010 Street = 406
+# ECoverageRadius = 0x0004 000100 LocationName = 408
+# ECategoryInfo= 0x0008 001000 PostalCode = 409
+# EIcon= 0x0010 010000 MediaLinks = 800
+# EDescription= 0x0020 100000 MediaLinkStart = 801
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/testlm.ldb has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/tp105_eposlmdefaultdbname.R01 has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/tp105_eposlmdefaultdbname.R06 has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/tp105_eposlmdefaultdbname_en.loc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+//r:
+//v:
+//i:LOCALISATION_TARGET = s60,s90
+//i:Default Landmark database name, that can be displayed on UI.
+
+// LOCALISATION STRINGS
+//b:-1
+//e:-1
+//f:EDialogLabelFont
+//s:
+//w:
+//d:Display name of the default landmark database.
+//l:list_single_pane_1
+//
+#define qtn_poslm_default_database_display_name "TP105 Default Landmarks"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/tp105_eposlmdefaultdbname_sw.loc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+//r:
+//v:
+//i:LOCALISATION_TARGET = s60,s90
+//i:Default Landmark database name, that can be displayed on UI.
+
+// LOCALISATION STRINGS
+//b:-1
+//e:-1
+//f:EDialogLabelFont
+//s:
+//w:
+//d:Display name of the default landmark database.
+//l:list_single_pane_1
+//
+
+// Used for creating a localised swedish default name resource file, used
+// in landmarktest TP105
+#define qtn_poslm_default_database_display_name "Mina små landmarks"
+
+// End of File
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/tp13_EPOSLMGLOBALCATEGORIES.R01 has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/databases/landmarks/tp13_eposlmglobalcategoriesR01.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <uikon.rh>
+#include <EPos_LmCatDef.rh>
+#include "EPos_LmCatLanguages.hrh"
+
+// RESOURCE DEFINITIONS
+
+// -----------------------------------------------------------------------------
+//
+// POS_LM_CATEGORY_SPECIFICATION
+// Global category specification.
+//
+// -----------------------------------------------------------------------------
+//
+
+RESOURCE POS_LM_CATEGORY_SPECIFICATION glcategories
+ {
+ icon_files =
+ {
+ };
+
+ categories =
+ {
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 3000;
+ category_name = "Accommodation";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 6000;
+ category_name = "Business";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 9000;
+ category_name = "Communication";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 12000;
+ category_name = "Educational institute";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 15000;
+ category_name = "Entertainment";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 18000;
+ category_name = "Food & Beverage";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 21000;
+ category_name = "Geographical Area";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 24000;
+ category_name = "Outdoor activities";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 27000;
+ category_name = "People";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 30000;
+ category_name = "Public service";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 33000;
+ category_name = "Religious places";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 36000;
+ category_name = "Shopping";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 39000;
+ category_name = "Sightseeing";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 42000;
+ category_name = "Sports";
+ },
+ POS_LM_CATEGORY_INFO
+ {
+ category_id = 45000;
+ category_name = "Transport";
+ }
+ };
+ }
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/eabi/LandMarksTestModuleu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,199 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI13CSearchResult @ 2 NONAME ; #<TI>#
+ _ZTI14CActiveLmEvent @ 3 NONAME ; #<TI>#
+ _ZTI15CRecognizerData @ 4 NONAME ; #<TI>#
+ _ZTI17CAreaSearchResult @ 5 NONAME ; #<TI>#
+ _ZTI17CSearchResultBase @ 6 NONAME ; #<TI>#
+ _ZTI18CActiveLmOperation @ 7 NONAME ; #<TI>#
+ _ZTI19CTP116ActiveLmEvent @ 8 NONAME ; #<TI>#
+ _ZTI19CTP117ActiveLmEvent @ 9 NONAME ; #<TI>#
+ _ZTI20CMatchIteratorTester @ 10 NONAME ; #<TI>#
+ _ZTI20CNearestSearchResult @ 11 NONAME ; #<TI>#
+ _ZTI21CCategorySearchResult @ 12 NONAME ; #<TI>#
+ _ZTI22CCompositeSearchResult @ 13 NONAME ; #<TI>#
+ _ZTI24CNearestSearchResultTp35 @ 14 NONAME ; #<TI>#
+ _ZTI26CLandmarkTestProcedureBase @ 15 NONAME ; #<TI>#
+ _ZTI29CCategoryLandmarkSearchResult @ 16 NONAME ; #<TI>#
+ _ZTI7CPosTp1 @ 17 NONAME ; #<TI>#
+ _ZTI7CPosTp3 @ 18 NONAME ; #<TI>#
+ _ZTI7CPosTp4 @ 19 NONAME ; #<TI>#
+ _ZTI7CPosTp5 @ 20 NONAME ; #<TI>#
+ _ZTI7CPosTp6 @ 21 NONAME ; #<TI>#
+ _ZTI7CPosTp7 @ 22 NONAME ; #<TI>#
+ _ZTI7CPosTp8 @ 23 NONAME ; #<TI>#
+ _ZTI7CPosTp9 @ 24 NONAME ; #<TI>#
+ _ZTI8CPosTp10 @ 25 NONAME ; #<TI>#
+ _ZTI8CPosTp11 @ 26 NONAME ; #<TI>#
+ _ZTI8CPosTp12 @ 27 NONAME ; #<TI>#
+ _ZTI8CPosTp13 @ 28 NONAME ; #<TI>#
+ _ZTI8CPosTp18 @ 29 NONAME ; #<TI>#
+ _ZTI8CPosTp19 @ 30 NONAME ; #<TI>#
+ _ZTI8CPosTp20 @ 31 NONAME ; #<TI>#
+ _ZTI8CPosTp21 @ 32 NONAME ; #<TI>#
+ _ZTI8CPosTp23 @ 33 NONAME ; #<TI>#
+ _ZTI8CPosTp24 @ 34 NONAME ; #<TI>#
+ _ZTI8CPosTp25 @ 35 NONAME ; #<TI>#
+ _ZTI8CPosTp26 @ 36 NONAME ; #<TI>#
+ _ZTI8CPosTp28 @ 37 NONAME ; #<TI>#
+ _ZTI8CPosTp35 @ 38 NONAME ; #<TI>#
+ _ZTI8CPosTp36 @ 39 NONAME ; #<TI>#
+ _ZTI8CPosTp37 @ 40 NONAME ; #<TI>#
+ _ZTI8CPosTp38 @ 41 NONAME ; #<TI>#
+ _ZTI8CPosTp42 @ 42 NONAME ; #<TI>#
+ _ZTI8CPosTp43 @ 43 NONAME ; #<TI>#
+ _ZTI8CPosTp44 @ 44 NONAME ; #<TI>#
+ _ZTI8CPosTp45 @ 45 NONAME ; #<TI>#
+ _ZTI8CPosTp47 @ 46 NONAME ; #<TI>#
+ _ZTI8CPosTp48 @ 47 NONAME ; #<TI>#
+ _ZTI8CPosTp51 @ 48 NONAME ; #<TI>#
+ _ZTI8CPosTp52 @ 49 NONAME ; #<TI>#
+ _ZTI9CPosTp100 @ 50 NONAME ; #<TI>#
+ _ZTI9CPosTp101 @ 51 NONAME ; #<TI>#
+ _ZTI9CPosTp102 @ 52 NONAME ; #<TI>#
+ _ZTI9CPosTp103 @ 53 NONAME ; #<TI>#
+ _ZTI9CPosTp104 @ 54 NONAME ; #<TI>#
+ _ZTI9CPosTp116 @ 55 NONAME ; #<TI>#
+ _ZTI9CPosTp117 @ 56 NONAME ; #<TI>#
+ _ZTI9CPosTp120 @ 57 NONAME ; #<TI>#
+ _ZTI9CPosTp121 @ 58 NONAME ; #<TI>#
+ _ZTI9CPosTp122 @ 59 NONAME ; #<TI>#
+ _ZTI9CPosTp123 @ 60 NONAME ; #<TI>#
+ _ZTI9CPosTp124 @ 61 NONAME ; #<TI>#
+ _ZTI9CPosTp125 @ 62 NONAME ; #<TI>#
+ _ZTI9CPosTp126 @ 63 NONAME ; #<TI>#
+ _ZTI9CPosTp130 @ 64 NONAME ; #<TI>#
+ _ZTI9CPosTp131 @ 65 NONAME ; #<TI>#
+ _ZTI9CPosTp132 @ 66 NONAME ; #<TI>#
+ _ZTI9CPosTp133 @ 67 NONAME ; #<TI>#
+ _ZTI9CPosTp134 @ 68 NONAME ; #<TI>#
+ _ZTI9CPosTp135 @ 69 NONAME ; #<TI>#
+ _ZTI9CPosTp136 @ 70 NONAME ; #<TI>#
+ _ZTI9CPosTp137 @ 71 NONAME ; #<TI>#
+ _ZTI9CPosTp141 @ 72 NONAME ; #<TI>#
+ _ZTIN26CLandmarkTestProcedureBase15COnTheFlyTesterE @ 73 NONAME ; #<TI>#
+ _ZTV13CSearchResult @ 74 NONAME ; #<VT>#
+ _ZTV14CActiveLmEvent @ 75 NONAME ; #<VT>#
+ _ZTV15CRecognizerData @ 76 NONAME ; #<VT>#
+ _ZTV17CAreaSearchResult @ 77 NONAME ; #<VT>#
+ _ZTV17CSearchResultBase @ 78 NONAME ; #<VT>#
+ _ZTV18CActiveLmOperation @ 79 NONAME ; #<VT>#
+ _ZTV19CTP116ActiveLmEvent @ 80 NONAME ; #<VT>#
+ _ZTV19CTP117ActiveLmEvent @ 81 NONAME ; #<VT>#
+ _ZTV20CMatchIteratorTester @ 82 NONAME ; #<VT>#
+ _ZTV20CNearestSearchResult @ 83 NONAME ; #<VT>#
+ _ZTV21CCategorySearchResult @ 84 NONAME ; #<VT>#
+ _ZTV22CCompositeSearchResult @ 85 NONAME ; #<VT>#
+ _ZTV24CNearestSearchResultTp35 @ 86 NONAME ; #<VT>#
+ _ZTV26CLandmarkTestProcedureBase @ 87 NONAME ; #<VT>#
+ _ZTV29CCategoryLandmarkSearchResult @ 88 NONAME ; #<VT>#
+ _ZTV7CPosTp1 @ 89 NONAME ; #<VT>#
+ _ZTV7CPosTp3 @ 90 NONAME ; #<VT>#
+ _ZTV7CPosTp4 @ 91 NONAME ; #<VT>#
+ _ZTV7CPosTp5 @ 92 NONAME ; #<VT>#
+ _ZTV7CPosTp6 @ 93 NONAME ; #<VT>#
+ _ZTV7CPosTp7 @ 94 NONAME ; #<VT>#
+ _ZTV7CPosTp8 @ 95 NONAME ; #<VT>#
+ _ZTV7CPosTp9 @ 96 NONAME ; #<VT>#
+ _ZTV8CPosTp10 @ 97 NONAME ; #<VT>#
+ _ZTV8CPosTp11 @ 98 NONAME ; #<VT>#
+ _ZTV8CPosTp12 @ 99 NONAME ; #<VT>#
+ _ZTV8CPosTp13 @ 100 NONAME ; #<VT>#
+ _ZTV8CPosTp18 @ 101 NONAME ; #<VT>#
+ _ZTV8CPosTp19 @ 102 NONAME ; #<VT>#
+ _ZTV8CPosTp20 @ 103 NONAME ; #<VT>#
+ _ZTV8CPosTp21 @ 104 NONAME ; #<VT>#
+ _ZTV8CPosTp23 @ 105 NONAME ; #<VT>#
+ _ZTV8CPosTp24 @ 106 NONAME ; #<VT>#
+ _ZTV8CPosTp25 @ 107 NONAME ; #<VT>#
+ _ZTV8CPosTp26 @ 108 NONAME ; #<VT>#
+ _ZTV8CPosTp28 @ 109 NONAME ; #<VT>#
+ _ZTV8CPosTp35 @ 110 NONAME ; #<VT>#
+ _ZTV8CPosTp36 @ 111 NONAME ; #<VT>#
+ _ZTV8CPosTp37 @ 112 NONAME ; #<VT>#
+ _ZTV8CPosTp38 @ 113 NONAME ; #<VT>#
+ _ZTV8CPosTp42 @ 114 NONAME ; #<VT>#
+ _ZTV8CPosTp43 @ 115 NONAME ; #<VT>#
+ _ZTV8CPosTp44 @ 116 NONAME ; #<VT>#
+ _ZTV8CPosTp45 @ 117 NONAME ; #<VT>#
+ _ZTV8CPosTp47 @ 118 NONAME ; #<VT>#
+ _ZTV8CPosTp48 @ 119 NONAME ; #<VT>#
+ _ZTV8CPosTp51 @ 120 NONAME ; #<VT>#
+ _ZTV8CPosTp52 @ 121 NONAME ; #<VT>#
+ _ZTV9CPosTp100 @ 122 NONAME ; #<VT>#
+ _ZTV9CPosTp101 @ 123 NONAME ; #<VT>#
+ _ZTV9CPosTp102 @ 124 NONAME ; #<VT>#
+ _ZTV9CPosTp103 @ 125 NONAME ; #<VT>#
+ _ZTV9CPosTp104 @ 126 NONAME ; #<VT>#
+ _ZTV9CPosTp116 @ 127 NONAME ; #<VT>#
+ _ZTV9CPosTp117 @ 128 NONAME ; #<VT>#
+ _ZTV9CPosTp120 @ 129 NONAME ; #<VT>#
+ _ZTV9CPosTp121 @ 130 NONAME ; #<VT>#
+ _ZTV9CPosTp122 @ 131 NONAME ; #<VT>#
+ _ZTV9CPosTp123 @ 132 NONAME ; #<VT>#
+ _ZTV9CPosTp124 @ 133 NONAME ; #<VT>#
+ _ZTV9CPosTp125 @ 134 NONAME ; #<VT>#
+ _ZTV9CPosTp126 @ 135 NONAME ; #<VT>#
+ _ZTV9CPosTp130 @ 136 NONAME ; #<VT>#
+ _ZTV9CPosTp131 @ 137 NONAME ; #<VT>#
+ _ZTV9CPosTp132 @ 138 NONAME ; #<VT>#
+ _ZTV9CPosTp133 @ 139 NONAME ; #<VT>#
+ _ZTV9CPosTp134 @ 140 NONAME ; #<VT>#
+ _ZTV9CPosTp135 @ 141 NONAME ; #<VT>#
+ _ZTV9CPosTp136 @ 142 NONAME ; #<VT>#
+ _ZTV9CPosTp137 @ 143 NONAME ; #<VT>#
+ _ZTV9CPosTp141 @ 144 NONAME ; #<VT>#
+ _ZTVN26CLandmarkTestProcedureBase15COnTheFlyTesterE @ 145 NONAME ; #<VT>#
+ _ZTI7CPosTp2 @ 146 NONAME
+ _ZTI9CPosTp106 @ 147 NONAME
+ _ZTI9CPosTp118 @ 148 NONAME
+ _ZTI9CPosTp119 @ 149 NONAME
+ _ZTI9CPosTp143 @ 150 NONAME
+ _ZTI9CPosTp144 @ 151 NONAME
+ _ZTI9CPosTp145 @ 152 NONAME
+ _ZTI9CPosTp146 @ 153 NONAME
+ _ZTI9CPosTp147 @ 154 NONAME
+ _ZTI9CPosTp148 @ 155 NONAME
+ _ZTI9CPosTp149 @ 156 NONAME
+ _ZTI9CPosTp150 @ 157 NONAME
+ _ZTI9CPosTp151 @ 158 NONAME
+ _ZTI9CPosTp152 @ 159 NONAME
+ _ZTI9CPosTp153 @ 160 NONAME
+ _ZTI9CPosTp154 @ 161 NONAME
+ _ZTI9CPosTp155 @ 162 NONAME
+ _ZTI9CPosTp156 @ 163 NONAME
+ _ZTI9CPosTp157 @ 164 NONAME
+ _ZTI9CPosTp158 @ 165 NONAME
+ _ZTI9CPosTp159 @ 166 NONAME
+ _ZTI9CPosTp160 @ 167 NONAME
+ _ZTI9CPosTp161 @ 168 NONAME
+ _ZTI9CPosTp162 @ 169 NONAME
+ _ZTI9CPosTp163 @ 170 NONAME
+ _ZTI9CPosTp164 @ 171 NONAME
+ _ZTV7CPosTp2 @ 172 NONAME
+ _ZTV9CPosTp106 @ 173 NONAME
+ _ZTV9CPosTp118 @ 174 NONAME
+ _ZTV9CPosTp119 @ 175 NONAME
+ _ZTV9CPosTp143 @ 176 NONAME
+ _ZTV9CPosTp144 @ 177 NONAME
+ _ZTV9CPosTp145 @ 178 NONAME
+ _ZTV9CPosTp146 @ 179 NONAME
+ _ZTV9CPosTp147 @ 180 NONAME
+ _ZTV9CPosTp148 @ 181 NONAME
+ _ZTV9CPosTp149 @ 182 NONAME
+ _ZTV9CPosTp150 @ 183 NONAME
+ _ZTV9CPosTp151 @ 184 NONAME
+ _ZTV9CPosTp152 @ 185 NONAME
+ _ZTV9CPosTp153 @ 186 NONAME
+ _ZTV9CPosTp154 @ 187 NONAME
+ _ZTV9CPosTp155 @ 188 NONAME
+ _ZTV9CPosTp156 @ 189 NONAME
+ _ZTV9CPosTp157 @ 190 NONAME
+ _ZTV9CPosTp158 @ 191 NONAME
+ _ZTV9CPosTp159 @ 192 NONAME
+ _ZTV9CPosTp160 @ 193 NONAME
+ _ZTV9CPosTp161 @ 194 NONAME
+ _ZTV9CPosTp162 @ 195 NONAME
+ _ZTV9CPosTp163 @ 196 NONAME
+ _ZTV9CPosTp164 @ 197 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/ABLD.BAT Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,31 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of the License "Symbian Foundation License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description:
+rem
+
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\work\mrt\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/LandMarksTestModule.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,180 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET LandMarksTestModule.dll
+TARGETTYPE dll
+UID 0x1000008D 0x101F4FF4
+
+CAPABILITY ALL -TCB
+
+
+
+//TARGETPATH ?target_path
+DEFFILE LandMarksTestModule.def
+
+SOURCEPATH ../src
+SOURCE LandMarksTestModule.cpp
+SOURCE LandMarksTestModuleBlocks.cpp
+
+//Sorce for the Tp5
+SOURCE FT_CLandmarkTestProcedureBase.cpp
+SOURCE FT_CSearchResult.cpp
+SOURCE FT_CAreaSearchResult.cpp
+SOURCE FT_CCategorySearchResult.cpp
+SOURCE FT_CCategoryLandmarkSearchResult.cpp
+SOURCE FT_CSearchResultBase.cpp
+SOURCE FT_CCompositeSearchResult.cpp
+SOURCE FT_DatabaseUtility.cpp
+
+//Source for Testprocedures
+
+SOURCE FT_CPosTp1.cpp
+SOURCE FT_CPosTp2.cpp
+SOURCE FT_CPosTp3.cpp
+SOURCE FT_CPosTp4.cpp
+SOURCE FT_CPosTp5.cpp
+SOURCE FT_CPosTp6.cpp
+SOURCE FT_CPosTp7.cpp
+SOURCE FT_CPosTp8.cpp
+SOURCE FT_CPosTp9.cpp
+
+SOURCE FT_CPosTp10.cpp
+SOURCE FT_CPosTp11.cpp
+SOURCE FT_CPosTp12.cpp
+SOURCE FT_CPosTp13.cpp
+SOURCE FT_CPosTp18.cpp
+SOURCE FT_CPosTp19.cpp
+
+SOURCE FT_CPosTp20.cpp
+SOURCE FT_CPosTp21.cpp
+SOURCE FT_CPosTp23.cpp
+SOURCE FT_CPosTp24.cpp
+SOURCE FT_CPosTp25.cpp
+SOURCE FT_CPosTp26.cpp
+SOURCE FT_CPosTp28.cpp
+
+SOURCE FT_CPosTp35.cpp
+SOURCE FT_CPosTp36.cpp
+SOURCE FT_CPosTp37.cpp
+SOURCE FT_CPosTp38.cpp
+
+SOURCE FT_CPosTp42.cpp
+SOURCE FT_CPosTp43.cpp
+SOURCE FT_CPosTp44.cpp
+SOURCE FT_CPosTp45.cpp
+SOURCE FT_CPosTp47.cpp
+SOURCE FT_CPosTp48.cpp
+
+SOURCE FT_CPosTp51.cpp
+SOURCE FT_CPosTp52.cpp
+
+SOURCE FT_CPosTp100.cpp
+SOURCE FT_CPosTp101.cpp
+SOURCE FT_CPosTp102.cpp
+SOURCE FT_CPosTp103.cpp
+SOURCE FT_CPosTp104.cpp
+SOURCE FT_CPosTp106.cpp
+
+SOURCE FT_CPosTp116.cpp
+SOURCE FT_CPosTp117.cpp
+SOURCE FT_CPosTp118.cpp
+SOURCE FT_CPosTp119.cpp
+
+SOURCE FT_CPosTp120.cpp
+SOURCE FT_CPosTp121.cpp
+SOURCE FT_CPosTp122.cpp
+SOURCE FT_CPosTp123.cpp
+SOURCE FT_CPosTp124.cpp
+SOURCE FT_CPosTp125.cpp
+SOURCE FT_CPosTp126.cpp
+
+SOURCE FT_CPosTp130.cpp
+SOURCE FT_CPosTp131.cpp
+SOURCE FT_CPosTp132.cpp
+SOURCE FT_CPosTp133.cpp
+SOURCE FT_CPosTp134.cpp
+SOURCE FT_CPosTp135.cpp
+SOURCE FT_CPosTp136.cpp
+SOURCE FT_CPosTp137.cpp
+SOURCE FT_CPosTp139.cpp
+
+SOURCE FT_CPosTp141.cpp
+SOURCE FT_CPosTp143.cpp
+
+SOURCE FT_CPosTp144.cpp
+SOURCE FT_CPosTp145.cpp
+SOURCE FT_CPosTp146.cpp
+SOURCE FT_CPosTp147.cpp
+
+SOURCE FT_CPosTp148.cpp
+SOURCE FT_CPosTp149.cpp
+SOURCE FT_CPosTp150.cpp
+SOURCE FT_CPosTp151.cpp
+SOURCE FT_CPosTp152.cpp
+SOURCE FT_CPosTp153.cpp
+SOURCE FT_CPosTp154.cpp
+SOURCE FT_CPosTp155.cpp
+SOURCE FT_CPosTp156.cpp
+SOURCE FT_CPosTp157.cpp
+SOURCE FT_CPosTp158.cpp
+SOURCE FT_CPosTp159.cpp
+SOURCE FT_CPosTp160.cpp
+
+SOURCE FT_CPosTp161.cpp
+SOURCE FT_CPosTp162.cpp
+SOURCE FT_CPosTp163.cpp
+SOURCE FT_CPosTp164.cpp
+USERINCLUDE ../inc
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /Epoc32/Include/ecom
+SYSTEMINCLUDE /Epoc32/Include/xml
+
+LIBRARY euser.lib
+LIBRARY stiftestinterface.lib
+
+//Landmarks Lib
+//Added for testing -- Start
+LIBRARY edbms.lib
+
+//Added for testing -- End
+
+LIBRARY eposlandmarks.lib
+LIBRARY Lbs.lib
+LIBRARY eposlmdbmanlib.lib
+LIBRARY eposlmsearchlib.lib
+LIBRARY ws32.lib
+LIBRARY eposlmmultidbsearch.lib
+LIBRARY ecom.lib
+LIBRARY efsrv.lib
+LIBRARY bafl.lib
+LIBRARY estor.lib
+
+LIBRARY apmime.lib // CApaDataRecognizerType used in TP42
+LIBRARY apgrfx.lib // RApaLsSession used in TP42
+
+
+LIBRARY centralrepository.lib charconv.lib
+
+
+
+SMPSAFE
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/LandMarksTestModule_DoxyFile.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,222 @@
+# Doxyfile 1.4.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME = LandMarksTestModule
+PROJECT_NUMBER =
+OUTPUT_DIRECTORY = Z:\S60\stiftestframework\LandMarksTestModule\
+CREATE_SUBDIRS = NO
+OUTPUT_LANGUAGE = English
+USE_WINDOWS_ENCODING = YES
+BRIEF_MEMBER_DESC = YES
+REPEAT_BRIEF = YES
+ABBREVIATE_BRIEF =
+ALWAYS_DETAILED_SEC = NO
+INLINE_INHERITED_MEMB = NO
+FULL_PATH_NAMES = NO
+STRIP_FROM_PATH =
+STRIP_FROM_INC_PATH =
+SHORT_NAMES = NO
+JAVADOC_AUTOBRIEF = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP = NO
+INHERIT_DOCS = YES
+DISTRIBUTE_GROUP_DOC = NO
+TAB_SIZE = 8
+ALIASES =
+OPTIMIZE_OUTPUT_FOR_C = YES
+OPTIMIZE_OUTPUT_JAVA = NO
+SUBGROUPING = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL = YES
+EXTRACT_PRIVATE = NO
+EXTRACT_STATIC = NO
+EXTRACT_LOCAL_CLASSES = NO
+EXTRACT_LOCAL_METHODS = NO
+HIDE_UNDOC_MEMBERS = NO
+HIDE_UNDOC_CLASSES = NO
+HIDE_FRIEND_COMPOUNDS = NO
+HIDE_IN_BODY_DOCS = NO
+INTERNAL_DOCS = YES
+CASE_SENSE_NAMES = YES
+HIDE_SCOPE_NAMES = NO
+SHOW_INCLUDE_FILES = YES
+INLINE_INFO = YES
+SORT_MEMBER_DOCS = YES
+SORT_BRIEF_DOCS = NO
+SORT_BY_SCOPE_NAME = NO
+GENERATE_TODOLIST = NO
+GENERATE_TESTLIST = NO
+GENERATE_BUGLIST = NO
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS =
+MAX_INITIALIZER_LINES = 30
+SHOW_USED_FILES = YES
+SHOW_DIRECTORIES = YES
+FILE_VERSION_FILTER =
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET = NO
+WARNINGS = YES
+WARN_IF_UNDOCUMENTED = YES
+WARN_IF_DOC_ERROR = YES
+WARN_NO_PARAMDOC = NO
+WARN_FORMAT = "$file:$line: $text"
+WARN_LOGFILE =
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT = Z:\S60\stiftestframework\LandMarksTestModule\
+FILE_PATTERNS = *.h \
+ *.rh \
+ *.hrh
+RECURSIVE = YES
+EXCLUDE =
+EXCLUDE_SYMLINKS = NO
+EXCLUDE_PATTERNS =
+EXAMPLE_PATH =
+EXAMPLE_PATTERNS =
+EXAMPLE_RECURSIVE = NO
+IMAGE_PATH =
+INPUT_FILTER =
+FILTER_PATTERNS =
+FILTER_SOURCE_FILES = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER = NO
+INLINE_SOURCES = NO
+STRIP_CODE_COMMENTS = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION = YES
+VERBATIM_HEADERS = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX = NO
+COLS_IN_ALPHA_INDEX = 5
+IGNORE_PREFIX =
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML = NO
+HTML_OUTPUT = html
+HTML_FILE_EXTENSION = .html
+HTML_HEADER =
+HTML_FOOTER =
+HTML_STYLESHEET =
+HTML_ALIGN_MEMBERS = YES
+GENERATE_HTMLHELP = YES
+CHM_FILE =
+HHC_LOCATION =
+GENERATE_CHI = NO
+BINARY_TOC = YES
+TOC_EXPAND = YES
+DISABLE_INDEX = YES
+ENUM_VALUES_PER_LINE = 4
+GENERATE_TREEVIEW = YES
+TREEVIEW_WIDTH = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX = NO
+LATEX_OUTPUT = latex
+LATEX_CMD_NAME = latex
+MAKEINDEX_CMD_NAME = makeindex
+COMPACT_LATEX = NO
+PAPER_TYPE = a4wide
+EXTRA_PACKAGES =
+LATEX_HEADER =
+PDF_HYPERLINKS = NO
+USE_PDFLATEX = NO
+LATEX_BATCHMODE = NO
+LATEX_HIDE_INDICES = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF = YES
+RTF_OUTPUT = Doc
+COMPACT_RTF = YES
+RTF_HYPERLINKS = YES
+RTF_STYLESHEET_FILE =
+RTF_EXTENSIONS_FILE =
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN = NO
+MAN_OUTPUT = man
+MAN_EXTENSION = .3
+MAN_LINKS = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML = NO
+XML_OUTPUT = xml
+XML_SCHEMA =
+XML_DTD =
+XML_PROGRAMLISTING = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD = NO
+PERLMOD_LATEX = NO
+PERLMOD_PRETTY = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING = YES
+MACRO_EXPANSION = YES
+EXPAND_ONLY_PREDEF = NO
+SEARCH_INCLUDES = YES
+INCLUDE_PATH =
+INCLUDE_FILE_PATTERNS =
+PREDEFINED = NONSHARABLE_CLASS
+EXPAND_AS_DEFINED =
+SKIP_FUNCTION_MACROS = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES =
+GENERATE_TAGFILE =
+ALLEXTERNALS = NO
+EXTERNAL_GROUPS = YES
+PERL_PATH = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS = YES
+HIDE_UNDOC_RELATIONS = YES
+HAVE_DOT = NO
+CLASS_GRAPH = YES
+COLLABORATION_GRAPH = YES
+GROUP_GRAPHS = YES
+UML_LOOK = NO
+TEMPLATE_RELATIONS = YES
+INCLUDE_GRAPH = YES
+INCLUDED_BY_GRAPH = YES
+CALL_GRAPH = NO
+GRAPHICAL_HIERARCHY = YES
+DIRECTORY_GRAPH = YES
+DOT_IMAGE_FORMAT = png
+DOT_PATH =
+DOTFILE_DIRS =
+MAX_DOT_GRAPH_WIDTH = 1024
+MAX_DOT_GRAPH_HEIGHT = 1024
+MAX_DOT_GRAPH_DEPTH = 0
+DOT_TRANSPARENT = NO
+DOT_MULTI_TARGETS = NO
+GENERATE_LEGEND = YES
+DOT_CLEANUP = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE = NO
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/LandmarkTestModule_5_0.pkg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,440 @@
+;
+; 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 the License "Symbian Foundation License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+;
+;
+;;
+; Installation file for t_locsysuiconsole application
+;
+;Languages
+&EN
+;
+; UID is the app's UID
+;
+#{"Poison FT LandmarkTests"},(0x01ffff73),2,0,0,TYPE=SA
+;
+; Localised Vendor name
+%{"Nokia-EN"}
+
+; Unique Vendor name
+:"Nokia"
+;
+;#{"Poison FT LandmarkTests"},(0x01ffff73),1,0,0
+; Files to install and to where
+
+"\Epoc32\Release\ARMV5\urel\LandMarksTestModule.dll"-"!:\sys\bin\LandMarksTestModule.dll"
+"..\conf\LandMarksTestModule1.cfg"-"C:\TestFramework\LandMarksTestModule1.cfg"
+"..\init\TestFramework.ini"-"C:\Data\TestFramework.ini"
+"..\Script\lmtm.bat"-"C:\lmtm.bat"
+
+
+;This is the test provider, used in TP135 and TP116
+"\Epoc32\Release\ARMV5\urel\FT_lmservlib.dll"-"!:\sys\bin\FT_lmservlib.dll"
+"\Epoc32\Release\ARMV5\urel\dbmanpluginstest.dll"-"!:\sys\bin\dbmanpluginstest.dll"
+"\Epoc32\data\z\resource\plugins\dbmanpluginstest.RSC"-"!:\resource\plugins\dbmanpluginstest.RSC"
+
+;Files needed for Tp1
+"..\databases\landmarks\TP1Test.ldb"-"c:\system\test\TestData\TP1Test.ldb"
+
+;Files needed for Tp4
+"..\databases\landmarks\TP4Test.ldb"-"c:\system\test\TestData\TP4Test.ldb"
+
+;Files needed for Tp8
+"..\databases\landmarks\TP8Test.ldb"-"c:\system\test\TestData\TP8Test.ldb"
+
+
+;Files needed for Tp10
+"..\databases\landmarks\TP10Test.ldb"-"c:\system\test\TestData\TP10Test.ldb"
+
+
+
+;Test data files
+"..\databases\landmarks\eposlm.ldb"-"c:\system\test\TestData\eposlm.ldb"
+"..\databases\landmarks\testlm.ldb"-"c:\system\test\TestData\testlm.ldb"
+"..\databases\landmarks\landmarksDb.txt"-"c:\system\test\TestData\landmarksDb.txt"
+"..\databases\landmarks\lmDbSearchResult.txt"-"c:\system\test\TestData\lmDbSearchResult.txt"
+"..\databases\landmarks\lmDbAreaSearchResult.txt"-"c:\system\test\TestData\lmDbAreaSearchResult.txt"
+"..\databases\landmarks\LmDbCategorySearchResult.txt"-"c:\system\test\TestData\LmDbCategorySearchResult.txt"
+"..\databases\landmarks\LmDbCatLandmarkSearchResult.txt"-"c:\system\test\TestData\LmDbCatLandmarkSearchResult.txt"
+"..\databases\landmarks\eposlmglobalcategories.r01"-"c:\system\test\TestData\eposlmglobalcategories.r01"
+"..\databases\landmarks\eposlmglobalcategories.r02"-"c:\system\test\TestData\eposlmglobalcategories.r02"
+"..\databases\landmarks\eposlmglobalcategories.r03"-"c:\system\test\TestData\eposlmglobalcategories.r03"
+"..\databases\landmarks\SRVeposdamaged.ldb"-"c:\system\test\TestData\SRVeposdamaged.ldb"
+"..\databases\landmarks\EPOSLMASYNCOPS.RSC"-"c:\system\test\TestData\EPOSLMASYNCOPS.RSC"
+"..\databases\landmarks\SRVeposcontact.ldb"-"c:\system\test\TestData\SRVeposcontact.ldb"
+"..\databases\landmarks\SRVepostext.ldb"-"c:\system\test\TestData\SRVepostext.ldb"
+"..\databases\landmarks\eposEmpty.ldb"-"c:\system\test\TestData\eposEmpty.ldb"
+"..\databases\landmarks\lmDbNearestSearchResult.txt"-"c:\system\test\TestData\lmDbNearestSearchResult.txt"
+"..\databases\landmarks\lmDbNearestSearch.txt"-"c:\system\test\TestData\lmDbNearestSearch.txt"
+"..\databases\landmarks\eposlmnearestsearch.ldb"-"c:\system\test\TestData\eposlmnearestsearch.ldb"
+"..\databases\landmarks\lmDbCompositeSearchResult.txt"-"c:\system\test\TestData\lmDbCompositeSearchResult.txt"
+"..\databases\landmarks\compositeeposlm.ldb"-"c:\system\test\TestData\compositeeposlm.ldb"
+"..\databases\landmarks\LmRecognizerData.txt"-"c:\system\test\TestData\LmRecognizerData.txt"
+"..\databases\landmarks\LmRecognizerDataFile.txt"-"c:\system\test\TestData\LmRecognizerDataFile.txt"
+"..\databases\landmarks\eposlm_1000_LMs.ldb"-"c:\system\test\TestData\eposlm_1000_LMs.ldb"
+"..\databases\landmarks\eposlm_5000_LMs.ldb"-"c:\system\test\TestData\eposlm_5000_LMs.ldb"
+"..\databases\landmarks\eposlmintservices_198KB.rsc"-"c:\system\test\TestData\eposlmintservices_198KB.rsc"
+"..\databases\landmarks\eposlmintservices_453KB.rsc"-"c:\system\test\TestData\eposlmintservices_453KB.rsc"
+
+;Files needed in TP13
+;"..\databases\landmarks\TP13_EPOSLMGLOBALCATEGORIES.R06"-"c:\system\test\TestData\TP13_EPOSLMGLOBALCATEGORIES.R06"
+;"..\databases\landmarks\TP13_EPOSLMGLOBALCATEGORIES.R01"-"c:\system\test\TestData\TP13_EPOSLMGLOBALCATEGORIES.R01"
+"..\databases\landmarks\eposlm_tp13.ldb"-"c:\system\test\TestData\eposlm_tp13.ldb"
+
+;Files needed in Tp25
+"..\databases\landmarks\TP25Test.ldb"-"c:\system\test\TestData\TP25Test.ldb"
+;Files needed in Tp28
+"..\databases\landmarks\Tp28Test.ldb"-"c:\system\test\TestData\Tp28Test.ldb"
+
+;Files needed in Tp131
+"..\databases\landmarks\TP131Test.ldb"-"c:\system\test\TestData\TP131Test.ldb"
+;Files needed for Tp116
+"..\databases\landmarks\TP116Test.ldb"-"c:\system\test\TestData\TP116Test.ldb"
+
+
+;Correct trace file
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP47Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP47Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP148Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP148Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP149Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP149Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP150Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP150Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP151Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP151Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP152Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP152Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP153Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP153Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP154Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP154Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP155Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP155Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP156Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP156Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP157Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP157Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP158Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP158Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP159Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP159Trace.txt"
+"..\databases\landmarks\XML_Files\CorrectFileFor_LandmarksTP160Trace.txt"-"c:\system\test\TestData\CorrectFileFor_LandmarksTP160Trace.txt"
+
+;XML files needed in TP47
+"..\databases\landmarks\XML_Files\Tp47Data_With_MIME_Name.xml"-"c:\system\test\TestData\Tp47Data_With_MIME_Name.xml"
+"..\databases\landmarks\XML_Files\Tp47UsingXMLTagAsDataField3.xml"-"c:\system\test\TestData\Tp47UsingXMLTagAsDataField3.xml"
+"..\databases\landmarks\XML_Files\Tp47UsingXMLTagAsDataField2.xml"-"c:\system\test\TestData\Tp47UsingXMLTagAsDataField2.xml"
+"..\databases\landmarks\XML_Files\Tp47UsingXMLTagAsDataField1.xml"-"c:\system\test\TestData\Tp47UsingXMLTagAsDataField1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataTagInTag1.xml"-"c:\system\test\TestData\Tp47ErronousXMLDataTagInTag1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLFileEmptyCollection.xml"-"c:\system\test\TestData\Tp47ErronousXMLFileEmptyCollection.xml"
+"..\databases\landmarks\XML_Files\Tp47XMLWithLongLatitudeField.xml"-"c:\system\test\TestData\Tp47XMLWithLongLatitudeField.xml"
+"..\databases\landmarks\XML_Files\Tp47XMLWithLongName.xml"-"c:\system\test\TestData\Tp47XMLWithLongName.xml"
+"..\databases\landmarks\XML_Files\Tp47XMLWithLongCategoryName.xml"-"c:\system\test\TestData\Tp47XMLWithLongCategoryName.xml"
+"..\databases\landmarks\XML_Files\TP47_UTF-8.xml"-"c:\system\test\TestData\TP47_UTF-8.xml"
+"..\databases\landmarks\XML_Files\TP47_UTF-16-bigEndian.xml"-"c:\system\test\TestData\TP47_UTF-16-bigEndian.xml"
+"..\databases\landmarks\XML_Files\TP47_UTF-16-littleEndian.xml"-"c:\system\test\TestData\TP47_UTF-16-littleEndian.xml"
+"..\databases\landmarks\XML_Files\TP47_UTF-Chinese.xml"-"c:\system\test\TestData\TP47_UTF-Chinese.xml"
+"..\databases\landmarks\XML_Files\Tp47DataUTF8.xml"-"c:\system\test\TestData\Tp47DataUTF8.xml"
+"..\databases\landmarks\XML_Files\Tp47DataUTF16.xml"-"c:\system\test\TestData\Tp47DataUTF16.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousFileNoXML2.xml"-"c:\system\test\TestData\Tp47ErronousFileNoXML2.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousFileNoXML1.xml"-"c:\system\test\TestData\Tp47ErronousFileNoXML1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataUnclosedTag2.xml"-"c:\system\test\TestData\Tp47ErronousXMLDataUnclosedTag2.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataUnclosedTag1.xml"-"c:\system\test\TestData\Tp47ErronousXMLDataUnclosedTag1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataRepeatedTag.xml"-"c:\system\test\TestData\Tp47ErronousXMLDataRepeatedTag.xml"
+"..\databases\landmarks\XML_Files\Tp47Mall.xml"-"c:\system\test\TestData\Tp47Mall.xml"
+"..\databases\landmarks\XML_Files\Tp47XMLDataTestInput1.xml"-"c:\system\test\TestData\Tp47XMLDataTestInput1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLNoEndTag2.xml"-"c:\system\test\TestData\Tp47ErrounousXMLNoEndTag2.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLNoEndTag1.xml"-"c:\system\test\TestData\Tp47ErrounousXMLNoEndTag1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataWrongOrder3.xml"-"c:\system\test\TestData\Tp47ErrounousXMLDataWrongOrder3.xml"
+"..\databases\landmarks\XML_Files\Tp47UnknownTags.xml"-"c:\system\test\TestData\Tp47UnknownTags.xml"
+"..\databases\landmarks\XML_Files\Tp47UnknownTrees.xml"-"c:\system\test\TestData\Tp47UnknownTrees.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataWrongOrder2.xml"-"c:\system\test\TestData\Tp47ErrounousXMLDataWrongOrder2.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataMissingFields3.xml"-"c:\system\test\TestData\Tp47ErrounousXMLDataMissingFields3.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataWrongOrder1.xml"-"c:\system\test\TestData\Tp47ErrounousXMLDataWrongOrder1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataMissingFields2.xml"-"c:\system\test\TestData\Tp47ErrounousXMLDataMissingFields2.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataMissingFields1.xml"-"c:\system\test\TestData\Tp47ErrounousXMLDataMissingFields1.xml"
+"..\databases\landmarks\XML_Files\Tp47SeveralLandmarkCollection.xml"-"c:\system\test\TestData\Tp47SeveralLandmarkCollection.xml"
+"..\databases\landmarks\XML_Files\Tp47SeveralLandmark.xml"-"c:\system\test\TestData\Tp47SeveralLandmark.xml"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLData.xml"-"c:\system\test\TestData\Tp47ErrounousXMLData.xml"
+;"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataMissingLMPrefix.xml"-"c:\system\test\TestData\Tp47ErronousXMLDataMissingLMPrefix.xml"
+"..\databases\landmarks\XML_Files\Tp47EmptyMediaLink.xml"-"c:\system\test\TestData\Tp47EmptyMediaLink.xml"
+"..\databases\landmarks\XML_Files\Tp47EmptyCoordinates.xml"-"c:\system\test\TestData\Tp47EmptyCoordinates.xml"
+"..\databases\landmarks\XML_Files\Tp47EmptyAdresseInfo.xml"-"c:\system\test\TestData\Tp47EmptyAdresseInfo.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag1.xml"-"c:\system\test\TestData\Tp47ErronousTextInTag1.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag2.xml"-"c:\system\test\TestData\Tp47ErronousTextInTag2.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag3.xml"-"c:\system\test\TestData\Tp47ErronousTextInTag3.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag4.xml"-"c:\system\test\TestData\Tp47ErronousTextInTag4.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag5.xml"-"c:\system\test\TestData\Tp47ErronousTextInTag5.xml"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag6.xml"-"c:\system\test\TestData\Tp47ErronousTextInTag6.xml"
+
+"..\databases\landmarks\XML_Files\Tp47Data_With_MIME_Name.gpx"-"c:\system\test\TestData\Tp47Data_With_MIME_Name.gpx"
+"..\databases\landmarks\XML_Files\Tp47UsingXMLTagAsDataField3.gpx"-"c:\system\test\TestData\Tp47UsingXMLTagAsDataField3.gpx"
+"..\databases\landmarks\XML_Files\Tp47UsingXMLTagAsDataField2.gpx"-"c:\system\test\TestData\Tp47UsingXMLTagAsDataField2.gpx"
+"..\databases\landmarks\XML_Files\Tp47UsingXMLTagAsDataField1.gpx"-"c:\system\test\TestData\Tp47UsingXMLTagAsDataField1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataTagInTag1.gpx"-"c:\system\test\TestData\Tp47ErronousXMLDataTagInTag1.gpx"
+"..\databases\landmarks\XML_Files\Tp47XMLWithLongLatitudeField.gpx"-"c:\system\test\TestData\Tp47XMLWithLongLatitudeField.gpx"
+"..\databases\landmarks\XML_Files\Tp47XMLWithLongName.gpx"-"c:\system\test\TestData\Tp47XMLWithLongName.gpx"
+"..\databases\landmarks\XML_Files\Tp47XMLWithLongCategoryName.gpx"-"c:\system\test\TestData\Tp47XMLWithLongCategoryName.gpx"
+"..\databases\landmarks\XML_Files\TP47_UTF-8.gpx"-"c:\system\test\TestData\TP47_UTF-8.gpx"
+"..\databases\landmarks\XML_Files\TP47_UTF-16-bigEndian.gpx"-"c:\system\test\TestData\TP47_UTF-16-bigEndian.gpx"
+"..\databases\landmarks\XML_Files\TP47_UTF-16-littleEndian.gpx"-"c:\system\test\TestData\TP47_UTF-16-littleEndian.gpx"
+"..\databases\landmarks\XML_Files\TP47_UTF-Chinese.gpx"-"c:\system\test\TestData\TP47_UTF-Chinese.gpx"
+"..\databases\landmarks\XML_Files\Tp47DataUTF8.gpx"-"c:\system\test\TestData\Tp47DataUTF8.gpx"
+"..\databases\landmarks\XML_Files\Tp47DataUTF16.gpx"-"c:\system\test\TestData\Tp47DataUTF16.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousFileNoXML2.gpx"-"c:\system\test\TestData\Tp47ErronousFileNoXML2.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousFileNoXML1.gpx"-"c:\system\test\TestData\Tp47ErronousFileNoXML1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataUnclosedTag2.gpx"-"c:\system\test\TestData\Tp47ErronousXMLDataUnclosedTag2.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataUnclosedTag1.gpx"-"c:\system\test\TestData\Tp47ErronousXMLDataUnclosedTag1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousXMLDataRepeatedTag.gpx"-"c:\system\test\TestData\Tp47ErronousXMLDataRepeatedTag.gpx"
+"..\databases\landmarks\XML_Files\Tp47Mall.gpx"-"c:\system\test\TestData\Tp47Mall.gpx"
+"..\databases\landmarks\XML_Files\Tp47XMLDataTestInput1.gpx"-"c:\system\test\TestData\Tp47XMLDataTestInput1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLNoEndTag2.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLNoEndTag2.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLNoEndTag1.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLNoEndTag1.gpx"
+"..\databases\landmarks\XML_Files\Tp47UnknownTags.gpx"-"c:\system\test\TestData\Tp47UnknownTags.gpx"
+"..\databases\landmarks\XML_Files\Tp47UnknownTrees.gpx"-"c:\system\test\TestData\Tp47UnknownTrees.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataWrongOrder2.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLDataWrongOrder2.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataMissingFields3.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLDataMissingFields3.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataWrongOrder1.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLDataWrongOrder1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataMissingFields2.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLDataMissingFields2.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLDataMissingFields1.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLDataMissingFields1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErrounousXMLData.gpx"-"c:\system\test\TestData\Tp47ErrounousXMLData.gpx"
+"..\databases\landmarks\XML_Files\Tp47EmptyMediaLink.gpx"-"c:\system\test\TestData\Tp47EmptyMediaLink.gpx"
+"..\databases\landmarks\XML_Files\Tp47EmptyCoordinates.gpx"-"c:\system\test\TestData\Tp47EmptyCoordinates.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag1.gpx"-"c:\system\test\TestData\Tp47ErronousTextInTag1.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag2.gpx"-"c:\system\test\TestData\Tp47ErronousTextInTag2.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag3.gpx"-"c:\system\test\TestData\Tp47ErronousTextInTag3.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag4.gpx"-"c:\system\test\TestData\Tp47ErronousTextInTag4.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag5.gpx"-"c:\system\test\TestData\Tp47ErronousTextInTag5.gpx"
+"..\databases\landmarks\XML_Files\Tp47ErronousTextInTag6.gpx"-"c:\system\test\TestData\Tp47ErronousTextInTag6.gpx"
+
+;KML files needed in TP47
+"..\databases\landmarks\XML_Files\Tp47KML.kml"-"c:\system\test\TestData\Tp47KML.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile1.kml"-"c:\system\test\TestData\Tp47KMLfile1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile2.kml"-"c:\system\test\TestData\Tp47KMLfile2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile3.kml"-"c:\system\test\TestData\Tp47KMLfile3.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile4.kml"-"c:\system\test\TestData\Tp47KMLfile4.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLlongName.kml"-"c:\system\test\TestData\Tp47KMLlongName.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLNameCaps.kml"-"c:\system\test\TestData\Tp47KMLNameCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousNameTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousNameTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousNameTagPosition1.kml"-"c:\system\test\TestData\Tp47KMLErroneousNameTagPosition1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousNameTagPosition2.kml"-"c:\system\test\TestData\Tp47KMLErroneousNameTagPosition2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyName.kml"-"c:\system\test\TestData\Tp47KMLEmptyName.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingNameTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingNameTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingNameTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingNameTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLNameWithSpecialCharacters1.kml"-"c:\system\test\TestData\Tp47KMLNameWithSpecialCharacters1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLNameWithSpecialCharacters2.kml"-"c:\system\test\TestData\Tp47KMLNameWithSpecialCharacters2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyPhoneNumber.kml"-"c:\system\test\TestData\Tp47KMLEmptyPhoneNumber.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousPhoneNumberTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousPhoneNumberTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousPhoneNumberTagPosition.kml"-"c:\system\test\TestData\Tp47KMLErroneousPhoneNumberTagPosition.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongPhoneNumer.kml"-"c:\system\test\TestData\Tp47KMLLongPhoneNumer.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingPhoneTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingPhoneTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingPhoneTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingPhoneTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPhoneNumberCaps.kml"-"c:\system\test\TestData\Tp47KMLPhoneNumberCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPhoneNumberWithText.kml"-"c:\system\test\TestData\Tp47KMLPhoneNumberWithText.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPhoneNumberWithText.kml"-"c:\system\test\TestData\Tp47KMLPhoneNumberWithText.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPhoneNumberWithSpecialCharacters1.kml"-"c:\system\test\TestData\Tp47KMLPhoneNumberWithSpecialCharacters1.kml"
+
+"..\databases\landmarks\XML_Files\Tp47KMLPhoneNumberWithSpecialCharacters2.kml"-"c:\system\test\TestData\Tp47KMLPhoneNumberWithSpecialCharacters2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyPoint.kml"-"c:\system\test\TestData\Tp47KMLEmptyPoint.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousPointTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousPointTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousPointTagPosition.kml"-"c:\system\test\TestData\Tp47KMLErroneousPointTagPosition.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingPointTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingPointTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingPointTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingPointTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPointCaps.kml"-"c:\system\test\TestData\Tp47KMLPointCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPointCaps.kml"-"c:\system\test\TestData\Tp47KMLPointCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPointTag1.kml"-"c:\system\test\TestData\Tp47KMLPointTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPointTag2.kml"-"c:\system\test\TestData\Tp47KMLPointTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPointTag3.kml"-"c:\system\test\TestData\Tp47KMLPointTag3.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyDescription.kml"-"c:\system\test\TestData\Tp47KMLEmptyDescription.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDescriptionWithSpecialCharacters1.kml"-"c:\system\test\TestData\Tp47KMLDescriptionWithSpecialCharacters1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDescriptionWithSpecialCharacters2.kml"-"c:\system\test\TestData\Tp47KMLDescriptionWithSpecialCharacters2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDescriptionCaps.kml"-"c:\system\test\TestData\Tp47KMLDescriptionCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongDescription.kml"-"c:\system\test\TestData\Tp47KMLLongDescription.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousDescriptionTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousDescriptionTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousDescriptionTagposition.kml"-"c:\system\test\TestData\Tp47KMLErroneousDescriptionTagposition.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingDescriptionTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingDescriptionTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingDescriptionTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingDescriptionTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDescriptionWithCDATA.kml"-"c:\system\test\TestData\Tp47KMLDescriptionWithCDATA.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousFolderTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousFolderTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLFolderCaps.kml"-"c:\system\test\TestData\Tp47KMLFolderCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingFolderTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingFolderTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingFolderTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingFolderTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyFolderName.kml"-"c:\system\test\TestData\Tp47KMLEmptyFolderName.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongFolderName.kml"-"c:\system\test\TestData\Tp47KMLLongFolderName.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLFolderNameWithSpecialCharacters1.kml"-"c:\system\test\TestData\Tp47KMLFolderNameWithSpecialCharacters1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLFolderNameWithSpecialCharacters2.kml"-"c:\system\test\TestData\Tp47KMLFolderNameWithSpecialCharacters2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDocumentNameWithSpecialCharacters1.kml"-"c:\system\test\TestData\Tp47KMLDocumentNameWithSpecialCharacters1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDocumentNameWithSpecialCharacters2.kml"-"c:\system\test\TestData\Tp47KMLDocumentNameWithSpecialCharacters2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyDocumentName.kml"-"c:\system\test\TestData\Tp47KMLEmptyDocumentName.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongDocumentName.kml"-"c:\system\test\TestData\Tp47KMLLongDocumentName.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLDocumentCaps.kml"-"c:\system\test\TestData\Tp47KMLDocumentCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousDocumentTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousDocumentTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingDocumentTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingDocumentTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingDocumentTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingDocumentTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLAddressCaps.kml"-"c:\system\test\TestData\Tp47KMLAddressCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLAddressWithSpecialCharacters1.kml"-"c:\system\test\TestData\Tp47KMLAddressWithSpecialCharacters1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLAddressWithSpecialCharacters2.kml"-"c:\system\test\TestData\Tp47KMLAddressWithSpecialCharacters2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyAddress1.kml"-"c:\system\test\TestData\Tp47KMLEmptyAddress1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyAddress2.kml"-"c:\system\test\TestData\Tp47KMLEmptyAddress2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongAddress1.kml"-"c:\system\test\TestData\Tp47KMLLongAddress1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongAddress2.kml"-"c:\system\test\TestData\Tp47KMLLongAddress2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongAddress3.kml"-"c:\system\test\TestData\Tp47KMLLongAddress3.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousAddressTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousAddressTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousAddressTagPosition.kml"-"c:\system\test\TestData\Tp47KMLErroneousAddressTagPosition.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingAddressTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingAddressTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingAddressTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingAddressTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinateCaps.kml"-"c:\system\test\TestData\Tp47KMLCoordinateCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMoreCoordinates.kml"-"c:\system\test\TestData\Tp47KMLMoreCoordinates.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinateTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinateTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinateTagPosition.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinateTagPosition.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinates1.kml"-"c:\system\test\TestData\Tp47KMLCoordinates1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinates2.kml"-"c:\system\test\TestData\Tp47KMLCoordinates2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinates3.kml"-"c:\system\test\TestData\Tp47KMLCoordinates3.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinates4.kml"-"c:\system\test\TestData\Tp47KMLCoordinates4.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinates5.kml"-"c:\system\test\TestData\Tp47KMLCoordinates5.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLCoordinates6.kml"-"c:\system\test\TestData\Tp47KMLCoordinates6.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongCoordinates1.kml"-"c:\system\test\TestData\Tp47KMLLongCoordinates1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLLongCoordinates2.kml"-"c:\system\test\TestData\Tp47KMLLongCoordinates2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingCoordinateTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingCoordinateTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingCoordinateTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingCoordinateTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates1.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates2.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates3.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates3.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates4.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates4.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates5.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates5.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates6.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates6.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyCoordinates7.kml"-"c:\system\test\TestData\Tp47KMLEmptyCoordinates7.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinates1.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinates1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinates2.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinates2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinates3.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinates3.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinates4.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinates4.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousCoordinates5.kml"-"c:\system\test\TestData\Tp47KMLErroneousCoordinates5.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLNegativeCoordinates.kml"-"c:\system\test\TestData\Tp47KMLNegativeCoordinates.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousTextWithinPlacemark.kml"-"c:\system\test\TestData\Tp47KMLErroneousTextWithinPlacemark.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyfile1.kml"-"c:\system\test\TestData\Tp47KMLEmptyfile1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyfile2.kml"-"c:\system\test\TestData\Tp47KMLEmptyfile2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLInvalidfile.kml"-"c:\system\test\TestData\Tp47KMLInvalidfile.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLPlacemarkCaps.kml"-"c:\system\test\TestData\Tp47KMLPlacemarkCaps.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLErroneousPlacemarkTag.kml"-"c:\system\test\TestData\Tp47KMLErroneousPlacemarkTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingPlacemarkTag1.kml"-"c:\system\test\TestData\Tp47KMLMissingPlacemarkTag1.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLMissingPlacemarkTag2.kml"-"c:\system\test\TestData\Tp47KMLMissingPlacemarkTag2.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLEmptyPlacemarkTag.kml"-"c:\system\test\TestData\Tp47KMLEmptyPlacemarkTag.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLGandhi Museum.kml"-"c:\system\test\TestData\Tp47KMLGandhi Museum.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLhilton hotels near new york (1 - 10).kml"-"c:\system\test\TestData\Tp47KMLhilton hotels near new york (1 - 10).kml"
+"..\databases\landmarks\XML_Files\Tp47KMLIndus Heritage Centre, India.kml"-"c:\system\test\TestData\Tp47KMLIndus Heritage Centre, India.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile5.kml"-"c:\system\test\TestData\Tp47KMLfile5.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile6.kml"-"c:\system\test\TestData\Tp47KMLfile6.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile7.kml"-"c:\system\test\TestData\Tp47KMLfile7.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile8.kml"-"c:\system\test\TestData\Tp47KMLfile8.kml"
+"..\databases\landmarks\XML_Files\Tp47KMLfile9.kml"-"c:\system\test\TestData\Tp47KMLfile9.kml"
+
+;KMZ test files
+"..\databases\landmarks\XML_Files\Tp148KMZFile.kmz"-"c:\system\test\TestData\Tp148KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp149KMZFile.kmz"-"c:\system\test\TestData\Tp149KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp150KMZFile.kmz"-"c:\system\test\TestData\Tp150KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp151KMZFile.kmz"-"c:\system\test\TestData\Tp151KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp152KMZFile.kmz"-"c:\system\test\TestData\Tp152KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp153KMZFile.kmz"-"c:\system\test\TestData\Tp153KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp154KMZFile.kmz"-"c:\system\test\TestData\Tp154KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp155KMZFile.kmz"-"c:\system\test\TestData\Tp155KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp156KMZFile.kmz"-"c:\system\test\TestData\Tp156KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp157KMZFile.kmz"-"c:\system\test\TestData\Tp157KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp158KMZFile.kmz"-"c:\system\test\TestData\Tp158KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp159KMZFile.kmz"-"c:\system\test\TestData\Tp159KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp160KMZFile.kmz"-"c:\system\test\TestData\Tp160KMZFile.kmz"
+"..\databases\landmarks\XML_Files\Tp163KMZ.kmz"-"c:\system\test\TestData\Tp163KMZ.kmz"
+"..\databases\landmarks\XML_Files\Tp164KMZ.kmz"-"c:\system\test\TestData\Tp164KMZ.kmz"
+
+;KML test files
+"..\databases\landmarks\XML_Files\Tp161KML.kml"-"c:\system\test\TestData\Tp161KML.kml"
+"..\databases\landmarks\XML_Files\Tp162KML.kml"-"c:\system\test\TestData\Tp162KML.kml"
+
+;XML files needed in TP43
+"..\databases\landmarks\XML_Files\Tp43EncodeOutput_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutput_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputIncMode_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputIncMode_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputCollectionData1_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputCollectionData1_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputCollectionData2_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputCollectionData2_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputEmptyCollectionData_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputEmptyCollectionData_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputEmptyCollectionData2_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputEmptyCollectionData2_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputLongCollectionField_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputLongCollectionField_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputErrorScenario4_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputErrorScenario4_Correct.xml"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputErrorScenario5_Correct.xml"-"c:\system\test\TestData\Tp43EncodeOutputErrorScenario5_Correct.xml"
+
+"..\databases\landmarks\XML_Files\Tp43EncodeOutput_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutput_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputIncMode_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputIncMode_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputCollectionData1_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputCollectionData1_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputCollectionData2_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputCollectionData2_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputEmptyCollectionData_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputEmptyCollectionData_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputEmptyCollectionData2_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputEmptyCollectionData2_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputLongCollectionField_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputLongCollectionField_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputErrorScenario4_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputErrorScenario4_Correct.gpx"
+"..\databases\landmarks\XML_Files\Tp43EncodeOutputErrorScenario5_Correct.gpx"-"c:\system\test\TestData\Tp43EncodeOutputErrorScenario5_Correct.gpx"
+
+;XML files needed in TP52
+"..\databases\landmarks\XML_Files\Tp52QuotedXMLTag1.xml"-"c:\system\test\TestData\Tp52QuotedXMLTag1.xml"
+"..\databases\landmarks\XML_Files\Tp52QuotedXMLTag1.gpx"-"c:\system\test\TestData\Tp52QuotedXMLTag1.gpx"
+
+;XML files needed in TP45
+"..\databases\landmarks\XML_Files\TP45-DefOptions.xml"-"c:\system\test\TestData\TP45-DefOptions.xml"
+"..\databases\landmarks\XML_Files\TP45-IncCategories.xml"-"c:\system\test\TestData\TP45-IncCategories.xml"
+"..\databases\landmarks\XML_Files\TP45-ExcCategories.xml"-"c:\system\test\TestData\TP45-ExcCategories.xml"
+"..\databases\landmarks\XML_Files\TP45-OneLandmark.xml"-"c:\system\test\TestData\TP45-OneLandmark.xml"
+"..\databases\landmarks\XML_Files\TP45-TwoLandmarks.xml"-"c:\system\test\TestData\TP45-TwoLandmarks.xml"
+"..\databases\landmarks\XML_Files\TP45-TwoLandmarksWithCollData.xml"-"c:\system\test\TestData\TP45-TwoLandmarksWithCollData.xml"
+
+;XML file with all the landmarks in the generated datanase
+"..\databases\landmarks\XML_Files\AllGeneratedLandmarks.xml"-"c:\system\test\TestData\AllGeneratedLandmarks.xml"
+
+;XML file with needed by TP53
+"..\databases\landmarks\XML_Files\TP53-CategoriesNotInDb.xml"-"c:\system\test\TestData\TP53-CategoriesNotInDb.xml"
+"..\databases\landmarks\XML_Files\TP53-OneLandmark.xml"-"c:\system\test\TestData\TP53-OneLandmark.xml"
+"..\databases\landmarks\XML_Files\TP53-Categories.xml"-"c:\system\test\TestData\TP53-Categories.xml"
+"..\databases\landmarks\XML_Files\TP53-Category.xml"-"c:\system\test\TestData\TP53-Category.xml"
+"..\databases\landmarks\XML_Files\TP53-GlobalCategory.xml"-"c:\system\test\TestData\TP53-GlobalCategory.xml"
+"..\databases\landmarks\XML_Files\TP53-LandmarksOneCategory.xml"-"c:\system\test\TestData\TP53-LandmarksOneCategory.xml"
+"..\databases\landmarks\XML_Files\TP53-LandmarkCategories.xml"-"c:\system\test\TestData\TP53-LandmarkCategories.xml"
+"..\databases\landmarks\XML_Files\TP53-LandmarksCategories.xml"-"c:\system\test\TestData\TP53-LandmarksCategories.xml"
+"..\databases\landmarks\XML_Files\TP53-Compact.xml"-"c:\system\test\TestData\TP53-Compact.xml"
+
+;XML files needed in TP49
+"..\databases\landmarks\XML_Files\Tp49ImportInput.xml"-"c:\system\test\TestData\Tp49ImportInput.xml"
+"..\databases\landmarks\XML_Files\Tp49ImportInputSyntaxError.xml"-"c:\system\test\TestData\Tp49ImportInputSyntaxError.xml"
+
+;XML files needed in TP55
+"..\databases\landmarks\XML_Files\TP55-DiskFullDuringExportImport.xml"-"c:\system\test\TestData\TP55-DiskFullDuringExportImport.xml"
+
+;XML files needed in TP56
+"..\databases\landmarks\XML_Files\TP56-LandmarksFromThreeDatabases.xml"-"c:\system\test\TestData\TP56-LandmarksFromThreeDatabases.xml"
+
+;XML files needed in TP76
+"..\databases\landmarks\corrupt_EPOSLMGLOBALCATEGORIES.R06"-"c:\system\test\TestData\corrupt_EPOSLMGLOBALCATEGORIES.R06"
+
+;Invalid database file needed in TP118
+"..\databases\landmarks\TP118HALFLMDB_2.LDB"-"c:\system\test\TestData\TP118HALFLMDB_2.LDB"
+
+;File used in TP100
+"..\databases\landmarks\XML_Files\TP100-LandmarksFromThreeDatabases.xml"-"c:\system\test\TestData\TP100-LandmarksFromThreeDatabases.xml"
+
+;File used in TP80
+;"..\databases\landmarks\01234567890123456789012345678901234567890123456789012345678901234567890123456789_COMPOSITEEPOSLM.LDB"-"c:\system\test\TestData\01234567890123456789012345678901234567890123456789012345678901234567890123456789_COMPOSITEEPOSLM.LDB"
+
+;File used in TP105
+"..\databases\landmarks\tp105_eposlmdefaultdbname.R06"-"c:\system\test\TestData\tp105_eposlmdefaultdbname.R06"
+"..\databases\landmarks\tp105_eposlmdefaultdbname.R01"-"c:\system\test\TestData\tp105_eposlmdefaultdbname.R01"
+
+; Databases used for multi searching
+"..\databases\landmarks\EPOSLM_020.LDB"-"c:\system\test\testdata\EPOSLM_020.LDB"
+"..\databases\landmarks\EPOSLM_040.LDB"-"c:\system\test\testdata\EPOSLM_040.LDB"
+"..\databases\landmarks\EPOSLM_060.LDB"-"c:\system\test\testdata\EPOSLM_060.LDB"
+"..\databases\landmarks\EPOSLM_080.LDB"-"c:\system\test\testdata\EPOSLM_080.LDB"
+"..\databases\landmarks\EPOSLM_105.LDB"-"c:\system\test\testdata\EPOSLM_105.LDB"
+
+"..\databases\landmarks\eposlm_1000_LMs.ldb"-"c:\system\test\testdata\eposlm_1000_LMs.ldb"
+"..\databases\landmarks\eposlm_5000_LMs.ldb"-"c:\system\test\testdata\eposlm_5000_LMs.ldb"
+
+;File used in TP136
+"..\databases\landmarks\XML_Files\TP136.xml"-"c:\system\test\TestData\TP136.xml"
+"..\databases\landmarks\XML_Files\TP136.gpx"-"c:\system\test\TestData\TP136.gpx"
+
+;File used in TP137
+"..\databases\landmarks\XML_Files\TP137.xml"-"c:\system\test\TestData\TP137.xml"
+"..\databases\landmarks\XML_Files\TP137.gpx"-"c:\system\test\TestData\TP137.gpx"
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/LandmarkTestModule_5_0.sis has changed
Binary file landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/LandmarkTestModule_5_0.sisx has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/LandmarkTests_gnumakefile.mk Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,89 @@
+#
+# Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Symbian Foundation License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Top makefile for Poison functiontests
+#
+
+# runs after 'abld makefile'
+MAKMAKE:
+ @echo *** DEBUG: MAKMAKE ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# runs after 'abld library'
+LIB:
+ @echo *** DEBUG: LIB ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# runs after 'abld resource'
+RESOURCE:
+ @echo *** DEBUG: RESOURCE ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# runs after 'abld target'
+BLD:
+ @echo *** DEBUG: BLD ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# runs after 'abld final'
+ifeq ($(PLATFORM),WINS)
+FINAL: COPY_TESTDATA
+ @echo *** DEBUG: FINAL ${PLATFORM} ${CFG} ${TO_ROOT}
+else
+ifeq ($(PLATFORM),WINSCW)
+FINAL: COPY_TESTDATA
+ @echo *** DEBUG: FINAL ${PLATFORM} ${CFG} ${TO_ROOT}
+#Create c:\resource directory
+ -@mkdir \EPOC32\${PLATFORM}\c\resource
+else
+FINAL:
+ @echo *** DEBUG: FINAL ${PLATFORM} ${CFG} ${TO_ROOT}
+endif
+endif
+
+# runs when called from
+COPY_TESTDATA:
+# Create testdata directory if it does not exist
+ -@mkdir \EPOC32\winscw\c\system\TEST\TestData
+ @echo Copying all testdata files needed by LandmarkTests, copy to ${PLATFORM} $(CFG)
+
+# Copy all landmarks databases to testdata
+
+ copy ..\databases\landmarks\* \EPOC32\winscw\c\system\TEST\TestData
+
+ copy ..\databases\landmarks\XML_files\* \EPOC32\winscw\c\system\TEST\TestData
+
+ @echo *** DEBUG: COPY_TESTDATA ${PLATFORM} ${CFG} ${TO_ROOT}
+ @echo ......Done copying
+
+# ???
+RELEASABLES:
+ @echo *** DEBUG: RELEASABLES ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# runs after clean operations
+CLEAN:
+ @echo *** DEBUG: CLEAN ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# runs after clean operations
+CLEANLIB:
+ @echo *** DEBUG:CLEANLIB ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# only runs during 'abld freeze'
+FREEZE:
+ @echo *** DEBUG: FREEZE ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# only runs when -savespace is specified.
+SAVESPACE:
+ @echo *** DEBUG: SAVESPACE ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# Generic target. Catches everything else (unknown targets etc.)
+%:
+ @echo *** DEBUG: GENERIC $@ ${PLATFORM} ${CFG} ${TO_ROOT}
+
+# End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// BLD.INF
+// Component description file
+
+PRJ_PLATFORMS
+//WINSCW ARMV5
+DEFAULT
+
+PRJ_EXPORTS
+../init/TestFramework.ini /epoc32/winscw/c/TestFramework/TestFramework.ini
+../conf/LandMarksTestModule1.cfg /epoc32/winscw/c/TestFramework/LandMarksTestModule1.cfg
+
+PRJ_TESTMMPFILES
+../Testprovider/ServerClientLib/group/FT_LmServerClientLibrary.mmp
+../Testprovider/group/FT_DbManPluginsTest.mmp
+LandMarksTestModule.mmp
+gnumakefile LandmarkTests_gnumakefile.mk
+
+PRJ_MMPFILES
+
+
+
+// Specify Extension makefile
+// <keyword (must be gnumakefile for gnu make)> <makefile name>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/EPos_LandmarksErrors.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*
+*/
+
+
+#ifndef LANDMARKSERRORS_H
+#define LANDMARKSERRORS_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32def.h>
+
+// CONSTANTS
+_LIT(KPosLandmarksClientPanic,"Landmarks Client");
+
+/**
+ * Landmarks panic codes
+ *
+ */
+enum TPositionLandmarksClientPanic
+ {
+ EPosInvalidPositionFieldId = 0
+ /** A client has specified a position field ID that is invalid for
+ the landmark. */,
+ EPosNoneOrMultipleLandmarkAttributeSet = 1
+ /** A client has specified none or multiple landmark attributes. */,
+ EPosSpecifiedIntervalLiesOutsideIteratedSet = 2
+ /** A client has specified an interval that lies partially outside the
+ iterated set. */,
+ EPosNaNCoordinate = 3
+ /** A client has specified a coordinate with latitude and/or longitude set
+ to NaN. */,
+ EPosInvalidLandmarkAttribute = 4
+ /** A client has specified a landmark attribute that is invalid. */,
+ EPosInvalidValueSpecifiedInResourceFile = 5
+ /** An invalid value has been detected in a resource file. */,
+ EPosInvalidPartialReadParameters = 6
+ /** Invalid partial read parameters have been detected. */,
+ EPosInvalidRequestedPositionFields = 7
+ /** Invalid requested position fields have been detected. */,
+ EPosNegativeValue = 8
+ /** A negative value has been detected. */,
+ EPosInvalidOperationMode = 9
+ /** Invalid operation mode. Caused by mixed calls to NextStep and ExecuteL
+ for an CPosLmOperation object or subsequent calls to NextStep. */,
+ EPosInvalidEnumValue = 10
+ /** Invalid enum value. */,
+ EPosLmProtocolBreak = 11
+ /** The protocol of CPosLandmarkEncoder/CPosLandmarkParser is not
+ followed. */,
+ EPosLmInvalidArgument = 12
+ /** A client has passed an invalid argument. */,
+ EPosInvalidIndex = 14
+ /** A client has specified an invalid index. */,
+ EPosInvalidItemType = 15
+ /** A client has specified an invalid item type. */,
+ EPosSearchOperationInUse = 16
+ /** A client has tried to set/unset display data during an ongoing search.
+ */
+ };
+
+// FUNCTION PROTOTYPES
+IMPORT_C GLDEF_C void Panic(const TDesC& aCategory, TInt aReason);
+
+#endif // LANDMARKSERRORS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CAreaSearchResult.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,99 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+
+#ifndef CAREASEARCHRESULT_H
+#define CAREASEARCHRESULT_H
+
+// INCLUDES
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+#include "Ft_CSearchResultBase.h"
+
+
+
+class CAreaSearchResult : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CAreaSearchResult* NewL(const TDesC& aDes);
+
+ /**
+ * Destructor.
+ */
+ ~CAreaSearchResult();
+
+ public:
+
+ TReal64 SouthLat() const;
+
+ TReal64 NorthLat() const;
+
+ TReal64 WestLong() const;
+
+ TReal64 EastLong() const;
+
+ TInt ErrorCode() const;
+
+ void Print(TDes& aDes);
+
+ private:
+
+ CAreaSearchResult();
+
+ void ConstructL(const TDesC& aDes);
+
+
+ private:
+
+ // By default, prohibit copy constructor
+ CAreaSearchResult(const CAreaSearchResult&);
+ // Prohibit assigment operator
+ CAreaSearchResult& operator=(const CAreaSearchResult&);
+
+ private: // Data
+
+ enum TValueIndex
+ {
+ ESouthLat =0,
+ ENorthLat =1,
+ EWestLong =2,
+ EEastLong =3,
+ EErrorCode =4,
+ ERedefined =5,
+ ESearchResult =6
+ };
+
+ TInt iErrorCode;
+
+ TReal64 iSouthLat;
+ TReal64 iNorthLat;
+ TReal64 iWestLong;
+ TReal64 iEastLong;
+
+ };
+
+#endif // CAREASEARCHRESULT_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CCategoryLandmarkSearchResult.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+
+#ifndef CCategoryLandmarkSearchResult_H
+#define CCategoryLandmarkSearchResult_H
+
+// INCLUDES
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+#include "Ft_CSearchResultBase.h"
+
+
+
+class CCategoryLandmarkSearchResult : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCategoryLandmarkSearchResult* NewL(const TDesC& aDes);
+
+ /**
+ * Destructor.
+ */
+ ~CCategoryLandmarkSearchResult();
+
+ public:
+
+ TPtrC CategoryName() const;
+
+ TPosLmItemId CategoryId() const;
+
+ const RArray<TUint>& PositionFields() const;
+
+ private:
+
+ CCategoryLandmarkSearchResult();
+
+ void ConstructL(const TDesC& aDes);
+
+
+ private:
+
+ // By default, prohibit copy constructor
+ CCategoryLandmarkSearchResult(const CCategoryLandmarkSearchResult&);
+ // Prohibit assigment operator
+ CCategoryLandmarkSearchResult& operator=(const CCategoryLandmarkSearchResult&);
+
+
+
+ void Print();
+
+
+
+ private: // Data
+
+ enum TValueIndex
+ {
+ ECategoryName =0,
+ ECategoryId =1,
+ ELmSearchResult =2,
+ ERedefined =3
+ };
+
+ HBufC* iCategoryName;
+ RArray<TUint> iPositionFields;
+ TPosLmItemId iCategoryId;
+
+ };
+
+#endif // CCategorySearchResult_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CCategorySearchResult.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CCategorySearchResult_H
+#define CCategorySearchResult_H
+
+// INCLUDES
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+#include "Ft_CSearchResultBase.h"
+
+
+
+class CCategorySearchResult : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCategorySearchResult* NewL(const TDesC& aDes);
+
+ /**
+ * Destructor.
+ */
+ ~CCategorySearchResult();
+
+ public:
+
+ TPtrC TextCriteria() const;
+
+ const RArray<TUint>& PositionFields() const;
+
+ private:
+
+ CCategorySearchResult();
+
+ void ConstructL(const TDesC& aDes);
+
+
+ private:
+
+ // By default, prohibit copy constructor
+ CCategorySearchResult(const CCategorySearchResult&);
+ // Prohibit assigment operator
+ CCategorySearchResult& operator=(const CCategorySearchResult&);
+
+ void ParsePositionFields(const TDesC& aDes);
+
+ void Print();
+
+ TBool Equals32(const TReal aValue1, const TReal aValue2, const TReal aAccuracy);
+
+ private: // Data
+
+ enum TValueIndex
+ {
+ ETextCriteria =0,
+ ELmSearchResult =1,
+ ERedefined =2
+ };
+
+ HBufC* iTextCriteria;
+ RArray<TUint> iPositionFields;
+
+ };
+
+#endif // CCategorySearchResult_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CCompositeSearchResult.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CCOMPOSITESEARCHRESULT_H
+#define CCOMPOSITESEARCHRESULT_H
+
+// INCLUDES
+#include <e32base.h>
+#include <f32file.h>
+#include "Ft_CSearchResultBase.h"
+#include <StifLogger.h>
+
+
+class CPosLmCompositeCriteria;
+// CONSTANTS
+
+
+class CCompositeSearchResult : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCompositeSearchResult* NewL(CStifLogger* aLog);
+
+ /**
+ * Destructor.
+ */
+ ~CCompositeSearchResult();
+
+ public:
+
+ TBool GetCompositeSearchResultsL(CPosLmCompositeCriteria& aComposite);
+
+ //RArray<TPosLmItemId>& GetSearchResult();
+
+ public: // data
+ RArray<TPosLmItemId> iResultIds;
+
+ TReal64 iSouthLat;
+ TReal64 iNorthLat;
+ TReal64 iWestLong;
+ TReal64 iEastLong;
+
+ private:
+
+ CCompositeSearchResult();
+
+ void ConstructL(CStifLogger* aLog);
+
+ TInt ReadLn(RFile& aFile, TDes& aDes);
+
+ void ParseAreaL(const TDesC& aDes);
+
+ void ParseTextL(const TDesC& aDes);
+
+ void ParseCategoryL(const TDesC& aDes);
+
+ void ParseNearestL(const TDesC& aDes);
+
+ void ParseIdListL(const TDesC& aDes);
+
+ void ParseResultL(const TDesC& aDes);
+
+ void ExtractIdFields(const TDesC& aDes, RArray<TUint>& aList);
+
+ private:
+
+ // By default, prohibit copy constructor
+ CCompositeSearchResult(const CCompositeSearchResult&);
+ // Prohibit assigment operator
+ CCompositeSearchResult& operator=(const CCompositeSearchResult&);
+
+ private: // Data
+
+ enum TAreaValueIndex
+ {
+ ESouthLat =1,
+ ENorthLat =2,
+ EWestLong =3,
+ EEastLong =4,
+ };
+
+ enum TCategoryValueIndex
+ {
+ ECategoryName =1,
+ ECategoryId =2,
+ };
+
+ enum TTextValueIndex
+ {
+ ETextCriteria =1,
+ EAttributes =2,
+ EPositionFields =3,
+ };
+
+ enum TNearestValueIndex
+ {
+ ELatitude =1,
+ ELongitude =2,
+ EUseCoverageRadius =3,
+ EMaxDistance =4,
+ };
+
+ enum TIdListValueIndex
+ {
+ ELmIdList =1,
+ };
+
+ enum TResultValueIndex
+ {
+ ELmResultIdList =1,
+ ERedefined =2
+ };
+
+
+ // Test log, used for debug text
+ CStifLogger* iLog;
+
+ RFs iFileSession;
+ RFile iFile;
+
+ HBufC* iTextCriteria;
+ HBufC* iCategoryName;
+ TInt iCategoryId;
+
+ CPosLandmark::TAttributes iTextAttributes;
+
+ RArray<TUint> iIdList;
+ RArray<TUint> iPositionList;
+
+ TReal64 iLatitude;
+ TReal64 iLongitude;
+ TBool iUseCoverageRadius;
+ TReal32 iMaxDistance;
+
+ TBool iTextEnabled;
+ TBool iAreaEnabled;
+ TBool iNearestEnabled;
+ TBool iCategoryEnabled;
+ TBool iIdListEnabled;
+
+ TInt iTestCounter;
+
+ };
+
+#endif // CCompositeSearchResult_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CLandmarkTestProcedureBase.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,523 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CLANDMARKTESTPROCEDUREBASE_H
+#define CLANDMARKTESTPROCEDUREBASE_H
+
+// INCLUDES
+//#include <utfw.h>
+#include <w32std.h>
+#include <e32def.h>
+#include <ss_std.h>
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmOperation.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+
+#include "FT_CSearchResult.h"
+#include "FT_CAreaSearchResult.h"
+#include "FT_CCategorySearchResult.h"
+#include "FT_CCategoryLandmarkSearchResult.h"
+
+#include <StifLogger.h>
+#include <StifItemParser.h>
+
+// Global category IDs as defined by Global Category API specification
+// Global category identifier when used for searching
+const TInt KAccommodation = 3000; //Hotel, Camping site
+const TInt KBusiness = 6000; //Bank, Factory, Office
+const TInt KCommunication = 9000; //Internet Access Point, Public Telephone, Wireless LAN Hot Spot
+const TInt KEducational = 12000;// School, College
+const TInt KEntertainment = 15000;// Amusement park, Cinema, Concert hall, Night club
+const TInt KFoodBeverage = 18000; //Fast food, Restaurant, Café, Bar
+const TInt KGeographicalArea = 21000;//City, City center, Town
+const TInt KOutdoorActivities = 24000; //Camping site, Fishing place, Hunting, National park, Playground
+const TInt KPeople = 27000;// My home, My friend's home, Father's summer cottage, Child's school
+const TInt KPublicService = 30000; //Tourist information office, Government office, Library, Post office, Hospital, Police
+const TInt KReligiousPlaces = 33000; //Church, Mosque
+const TInt KShopping = 36000; //Market place, Pharmacy, Shop, Shopping center
+const TInt KSightseeing = 39000; //Monument, Mountain top, Museum
+const TInt KSports = 42000 ; //Bowling, Golf course, Ice hockey hall, Stadium
+const TInt KTransport = 45000; //Airport, Bus stop, Harbor, Railway station, Rest area
+
+// CONSTANTS
+_LIT(KAccessErr, "Access methods should return 'Not initialized' when db has been created");
+_LIT(KInitErr, "Method InitializedNeeded should return ETrue after db has been created");
+_LIT8(KLmxMimeType, "application/vnd.nokia.landmarkcollection+xml");
+_LIT8(KGpxMimeType, "application/gps+xml");
+_LIT8(KKmlMimeType,"application/vnd.google-earth.kml+xml");
+_LIT8(KKmzMimeType,"application/vnd.google-earth.kmz");
+_LIT(KLmxFileExt,".lmx");
+_LIT(KGpxFileExt,".gpx");
+_LIT(KXmlFileExt,".xml");
+
+const TInt KMsgBufSize = 255;
+const TInt KMaxLineLength = 1024;
+
+// FORWARD DECLARATIONS
+class CPosLmMultiDbSearch;
+class CPosLmSearchCriteria;
+
+// DATA TYPES
+typedef RArray<TPosLmItemId> RIdArray;
+
+// CLASS DECLARATION
+class CPosLandmarkCategory;
+class CActiveLmOperation;
+
+class CLandmarkTestProcedureBase :public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CLandmarkTestProcedureBase(TInt aModuleId, CStifLogger* iLog );
+
+ /**
+ * Destructor.
+ */
+ ~CLandmarkTestProcedureBase();
+
+ /**
+ * Initialises the test.
+ * By default does nothing.
+ */
+ virtual void InitTestL();
+
+ /**
+ * Executes the test.
+ * By default does nothing.
+ */
+ virtual void StartL();
+
+ /**
+ * Executes the test.
+ * By default does nothing.
+ */
+ virtual void StartL( CStifItemParser& ) {};
+
+ /**
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ * By default does nothing.
+ */
+ virtual void CloseTest();
+
+
+ public: // Functions from base classes
+
+
+ static TInt ReadLn(RFile& aFile, TDes& aDes);
+
+ static void ResetAndDestroyHBufCArray( TAny* aPointer );
+
+ protected: // New functions
+
+ static void Trace(TBuf8<KMsgBufSize> msg) ;
+
+ /**
+ * Removes the default landmark database if exists
+ */
+ void RemoveDefaultDbL();
+
+ /**
+ * Removes all existing landmark databases
+ */
+ void RemoveAllLmDatabasesL();
+
+ /**
+ * Compare two landmarks.
+ * Should only be used when they are expected to be equal.
+ */
+ void CompareLandmarksL(const CPosLandmark& aSource, const CPosLandmark& aTarget);
+
+ /**
+ * Compare two categories.
+ * Should only be used when they are expected to be equal.
+ */
+ void CompareCategoriesL(
+ const TPosLmItemId& aSourceId,
+ const TPosLmItemId& aTargetId);
+
+ void CompareCategoriesL(
+ const CPosLandmarkCategory& aSource,
+ const CPosLandmarkCategory& aTarget);
+
+
+ TInt CompareXMLCategoriesL(
+ const CPosLandmarkCategory& aSource,
+ const CPosLandmarkCategory& aTarget, TBool aDebug=EFalse);
+
+ TInt CompareXMLLandmarksL(const CPosLandmark& aSource, const CPosLandmark& aTarget, TBool aDebug=EFalse);
+
+ /**
+ * Creates a caategory with all attributes set
+ * @param the category name
+ */
+ CPosLandmarkCategory* CreateCategoryLC(const TDesC& aName);
+
+ /**
+ * Creates a landmarks with all attributes set
+ * @param the landmark name
+ */
+ CPosLandmark* CreateLandmarkLC(const TDesC& aName);
+
+ /**
+ * Opens the landmarks database and initializes it if necearry
+ * @return the landmarks database
+ */
+ CPosLandmarkDatabase* OpenDatabaseLC();
+
+ /**
+ * Creates a category and adds it to the database
+ * @return the category id
+ */
+ TPosLmItemId CreateCategoryL(const TDesC& aName);
+
+ /**
+ * Adds some fields to a landmark
+ * @param the landmark
+ */
+ void AddFieldsL(CPosLandmark* aLandmark);
+
+ void AddFields2L(CPosLandmark* aLandmark);
+
+ void AddFields3L(CPosLandmark* aLandmark);
+
+ TInt CompareL(const TDesC& aFileName);
+
+ TInt CompareL(const TDesC& aSourceFileName, const TDesC& aTargetFileName);
+
+ /*
+ * Create landmark with name, coordinate, coverage radius, icon set
+ */
+ CPosLandmark* CreateXMLLandmarkLC(const TDesC& aName);
+
+
+ /**
+ * Add all fields to a landmark that is encoded to XML
+ */
+ void AddAllXMLFieldsL(CPosLandmark* aLandmark);
+
+ /**
+ * Add all fields to a landmark that is encoded to XML
+ * All fields are empty (_L(""))
+ */
+ void AddAllEmptyXMLFieldsL(CPosLandmark* aLandmark);
+
+ /**
+ * Writes the content of the buffer to the specified file
+ * Removes the file if allready exists
+ */
+ void WriteBufferToFileL(const CBufBase* aBuffer, const TDesC& aFileName);
+
+ void CheckDefaultDbExistL();
+
+ CPosLandmarkDatabase* BackupDbFileL();
+
+ CPosLandmarkDatabase* RestoreDbFileL();
+
+ void CopyDbFileL(const TDesC& aFileName);
+
+ void CopyTestDbFileL(const TDesC& aFileName);
+
+ CPosLandmarkDatabase* UseGeneratedDbFileL();
+
+ /**
+ * Copy the landmarks db used for composite testing
+ * to correct path
+ */
+ CPosLandmarkDatabase* UseCompositeLandmarksDbFileL();
+
+ CPosLandmarkDatabase* UseGlobalCategoriesL();
+
+ CPosLandmarkDatabase* UseEmptyDbFileL();
+
+ void RemoveGlobalCategoriesL();
+
+ void AppendSearchResultsL();
+
+ void AppendAreaSearchResultsL();
+
+ void AppendCategoryLandmarkSearchResultsL();
+
+ void AppendCategorySearchResultsL();
+
+ const RPointerArray<CSearchResult>& SearchResults();
+
+ const RPointerArray<CAreaSearchResult>& AreaSearchResults();
+
+ void PrintLandmark(const CPosLandmark& aLandmark, TDes& aPrint);
+
+ void LandmarksSortL(RArray<TPosLmItemId>& aArray, const TPosLmSortPref& aSortPref);
+
+ void CategoriesSortL(RArray<TPosLmItemId>& aArray, CPosLmCategoryManager::TCategorySortPref aSortPref);
+
+ void LogToFileL(const TDesC& aFileName, TBuf8<KMsgBufSize> aMsg);
+
+ void RunAsyncOperationLD(CPosLmOperation* aOperation);
+
+ void RunAsyncOperationL(CPosLmOperation* aOperation);
+
+ void RunAsyncOperationByWaitForReqL(CPosLmOperation* aOperation);
+
+ void RunAsyncOperationAndCancelLD(CPosLmOperation* aOperation);
+
+ void RunAsyncOperationAndCancelInCallbackLD(CPosLmOperation* aOperation, TReal32 aThreshold = 0.3);
+
+ /**
+ * Deletes a file from the file system
+ * @aFile the file name
+ */
+ void DeleteFileL(const TDesC& aFile);
+
+ /**
+ * Makes sure that the empty file ErrRd is created in c:\system\bootdata
+ * if it is not already created. Should be called by all panic tests
+ * before any panic occurs.
+ */
+ void MakeSurePanicDebugFileExistsL();
+
+ /**
+ * Used as a callback method to cancel a operation after some
+ * steps have been executed.
+ * @param self
+ */
+ TInt static CancelTest(TAny* aSelf);
+
+ void AssertTrueSecL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode=KErrGeneral);
+
+ /**
+ * Checks if the server with name aServerName is alive
+ */
+ TBool ServerAlive(const TDesC& aServerName);
+
+ CDesCArray* ListLandmarkDbsL();
+
+ void ReadGlobalCategoriesFromResourceL(
+ RArray<TUint>& aCatIds,
+ RPointerArray<HBufC>& aCatNames,
+ TInt aMaxNum = 0);
+
+ void CreateCorrectXmlFileL( const TDesC& aSampleFile, TFileName& aFileName );
+
+ HBufC* GetGlobalCategoryFromResourceLC( TPosLmGlobalCategory aGlobalId );
+
+ HBufC* ReadDefaultDatabaseNameFromResourceLC();
+
+ /**
+ * Escapes the string with characters not supported in XML.
+ *
+ * @param aStrToEscape The string to escape.
+ * @return An escaped string.
+ */
+ HBufC* EscapeStringToXmlLC(
+ /* IN */ const TDesC& aStrToEscape
+ );
+
+ void EscapeString(
+ /* IN/OUT */ TDes& aStrToEscape,
+ /* IN */ const TDesC& aFromStr,
+ /* IN */ const TDesC& aToStr
+ );
+
+ TInt CalculateEscapedStringSize(
+ /* IN */ const TDesC& aStrToEscape
+ );
+
+ TInt CalculateIncrease(
+ /* IN */ const TDesC& aStrToEscape,
+ /* IN */ const TDesC& aFromStr,
+ /* IN */ const TDesC& aToStr
+ );
+
+
+ public:
+
+ //RWsSession iWs;
+ TInt iModuleId;
+
+ protected: // Data
+
+ class COnTheFlyTester : public CActive
+ {
+ public:
+
+ static COnTheFlyTester* NewLC();
+ ~COnTheFlyTester();
+ void StartSearchCampaignL(
+ CPosLmMultiDbSearch* aSearcher,
+ const RIdArray& aExpectedMatches,
+ CPosLmSearchCriteria* aSearchCriteria);
+ TInt Err() {return iErr;}
+ void GetErrMsg(TPtrC& aErrMsg) {aErrMsg.Set(iBuf);}
+
+ protected:
+
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+
+ private:
+
+ COnTheFlyTester();
+ void VerifyOnTheFlyDataL(TBool aIsFinished = EFalse);
+
+ private: // Data
+
+ CPosLmMultiDbSearch* iSearcher;
+ TInt iErr;
+ TInt iNrOfOldItems;
+ CPosLmOperation* iOperation;
+ TReal32 iProgress;
+ CPosLmDisplayData* iDisplayData;
+ TBuf<200> iBuf;
+ const RIdArray* iExpectedMatches;
+
+ };
+
+ enum TExecutionMode
+ {
+ ESynchronous = 0,
+ EAsynchronous,
+ EWaitForRequest
+ };
+
+ const TTimeIntervalMicroSeconds32 KFirstDelayTime;
+ const TTimeIntervalMicroSeconds32 KIntervalTime;
+
+ CPosLandmarkDatabase* iDatabase;
+ CPosLandmarkSearch* iLandmarkSearch;
+ CPosLmMultiDbSearch* iLmMultiSearch;
+
+ // Search
+ RPointerArray<CSearchResult> iSearchResults;
+ RPointerArray<CAreaSearchResult> iAreaSearchResults;
+ RPointerArray<CCategoryLandmarkSearchResult> iCategoryLandmarkSearchResults;
+ RPointerArray<CCategorySearchResult> iCategorySearchResults;
+
+ CPosLmOperation* iOperation;
+ // Use this method when using CActiveLmOperation class from multiple threads
+ // this is due to that it is not possible to use the iLog from different threads
+ // set to ETrue is used from multiple threads
+
+ TBool iUseLogFromThreadIsDisabled;
+ CStifLogger* iLog;
+ RFs iFileSession;
+ private: // Data
+
+ //TUint iCallbacks;
+
+
+ };
+
+class MProgressObserver
+ {
+ public: // New functions
+
+ /**
+ * Notifies the progress of the execution of a CPosLmOperation object.
+ *
+ * @param sProgress the progress of the operation
+ */
+ virtual void NotifyProgress(TReal aProgress) = 0;
+
+ };
+
+class CActiveLmOperation : public CActive
+ {
+ public:
+
+ /**
+ * C++ constructor.
+ */
+ CActiveLmOperation(
+ CStifLogger* aLog,
+ TBool aUseLogFromThreadIsDisabled = EFalse,
+ TReal32 aThreshold = 0.3);
+
+ /**
+ * Destructor.
+ */
+ ~CActiveLmOperation();
+
+ public:
+
+ void Start(CPosLmOperation* aOperation, MProgressObserver* aObserver = NULL);
+
+ void CheckOperationL();
+
+ void DeleteOperationD();
+
+ TInt Status() const;
+
+ TReal Progress() const;
+
+ CPosLmOperation* Operation();
+
+ void SetCancelTest();
+
+ TReal32 Threshold();
+
+ TReal32 DeltaProgress();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+
+ private:
+
+
+ private: // data
+
+ CPosLmOperation* iOperation;
+
+ TReal32 iPassedProgress;
+ TReal32 iLastProgress;
+ TReal32 iDeltaProgress;
+ TReal32 iThreshold;
+
+ TBool iAsyncProgressErr;
+ TBool iPassedProgressErr;
+
+ TBool iCancelTest;
+
+ TBool iUseLogFromThreadIsDisabled;
+
+ MProgressObserver* iObserver;
+ CStifLogger* iLog;
+ };
+
+
+#endif // CLANDMARKTESTPROCEDUREBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTP26.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp26_H
+#define CPOSTp26_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 26
+*/
+class CPosTp26 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp26(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iGlobalErr = KErrGeneral;iNrSearchRounds=0;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp26() {};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private: // New functions
+
+ /**
+ * Test to do a iterate landmark search using the CPosLmTextCriteria criteria
+ */
+ void DoLandmarkSearchL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ /**
+ * Test to do a iterate category landmark search using the CPosLmCatNameCriteria criteria
+ */
+ void DoLandmarkCategorySearchL(const RPointerArray<CCategorySearchResult>& aSearchResults);
+
+ private: // Data
+
+
+ TInt iGlobalErr;
+ TInt iNrSearchRounds;
+ };
+
+#endif // CPOSTp26_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTP27.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp27_H
+#define CPOSTp27_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 27
+*/
+class CPosTp27 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp27(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog)
+ {iGlobalErr = KErrNone;iNrSearchRounds=0;iBreakSearch=-1;
+ iCancelOrDelete = EFalse;iHandleOperationDisabled=EFalse;
+ iDebug=ETrue;iProgress=100;};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp27() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ */
+ void CloseTest();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From MPosLmAsyncObserver
+ * Called to report progress of an asynchronous landmarko peration.
+ * @param aOperation The object which handles the asyncronous operation.
+ */
+ void HandleOperationProgress(CPosLmOperation* aOperation);
+
+
+ static TInt StopActiveSchedulerWait(TAny* aSelf);
+
+ private: // New functions
+
+ /**
+ * Test to cancel a landmark category search
+ *
+ */
+ void CancelLandmarkCategorySearch();
+
+ /**
+ * Test to cancel a landmark search
+ *
+ */
+ void CancelLandmarkSearch();
+
+ private: // Data
+
+ RFs iFileServer;
+ RFile iFile;
+ TInt iGlobalErr;
+ TInt iNrSearchRounds;
+ TInt iBreakSearch;
+ TBool iCancelOrDelete;
+ TBool iHandleOperationDisabled;
+ TBool iDebug;
+ CPeriodic* iPeriodicTimer;
+ TReal32 iProgress;
+
+ };
+
+#endif // CPOSTp27_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTP28.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPosTp28_H
+#define CPosTp28_H
+
+// INCLUDES
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+class CActiveLmEvent;
+// CLASS DECLARATION
+
+/**
+* Test procedure 28
+*/
+class CPosTp28 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp28(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp28() {};
+
+ public: // Functions from base classes
+
+
+
+ void CloseTest();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private: // New functions
+
+ /**
+ * Test logging of landmark events
+ */
+ void LandmarkEventTest();
+
+ void LandmarkEventQueueTest();
+
+
+ private: // Data
+
+ CActiveLmEvent* iActiveLmEvent;
+ CPosLmCategoryManager* iCategoryManager;
+ };
+
+class CActiveLmEvent : public CActive
+ {
+ public:
+
+ static CActiveLmEvent* NewL(CStifLogger* aLog);
+
+ /**
+ * Destructor.
+ */
+ ~CActiveLmEvent();
+
+ public:
+
+ void Start();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CActiveLmEvent(CStifLogger* aLog);
+
+ void ConstructL();
+
+ void VerifyEvent();
+
+ void VerifyMergedEvent();
+
+ void AssertCorrectEvent(TPosLmEventType aExpectedEventType,
+ TPosLmEventType aEventType,
+ TPosLmItemId aExpectedLandMarkItemId,
+ TPosLmItemId aLandMarkItemId);
+
+ private: // data
+
+ friend class CPosTp28;
+
+ CStifLogger* iLog;
+ CPosLandmarkDatabase* iDatabase;
+
+
+
+ TPosLmEvent iEvent;
+ TInt iEventNumber;
+ TInt iMergedEventNumber;
+ TInt iGlobalErr;
+
+ TBool iQueueTest;
+
+ TPosLmItemId iLandmarkId;
+ TPosLmItemId iLandmarkId2;
+ TPosLmItemId iLandmarkId3;
+ TPosLmItemId iLandmarkId4;
+
+ TPosLmItemId iCategoryId;
+ TPosLmItemId iCategoryId2;
+ TPosLmItemId iNonExistingCategoryId;
+ TPosLmItemId iDeleteCategoryId;
+ };
+
+#endif // CPosTp28_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTP29.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp29_H
+#define CPOSTp29_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 29
+*/
+class CPosTp29 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp29() : CLandmarkTestProcedureBase(29) {iGlobalErr = KErrGeneral;};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp29() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ */
+ void CloseTest();
+
+ /**
+ * From CUtfwTestBase
+ */
+ void InitTestL();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private: // New functions
+
+ void ReInitTestL();
+
+ void TestCriticalLevelL();
+
+ void ConsumeDiscSpace1L(TInt aSizeLimit);
+
+ void ConsumeDiscSpace2L(TInt aSizeLimit);
+
+ void DeleteFile2L();
+
+ void RemoveAllLandmarksL();
+
+ void DoOutOfDiskTestL(TBool aSync);
+
+ void InitiateCriticalLevelL();
+
+ void CopyResourceFileL(const TDesC& aResourceFile = KNullDesC);
+
+ void TryRestoreResourceFile();
+
+ private: // Data
+
+ RFs iFileServer;
+ RFile iFile1;
+ RFile iFile2;
+ TInt iGlobalErr;
+ TInt iCriticalLevel;
+ TInt iCriticalThreshold;
+
+ CPosLandmarkDatabase* iLandmarksDb;
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp29_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTP54.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp54_H
+#define CPOSTp54_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 54
+*/
+class CPosTp54 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp54() : CLandmarkTestProcedureBase(54) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp54() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ */
+ void CloseTest();
+
+ /**
+ * From CUtfwTestBase
+ */
+ void InitTestL();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private: // New functions
+
+ /**
+ * Returns the execution time in milliseconds
+ */
+ TInt64 ExecutionTimeSynchL(TBool aIsSorted);
+
+ /**
+ * Returns the longest execution time of a RunL call in milliseconds
+ */
+ TInt64 ExecutionTimeAsynchL(TBool aIsSorted);
+
+ TBool VerifyResult(
+ TInt64 aExecTime,
+ TInt aNrOfLandmarks,
+ TBool aSorted,
+ TInt64 aLimit,
+ TBool aSynch);
+
+ TInt64 TestIteratorSynchL(const TDesC& aDatabase, TBool aIsSorted);
+
+ TInt64 TestIteratorAsynchL(const TDesC& aDatabase, TBool aIsSorted);
+
+ void RecreateDatabaseL(const TDesC& aDatabase);
+
+ TInt64 ExecuteLmOp(CPosLmOperation* aOp, TInt& aResult);
+
+ void CreateLargeDbs(TInt aNrOfItems);
+
+ private: // Data
+
+ };
+
+#endif // CPOSTp54_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTP55.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,170 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP55_H
+#define CPOSTP55_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 55
+*/
+class CPosTp55 : public CLandmarkTestProcedureBase,
+public MProgressObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp55() : CLandmarkTestProcedureBase(55) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp55() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ */
+ void CloseTest();
+
+ /**
+ * From CUtfwTestBase
+ */
+ void InitTestL();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From MProgressObserver
+ * Notifies the progress of the execution of a CPosLmOperation object.
+ *
+ * @param sProgress the progress of the operation
+ */
+ void NotifyProgress(TReal aProgress);
+
+ private: // New functions
+
+ void TestCriticalLevelL();
+
+ void RecreateAndOpenFilesL();
+
+ void ExportLandmarksTestL();
+
+ void ImportLandmarksTestL(TBool aCriticalLevelPassed);
+
+ void ConsumeDiskSpaceL(RFile& aFile, TInt aSizeLimit);
+
+ /**
+ * Imports landmarks from an XML file or a buffer to the database.
+ *
+ * @param aInputFile file to import from. KNullDesC if buffer is to be
+ * used as target.
+ * @param aInputBuffer buffer to import landmarks from. NULL if not used.
+ * @param aArrayOfIds to export when calling ExportLandmarksL(). NULL
+ * if encoder is to be used stand-alone.
+ * @param aExecuteIncrementally ETrue if CPosLmOperations should be
+ * executed incrementally, EFalse if CPosLmOperations should be
+ * synchronously.
+ * @param aTestBeyondCriticalLevel ETrue if critical level is passed, EFalse otherwise
+ */
+ void ImportLandmarksL(
+ const TDesC& aInputFile,
+ RArray<TUint>* aArrayOfIds,
+ TBool aExecuteIncrementally,
+ TBool aTestBeyondCriticalLevel);
+
+ void InitiateCriticalLevelL();
+
+ void LogVolumeInfoL();
+
+ void DeleteFileL(const TDesC& aFile);
+
+ void FillFile3L();
+
+ HBufC8* CreateInputBufferL();
+
+ void ReInitializeEncoderEtcL();
+
+ TInt ExecuteLmOperationL(TBool aExecuteIncrementally);
+
+ void SetOutputBufferL();
+
+ void AddCollectionDataToEncoderL();
+
+ void AddLandmarksToEncoderL(TBool aAddAll);
+
+ void ExportWithExportLandmarksMethodL(
+ RArray<TPosLmItemId>& aArrayOfIds,
+ TBool aExecuteIncrementally);
+
+ void FinalizeEncoderL(TBool aExecuteIncrementally);
+
+ void PopulateArrayL(
+ RArray<TPosLmItemId>& aArray,
+ TBool aDoAddAllLms);
+
+ void CopyResourceFileL(const TDesC& aResourceFile = KNullDesC);
+
+ void TryRestoreResourceFile();
+
+ private: // Data
+
+ RFs iFileServer;
+ RFile iFile1;
+ RFile iFile2;
+ RFile iFile3;
+ RFile iXmlOutputFile;
+ TInt iCriticalLevel;
+ TInt iCriticalThreshold;
+ TInt iSizeLimit1;
+ TInt iSizeLimit2;
+ TBuf<150> iMsg;
+ TInt iProgress;
+
+ CBufBase* iOutputBuffer;
+ HBufC8* iInputBuffer;
+ CPosLandmarkEncoder* iLandmarkEncoder;
+ CPosLandmarkParser* iLandmarkParser;
+ CPosLmOperation* iOperation;
+ CActiveLmOperation* iOperationWrapper;
+ };
+
+#endif // CPOSTP55_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp1.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP1_H
+#define CPOSTP1_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+
+
+
+/**
+* Test procedure 1
+*/
+class CPosTp1 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp1(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp1() {};
+
+ public: // Functions from base classes
+
+
+ void StartL();
+
+ private:
+
+ /**
+ * Tests if it is possible to instantiate the db when it is locked
+ */
+ void VerifyLockedDatabaseL();
+
+ };
+
+#endif // CPOSTP1_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp10.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP10_H
+#define CPOSTP10_H
+
+// INCLUDES
+#include <EPos_CPosLMCategoryManager.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+
+/**
+* Test procedure 10
+*/
+class CPosTp10 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp10(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp10() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ private:
+ void AddCategoriesL();
+
+ void ReadCategoriesL();
+
+ void UpdateCategoriesL();
+
+ void AddLandmarksL();
+
+ void AddCategoriesToLandmarksL();
+
+ void AddCategoriesToLandmarksAsyncL();
+
+ void AddCategoriesToLandmarksUsingWaitForReqL();
+
+ void AddCategoriesToLandmarksAsyncAndCancelL(const TBool& aInCallback=EFalse);
+
+ void CheckLandmarksL();
+
+ void CheckRemovedL(const TInt startIndex, const TInt stopIndex);
+
+ void RemoveCategoryL();
+
+ void RemoveCategoryAsyncL();
+
+ void RemoveCategoryUsingWaitForReqL();
+
+ void RemoveCategoryAsyncAndCancelL(const TBool& aInCallback=EFalse);
+
+ void RemoveSetOfCategoriesL();
+
+ void RemoveSetOfCategoriesAsyncL();
+
+ void RemoveSetOfCategoriesUsingWaitForReqL();
+
+ void RemoveSetOfCategoriesAsyncAndCancelL(const TBool& aInCallback=EFalse);
+
+ void RemoveCategoryFromSetOfLandmarksL();
+
+ void RemoveCategoryFromSetOfLandmarksAsyncL();
+
+ void RemoveCategoryFromSetOfLandmarksUsingWaitForReqL();
+
+ void RemoveCategoryFromSetOfLandmarksAsyncAndCancelL(const TBool& aInCallback=EFalse);
+
+ void RemovedFromLandmarksInternalL(TPosLmItemId aCategoryId);
+
+ void ReadCategoryL(TPosLmItemId aCategoryId);
+
+ void AddCategoriesToLandmarksAsyncErrCheckL();
+
+ /**
+ * Test LMREQ121
+ */
+ void TestMissingCategories1L();
+
+ /**
+ * Test LMREQ121
+ */
+ void TestMissingCategories2L();
+
+ void CompareTwoCategoriesL(TInt aIndex);
+
+ CPosLandmarkDatabase* BackupTp10DbFileL();
+
+ CPosLandmarkDatabase* RestoreTp10DbFileL();
+
+
+ private: // data
+
+ CPosLmCategoryManager* iCategoryManager;
+ RPointerArray<CPosLandmarkCategory> iCategories;
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ };
+
+#endif // CPOSTP1_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp100.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP100_H
+#define CPOSTP100_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 100
+*/
+class CPosTp100 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp100(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp100() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void TestOpenSpecificDbL();
+
+ void TestOpenDbL(const TDesC& aDbURI);
+
+ void TestMultipleExportL();
+
+ void CreateDatabasesL();
+
+ void TestLockedDatabaseL();
+
+ };
+
+#endif // CPOSTP100_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp101.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP101_H
+#define CPOSTP101_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+
+/**
+* Test procedure 101
+*/
+class CPosTp101 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp101(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp101() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void VerifySetOfDatabasesL();
+
+ void VerifyDatabaseL(CDesCArray* aLmUris, CDesCArray* aNewLmUris = NULL);
+
+ void CheckDatabasesL(
+ CDesCArray* aExpectedLmUris,
+ TUint aExpectedMaxMatches = KPosLmMaxNumOfMatchesUnlimited
+ );
+
+
+ void SearchL(
+ const RPointerArray<CSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void GetLmIdsL(
+ TInt aDbId,
+ RArray<TPosLmItemId> aSearchResults,
+ RArray<TPosLmItemId>& aLmIdForADb
+ );
+
+ void CheckEqualsLmsL(
+ TPosLmItemId aSource,
+ TPosLmItemId aTarget
+ );
+
+ void OnTheFlySearchL();
+
+ void SearchAndDeleteL(
+ const RPointerArray<CSearchResult>& aSearchResults
+ );
+
+ void SearchAndRenameL(
+ const RPointerArray<CSearchResult>& aSearchResults
+ );
+
+ void SearchAndCancelL(const TBool& aInCallback = EFalse);
+
+ void SearchWithMaximumL(
+ const RPointerArray<CSearchResult>& aSearchResults
+ );
+
+
+ CDesCArray* CreateDatabasesL(
+ TInt aNrOfLmDbs,
+ TInt aLmPerDb,
+ TInt aLastId,
+ TBool aDebug = EFalse
+ );
+
+ private:
+
+ CDesCArray* iDbArray;
+
+ };
+
+#endif // CPOSTP56_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp102.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP102_H
+#define CPOSTP102_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+/**
+* Test procedure 102
+*/
+class CPosTp102 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ //CPosTp102() : CLandmarkTestProcedureBase(102) {};
+ CPosTp102(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp102() {};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ * Verify the number of existing landmark databases
+ */
+ void VerifyNrOfDatabasesL(TInt aExpNrOfDatabases, const TDesC& aDatabaseUri=KNullDesC);
+
+ /**
+ * Create a new landmark database using DBMS api (instead of the Landmarks API)
+ */
+ void CreateDatabaseL(const TDesC& aUri);
+
+ void TestDifferentUrisL();
+
+ };
+
+#endif // CPOSTP102_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp103.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP103_H
+#define CPOSTP103_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 103
+*/
+class CPosTp103 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp103(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp103() {};
+
+ public: // Functions from base classes
+
+
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ /**
+ * Verify the number of existing landmark databases
+ */
+ void VerifyNrOfDatabasesL(TInt aExpNrOfDatabases, const TDesC& aDatabaseUri=KNullDesC);
+
+ /**
+ *
+ */
+ void TestPartCopyDatabasesL();
+
+ };
+
+#endif // CPOSTP103_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp104.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp104_H
+#define CPOSTp104_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLmDatabaseManager.h>
+#include <centralrepository.h>
+
+
+
+/**
+* Test procedure 104
+*/
+class CPosTp104 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp104(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp104() {delete iDbMan; delete iRepository; delete iLandmarksDb;};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void TestSetUriL(
+ const TDesC& aUriString,
+ TInt aExpectedErrorCode
+ );
+ void ArgumentTestsL();
+
+ CPosLmDatabaseManager* iDbMan;
+ CRepository* iRepository;
+ CPosLandmarkDatabase* iLandmarksDb;
+
+ };
+
+#endif // CPOSTp104_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp105.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp105_H
+#define CPOSTp105_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLmDatabaseManager.h>
+#include <centralrepository.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 105
+*/
+class CPosTp105 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp105() : CLandmarkTestProcedureBase(105) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp105() {delete iDbMan;};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ void CloseTest();
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void CheckDisplayNameL(const TDesC& aLanguage, const TDesC& aDisplayName);
+
+ void CopyResourceFileL(const TDesC& aResourceNr);
+
+ void RemoveResourceFileL(const TDesC& aResourceNr);
+
+ private:
+
+ CPosLmDatabaseManager* iDbMan;
+
+ };
+
+#endif // CPOSTp105_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp106.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp106_H
+#define CPOSTp106_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 50
+*/
+class CPosTp106 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp106(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp106() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ static void RunTestL(TAny* aData);
+
+ void CreateAndListDatabasesL(TInt index);
+
+ void CopyDatabasesL(TInt index);
+
+ void DeleteDatabasesL();
+
+ void SetAndGetUriL(TInt index);
+
+ void GetDisplayNameL();
+
+ void CheckIfExistL(TInt index);
+
+ private: // Functions
+
+ void StartMultipleClientsL(TUint aNoClients);
+
+ void CreateThreadsL(const TUint aNoThreads);
+
+ private: // data
+
+ TTime iStart;
+ TTime iStop;
+
+ enum TTestStep
+ {
+ Step1 =0,
+ Step2 =1,
+ Step3 =2,
+ Step4 =3,
+ Step5 =4,
+ Step6 =5
+ };
+
+ TInt iTestStep;
+
+ RArray<RThread> iThreads;
+ TInt iThreadIndex;
+ TInt iThreadNum;
+ };
+
+
+
+#endif // CPOSTp106_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp107.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+#ifndef CPosTp666_H
+#define CPosTp666_H
+
+// INCLUDES
+#include <s32file.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// FORWARD DECLARATION
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 666
+*
+*/
+class CPosTp666 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp666() : CLandmarkTestProcedureBase(666) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp666();
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ *
+ */
+ void GetName(TDes& aName) const;
+
+ /**
+ * From CPosTestProcedureBase
+ * Not used here. See StartL(TInt aIndex)
+ */
+ void StartL();
+
+ private:
+
+ void SetupTestPartL(TInt aIndex);
+
+ void SetupTestEnvironmentL();
+
+ };
+
+#endif // CPosTp666_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp108.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+#ifndef CPosTp667_H
+#define CPosTp667_H
+
+// INCLUDES
+#include <s32file.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// FORWARD DECLARATION
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 667
+*
+*/
+class CPosTp667 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp667() : CLandmarkTestProcedureBase(667) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp667();
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ *
+ */
+ void GetName(TDes& aName) const;
+
+ /**
+ * From CPosTestProcedureBase
+ * Not used here. See StartL(TInt aIndex)
+ */
+ void StartL();
+
+ private:
+
+ void SetupTestPartL(TInt aIndex);
+
+ void SetupTestEnvironmentL();
+
+ };
+
+#endif // CPosTp667_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp109.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+#ifndef CPosTp668_H
+#define CPosTp668_H
+
+// INCLUDES
+#include <s32file.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// FORWARD DECLARATION
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 668
+*
+*/
+class CPosTp668 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp668() : CLandmarkTestProcedureBase(668) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp668();
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ *
+ */
+ void GetName(TDes& aName) const;
+
+ /**
+ * From CPosTestProcedureBase
+ * Not used here. See StartL(TInt aIndex)
+ */
+ void StartL();
+
+ private:
+
+ void SetupTestPartL(TInt aIndex);
+
+ void SetupTestEnvironmentL();
+
+ };
+
+#endif // CPosTp668_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp11.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP11_H
+#define CPOSTP11_H
+
+// INCLUDES
+
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 11
+*/
+class CPosTp11 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ // CPosTp11() : CLandmarkTestProcedureBase(11) {};
+ CPosTp11(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp11() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ /* void GetName(
+ TDes& aName
+ ) const;
+ */
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ private:
+
+ void AddCategoriesL();
+
+ void AddLandmarksL();
+
+ void IterateCategoriesL();
+
+ void IterateSetOfCategoriesL();
+
+ void CheckIteratorItemsL(CPosLmItemIterator& iter);
+
+ CPosLandmarkCategory* InternalGet(TPosLmItemId id);
+
+ void IterateSortedCategoriesL();
+
+ void IterateReferencedCategoriesL();
+
+ void IterateReferencedSortedCategoriesL();
+
+ // Added for BC testing
+ void MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr );
+
+
+ private: // data
+
+ CPosLmCategoryManager* iCategoryManager;
+ RPointerArray<CPosLandmarkCategory> iCategories;
+ RArray<CPosLandmarkCategory> iReferencedCategories;
+ RPointerArray<CPosLandmark> iLandmarks;
+ };
+
+#endif // CPOSTP11_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp111.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP111_H
+#define CPOSTP111_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLmDatabaseManager;
+class CRepository;
+
+/**
+* Test procedure 111
+*/
+class CPosTp111 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp111() : CLandmarkTestProcedureBase(111) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp111() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ TBool FindResourceFilesL();
+
+ TBool FindServerResourceFilesL();
+
+ TBool FindEcomPluginsL();
+
+ TBool FindLibrariesL();
+
+ void TestCentralRepositoryL();
+
+ void FindFileL(const TDesC& aFile, TInt& aNrOfMatches, TDes& aPath);
+
+ TBool FindFilesAndVerifyPathL(
+ const CDesCArray& aFileNames,
+ const TDesC& aExpectedPath);
+
+ void VerifyDefaultDbUriL(
+ const TDesC& aExpectedUri,
+ CPosLmDatabaseManager* aDbMan);
+
+ void VerifyDefaultDbUriL(
+ const TDesC& aExpectedUri,
+ CRepository* aRepository);
+
+ };
+
+#endif // CPOSTP111_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp114.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp114_H
+#define CPOSTp114_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <e32base.h>
+#include <e32property.h>
+
+// CLASS DECLARATION
+class CPosTp114BackupListener;
+class MUtfwLog;
+
+/**
+* Test procedure 114
+*/
+class CPosTp114 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp114() : CLandmarkTestProcedureBase(114) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp114() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ TBool FileExistL();
+
+ void PrepareForRestoreTestL();
+
+ void InitBackupTestL();
+
+ TBool CheckDbAfterRestoreL();
+
+ private:
+ //CPosTp114BackupListener* iBackupListener;
+
+ };
+
+/**
+* CPosTp114BackupListener
+*/
+class CPosTp114BackupListener : public CActive
+ {
+ public: // Constructors and destructor
+
+ // Two-phased constructor.
+ static CPosTp114BackupListener* NewL(MUtfwLog* aLog);
+
+ /**
+ * C++ Destructor
+ */
+ ~CPosTp114BackupListener();
+
+ void StartCheckingL();
+
+ protected: // Functions from base classes
+
+ /**
+ * From CActive.
+ * Active Object event handler.
+ */
+ void RunL();
+
+ /**
+ * From CActive.
+ * Active Object cancel handler.
+ */
+ void DoCancel();
+
+ private:
+
+ /**
+ * C++ Constructor
+ */
+ CPosTp114BackupListener();
+
+ void ConstructL(MUtfwLog* aLog);
+
+ TBool IsBackupRunning();
+
+ private:
+
+ MUtfwLog* iLog;
+ RProperty iProperty;
+ TBool iBackupIsRunning;
+};
+
+#endif // CPOSTp114_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp116.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP116_H
+#define CPOSTP116_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLmDatabaseManager.h>
+#include <StifLogger.h>
+
+// CLASS DECLARATION
+class CTP116ActiveLmEvent;
+
+/**
+* Test procedure 116
+*/
+
+
+class CPosTp116 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp116(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp116() {};
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void LandmarkEventTestL();
+
+ private:
+
+ CTP116ActiveLmEvent* iActiveLmEvent;
+
+ };
+
+class CTP116ActiveLmEvent : public CActive
+ {
+ public:
+
+ static CTP116ActiveLmEvent* NewL(CStifLogger* aLog);
+
+ /**
+ * Destructor.
+ */
+ ~CTP116ActiveLmEvent();
+
+ public:
+
+ void Start();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CTP116ActiveLmEvent(CStifLogger* aLog);
+
+ void ConstructL();
+
+ void VerifyEvent(TPosLmDatabaseEvent event);
+
+ TInt GetErrors();
+
+ void SetExpectedDatabase(const TDesC& aDatabaseUri);
+
+ private: // data
+
+ friend class CPosTp116;
+
+ CStifLogger* iLog;
+ CPosLmDatabaseManager* iManager;
+ TPosLmDatabaseEvent iEvent;
+
+ TInt iExpectedEvent;
+ TBuf<255> iExpectedDatabase;
+
+
+ TInt iGlobalErr;
+
+ TBool iQueueTest;
+
+ };
+
+#endif // CPOSTP116_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp117.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP117_H
+#define CPOSTP117_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLmDatabaseManager.h>
+
+#include <StifLogger.h>
+// CLASS DECLARATION
+class CTP117ActiveLmEvent;
+
+/**
+* Test procedure 117
+*/
+class CPosTp117 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp117(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp117() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ *
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ // Use this enum to define if the thread should exit with panic or leave
+ enum ExitType {ExitPanic, ExitLeave};
+
+ static void RunPanicTestL(TAny* aData);
+
+ private:
+ void LandmarkEventTestL();
+
+ void LandmarkQueuedEvenTestL();
+
+ void LandmarkQueuedEvenTest2L();
+
+ void CreateThreadL();
+
+ void ResumeThreadAndVerifyExit();
+
+ private:
+
+ CTP117ActiveLmEvent* iActiveLmEvent;
+ TInt iErrorsFound;
+
+ RThread iThread;
+ TInt iExpectedErrorCode;
+ ExitType iExpectedExitType;
+ TInt iTestCase;
+
+ };
+
+class CTP117ActiveLmEvent : public CActive
+ {
+ public:
+
+ static CTP117ActiveLmEvent* NewL(CStifLogger* aLog);
+
+ /**
+ * Destructor.
+ */
+ ~CTP117ActiveLmEvent();
+
+ public:
+
+ void Start();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ TInt RunError(TInt aError);
+
+ /**
+ *
+ */
+ void CallNotifyDatabaseEvent();
+
+ void VerifyEventL();
+
+ TInt GetErrors();
+
+ void CallDatabaseUriFromLastEventLC();
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CTP117ActiveLmEvent(CStifLogger* aLog);
+
+ void ConstructL();
+
+ void SetExpectedDatabase(const TDesC& aDatabaseUri);
+
+
+ private: // data
+
+ friend class CPosTp117;
+
+ CStifLogger* iLog;
+
+ CPosLmDatabaseManager* iManager;
+
+
+
+ TPosLmDatabaseEvent iEvent;
+
+ TInt iExpectedEvent;
+
+ TBuf<255> iExpectedDatabase;
+
+
+ TInt iGlobalErr;
+
+ TBool iQueueTest;
+ TBool iCheckUri;
+ };
+#endif // CPOSTP117_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp118.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP118_H
+#define CPOSTP118_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 118
+*/
+class CPosTp118 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp118(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp118() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void DeleteTp118FilesL();
+
+ private:
+
+ TBool VerifyList(CDesCArray* aList, const TDesC& aDbName);
+
+ void CreateLandmarksInDbL(const TDesC& aDbName, TInt aIndex=0);
+
+ void DropTableL(const TDesC& aDbName, const TDesC& aTable);
+
+ void DropIndexL(const TDesC& aDbName, const TDesC& aTable, const TDesC& aIndex);
+
+ void AlterTableL(const TDesC& aDbName);
+
+ void CheckLandmarkDbL(CPosLandmarkDatabase* aDb);
+
+ private:
+ CDesCArray* iDatabases;
+
+ };
+
+#endif // CPOSTP118_H
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp119.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP119_H
+#define CPOSTP119_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+
+// FORWARD DECLARATIONS
+class CPosLmMultiDbSearch;
+
+// DATA TYPES
+enum TTp119SortOrder
+ {
+ ENoSort = 0,
+ EAsc,
+ EDesc
+ };
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 119
+*/
+class CPosTp119 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp119(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp119() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void SearchAllDbsL(CDesCArray* aDbUris, TTp119SortOrder aSortOrder);
+ void SearchAllButOneL(CDesCArray* aDbUris);
+ void SearchOneDbL(CDesCArray* aDbUris);
+ void SearchNonExistingDbL(CDesCArray* aDbUris);
+
+ void SearchInvalidURIDbL(CDesCArray* aDbUris);
+
+ void SearchDbMultipleTimesL(CDesCArray* aDbUris);
+ void TestMaxNrOfMatchesL(CDesCArray* aDbUris);
+ void TestMatchIteratorL(CDesCArray* aDbUris);
+
+ void SearchForLandmarksL(
+ CPosLmMultiDbSearch* aSearcher,
+ TTp119SortOrder aSortOrder,
+ TBool aRefined);
+
+ TUint VerifyResultL(
+ CPosLmMultiDbSearch* aSearcher,
+ CDesCArray& aDbUris,
+ TTp119SortOrder aSortOrder);
+
+ void RemoveDatabaseL(const TDesC& aFile);
+
+ void VerifyDbsToSearchL(
+ CPosLmMultiDbSearch* aMultiSearcher,
+ CDesCArray* aDbUris);
+
+ private: // Data
+
+ };
+
+#endif // CPOSTP119_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp12.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP12_H
+#define CPOSTP12_H
+
+// INCLUDES
+#include "EPos_LandmarksErrors.h"
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 12
+*/
+class CPosTp12 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp12(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp12() {};
+
+ public:
+
+ static void RunPanicTestL(TAny* aData);
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ private:
+
+ void CreateThreadL();
+
+ void ResumeThreadAndVerifyExit();
+
+ void ResourceFilePanicTestL();
+
+ CPosLandmarkDatabase* UseInvalidResourceFileL();
+
+ void RestoreResourceFileL();
+
+
+
+ private:
+
+ RThread iThread;
+ TPositionLandmarksClientPanic iExpectedPanicCode;
+ TInt iTestCase;
+ TInt iTreadCounter;
+ };
+
+#endif // CPOSTP12_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp120.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP120_H
+#define CPOSTP120_H
+
+// INCLUDES
+#include <EPos_CPosLmAreaCriteria.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 23
+*/
+class CPosTp120 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp120(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp120() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ CPosLmAreaCriteria* AreaCriteriaL(const TReal64 &aSouthLat,
+ const TReal64 &aNorthLat,
+ const TReal64 &aWestLong,
+ const TReal64 &aEastLong);
+
+
+ void CheckDatabasesL(
+ CDesCArray* aExpectedLmUris,
+ TUint aExpectedMaxMatches = KPosLmMaxNumOfMatchesUnlimited
+ );
+
+ void GetLmIdsL(
+ TInt aDbId,
+ RArray<TPosLmItemId> aSearchResults,
+ RArray<TPosLmItemId>& aLmIdForADb
+ );
+
+ void CheckEqualsLmsL(
+ TPosLmItemId aSource,
+ TPosLmItemId aTarget
+ );
+
+ void SearchL(
+ const RPointerArray<CAreaSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL(const RPointerArray<CAreaSearchResult>& aSearchResults);
+
+ void OnTheFlySearchL();
+
+ void SearchAndDeleteL();
+
+ void SearchAndRenameL();
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ void SearchWithMaximumL();
+
+ CDesCArray* CreateDatabasesL(
+ TInt aNrOfLmDbs,
+ TInt aLmPerDb,
+ TInt aLastId,
+ TBool aDebug = EFalse
+ );
+
+ private:
+
+ CDesCArray* iDbArray;
+
+ };
+
+#endif // CPOSTP120_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp121.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP121_H
+#define CPOSTP121_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// FORWARD DECLARATIONS
+class CPosLmMultiDbSearch;
+class CPosLmCategoryCriteria;
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 121
+*/
+class CPosTp121 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp121(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp121() {};
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+
+ void InitTestL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ enum TTp121SortOrder
+ {
+ ESortNone,
+ ESortAscending,
+ ESortDescending
+ };
+
+ void TestSearchL(
+ const RPointerArray<CCategoryLandmarkSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode = ESynchronous,
+ TTp121SortOrder aSortOrder = ESortNone);
+
+ void SearchNonExistingL(TExecutionMode aExecutionMode);
+
+ void SearchForLandmarksInGlobalCategoriesL(TExecutionMode aExecutionMode);
+
+ void AddLandmarksToGlobalCategoriesL();
+
+ void TestMaximumNrOfMatchesL(
+ const RPointerArray<CCategoryLandmarkSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void TestLeaveCodesL();
+
+ void SearchAndCancelL();
+
+ void ValidateIdL(TPosLmItemId aId, TInt aDbIndex);
+
+ void ValidateTotalNrOfMatchesL(
+ TUint aRetrievedNrOfMatches,
+ TUint aExpectedNrOfMatches,
+ const TDesC& aCategoryName);
+
+ void ValidateSearchResultsL(
+ CCategoryLandmarkSearchResult* aExpectedSearchResult,
+ CPosLmMultiDbSearch* aMultiDbSearcher,
+ TTp121SortOrder aSortOrder = ESortNone);
+
+ void ValidateSearchResultsL(
+ const RIdArray& aExpectedIds,
+ CPosLmMultiDbSearch* aMultiDbSearcher,
+ TInt aNrOfExpectedErrors = 0);
+
+ void SearchL(
+ CPosLmCategoryCriteria* aCatSearchCriteria,
+ TExecutionMode aExecutionMode,
+ TBool aRefinedSearch = EFalse,
+ TTp121SortOrder aSortOrder = ESortNone);
+
+ void TestResetSearchAttributesL();
+
+ void TestCaseInsensitiveL();
+
+ void TestWildCardsL();
+
+ void TestRefinedSearchL(TExecutionMode aExecutionMode);
+
+ void TestDatabaseListL(const RIdArray& aExpectedMatches);
+
+ void TestOnTheFlySearchL(const RIdArray& aExpectedMatches);
+
+ TInt NrOfSearchErrors(CPosLmMultiDbSearch* aMultiDbSearcher);
+
+ private:
+
+ TUint iRestaurantId1;
+ TUint iRestaurantId2;
+ TUint iGasStationId1;
+ TUint iGasStationId2;
+ TUint iGarageId1;
+ CDesCArray* iDatabases;
+ CPosLmMultiDbSearch* iMultiDbSearch;
+ TInt iNrOfDatabases;
+
+ };
+
+#endif // CPOSTP121_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp122.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,255 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP122_H
+#define CPOSTP122_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLmNearestCriteria.h>
+
+// FORWARD DECLARATIONS
+class CPosLmMultiDbSearch;
+class CNearestSearchResult;
+// CLASS DECLARATION
+
+/**
+* Test procedure 122
+*/
+class CPosTp122 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp122(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound = KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp122() {};
+
+ public: // Functions from base classes
+
+
+
+ void CloseTest();
+
+
+ void InitTestL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ enum TTp122SortOrder
+ {
+ ESortNone,
+ ESortAscending,
+ ESortDescending
+ };
+
+ void AppendNearestSearchResultsL();
+
+ void TestLeaveCodesL();
+
+ void CancelTestL(const RPointerArray<CNearestSearchResult>& aSearchResults,
+ TBool aCancelInCallback);
+
+ void StartSearchOperationL(
+ const RPointerArray<CNearestSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode = ESynchronous,
+ TTp122SortOrder aSortOrder = ESortNone,
+ TInt aNrOfSearches = 0);
+
+ void SearchL(
+ CPosLmNearestCriteria* aNearestSearchCriteria,
+ TExecutionMode aExecutionMode,
+ TBool aRefinedSearch = EFalse,
+ TTp122SortOrder aSortOrder = ESortNone);
+
+ void TestMaximumNrOfMatchesL(
+ const RPointerArray<CNearestSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode, TTp122SortOrder aSortOrder);
+
+ void ValidateTotalNrOfMatchesL(
+ TUint aRetrievedNrOfMatches,
+ TUint aExpectedNrOfMatches);
+
+ TInt NrOfSearchErrors(CPosLmMultiDbSearch* aMultiDbSearcher);
+
+ void TestOnTheFlySearchL(const RPointerArray<CNearestSearchResult>& aSearchResults);
+
+ void ValidateIdL(TPosLmItemId aId, TInt aDbIndex);
+
+ void PrepareDatabasesL();
+
+ void CheckSearchResultL(CNearestSearchResult& aSearchResult, TTp122SortOrder aSortOrder);
+
+ void PrintLm(CPosLandmarkDatabase* db);
+
+ void DoLastTestPartL(const RPointerArray<CNearestSearchResult>& aSearchResults);
+
+ void CheckDbL();
+
+ void SetupLimits();
+
+ private:
+
+ CDesCArray* iDatabases;
+ CPosLmMultiDbSearch* iMultiDbSearch;
+ TInt iNrOfDatabases;
+
+ RPointerArray<CNearestSearchResult> iNearestSearchResults;
+ TInt iErrorsFound;
+
+ CPosLmDisplayData* iDisplayData;
+ TBool iPartial;
+
+ TUint iIdDb1Min;
+ TUint iIdDb1Max;
+ TUint iIdDb2Min;
+ TUint iIdDb2Max;
+ TUint iIdDb3Min;
+ TUint iIdDb3Max;
+ TUint iIdDb4Min;
+ TUint iIdDb4Max;
+ TUint iIdDb5Min;
+ TUint iIdDb5Max;
+
+ };
+
+// Commented for testing -- Moved these class defines to FT_CPosTp35.h
+
+class TSearchResult
+ {
+ public:
+
+ TSearchResult();
+
+ TSearchResult(const TPosLmItemId& aId, const TReal32& aDistance);
+
+ TReal64 Distance() const;
+
+ TPosLmItemId Id() const;
+
+ private:
+ friend class CPosTp122;
+
+ TReal32 iDistance;
+ TPosLmItemId iId;
+
+ };
+
+
+
+class CNearestSearchResult : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CNearestSearchResult* NewL(
+ const TDesC& aDes,
+ const TInt& aIndex,
+ RFs& aFileSession);
+
+ /**
+ * Destructor.
+ */
+ ~CNearestSearchResult();
+
+ public:
+
+ TReal64 Latitude() const;
+
+ TReal64 Longitude() const;
+
+ TBool UseCoverageRadius() const;
+
+ TReal32 MaxDistance() const;
+
+ TInt ErrorCode() const;
+
+ void Print(TDes& aDes);
+
+ void PrintDistances(TDes& aPrint);
+
+ private:
+
+ /**
+ * Constructor.
+ */
+ CNearestSearchResult(RFs& aFileSession);
+
+ void ConstructL(const TDesC& aDes, const TInt& aIndex);
+
+ void AppendDistancesL(const TInt& aIndex);
+
+ void ParseDistanceL(const TDesC& aDes, const TInt& aIndex, const TPosLmItemId& aId);
+
+ void SortDistances();
+
+ private:
+
+ // By default, prohibit copy constructor
+ CNearestSearchResult(const CNearestSearchResult&);
+ // Prohibit assigment operator
+ CNearestSearchResult& operator=(const CNearestSearchResult&);
+
+ private: // Data
+
+ friend class CPosTp122;
+
+ enum TValueIndex
+ {
+ ELatitude =1,
+ ELongitude =2,
+ EUseCoverageRadius =3,
+ EMaxDistance =4,
+ EErrorCode =5,
+ ERedefined =6,
+ EMaxSearchResult =7,
+ ESearchResult =8
+ };
+
+ TInt iErrorCode;
+ TReal64 iLatitude;
+ TReal64 iLongitude;
+ TBool iUseCoverageRadius;
+ TReal32 iMaxDistance;
+ TInt iMaxSearchResult;
+
+ RArray<TSearchResult> iDistances;
+
+ CPosLandmarkDatabase* iDatabase;
+ RFs& iFileSession;
+ };
+
+
+#endif // CPOSTP122_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp123.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP123_H
+#define CPOSTP123_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// FORWARD DECLARATIONS
+class CPosLmDatabaseManager;
+class CPosLmMultiDbSearch;
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 123
+*/
+class CPosTp123 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp123(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp123() {};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+
+ void InitTestL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ enum TSearchCriterion
+ {
+ ENoCriterion,
+ ELocalCategoryId,
+ EGlobalCategoryId,
+ ECategoryName
+ };
+
+ void TestSearchL(
+ TBool aExecuteSync,
+ TSearchCriterion aCriterion,
+ TInt aNrOfHits,
+ TBool aSorted);
+
+ void TestSearchCategoriesL(TBool aExecuteSync);
+
+ void RemoveCategoriesFromLandmarksL(TInt aNrOfLandmarks);
+
+ void SearchForUncategorizedLMsL(TInt aNrOfHits, TBool aSorted = EFalse);
+
+ void RemoveCategoryFromDbL(TPosLmItemId aCategoryId, const TDesC& aDbUri);
+
+ void VerifySearchResultL(TInt aNrOfHits, TBool aSorted);
+
+ void VerifySortOrderL(CPosLmItemIterator* aIter, CPosLandmarkDatabase* aDb);
+
+ private:
+
+ RArray<RIdArray> iIdArrays;
+ TBuf<200> iBuf;
+ CDesCArray* iDatabases;
+ TInt iNrOfDatabases;
+ CPosLmMultiDbSearch* iLandmarkSearch;
+
+ };
+
+#endif // CPOSTP123_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp124.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp124_H
+#define CPOSTp124_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <LbsPosition.h>
+// CLASS DECLARATION
+class CPosLandmarkDatabase;
+class CPosLmCompositeCriteria;
+class CPosLmMultiDbSearch;
+class CCompositeSearchResult;
+//class TCoordinate;
+
+/**
+* Test procedure 124
+*/
+class CPosTp124 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp124(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound = KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp124() {};
+
+ public: // Functions from base classes
+
+
+
+ /**
+ * Always called even if test leaves,
+ * after test completion
+ */
+ void CloseTest();
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+
+ void InitTestL();
+
+ private:
+
+ enum TTp124SortOrder
+ {
+ ESortNone,
+ ESortAscending,
+ ESortDescending,
+ ESortDistance
+ };
+
+ /*
+ * Use the file lmDbCompositeSearchResult.txt and parse
+ * all test combinations, perform all tests and check for correct result
+ */
+ void StartLandmarksCompositeTestL(TExecutionMode aExecutionMode, TTp124SortOrder aSortOrder);
+
+ /**
+ * Prints debug information about the composite search object
+ */
+ void PrintCompositeInfo(CPosLmCompositeCriteria* aComposite);
+
+ /**
+ * Test that it is possible to search for categories using the
+ * CPosLmCatNameCriteria class in a StartCategorySearchL search
+ */
+ void TestCategoryCompositeSearchL();
+
+ /**
+ * Perform a test with a composite object used in a composite landmark search
+ */
+ void TestCompositeInCompositeL();
+
+ /**
+ * Perform a test with two different text arguments combined in a composite landmark search
+ */
+ void TestSeveralTextArgumentsL();
+
+ /**
+ * Test to add and remove search arguments to the CPosLmCompositeCriteria object
+ */
+ void TestAddAndRemoveL();
+
+ /**
+ * Test that no result is returned if setting the aSearchOnlyPreviousMatches to ETrue
+ * and there is no previous result
+ */
+ void TestWithNoPreviousResultL();
+
+ /**
+ * Test cancel of a composite search
+ */
+ void CancelTestL(const TBool& aCancelInCallback);
+
+ void LandmarksSortL(RArray<TPosLmItemId>& aArray, TTp124SortOrder aSortOrder);
+
+ void SearchL(
+ CPosLmCompositeCriteria* aCompositeSearchCriteria,
+ TExecutionMode aExecutionMode,
+ TBool aRefinedSearch = EFalse,
+ TTp124SortOrder aSortOrder = ESortNone);
+
+ /**
+ * Test with different sort order scenarios, test sortpref for landmark and category
+ * also test with nearest
+ */
+ void TestWithSortOrderLandmarksL(TExecutionMode aExecutionMode,
+ TTp124SortOrder aSortOrder);
+
+ void TestWithSortOrderNearestL(TExecutionMode aExecutionMode, TTp124SortOrder aSortOrder);
+
+ void PrepareDatabasesL();
+
+ void SetupLimits();
+
+ void PrintLm(CPosLandmarkDatabase* db);
+
+ void ValidateIdL(TPosLmItemId aId, TInt aDbIndex);
+
+ void ValidateSearchResultsL(
+ RIdArray& aExpectedIds,
+ TTp124SortOrder aSortOrder,
+ TInt aNrOfExpectedErrors = 0);
+
+ TInt NrOfSearchErrors(CPosLmMultiDbSearch* aMultiDbSearcher);
+
+ TBool CheckCompositeForIdListL(CPosLmCompositeCriteria* aComposite);
+
+ void TestWithIdListAndCompositeL();
+
+ void TestOnTheFlySearchL();
+
+ void TestLessDbsToSearchL();
+
+ void CompositeStressTestL(TInt aStartNr, TInt aTotalNr);
+
+ private:
+
+ TUint iIdDb1Min;
+ TUint iIdDb1Max;
+ TUint iIdDb2Min;
+ TUint iIdDb2Max;
+ TUint iIdDb3Min;
+ TUint iIdDb3Max;
+ TUint iIdDb4Min;
+ TUint iIdDb4Max;
+ TUint iIdDb5Min;
+ TUint iIdDb5Max;
+
+ TInt iErrorsFound;
+
+ CDesCArray* iDatabases;
+ CPosLmMultiDbSearch* iMultiDbSearch;
+ TInt iNrOfDatabases;
+ /**
+ * contains inital db count afte removal of all db
+ */
+ TInt iDbCount;
+ CPosLmDisplayData* iDisplayData;
+ TCoordinate iCoord;
+
+ };
+
+#endif // CPOSTp124_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp125.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,112 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp125_H
+#define CPOSTp125_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+//#include <EPos_CPosLmMultiDbSearchOperation.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 125
+*/
+class CPosTp125 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp125(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp125() {delete iLandmarksMultiDbSearch;
+ delete iDbArray;};
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void SearchL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithMaximumL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchAfterAddedCategoryL();
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ /**
+ * Include the global categories when searching
+ */
+ void SearchGlobalL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync=EFalse);
+
+ /**
+ * All categories are included in all databases. Remove so there are no duplicates.
+ */
+ void RemoveExtraCategoriesL();
+
+ void RemoveCategoryL(CPosLmCategoryManager* aCatMan,
+ TPosLmItemId aCatId);
+
+
+ void AssertThatIdIsInCorrectDbL(TInt aDbIndex, TInt aId);
+
+ void SetupDbArrayL();
+
+ void SortResultsL(RArray<TPosLmItemId>& aArray,
+ CDesCArrayFlat*& aResultArray);
+
+ void InvertArrayL(CDesCArrayFlat*& aArray);
+
+ void TestDuplicateGlobalCategoriesL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync=EFalse);
+
+ // data members
+ private:
+
+ CDesCArrayFlat* iDbArray;
+ CPosLmMultiDbSearch* iLandmarksMultiDbSearch;
+
+ };
+
+#endif // CPOSTp125_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp126.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp126_H
+#define CPOSTp126_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include "EPos_LandmarksErrors.h"
+
+enum TEnumStep
+ {
+ EStepZeroMaxMatches = 0,
+ EStepNegativeMaxMatches,
+ EStepUnlimitedMaxMatches,
+ EStepOutOfBoundsDatabaseUriPtr,
+ EStepOutOfBoundsGetSearchError,
+ EStepTooBigValueMatchIteratorL,
+ EStepTooBigValueNumOfMatches,
+ EStepIllegalSortPrefLMa,
+ EStepIllegalSortPrefLMb,
+ EStepIllegalSortPrefLMc,
+ EStepIllegalSortPrefLMd,
+ EStepIllegalSortPrefCat,
+ EStepNULLSearch1,
+ EStepNULLSearch2,
+ EStepNULLSearch3,
+ EStepNULLSearch4
+ };
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 126
+*/
+class CPosTp126 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp126(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp126() {delete iLandmarksMultiDbSearch;
+ iThread.Close();};
+
+ static void RunPanicTestL(TAny* aData);
+
+ public: // Functions from base classes
+
+
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void CreateThreadL();
+ void ResumeThreadAndVerifyExitL();
+ void ResourceFilePanicTestL();
+
+ // data members
+ private:
+
+ CPosLmMultiDbSearch* iLandmarksMultiDbSearch;
+ RThread iThread;
+ TPositionLandmarksClientPanic iExpectedPanicCode;
+
+ TEnumStep iStep;
+ };
+
+#endif // CPOSTp126_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp127.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,154 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP127_H
+#define CPOSTP127_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <ss_std.h>
+#include <e32std.h>
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosTp127;
+
+// Data types
+struct TThreadParam
+ {
+ void (*iTestFunction)(TDes*);
+ TDes* iMessage;
+ RThread* iThread;
+ };
+
+class CThreadMonitor : public CActive
+ {
+ public:
+
+ static CThreadMonitor* NewL(RThread* aThread);
+
+ ~CThreadMonitor();
+
+ protected:
+
+ void DoCancel();
+
+ void RunL();
+
+ private:
+
+ CThreadMonitor(RThread* aThread);
+
+ void ConstructL();
+
+ private:
+
+ RThread* iThread;
+
+ };
+
+/**
+* Test procedure 127
+*/
+class CPosTp127 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp127() : CLandmarkTestProcedureBase(127) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp127() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called before StartL()
+ */
+ void InitTestL();
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ public: // New functions
+
+ static void MultipleDbCategorySearchL(TDes* aMessage);
+
+ static void MultipleDbLandmarkSearchL(TDes* aMessage);
+
+ static void MultipleDbLandmarkWithoutCategorySearchL(TDes* aMessage);
+
+ static void LockDatabaseL(TDes* aMessage);
+
+ static void DbManagementL(TDes* aMessage);
+
+ static void DbAccessL(TDes* aMessage);
+
+ static void SingleDbSearchL(TDes* aMessage);
+
+ static void MultipleDbSearchL(TDes* aMessage);
+
+ static void CopyLockedDatabaseL(TDes* aMessage);
+
+ static void CopyDatabaseL(TDes* aMessage);
+
+ private:
+
+ TBool ResumeThreadsAndVerifyExitL(const RArray<TThreadParam>& aThreadParams);
+
+ TBool MultipleDbSearchClientsL(TBool aLockDb);
+
+ TBool MultipleLmClientsL();
+
+ TBool VerifyInUseWhenCopyL();
+
+ TBool VerifyCopyStressL();
+
+ private:
+
+ TBuf<100> iBuf;
+
+ };
+
+#endif // CPOSTP127_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp13.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP13_H
+#define CPOSTP13_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifParser.h>
+
+
+
+enum TStifDialogType
+ {
+ EStifDialogTypeYesNo,
+ EStifDialogTypeOk,
+ EStifDialogTypeOkCancel,
+ EStifDialogTypeRetryCancel,
+ EStifDialogTypeYesNoCancel
+ };
+// CLASS DECLARATION
+
+/**
+* Test procedure 13
+*/
+class CPosTp13 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp13(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound = KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp13() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL(CStifItemParser&);
+
+
+ void CloseTest();
+
+ private:
+
+ void ListCategoriesL( CPosLmCategoryManager& aCatMan );
+
+ void FindLandmarksL(
+ CPosLandmarkDatabase& aDb,
+ TPosLmItemId aCategoryId,
+ RArray<TPosLmItemId>& aLmIds );
+
+ CPosLandmark* FindLandmarkLC( CPosLandmarkDatabase& aDb, const TDesC& aName );
+
+ private:
+ TInt iErrorsFound;
+ };
+
+#endif // CPOSTP13_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp130.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP130_H
+#define CPOSTP130_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include "FT_CPosTp119.h"
+
+// FORWARD DECLARATIONS
+class CPosLmMultiDbSearch;
+
+// DATA TYPES
+class CMatchIteratorTester : public CActive
+ {
+ public: // Constructors and destructor
+
+ static CMatchIteratorTester* NewLC(
+ CDesCArray* aDbUris, CStifLogger* iLog);
+ ~CMatchIteratorTester();
+
+ public: // Functions from base classes
+
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+
+ public: // New Functions
+
+ void RunTestL(
+ CPosLmMultiDbSearch* aMultiSearcher,
+ CPosLmOperation* aSearchOperation,
+ RPointerArray<RIdArray>& aExpectedResult);
+ TInt Result() const;
+ void GetErrorMsg(TPtrC& aMsg) const;
+
+ private:
+
+ // Constructor
+ CMatchIteratorTester( CDesCArray* aDbUris, CStifLogger* aLog );
+
+ void VerifyIteratorsL(TInt aResult);
+ void CompareIteratorsL(CPosLmItemIterator& aNewIter, CPosLmItemIterator& aOldIter);
+ void SetErrorAndLeaveL(const TDesC& aErrMsg);
+
+ private: // Data
+
+ HBufC* iErrorMsg;
+ TInt iResult;
+ TReal32 iProgress;
+ CDesCArray* iDbUris;
+ CPosLmOperation* iOperation;
+ RPointerArray<CPosLmItemIterator> iIterators;
+ CPosLmMultiDbSearch* iMultiSearcher;
+ RPointerArray<RIdArray>* iExpectedResult;
+ CStifLogger* iLog;
+ };
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 130
+*/
+class CPosTp130 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ //CPosTp130() : CLandmarkTestProcedureBase(130) {};
+ CPosTp130(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp130() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Initializes the test in the module
+ */
+ virtual void InitTestL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Closes the test in the module
+ */
+ virtual void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void SearchForLandmarksL();
+ void SearchForCategoriesL();
+ void VerifyIteratorsL(RArray<TInt>& aNrOfExpectedItems, TBool aLm);
+ void TestErrorCodesL();
+ void TestMatchIteratorL(TBool aSearchLm);
+
+ void InitExpectedResultsL( const TDesC& aDbName, RIdArray& aArray, TBool aSearchLm );
+
+ private: // Data
+
+ CDesCArray* iDbUris;
+ CPosLmMultiDbSearch* iDbSearcher;
+ RPointerArray<RIdArray> iExpectedLmResult; // contains expected matches when search patern is *e*
+ RPointerArray<RIdArray> iExpectedCatResult; // contains expected matches when search patern is *e*
+
+ };
+
+#endif // CPOSTP130_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp131.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP131_H
+#define CPOSTP131_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 131
+*/
+class CPosTp131 : public CLandmarkTestProcedureBase, public MProgressObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp131(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iAscendedSorted = ETrue;iErrorsFound=KErrNone;iPartialFlag=EFalse;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp131() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ /**
+ * From MProgressObserver
+ * Notifies the progress of the execution of a CPosLmOperation object.
+ *
+ * @param sProgress the progress of the operation
+ */
+ void NotifyProgress(TReal aProgress);
+
+ private:
+
+ void SearchL(
+ const RPointerArray<CSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void SearchPartialLandmarksL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void CheckPartialErrorCodeL(const TBool aPartial, const TInt aErr);
+
+ void CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const CPosLandmark::TAttributes& aAttr,
+ const RArray<TUint>& aReqFields);
+
+ void CheckResetL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void CancelTestL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void LandmarksSortL(RArray<TPosLmItemId>& aArray, const TPosLmSortPref& aSortPref);
+
+ void ExecuteLmOpL();
+
+ private:
+
+ CPosLmDisplayData* iDisplayData;
+ TBool iAscendedSorted;
+ TInt iErrorsFound;
+ TBool iPartialFlag;
+ };
+
+#endif // CPOSTP131_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp132.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,105 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP132_H
+#define CPOSTP132_H
+
+// INCLUDES
+#include "EPos_LandmarksErrors.h"
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 132
+*/
+class CPosTp132 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp132(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp132() {};
+
+ public:
+
+ /**
+ * Includes both Panic testing and testing of correct leave codes
+ */
+ static void RunPanicTestL(TAny* aData);
+
+ public: // Functions from base classes
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ /**
+ * Used as a callback method to unset display data
+ * from landmark search
+ * @param self
+ */
+ TInt static UnsetTest(TAny* aSelf);
+
+ /**
+ * Used as a callback method to unset display data
+ * from landmark multidb search
+ * @param self
+ */
+ TInt static UnsetMultiSearch(TAny* aSelf);
+
+ private:
+
+ void CreateThreadL();
+
+ void ResumeThreadAndVerifyExit();
+
+ void RunLeaveTestL();
+
+ public:
+ // Use this enum to define if the thread should exit with panic or leave or return normally
+ enum ExitType {ExitPanic, ExitLeave, ExitNormal};
+
+ private:
+
+ RThread iThread;
+ TInt iExpectedErrorCode;
+ ExitType iExpectedExitType;
+ TInt iTestCase;
+ TInt iErrorsFound;
+ };
+
+#endif // CPOSTP132_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp133.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP133_H
+#define CPOSTP133_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLmMultiDbSearch;
+/**
+* Test procedure 133
+*/
+class CPosTp133 : public CLandmarkTestProcedureBase, public MProgressObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp133(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iLastNrOfDisplayData=0;iAscendedSorted = ETrue;iErrorsFound=KErrNone;iPartialFlag=EFalse;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp133() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ /**
+ * From MProgressObserver
+ * Notifies the progress of the execution of a CPosLmOperation object.
+ *
+ * @param sProgress the progress of the operation
+ */
+ void NotifyProgress(TReal aProgress);
+
+ private:
+
+ void DoSearchL(
+ const RPointerArray<CSearchResult>& aSearchResults, CDesCArray* aDbUris,
+ TExecutionMode aExecutionMode);
+
+ void SearchPartialLandmarksL(TInt aWhatIndexToSerrachFor,
+ const RPointerArray<CSearchResult>& aSearchResults,
+ CDesCArray* aDbUris);
+
+ void CheckPartialErrorCodeL(const TBool aPartial, const TInt aErr);
+
+ void CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const CPosLandmark::TAttributes& aAttr,
+ const RArray<TUint>& aReqFields);
+
+ void SearchPartialWithoutNameL(const RPointerArray<CSearchResult>& aSearchResults,
+ CDesCArray* aDbUris);
+
+ void CheckResetL(const RPointerArray<CSearchResult>& aSearchResults, CDesCArray* aDbUris);
+
+ void CancelTestL(const RPointerArray<CSearchResult>& aSearchResults,
+ CDesCArray* aDbUris, TBool aCancelInCallback);
+
+ void LandmarksSortL(RArray<TPosLmItemId>& aArray, const TPosLmSortPref& aSortPref);
+
+ /**
+ * Execute search operation, add testclass as observer
+ */
+ void ExecuteLmOpL();
+
+ /**
+ * Execute search operation but cancel in callback, add testclass as observer
+ */
+ void ExecuteLmOpInCallbackL();
+
+ private:
+
+ CPosLmDisplayData* iDisplayData;
+ TBool iAscendedSorted;
+ TInt iErrorsFound;
+ TBool iPartialFlag;
+ CPosLmMultiDbSearch* iMultiLandmarkSearch;
+ TInt iLastNrOfDisplayData;
+ RArray<TPosLmItemId>* iJustNowSearchResults;
+ };
+
+#endif // CPOSTP133_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp134.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp134_H
+#define CPOSTp134_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+// CLASS DECLARATION
+const TInt KTopTest = 17;
+/**
+* Test procedure 134
+*/
+class CPosTp134 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp134(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp134() {iDbArray.ResetAndDestroy();
+ delete iDbMan;};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void CheckInfoL(
+ HPosLmDatabaseInfo* aDbInfo,
+ TInt aTestNr
+ );
+ void SetupExpectedResultsL();
+
+ void CheckUriLengthL(
+ const TDesC& aUri,
+ TInt aExpectedErrorCode
+ );
+
+
+ // data members
+ private:
+ CPosLmDatabaseManager* iDbMan;
+
+ TChar iDbDrive[KTopTest];
+ TMediaType iMediaType[KTopTest];
+ TBool iDefaultDb[KTopTest];
+ TBuf<50> iDbUri[KTopTest];
+ TBuf<10> iProtocol[KTopTest];
+ TBuf<25> iDbName[KTopTest];
+ TBool iAttrSet[KTopTest];
+ RPointerArray<HPosLmDatabaseInfo> iDbArray;
+ TInt iErrorsFound;
+ };
+
+#endif // CPOSTp134_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp135.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP135_H
+#define CPOSTP135_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+/**
+* Test procedure 135
+*/
+class CPosTp135 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp135(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp135() {};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void VerifyDbListL(CDesCArray* aDbArray);
+
+ void VerifyDbInfoListL(RPointerArray<HPosLmDatabaseInfo> aDbInfoList, RPointerArray<HPosLmDatabaseInfo> aDbInfoList2);
+
+ private:
+ CDesCArray* iDbArray;
+ TInt iErrorsFound;
+
+ };
+
+#endif // CPOSTP135_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp136.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp136_H
+#define CPOSTp136_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 136
+*/
+class CPosTp136 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp136(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp136() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestImportL(const TDesC& aFile, const TDesC8& aMime);
+
+ void TestParseL(const TDesC& aFile, const TDesC8& aMime);
+
+ TInt iErrorsFound;
+ };
+
+
+#endif // CPOSTp136_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp137.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp137_H
+#define CPOSTp137_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 137
+*/
+class CPosTp137 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp137(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp137() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestImportEmptyDbL(const TDesC& aFile, const TDesC8& aMime);
+
+ void TestImport1L(const TDesC& aFile, const TDesC8& aMime);
+
+ void CheckLandmarkL(TPosLmItemId aLandmarkId, RArray<TPosLmItemId> aCategoriesList);
+
+ private:
+
+ CPosLandmarkParser* iLandmarkParser;
+ TInt iErrorsFound;
+ };
+
+
+#endif // CPOSTp137_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp139.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP139_H
+#define CPOSTP139_H
+
+// INCLUDES
+#include <EPos_CPosLmAreaCriteria.h>
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 24
+*/
+class CPosTp139 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp139(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp139() {};
+
+
+ public:
+
+ void GetSortAttribute();
+
+
+ };
+
+#endif // CPosTp139_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp141.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP141_H
+#define CPOSTP141_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 141
+*/
+class CPosTp141 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp141(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp141() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+ private:
+
+
+ void TestInvalidPositionFieldsL();
+ };
+
+#endif // CPOSTP141_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp143.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPosTp143_H
+#define CPosTp143_H
+
+#include <EPos_CPosLandmark.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+/**
+* Test procedure 143
+*/
+class CPosTp143 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp143(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp143() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ private:
+
+ void AddLandmarksL();
+
+ void CheckCountersL();
+
+ private: // data
+
+ RPointerArray<CPosLandmark> iLandmarks;
+ };
+
+#endif // CPosTp143_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp144.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP144_H
+#define CPOSTP144_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+#include "lcfsbucommondefinitions.h"
+
+
+
+/**
+* Test procedure 144
+*/
+class CPosTp144 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp144(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp144() {};
+
+ public: // Functions from base classes
+
+
+ void StartL();
+
+ private:
+
+ void DumpBuffer(const TDesC8& aBuffer);
+ // check serialization
+ void CheckLmSerializationL();
+
+ CPosLandmark* CreateDummyLandmarkLC();
+ void CompareLandmarks(CPosLandmark& aLm1, CPosLandmark& aLm2);
+ void CompareBuffers(const TDesC8& aBuf1, const TDesC8& aBuf2);
+
+ void CheckLmSerialization_SubL(CPosLandmark* lm);
+
+ private:
+ // common variables used in tests
+ TInt iErrorCounter;
+
+
+ };
+
+#endif // CPOSTP144_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp145.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP145_H
+#define CPOSTP145_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+#include "lcfsbucommondefinitions.h"
+
+
+
+/**
+* Test procedure 145
+*/
+class CPosTp145 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp145(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp145() {};
+
+ public: // Functions from base classes
+
+
+ void StartL();
+
+ private:
+
+ //void DumpBuffer(const TDesC8& aBuffer);
+ // check category serialization
+ void CheckLmCatSerializationL();
+ void CheckLmCatSerialization_SubL(CPosLandmarkCategory* aTest);
+ void CompareBuffers(const TDesC8& aBuf1, const TDesC8& aBuf2);
+ CPosLandmarkCategory* CreateDummyCategoryLC();
+ void CompareCategoriesL(CPosLandmarkCategory& aCat1, CPosLandmarkCategory& aCat2);
+
+ private:
+ // common variables used in tests
+ TInt iErrorCounter;
+
+
+ };
+
+#endif // CPOSTP145_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp146.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP146_H
+#define CPOSTP146_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+#include "lcfsbucommondefinitions.h"
+
+
+
+/**
+* Test procedure 146
+*/
+class CPosTp146 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp146(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp146() {};
+
+ public: // Functions from base classes
+
+
+ void StartL();
+
+ private:
+
+
+ // check serialization invalid
+ void CheckLmCatSerializationInvalidL();
+ CPosLandmark* CreateDummyLandmarkLC();
+ CPosLandmarkCategory* CreateDummyCategoryLC();
+
+
+ private:
+ // common variables used in tests
+ TInt iErrorCounter;
+
+
+ };
+
+#endif // CPOSTP146_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp147.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP147_H
+#define CPOSTP147_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+#include "lcfsbucommondefinitions.h"
+
+
+
+/**
+* Test procedure 147
+*/
+class CPosTp147 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp147(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp147() {};
+
+ public: // Functions from base classes
+
+
+ void StartL();
+
+ private:
+
+
+ // check serialization memory
+ void CheckSerializationMemoryL();
+ CPosLandmark* CreateDummyLandmarkLC();
+ CPosLandmarkCategory* CreateDummyCategoryLC();
+ void CheckLmSerialization_MemoryL();
+ void CheckLmCatSerialization_MemoryL();
+
+
+
+ private:
+ // common variables used in tests
+ TInt iErrorCounter;
+
+
+ };
+
+#endif // CPOSTP147_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp148.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp148_H
+#define CPOSTp148_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 148
+*/
+class CPosTp148 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp148(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp148() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp148_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp149.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp149_H
+#define CPOSTp149_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 149
+*/
+class CPosTp149 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp149(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp149() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp149_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp15.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP15_H
+#define CPOSTP15_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 15
+*/
+class CPosTp15 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp15() : CLandmarkTestProcedureBase(15) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp15() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void TestInitializeDatabaseL(const TBool aSyncronously=EFalse);
+
+ void TestInitializeWithUserWaitForL();
+
+ void TestInitializeDatabaseAndCancelL();
+ };
+
+#endif // CPOSTP15_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp150.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp150_H
+#define CPOSTp150_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 150
+*/
+class CPosTp150 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp150(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp150() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp150_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp151.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp151_H
+#define CPOSTp151_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 151
+*/
+class CPosTp151 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp151(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp151() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp151_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp152.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp152_H
+#define CPOSTp152_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 152
+*/
+class CPosTp152 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp152(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp152() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp152_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp153.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp153_H
+#define CPOSTp153_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 153
+*/
+class CPosTp153 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp153(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp153() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp153_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp154.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp154_H
+#define CPOSTp154_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 154
+*/
+class CPosTp154 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp154(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp154() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp154_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp155.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp155_H
+#define CPOSTp155_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 155
+*/
+class CPosTp155 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp155(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp155() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp155_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp156.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp156_H
+#define CPOSTp156_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 156
+*/
+class CPosTp156 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp156(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp156() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp156_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp157.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp157_H
+#define CPOSTp157_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 157
+*/
+class CPosTp157 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp157(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp157() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp157_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp158.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp158_H
+#define CPOSTp158_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 158
+*/
+class CPosTp158 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp158(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp158() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp158_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp159.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp159_H
+#define CPOSTp159_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 159
+*/
+class CPosTp159 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp159(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp159() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp159_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp16.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP16_H
+#define CPOSTP16_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 16
+*/
+class CPosTp16 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp16() : CLandmarkTestProcedureBase(16) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp16() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+ CPosLandmarkDatabase* UseCorruptDbL();
+ CPosLandmarkDatabase* UseTextDbL();
+ CPosLandmarkDatabase* UseContactDbL();
+
+ // check that global categories are automatically inserter into lm db
+ // when recovering database
+ void CheckGlobalCategoriesL();
+
+ void SetupGlobalCategoriesL();
+
+ private:
+ RArray<TPosLmGlobalCategory> iGlobalCategoryIds;
+ RArray<TPtrC> iGlobalCategoryNames;
+ };
+
+#endif // CPOSTP16_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp160.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp160_H
+#define CPOSTp160_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 160
+*/
+class CPosTp160 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp160(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp160() {};
+
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp160_H
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp161.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp161_H
+#define CPOSTp161_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 161
+*/
+class CPosTp161 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp161(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp161() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestImportL(const TDesC& aFile, const TDesC8& aMime);
+
+ void TestParseL(const TDesC& aFile, const TDesC8& aMime);
+
+ TInt iErrorsFound;
+ };
+
+
+#endif // CPOSTp161_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp162.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp162_H
+#define CPOSTp162_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 162
+*/
+class CPosTp162 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp162(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp162() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestImportEmptyDbL(const TDesC& aFile, const TDesC8& aMime);
+
+ void TestImport1L(const TDesC& aFile, const TDesC8& aMime);
+
+ void CheckLandmarkL(TPosLmItemId aLandmarkId, RArray<TPosLmItemId> aCategoriesList);
+
+ private:
+
+ CPosLandmarkParser* iLandmarkParser;
+ TInt iErrorsFound;
+ };
+
+
+#endif // CPOSTp162_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp163.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp163_H
+#define CPOSTp163_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 163
+*/
+class CPosTp163 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp163(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp163() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestImportL(const TDesC& aFile, const TDesC8& aMime);
+
+ void TestParseL(const TDesC& aFile, const TDesC8& aMime);
+
+ TInt iErrorsFound;
+ };
+
+
+#endif // CPOSTp163_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp164.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp164_H
+#define CPOSTp164_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 164
+*/
+class CPosTp164 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp164(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp164() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestImportEmptyDbL(const TDesC& aFile, const TDesC8& aMime);
+
+ void TestImport1L(const TDesC& aFile, const TDesC8& aMime);
+
+ void CheckLandmarkL(TPosLmItemId aLandmarkId, RArray<TPosLmItemId> aCategoriesList);
+
+ private:
+
+ CPosLandmarkParser* iLandmarkParser;
+ TInt iErrorsFound;
+ };
+
+
+#endif // CPOSTp164_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp17.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,78 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP17_H
+#define CPOSTP17_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 17
+*/
+class CPosTp17 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp17() : CLandmarkTestProcedureBase(17) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp17() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void SetupTestDataL();
+
+ private: // Data
+
+ RArray<TInt> iFootprints;
+
+ RArray<TPtrC> iDllNames;
+
+ };
+
+#endif // CPOSTP17_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp18.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP18_H
+#define CPOSTP18_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLandmark.h>
+
+// CLASS DECLARATION
+
+
+/**
+* Test procedure 18
+*/
+class CPosTp18 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp18(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp18() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestAllPartialAttributesL();
+
+ void TestPartialPositionFieldsL();
+
+ void PreparePartialLandmarksL();
+
+ void PreparePartialLandmarksAsyncL(TExecutionMode aExecutionMode);
+
+ void PreparePartialLandmarksAsyncAndCancelL(const TBool& aInCallback=EFalse);
+
+ void AppendFields(RArray<TUint>& aArray);
+
+ CPosLandmark* GetPartialLandmarkLC(const TPosLmItemId aId,
+ const CPosLmPartialReadParameters& partialParam);
+
+ void CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const CPosLandmark::TAttributes& aAttr);
+
+ void CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const RArray<TUint>& aReqFields,
+ const RArray<TBool>& aAvailFields);
+
+ void CheckPartialErrorCodeL(const TBool aPartial, const TInt aErr);
+
+ private: // data
+ CArrayPtr<CPosLandmark>* iArrayPtr;
+
+ };
+
+#endif // CPOSTP18_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp19.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP19_H
+#define CPOSTP19_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 19
+*/
+class CPosTp19 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp19(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp19() {};
+
+ public: // Functions from base classes
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void TestGetByNameL();
+
+ void ReadLandmarksDbFileL();
+
+ void ParseCategoryL(const TDesC& aDes);
+
+ void SetupGlobalCategoriesL();
+
+ void TestGetGlobalL();
+
+ void AddCategoriesL( TInt aNumofCats );
+
+ void VerifyAddedCategoriesL();
+
+ private: // Data
+
+ enum TValueIndex
+ {
+ ECategoryId =0,
+ ECategoryName =1
+ };
+
+ CPosLmCategoryManager* iCategoryManager;
+ RArray<TPosLmItemId> iCategoryIds;
+ RArray<TUint> iGlobalCategoryIds;
+
+ RPointerArray<HBufC> iCategoryNames;
+ RPointerArray<HBufC> iGlobalCategoryNames;
+ RPointerArray<CPosLandmarkCategory> iCategories;
+ };
+
+#endif // CPOSTP19_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp2.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP2_H
+#define CPOSTP2_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <ecom.h>
+// CLASS DECLARATION
+
+
+/**
+* Test procedure 2
+*/
+class CPosTp2 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp2(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp2() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void WaitForEcomL();
+
+ };
+
+#endif // CPOSTP1_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp20.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP20_H
+#define CPOSTP20_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 20
+*/
+class CPosTp20 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp20(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp20() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ CPosLandmarkDatabase* ReplaceGlobalCategoriesL();
+
+ void SetupGlobalCategoriesL();
+
+ //setup the default categories. english version
+ //how to test russian??
+
+ void VerifyGlobalCategoriesL(TBool aCheck = ETrue);
+
+ void RenameAndDeleteGlobalL();
+
+ void RemoveAllCategoriesL();
+
+
+ // Added for BC testing
+ void UpdateGlobalCategoriesInDb();
+
+
+
+
+ private: // Data
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ RArray<TUint> iGlobalCategoryIds;
+
+
+ RPointerArray<HBufC> iGlobalCategoryNames;
+ RArray<TPtrC> iGlobalCategoryTestNames;
+
+ TPosLmItemId iLmId;
+ TPosLmItemId iCategoryId;
+ };
+
+#endif // CPOSTP20_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp21.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp21_H
+#define CPOSTp21_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 21
+*/
+class CPosTp21 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ //CPosTp21() : CLandmarkTestProcedureBase(21) {};
+ CPosTp21(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp21() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ /* void GetName(
+ TDes& aName
+ ) const;
+ */
+ /**
+ * From CUtfwTestBase
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void SearchL(
+ const RPointerArray<CCategoryLandmarkSearchResult>& aSearchResults,
+ TBool aNameOrId=EFalse,
+ TExecutionMode aExecutionMode = ESynchronous);
+
+ void SearchNonExistingL(TExecutionMode aExecutionMode);
+
+ void SearchForLandmarksInGlobalCategoriesL(TExecutionMode aExecutionMode);
+
+ void AddLandmarksToGlobalCategoriesL();
+
+ void SearchWithSortOrderL();
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ void TestSearchPatternLengthL();
+
+ // Added for BC testing
+
+ void AddCategoriesL();
+
+ void AddLandmarksL();
+
+ // Added for testing (Should be made common metod in BaseClass ??)
+ void MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr );
+
+ private:
+ TUint iRestaurantId1;
+ TUint iRestaurantId2;
+ TUint iGasStationId1;
+ TUint iGasStationId2;
+ TUint iGarageId1;
+
+ // Added for BC testing
+ CPosLmCategoryManager* iCategoryManager;
+ RPointerArray<CPosLandmarkCategory> iCategories;
+ //RArray<CPosLandmarkCategory> iReferencedCategories;
+ RPointerArray<CPosLandmarkCategory> iReferencedCategories;
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ };
+
+#endif // CPOSTp21_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp23.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP23_H
+#define CPOSTP23_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 23
+*/
+class CPosTp23 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp23(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp23() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+ private:
+
+ void SearchL(
+ const RPointerArray<CSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ /**
+ * Verify error report "ESLI-62DBXR Landmarks - Sort order is not correctly implemented"
+ */
+ void VerifySortOrderL();
+
+ void SearchAndDeleteL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void SearchAndRenameL(const RPointerArray<CSearchResult>& aSearchResults);
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ void TestMaxLengthL();
+
+ void TestInvalidPositionFieldsL();
+ };
+
+#endif // CPOSTP23_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp24.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP24_H
+#define CPOSTP24_H
+
+// INCLUDES
+#include <EPos_CPosLmAreaCriteria.h>
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 24
+*/
+class CPosTp24 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp24(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp24() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void SearchL(TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL();
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ static CPosLmAreaCriteria* NewLmAreaCriteriaL(const TReal64 &aSouthLat,
+ const TReal64 &aNorthLat,
+ const TReal64 &aWestLong,
+ const TReal64 &aEastLong);
+
+ };
+
+#endif // CPOSTP24_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp25.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp25_H
+#define CPOSTp25_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <EPos_CPosLMCategoryManager.h>
+// CLASS DECLARATION
+
+/**
+* Test procedure 23
+*/
+class CPosTp25 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp25(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp25() {};
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void SearchL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithMaximumL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchWithSortOrderL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode);
+
+ void SearchAfterAddedCategoryL();
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ void TestSearchPatternLengthL();
+
+ /**
+ * Include the global categories when searching
+ */
+ void SearchGlobalL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync=EFalse);
+
+ /**
+ * Verify error report "ESLI-62DBXR Landmarks - Sort order is not correctly implemented"
+ */
+ void VerifySortOrderL();
+
+ };
+
+#endif // CPOSTp25_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp3.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP3_H
+#define CPOSTP3_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 3
+*/
+class CPosTp3 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp3(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp3() {};
+
+ public: // Functions from base classes
+
+ void StartL();
+
+ private:
+ void TestOpenDbL(const TDesC& aDbURI);
+ };
+
+#endif // CPOSTP3_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp30.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP30_H
+#define CPOSTP30_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 30
+*/
+class CPosTp30 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp30() : CLandmarkTestProcedureBase(30) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp30() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ static void RunTestL(TAny* aData);
+
+ private: // Functions
+
+ void StartMultipleClientsL(TUint aNoClients);
+
+ void CreateThreadsL(const TUint aNoThreads);
+
+ private: // data
+
+ RArray<RThread> iThreads;
+ TInt iThreadIndex;
+
+ TBool iRemoveTest;
+ TBool iAsyncSearch;
+ };
+
+
+
+#endif // CPOSTP30_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp31.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,163 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP31_H
+#define CPOSTP31_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <e32std.h>
+
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+
+// CLASS DECLARATION
+
+
+/**
+* Test procedure 31
+*/
+class CPosTp31 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp31() : CLandmarkTestProcedureBase(31) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp31() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+
+ public:
+
+ static void RunReceiveEventsTestL(TAny* aData);
+
+ static void CreateEventsTestL(TAny* aData);
+
+ void LogError(const TDesC& aError);
+
+ void CheckEvent(const TInt aThreadIndex,
+ const TPosLmEventType aExpectedEventType,
+ const TPosLmEventType aEventType,
+ const TPosLmItemId aExpectedItemId,
+ const TPosLmItemId aItemId);
+
+
+ private: // Functions
+
+ void CreateThreadsL();
+
+ private: // data
+
+ RArray<RThread> iThreads;
+ TInt iErrors;
+ TBuf<4095> iErrorLog;
+ TInt iThreadIndex;
+ };
+
+class CEventObserver : public CActive
+ {
+ public: // Constructors and destructor
+
+ static CEventObserver* NewL(CPosTp31* aTp31, TInt aThreadIndex);
+
+ /**
+ * Destructor.
+ */
+ ~CEventObserver();
+
+ public: // Functions from base classes
+
+ void Start();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+ void StartTimer();
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CEventObserver(CPosTp31* aTp31, TInt aThreadIndex);
+
+ void ConstructL();
+
+
+
+ static TInt TimeoutCheck(TAny* aSelf);
+
+ private: // Data
+
+ CPosTp31* iTp31;
+ TInt iEventNumber;
+ TInt iThreadIndex;
+ TPosLmEvent iEvent;
+ CPosLandmarkDatabase* iDatabase;
+ CPeriodic* iPeriodicTimer;
+ TCallBack iCallback;
+
+
+
+ };
+
+#endif // CPOSTP31_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp33.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP33_H
+#define CPOSTP33_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+// CLASS DECLARATION
+
+
+//constants
+/**
+* Test procedure 33
+*/
+class CPosTp33 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp33() : CLandmarkTestProcedureBase(33) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp33() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ static void RunTestL(TAny* aData);
+
+ private:
+
+ /**
+ * Opening and closing the landmark database serveral times fast
+ */
+ void StressTestL();
+
+ /**
+ * TBD
+ */
+ void ThreadTestL();
+
+ void StartMultipleClientsL(TUint aNoClients);
+
+ void CreateThreadsL(const TUint aNoThreads);
+
+ void KillTestL();
+
+ void ListAllServers(const TDesC& aServerName);
+
+ void ListAllProcesses(const TDesC& aProcessName);
+
+ void ListAllThreads(const TDesC& aThreadName);
+
+ /**
+ * Prints the Landmark heap to the logfile.
+ */
+ void MonitorHeapL(TBool aSetMaxHeap = EFalse);
+
+ /**
+ * Get heap size for specified thread
+ * using the RThread::GetRamSizes() method on TARGET
+ */
+ TInt GetHeapSizeL(const TDesC& aThreadName, TInt& aSize, TInt& aUsed);
+
+ private:
+
+ RArray<RThread> iThreads;
+ TInt iThreadIndex;
+ CPosLandmarkDatabase* iLmd1;
+ CPosLandmarkDatabase* iLmd2;
+ TInt iMaxHeap;
+ };
+
+
+
+#endif // CPOSTP33_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp34.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP34_H
+#define CPOSTP34_H
+
+// INCLUDES
+#include <EPos_CPosLmTextCriteria.h>
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 34
+*/
+class CPosTp34 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp34() : CLandmarkTestProcedureBase(34) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp34() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void CheckSearchResultL(CSearchResult& aSearchResult,
+ CPosLandmarkSearch& aLandmarkSearch,
+ CPosLmTextCriteria& aTextCriteria);
+
+ private: // Data
+
+
+
+
+ };
+
+#endif // CPOSTP34_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp35.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP35_H
+#define CPOSTP35_H
+
+// INCLUDES
+#include <EPos_CPosLmNearestCriteria.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+class CNearestSearchResultTp35;
+
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 35
+*/
+class CPosTp35 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp35(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp35() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+
+ void CheckSearchResultL(CNearestSearchResultTp35& aSearchResult);
+
+ private:
+
+ void SearchL(const TBool& aSync=EFalse);
+
+ void SearchAndCancelL(const TBool& aInCallback=EFalse);
+
+ void AppendNearestSearchResultsL();
+
+ CPosLandmarkDatabase* UseNearestSearchGeneratedDbFileL();
+
+ void SearchWithSortOrderL();
+
+ private:
+
+
+ RPointerArray<CNearestSearchResultTp35> iNearestSearchResults;
+
+ };
+
+
+class TSearchResultTp35
+ {
+ public:
+
+ TSearchResultTp35();
+
+ TSearchResultTp35(const TPosLmItemId& aId, const TReal32& aDistance);
+
+ TReal64 Distance() const;
+
+ TPosLmItemId Id() const;
+
+ private:
+ friend class CPosTp35;
+
+
+ TReal32 iDistance;
+ TPosLmItemId iId;
+
+ };
+
+class CNearestSearchResultTp35 : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CNearestSearchResultTp35* NewL(
+ const TDesC& aDes,
+ const TInt& aIndex,
+ RFs& aFileSession);
+
+ /**
+ * Destructor.
+ */
+ CNearestSearchResultTp35::~CNearestSearchResultTp35();
+
+ public:
+
+ TReal64 Latitude() const;
+
+ TReal64 Longitude() const;
+
+ TBool UseCoverageRadius() const;
+
+ TReal32 MaxDistance() const;
+
+ TInt ErrorCode() const;
+
+ void Print(TDes& aDes);
+
+ void PrintDistances(TDes& aPrint);
+
+ private:
+
+ /**
+ * Constructor.
+ */
+ CNearestSearchResultTp35(RFs& aFileSession);
+
+ void ConstructL(const TDesC& aDes, const TInt& aIndex);
+
+ void AppendDistancesL(const TInt& aIndex);
+
+ void ParseDistanceL(const TDesC& aDes, const TInt& aIndex, const TPosLmItemId& aId);
+
+ void SortDistances();
+
+ private:
+
+ // By default, prohibit copy constructor
+ CNearestSearchResultTp35(const CNearestSearchResultTp35&);
+ // Prohibit assigment operator
+ CNearestSearchResultTp35& operator=(const CNearestSearchResultTp35&);
+
+ private: // Data
+
+ friend class CPosTp35;
+
+ enum TValueIndex
+ {
+ ELatitude =1,
+ ELongitude =2,
+ EUseCoverageRadius =3,
+ EMaxDistance =4,
+ EErrorCode =5,
+ ERedefined =6,
+ EMaxSearchResult =7,
+ ESearchResult =8
+ };
+
+ TInt iErrorCode;
+ TReal64 iLatitude;
+ TReal64 iLongitude;
+ TBool iUseCoverageRadius;
+ TReal32 iMaxDistance;
+ TInt iMaxSearchResult;
+
+ RArray<TSearchResultTp35> iDistances;
+
+ CPosLandmarkDatabase* iDatabase;
+ RFs& iFileSession;
+ };
+
+#endif // CPOSTP35_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp36.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp36_H
+#define CPOSTp36_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 1
+*/
+class CPosTp36 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp36(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp36() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * Always called even if test leaves,
+ * after test completion
+ */
+ void CloseTest();
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ /**
+ *
+ */
+ void DoTestL(TBool aSync, TInt aTestNr, TInt aNrOfHits);
+
+ /**
+ *
+ */
+ void DoSearchForCategoryL(TBool aSync);
+
+ /**
+ *
+ */
+ void RemoveCategoriesFromLandmarksL(TInt aNrOfLandmarks);
+
+ /**
+ *
+ */
+ TInt GetNrOfLandmarksL();
+
+ private:
+ RArray<TPosLmItemId> iArray;
+
+ };
+
+#endif // CPOSTp36_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp37.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp37_H
+#define CPOSTp37_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 1
+*/
+class CPosTp37 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp37(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound = KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp37() {};
+
+ public: // Functions from base classes
+
+
+
+ /**
+ * From CUtfwTestBase. Always called even if test leaves,
+ * after test completion
+ */
+ void CloseTest();
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ * Test to mix CPosLmCatNameCriteria and CPosLmIdListCriteria
+ * in a StartCategorySearchL search, should leave
+ * Test to mix CPosLmCatNameCriteria and CPosLmIdListCriteria
+ * in a StartLandmarkSearchL search, should leave
+ */
+ void TestCompositeAndCategoryL(TInt aTestNr);
+
+ /**
+ * Test that it is not possible to mix landmark search and a landmark category search
+ * in a composite object.
+ *
+ * Test that it is not possible perform a search if the composite object
+ * does not have any arguments
+ */
+ void DoErrorTestL(TInt aTestNr);
+
+ /**
+ * Test that it is not possible to use only one ID List
+ * without any other search arguments
+ */
+ void DoErrorTest3L(TInt aTestNr);
+
+ /**
+ * Test that it is not possible to use several ID Lists
+ * in a composite search
+ */
+ void DoErrorTest4L(TInt aTestNr);
+
+ private:
+ TInt iErrorsFound;
+
+ };
+
+#endif // CPOSTp37_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp38.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp38_H
+#define CPOSTp38_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkDatabase;
+class CPosLmCompositeCriteria;
+/**
+* Test procedure 1
+*/
+class CPosTp38 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp38(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp38() {};
+
+ public: // Functions from base classes
+
+
+
+ /**
+ * Always called even if test leaves,
+ * after test completion
+ */
+ void CloseTest();
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /*
+ * Use the file lmDbCompositeSearchResult.txt and parse
+ * all test combinations, perform all tests and check for correct result
+ */
+ void StartLandmarksCompositeTestL();
+
+ /**
+ * Prints debug information about the composite search object
+ */
+ void PrintCompositeInfo(CPosLmCompositeCriteria* aComposite);
+
+ /**
+ * Test that it is possible to search for categories using the
+ * CPosLmCatNameCriteria class in a StartCategorySearchL search
+ */
+ void TestCategoryCompositeSearchL();
+
+ /**
+ * Perform a test with a composite object used in a composite landmark search
+ */
+ void TestCompositeInCompositeL();
+
+ /**
+ * Perform a test with two CPosLmCategoryCriteria objects
+ */
+ void TestTwoLmCategoryCriteriaL();
+
+ /**
+ * Perform a test with two different text arguments combined in a composite landmark search
+ * with AND composition
+ */
+ void TestSeveralTextArgumentsL();
+ /**
+ * Perform a test with two different text arguments combined in a composite landmark search
+ * with OR composition
+ */
+ void TestSeveralTextArgumentsWithORL();
+ /**
+ * Test to check sort order when using OR composite criteria
+ */
+
+ void TestSortOrderWithORL();
+
+ /**
+ * Test to add and remove search arguments to the CPosLmCompositeCriteria object
+ */
+ void TestAddAndRemoveL();
+
+ /**
+ * Test that no result is returned if setting the aSearchOnlyPreviousMatches to ETrue
+ * and there is no previous result
+ */
+ void TestWithNoPreviousResultL(TInt aTestNr);
+
+ /**
+ * Test cancel of a composite search
+ */
+ void SearchAndCancelL(const TBool& aInCallback);
+
+ /**
+ * Test with different sort order scenarios, test sortpref for landmark and category
+ * also test with nearest
+ */
+ void TestWithSortOrderLandmarksL();
+
+ void TestWithSortOrderCategoriesL();
+
+ void TestWithSortOrderNearestL();
+
+ };
+
+#endif // CPOSTp38_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp39.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP39_H
+#define CPOSTP39_H
+
+// INCLUDES
+
+#include <e32base.h>
+#include <e32std.h>
+
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+
+// CLASS DECLARATION
+
+
+/**
+* Test procedure 39
+*/
+class CPosTp39 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp39() : CLandmarkTestProcedureBase(39) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp39() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+
+ public:
+
+ static void RunEventsListenerL(TAny* aData);
+
+ static void RunEventsGeneratorL(TAny* aData);
+
+ void LogError(const TDesC& aError);
+
+ void CheckEvent(const TInt aThreadIndex,
+ const TPosLmEventType aExpectedEventType,
+ const TPosLmEventType aEventType,
+ const TPosLmItemId aExpectedItemId,
+ const TPosLmItemId aItemId);
+
+
+ private: // Functions
+
+ void SetupGlobalCategoriesL();
+
+ void CreateThreadsL();
+
+ TInt GetHeapSizeL(const TDesC& aThreadName, TInt& aHeapSize, TInt& aStackSize);
+
+ private: // data
+
+ RArray<RThread> iThreads;
+ TInt iErrors;
+ TBuf<4095> iErrorLog;
+ TInt iThreadIndex;
+ };
+
+class CEventObserverTp39 : public CActive
+ {
+ public: // Constructors and destructor
+
+ static CEventObserverTp39* NewL(CPosTp39* aTp39, TInt aThreadIndex);
+
+ /**
+ * Destructor.
+ */
+ ~CEventObserverTp39();
+
+ public: // Functions from base classes
+
+ void Start();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+ void StartTimer();
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CEventObserverTp39(CPosTp39* aTp39, TInt aThreadIndex);
+
+ void ConstructL();
+
+ static TInt StopEventNotification(TAny* aSelf);
+
+ private: // Data
+
+ CPosTp39* iTp39;
+ TInt iEventNumber;
+ TInt iThreadIndex;
+ TPosLmEvent iEvent;
+ CPosLandmarkDatabase* iDatabase;
+ CPeriodic* iPeriodicTimer;
+ TCallBack iCallback;
+
+
+
+ };
+
+#endif // CPOSTP39_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp4.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP4_H
+#define CPOSTP4_H
+
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 4
+*/
+class CPosTp4 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp4(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp4() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void TestCompactL(TExecutionMode aExecutionMode);
+
+ };
+
+#endif // CPOSTP4_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp40.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp40_H
+#define CPOSTp40_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 1
+*/
+class CPosTp40 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp40() : CLandmarkTestProcedureBase(40) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp40() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+ // Test error report ESLI-5ZYMPM
+ void TestPart1L();
+ // Test error report ESLI-62FGEV
+ void TestPart2L();
+ };
+
+#endif // CPOSTp40_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp41.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp41_H
+#define CPOSTp41_H
+
+// INCLUDES
+#include <EPos_CPosLandmark.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+
+/**
+* Test procedure 41
+*/
+class CPosTp41 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp41() : CLandmarkTestProcedureBase(41) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp41() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ private:
+
+ /**
+ * This part verifies error report "ESLI-5ZDH4N Landmarks - Empty descriptors"
+ */
+ void VerifyEmptyLandmarksL();
+
+ /**
+ * Check that landmark read from db has correct name and desc
+ */
+ void CheckLandmarkL(TPosLmItemId aId, TDesC& aName, TDesC& aDesc);
+
+ private: // data
+
+ };
+
+#endif // CPOSTp41_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp42.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP42_H
+#define CPOSTP42_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <apgcli.h>
+
+
+//CONSTANTA
+const TInt NOLANDMARKNUMBER = 123;
+// CLASS DECLARATION
+
+class CRecognizerData;
+
+/**
+* Test procedure 42
+*/
+class CPosTp42 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp42(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp42() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+ private:
+
+ void TestWithBufferL();
+
+ void TestWithFileL();
+
+ void TestWithEmptyFileL();
+
+ void TestWithLargeFilesL(const TDesC& msg, TInt aExpCode);
+
+ void CreateFileL( const TDesC& msg, TFileName& aFileName );
+
+ void CheckResultL(TDataRecognitionResult aExpectedResult, TDataRecognitionResult aResult);
+
+ private:
+ RPointerArray<CRecognizerData> iDataToRecognize;
+ TInt iErrorsFound;
+
+ };
+
+#endif // CPOSTP42_H
+
+/**
+* Data class only used with TP42 to hold information
+* read from the file i,e the data to be recongnized and
+* the expected result.
+*/
+class CRecognizerData: public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CRecognizerData* NewL(const TDesC& aDes);
+
+ /**
+ * Destructor.
+ */
+ ~CRecognizerData();
+
+ public:
+
+ TPtrC RecognizerData() const;
+
+ const TDataRecognitionResult& ExpectedResult() const;
+
+ private:
+
+ CRecognizerData();
+
+ void ConstructL(const TDesC& aDes);
+
+ private:
+ // By default, prohibit copy constructor
+ CRecognizerData(const CRecognizerData&);
+ // Prohibit assigment operator
+ CRecognizerData& operator=(const CRecognizerData&);
+
+ void ParseResult(const TDesC& aDes);
+ void ParseType(const TDesC& aDes);
+
+
+ private: // Data
+
+ enum TValueIndex
+ {
+ ETextBuffer = 0,
+ EResult = 1,
+ EType = 2
+ };
+ HBufC* iRecognizerData;
+ TDataRecognitionResult iExpectedResult;
+
+ };
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp43.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP43_H
+#define CPOSTP43_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkEncoder;
+class CPosLandmarkParser;
+
+/**
+* Test procedure 43
+*/
+class CPosTp43 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp43(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp43() {};
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void TestErrorScenariosL();
+
+ /**
+ * Test that CPosLandmarkEncoder::SetOutputFileL leaves with
+ * KErrAlreadyExists if file already exists
+ */
+ void ErrorScenario1L();
+
+ /**
+ * Test that CPosLandmarkEncoder::SetOutputFileL is opened in exclusive mode
+ */
+ void ErrorScenario2L();
+
+ /**
+ * Test that CPosLandmarkEncoder::AddCollectionDataL leaves with KErrAlreadyExists if
+ * collection ID is used twice (or more)
+ */
+ void ErrorScenario3L();
+
+ /**
+ * Test that it is not possible to set collection data "out-of-range" from TPosLmCollectionDataId
+ * (will be silently ignored)
+ * Test that it is possible to set collection meta data,
+ * the data will however not be encoded to the XML file (silently ignored)
+ */
+ void ErrorScenario4L();
+
+ /**
+ * Test that it is possible to use XML tags as name/description/ etc
+ * verify that they are correct enocded
+ */
+ void ErrorScenario5L();
+
+ /**
+ * Create all landmark items that should be encoded with the encoder
+ */
+ void CreateEncoderPartsL();
+
+
+ /**
+ * Check the data (XML) created by the eoncoder
+ */
+ void ParseAndCheckDataFromEncoderL(const TDesC& aFile, const TDesC& aCollectionName,
+ const TDesC& aCollectiondDescription ,const TDesC8& aBuffer);
+
+ /**
+ * Used for debugging
+ */
+ void PrintParsedDataFromEncoderL(const TDesC& aFile, /*const TDesC& aCollectionName,
+ const TDesC& aCollectiondDescription, */const TDesC8& aBuffer);
+
+ void PrintLandmarkIdFieldsL(const CPosLandmark& aLandmark);
+
+ /**
+ * Test with long collection data field
+ */
+ void TestLongCollectionFieldsL(TBool aUseFile);
+
+ /**
+ * Compare two files
+ */
+ void CompareTwoFilesL(const TDesC16& aCorrectFile, const TDesC16& aFile);
+
+ /**
+ * Test with long filename as file output
+ */
+ void TestWithLongFileNameL();
+
+
+ void SetupGlobalCategoriesL();
+
+
+ private:
+ CPosLandmarkEncoder* iLandmarkEncoder;
+ CPosLandmarkParser* iLandmarkParser;
+ RPointerArray<CPosLandmark> iLandmarks;
+ TInt iErrorsFound;
+ RArray<TUint> iGlobalCategoryIds;
+ RArray<TPtrC> iGlobalCategoryNames;
+ RArray<TPtrC> iGlobalCategoryTestNames;
+
+
+ };
+
+#endif // CPOSTP43_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp44.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp44_H
+#define CPOSTp44_H
+
+// INCLUDES
+#include "EPos_LandmarksErrors.h"
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 44
+*/
+class CPosTp44 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp44(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp44() {};
+
+ public:
+
+ /**
+ * Includes both Panic testing and testing of correct leave codes
+ */
+ static void RunPanicTestL(TAny* aData);
+
+ public: // Functions from base classes
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ static TInt DeleteEncoderCallback(TAny* aSelf);
+
+ private:
+
+ void CreateThreadL();
+
+ void ResumeThreadAndVerifyExit();
+
+ void RunLeaveTestL();
+
+ public:
+ enum ExitType {ExitPanic, ExitLeave};
+
+ private:
+
+ RThread iThread;
+ TInt iExpectedErrorCode;
+ ExitType iExpectedExitType;
+ TInt iTestCase;
+ };
+
+#endif // CPOSTp44_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp45.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPosTp45_H
+#define CPosTp45_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+//CONSTANTS
+
+// CLASS DECLARATION
+class CPosLandmarkEncoder;
+
+/**
+* Test procedure 45
+*/
+class CPosTp45 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp45(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp45() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ private:
+
+ void ExportLandmarksL( const TDesC& aFileName,
+ RArray<TPosLmItemId>& aArrayOfIds,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions);
+
+ void ExportLandmarksIncL( const TDesC& aFileName,
+ RArray<TPosLmItemId>& aArrayOfIds,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions,
+ TBool aUseWaitForRequest);
+
+ void ExportWithCollectionDataL(RArray<TPosLmItemId>& aArrayOfIds,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions);
+
+ void ExportAndCancelL( const TDesC& aFileName,
+ const TBool& aInCallback,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions);
+
+ void VerifyCancelL(const TDesC& aFileName, const TInt aMaxExported);
+
+ void AddLandmarksL();
+
+ void AddCategoriesL();
+
+ void RenameGlobalCategoryL();
+
+ void TestErrorCodesL();
+
+ void DeleteFile(const TDesC& aFile);
+
+ /**
+ * Test to export to a file with long filename (more than 255 characters)
+ */
+ void ExportToFileWithLongFileNameL();
+
+ // Added for BC testing
+ void MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr );
+
+ void SetupGlobalCategoriesL();
+
+ private:
+
+ CPosLmCategoryManager* iCategoryManager;
+ RPointerArray<CPosLandmarkCategory> iCategories;
+ RArray<TUint> iGlobalCategoryIds;
+ RArray<TPtrC> iGlobalCategoryNames;
+ RArray<TPtrC> iGlobalCategoryTestNames;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ CBufBase* iBuffer;
+
+ TBool iLogToFile;
+
+ };
+
+#endif // CPosTp45_H
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp46.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP46_H
+#define CPOSTP46_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 46
+*/
+class CPosTp46 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp46() : CLandmarkTestProcedureBase(46) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp46() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ static void RunTestL(TAny* aData);
+
+ private: // Functions
+
+ void RemoveFilesL();
+
+ void StartMultipleClientsL(TUint aNoClients);
+
+ void CreateThreadsL(const TUint aNoThreads);
+
+ private: // data
+
+ enum TTestStep
+ {
+ ESync =0,
+ EInc =1,
+ EImportStarted =2,
+ EImportCancelled =3
+ };
+
+ TInt iTestStep;
+
+ RArray<RThread> iThreads;
+ TInt iThreadIndex;
+
+ };
+
+
+
+#endif // CPOSTP46_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp47.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp47_H
+#define CPOSTp47_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosLandmarkEncoder;
+/**
+* Test procedure 47
+*/
+class CPosTp47 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp47(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp47() {};
+
+ public: // Functions from base classes
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ * Create XML data files used in this test
+ * The files then need to be manually changed
+ * aUseFile if data should be written to XML file
+ * if EFalse data is written to buffer (and then to a buffer file)
+ */
+ void CreateXMLData(TBool aUseFile);
+
+ /**
+ * Check XML data created in CreateXMLData
+ */
+ void CheckXMLData(TBool aUseFile);
+
+ /**
+ *
+ * @aFile the file name
+ */
+ void PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType);
+
+ void PrintLandmarkFieldsL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+ void PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag=EFalse);
+
+ /**
+ * Check that the parser does not support
+ * building index for parsed landmarks
+ */
+ void CheckIndexNotSupportedL();
+
+ /**
+ * Check that cancel of parse is correct
+ */
+ void DoCancelTestL();
+
+
+ /**
+ * Trace to trace file
+ */
+ void TraceL(const TDesC& msg);
+
+ // Added for BC testing
+ void MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr );
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+
+ CPosLandmarkEncoder* iLandmarkEncoder;
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ TInt iErrorsFound;
+
+ CBufBase* iEncoderBuffer;
+
+ CPosLmCategoryManager* iCategoryManager;
+
+ };
+
+#endif // CPOSTp47_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp48.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,128 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP48_H
+#define CPOSTP48_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+
+/**
+* Test procedure 48
+*/
+class CPosTp48 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp48(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp48() {};
+
+ public: // Functions from base classes
+
+
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ * Do the import of landmarks
+ */
+ void ImportLandmarksL(TBool aSync, TBool aParseDone, TUint aTransferOption, const RArray<TUint>& aLandmarkSubSet, TBool aDoParse=EFalse, TBool aCancel=EFalse);
+
+ /**
+ * Prepare landmarkdb for test
+ */
+ void ResetLandmarksDbL();
+
+ /**
+ * Create data used for this test
+ */
+ void CreateXMLDataL();
+
+
+ /**
+ * List all landmarks in db
+ */
+ void ListLandmarksDbL();
+
+ /**
+ * Check that imported landmarks has been added to database
+ */
+ void CheckLandmarksDatabaseL(TUint aTransferOption);
+
+ void PrintLandmarkIdFieldsL(const CPosLandmark& aLandmark);
+
+ /**
+ * Helper method, removing all associated categories from a landmark that should be "saved"
+ * in the iLandmarks array
+ */
+ void RemoveCategoriesFromLandmarkL(CPosLandmark& aLandmark);
+
+ /**
+ * Try to set a long file name as input
+ */
+ void ImportFromFileWithLongFileNameL();
+
+ /**
+ * Helper method to check that a global category exists
+ and another does not
+ */
+ void CheckGlobalCategoryExistL(const TDesC& aShouldExistName, const TDesC& aShouldNotExistName);
+
+ /**
+ * Does the acutal test
+ */
+ void DoTestL(TBool aFile, TBool aFullParse=EFalse, TBool aDoParse=EFalse, TBool aCancel=EFalse);
+
+ /**
+ * Change input method after parse
+ */
+ void DoTestChangeInputMethodL();
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+ CPosLandmarkEncoder* iLandmarkEncoder;
+ RPointerArray<CPosLandmark> iLandmarks;
+ TInt iErrorsFound;
+ CBufBase* iEncoderBuffer;
+
+
+
+ };
+
+#endif // CPOSTp48_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp49.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP49_H
+#define CPOSTP49_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <apgcli.h>
+
+
+// CLASS DECLARATION
+
+class CDatabaseClient;
+
+/**
+* Test procedure 49
+*/
+class CPosTp49 : public CLandmarkTestProcedureBase, public MProgressObserver
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp49() : CLandmarkTestProcedureBase(49) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp49() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Initializes a test before StartL is called.
+ */
+ void InitTestL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ /**
+ * From MProgressObserver
+ */
+ void NotifyProgress(TReal aProgress);
+
+ private:
+
+ void ImportAllLandmarksL();
+ TInt ImportSomeLandmarksL();
+ void VerifyImportedLandmarksL(TInt aNrOfExpectedItems);
+ void ParseLandmarksContentL();
+ void RemoveThreeLandmarksL();
+ void SetupPreConditionsL();
+ void ExecuteLmOpL(TInt aExpectedResult, TBool aObserveProgress = EFalse);
+ void FetchIteratorL();
+ void RecreateParserL(const TDesC& aFileName);
+ void StartImportLandmarksL();
+ void CreateNameArrayL(TInt aNrOfItems);
+
+ private:
+
+ // Contains the IDs of the improted landmarks
+ RArray<TPosLmItemId> iImportedLandmarkIds;
+
+ // Contains the IDs of imported landmarks that have been removed
+ RArray<TPosLmItemId> iRemovedLandmarkIds;
+
+ // The parser that parses the xml file to import
+ CPosLandmarkParser* iLandmarkParser;
+
+ // The iterator that is to be tested
+ CPosLmItemIterator* iIterator;
+
+ // An array containing the names of the imported landmarks
+ CDesCArray* iLandmarkNames;
+
+ // Indicates when it is time to fetch iterator of imported landmarks.
+ TReal iProgressInterruptLevel;
+
+ };
+
+#endif // CPOSTP49_H
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp5.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP5_H
+#define CPOSTP5_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <StifLogger.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 5
+*/
+class CPosTp5 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+
+ CPosTp5(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp5() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void CheckGetMethodsL(CPosLandmark* aLandmark);
+
+ void CheckRemoveMethodsL(CPosLandmark* aLandmark);
+
+ void CheckRemovedL(CPosLandmark* aLandmark);
+
+ void CheckPositionFieldL(const CPosLandmark& aLandmark, const TUint16 aId);
+
+ void CheckFieldsMaxLengthL();
+
+ void CheckNaNErrorL();
+
+ };
+
+#endif // CPOSTP51_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp50.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP50_H
+#define CPOSTP50_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 50
+*/
+class CPosTp50 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp50() : CLandmarkTestProcedureBase(50) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp50() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ static void RunTestL(TAny* aData);
+
+ private: // Functions
+
+ void StartMultipleClientsL(TUint aNoClients);
+
+ void CreateThreadsL(const TUint aNoThreads);
+
+ void ExportLandmarksL();
+
+ void TestESLI_64LLU3L();
+
+ private: // data
+
+ enum TTestStep
+ {
+ ESync =0,
+ EInc =1,
+ EReadLockTaken =2,
+ ESearchCancelled =3
+ };
+
+ TInt iTestStep;
+
+ RArray<RThread> iThreads;
+ TInt iThreadIndex;
+
+ };
+
+
+
+#endif // CPOSTP50_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp51.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp51_H
+#define CPOSTp51_H
+
+// INCLUDES
+#include "EPos_LandmarksErrors.h"
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 51
+*/
+class CPosTp51 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp51(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp51() {};
+
+ public:
+
+ /**
+ * Includes both Panic testing and testing of correct leave codes
+ */
+ static void RunPanicTestL(TAny* aData);
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ private:
+
+ void CreateThreadL();
+
+ void ResumeThreadAndVerifyExitL();
+
+ void RunLeaveTestL();
+
+ void ListAllServers();
+
+ public:
+ // Use this enum to define if the thread should exit with panic or leave
+ enum ExitType {ExitPanic, ExitLeave};
+
+ private:
+
+ RThread iThread;
+ TInt iExpectedErrorCode;
+ ExitType iExpectedExitType;
+ TInt iTestCase;
+
+ TPtrC8 iMimeType;
+ TInt iThreadCounter;
+ TInt iErrorsFound;
+ };
+
+#endif // CPOSTp51_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp52.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP52_H
+#define CPOSTP52_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+
+/**
+* Test procedure 48
+*/
+class CPosTp52 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp52(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {iErrorsFound=KErrNone;};
+ /**
+ * Destructor.
+ */
+ ~CPosTp52() {};
+
+ public: // Functions from base classes
+
+
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ /**
+ * Do the import of landmarks
+ */
+ TInt ImportLandmarksL(TBool aSync, TUint aTransferOption);
+
+ /**
+ * Prepare landmarkdb for test
+ */
+ void ResetLandmarksDbL();
+
+ /**
+ * Get nr of landmarks in lm db
+ */
+ TInt GetNrOfLandmarksL();
+
+ /**
+ * Import landmarks from test, both sync and async
+ */
+ void DoTestL(
+ const TDesC& aTestFile,
+ const TDesC8& aMimeType,
+ TInt aExpectedErrorCode,
+ TInt aExpNrImportedLandmarks=0);
+
+ /**
+ * Check landmark in lm db
+ */
+ void CheckLongLandmarkNameL();
+
+ /**
+ * Check landmark category in lm db
+ */
+ void CheckLongCategoryNameL(TInt aNumExpectedCategories);
+
+ private:
+ CPosLandmarkParser* iLandmarkParser;
+ TInt iErrorsFound;
+
+ };
+
+#endif // CPOSTp52_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp53.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPosTp53_H
+#define CPosTp53_H
+
+// INCLUDES
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+class CActiveLmImportEvent;
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 53
+*/
+class CPosTp53 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp53() : CLandmarkTestProcedureBase(53) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp53() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ */
+ void CloseTest();
+
+ /**
+ * From CPosTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private: // New functions
+
+ /**
+ * Tests logging of landmark events
+ */
+ void LandmarkImportEventTestL();
+
+ /**
+ * Test Compact during import
+ */
+ void LandmarkImportCompactTestL();
+
+ void ImportLandmarksL(const TDesC& aFileName, CPosLandmarkDatabase::TTransferOptions aTransferOptions);
+
+ void AddCategoriesL();
+
+ private: // Data
+
+ CActiveLmImportEvent* iActiveLmEvent;
+ CPosLandmarkParser* iParser;
+ };
+
+class CActiveLmImportEvent : public CActive
+ {
+ public:
+
+ static CActiveLmImportEvent* NewL(MUtfwLog* aLog);
+
+ /**
+ * Destructor.
+ */
+ ~CActiveLmImportEvent();
+
+ public:
+
+ void Start();
+
+ /**
+ * From CActive
+ * Handles request completion event.
+ */
+ void DoCancel();
+
+ /**
+ * From CActive.
+ *
+ * Handles request completion event.
+ */
+ void RunL();
+
+ private:
+
+ /**
+ * C++ constructor.
+ */
+ CActiveLmImportEvent(MUtfwLog* aLog);
+
+ void ConstructL();
+
+ void VerifyEvent();
+
+ void AssertCorrectEvent(TPosLmEventType aExpectedEventType,
+ TPosLmEventType aEventType,
+ TPosLmItemId aExpectedLandMarkItemId,
+ TPosLmItemId aLandMarkItemId);
+
+ private: // data
+
+ friend class CPosTp53;
+
+ MUtfwLog* iLog;
+ CPosLandmarkDatabase* iDatabase;
+
+ TPosLmEvent iEvent;
+ TInt iEventNumber;
+
+ TInt iGlobalErr;
+
+ };
+
+#endif // CPosTp53_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp56.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP56_H
+#define CPOSTP56_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 56
+*/
+class CPosTp56 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp56() : CLandmarkTestProcedureBase(56) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp56() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void TestOpenSpecificDbL();
+
+ void TestOpenDbL(const TDesC& aDbURI);
+
+ void CopyTestDbL();
+
+ void TestMultipleExportL();
+
+ void CreateDatabasesL();
+
+ void TestLockedDatabaseL();
+
+
+ };
+
+#endif // CPOSTP56_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp57.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP57_H
+#define CPOSTP57_H
+
+// INCLUDES
+#include <EPos_CPosLmAreaCriteria.h>
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 57
+*/
+class CPosTp57 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp57() : CLandmarkTestProcedureBase(57) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp57() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ void CloseTest();
+
+ private:
+
+ void CreateDatabasesL();
+
+ void SearchWithTextCriteriaL();
+
+ void SearchWithAreaCriteriaL();
+
+ static CPosLmAreaCriteria* NewLmAreaCriteriaL(const TReal64 &aSouthLat,
+ const TReal64 &aNorthLat,
+ const TReal64 &aWestLong,
+ const TReal64 &aEastLong);
+ };
+
+#endif // CPOSTP56_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp58.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,129 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP58_H
+#define CPOSTP58_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <ss_std.h>
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+
+/**
+* Test procedure 58
+*/
+class CPosTp58 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp58() : CLandmarkTestProcedureBase(58) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp58() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called before StartL()
+ */
+ void InitTestL();
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ public: // New functions
+
+ /**
+ * Creates, initializes and opens the default landmark database
+ */
+ CPosLandmarkDatabase* InitDbLC();
+
+ /**
+ * Executes the import test thread
+ */
+ static void RunImportTestL(TAny* aData);
+
+ /**
+ * Executes the thread killing thread
+ */
+ static void RunThreadKillerL(RThread* aThread);
+
+ /**
+ * Does the import of landmarks
+ */
+ void ImportLandmarksL(const RArray<TUint>* aLandmarkSubSet);
+
+ public:
+
+ // Use this enum to define which test case to execute
+ enum TTestCase
+ {
+ ETestImportAllLandmarks,
+ ETestImportSubsetOfLandmarks
+ };
+
+ private:
+
+ void ResumeThreadsAndVerifyExitL();
+
+ /**
+ * Returns ETrue if any errors are encountered, EFalse otherwise.
+ */
+ TBool VerifyThreadExitResults(
+ TExitType aKillerThreadExitType,
+ TExitType aImportThreadExitType,
+ const TExitCategoryName& aImportThreadExitCategory,
+ TInt aImportThreadExitReason);
+
+ private:
+
+ TInt iExpectedErrorCode;
+ TTestCase iTestCase;
+
+ };
+
+#endif // CPOSTp58_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp6.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP6_H
+#define CPOSTP6_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 6
+*/
+class CPosTp6 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp6(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp6() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ void CheckGetMethodsL(CPosLandmarkCategory* aCategory, const TDesC& aName);
+
+ void CheckRemoveMethodsL(CPosLandmarkCategory* aCategory);
+
+ void CheckRemovedL(CPosLandmarkCategory* aCategory);
+
+ void CheckFieldsMaxLengthL();
+
+ void CheckEmptyCategoryNameL();
+
+ void CheckSetIconL();
+
+ };
+
+#endif // CPOSTP6_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp7.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP7_H
+#define CPOSTP7_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 7
+*/
+class CPosTp7 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp7(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp7() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Always called, even if the test leaves
+ */
+ void CloseTest();
+
+ static void RunTestL(TAny* aData);
+
+ private: // Functions
+
+ void CreateThreadsL();
+
+ private: // data
+
+ RArray<RThread> iThreads;
+
+ TInt iThreadIndex;
+ TBool iOneSucces;
+
+ };
+
+
+
+#endif // CPOSTP7_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp76.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp76_H
+#define CPOSTp76_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 76
+*/
+class CPosTp76 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp76() : CLandmarkTestProcedureBase(76) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp76() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ void CloseTest();
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+ /**
+ * Use a corrupt global categories resource file
+ */
+ void TestCorruptGlobalCategoriesFileL();
+
+ };
+
+#endif // CPOSTp76_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp77.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP77_H
+#define CPOSTP77_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <ss_std.h>
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+
+/**
+* Test procedure 77
+*/
+class CPosTp77 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp77() : CLandmarkTestProcedureBase(77) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp77() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called before StartL()
+ */
+ void InitTestL();
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ public: // New functions
+
+ /**
+ * Creates, initializes and opens the default landmark database
+ */
+ CPosLandmarkDatabase* InitDbLC();
+
+ /**
+ * Executes the bad client test thread
+ */
+ static void RunBadClientTestL(TAny* aData);
+
+ /**
+ * Executes the thread killing thread
+ */
+ static void RunThreadKillerL(TAny* aData);
+
+ public:
+
+ // Use this enum to define which test case to execute
+ enum TTestCase
+ {
+ ETestNotifyDbEvent,
+ ETestNotifyDbEvent2,
+ ETestInitialize,
+ ETestInitialize2,
+ ETestWriteLock,
+ ETestRegisterUri
+ };
+
+ private:
+
+ void ResumeThreadsAndVerifyExitL();
+
+ /**
+ * Returns ETrue if any errors are encountered, EFalse otherwise.
+ */
+ TBool VerifyThreadExitResultsL(TInt aBadThreadExitReason);
+
+ /**
+ * Returns ETrue if any errors are encountered, EFalse otherwise.
+ */
+ TBool VerifyLmServerIsAliveL(CPosLandmarkDatabase* aDb);
+
+ public:
+
+ RThread iBadThread;
+ TTimeIntervalMicroSeconds32 iTimeToWait;
+
+ private:
+
+ TInt iExpectedErrorCode;
+ TTestCase iTestCase;
+ TExitType iBadThreadExitType, iKillerThreadExitType;
+ TExitCategoryName iBadThreadExitCategory, iKillerThreadExitCategory;
+ TInt iBadThreadExitReason, iKillerThreadExitReason;
+ TTimeIntervalMicroSeconds32 iLastTimeToWait;
+ TBuf<100> iBuf;
+
+ };
+
+#endif // CPOSTP77_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp78.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,160 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP78_H
+#define CPOSTP78_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <ss_std.h>
+#include <e32std.h>
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+class CPosTp78;
+
+// Data types
+struct TThreadParam
+ {
+ void (*iTestFunction)(TDes*);
+ TDes* iMessage;
+ };
+
+class CThreadMonitor : public CActive
+ {
+ public:
+
+ static CThreadMonitor* NewL(RThread* aThread);
+
+ ~CThreadMonitor();
+
+ protected:
+
+ void DoCancel();
+
+ void RunL();
+
+ private:
+
+ CThreadMonitor(RThread* aThread);
+
+ void ConstructL();
+
+ private:
+
+ RThread* iThread;
+
+ };
+
+/**
+* Test procedure 78
+*/
+class CPosTp78 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp78() : CLandmarkTestProcedureBase(78) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp78() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called before StartL()
+ */
+ void InitTestL();
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ public: // New functions
+
+ /**
+ * Creates and initializes the default landmark database
+ */
+ void InitDbL();
+
+ /**
+ * Executes the open database test thread
+ */
+ static void RunOpenDbTestL(TDes* aMessage);
+
+ /**
+ * Executes the add remove LM test thread
+ */
+ static void RunAddRemoveLmTestL(TDes* aMessage);
+
+ /**
+ * Executes the import export LM test thread
+ */
+ static void RunImportExportLmTestL(TDes* aMessage);
+
+ /**
+ * Executes the database event test thread
+ */
+ static void RunDbEventTestL(TDes* aMessage);
+
+ /**
+ * Executes the read and update test thread
+ */
+ static void RunReadAndUpdateTestL(TDes* aMessage);
+
+ /**
+ * Function called from RunReadAndUpdateTestL
+ */
+ static void UpdateLandmarksL(CPosLandmarkDatabase* aDb, TPosLmItemId aId, TDes* aMessage);
+
+ private:
+
+ void ResumeThreadsAndVerifyExitL();
+
+ private:
+
+ TBuf<100> iBuf;
+
+ };
+
+#endif // CPOSTP78_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp79.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,111 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP79_H
+#define CPOSTP79_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <ss_std.h>
+#include <e32std.h>
+
+// CLASS DECLARATION
+class CPosLandmarkParser;
+
+/**
+* Test procedure 79
+*/
+class CPosTp79 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp79() : CLandmarkTestProcedureBase(79) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp79() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called before StartL()
+ */
+ void InitTestL();
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ public: // New functions
+
+ /**
+ * Creates and initializes the default landmark database
+ */
+ void InitDbL();
+
+ /**
+ * Executes the search test thread
+ */
+ static void RunSearchTestL(TDes* aMessage);
+
+ /**
+ * Executes the add remove categories test thread
+ */
+ static void RunAddRemoveCatsTestL(TDes* aMessage);
+
+ /**
+ * Executes the read and update test thread
+ */
+ static void RunReadAndUpdateTestL(TDes* aMessage);
+
+ private:
+
+ void ResumeThreadsAndVerifyExitL();
+
+ private:
+
+ TBuf<100> iBuf;
+
+ };
+
+#endif // CPOSTP79_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp8.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP8_H
+#define CPOSTP8_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+#include <e32cmn.h>
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 8
+*/
+class CPosTp8 : public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp8(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+ /**
+ * Destructor.
+ */
+ ~CPosTp8() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+
+ private:
+ void AddLandmarksL(CPosLandmarkDatabase* aDatabase);
+
+ void UpdateLandmarksL(CPosLandmarkDatabase* aDatabase);
+
+ void ReadLandmarksL(CPosLandmarkDatabase* aDatabase);
+
+ void RemoveLandmarksL(CPosLandmarkDatabase* aDatabase);
+
+ void RemoveLandmarksAsyncL(CPosLandmarkDatabase* aDatabase);
+
+ void RemoveLandmarksAsyncWithWaitForReqL(CPosLandmarkDatabase* aDatabase);
+
+ void CheckRemovedL(const TInt startIndex, const TInt stopIndex);
+
+ void RemoveSetOfLandmarksL(CPosLandmarkDatabase* aDatabase);
+
+ void ReadLandmarkL(TPosLmItemId aCategoryId);
+
+ void RemoveLandmarksAsyncAndCancelL();
+
+ void CheckLandmarkNameMaxLengthL();
+
+ CPosLandmarkDatabase* BackupTp8DbFileL();
+
+ CPosLandmarkDatabase* RestoreTp8DbFileL();
+
+ private: //data
+
+ RPointerArray<CPosLandmark> iLandmarks;
+
+ };
+
+#endif // CPOSTP8_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp80.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTp80_H
+#define CPOSTp80_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 80
+*/
+class CPosTp80 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp80() : CLandmarkTestProcedureBase(80) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp80() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CUtfwTestBase
+ * Always called, even if test leaves
+ */
+ void CloseTest();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void DeleteTestDbL();
+
+ };
+
+#endif // CPOSTp80_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp81.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP81_H
+#define CPOSTP81_H
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+/**
+* Test procedure 81
+*/
+class CPosTp81 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CPosTp81() : CLandmarkTestProcedureBase(81) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp81() {};
+
+ public: // Functions from base classes
+
+ /**
+ * From CUtfwTestBase
+ * Retrieves the test module name
+ * @param aName The name of the test module.
+ */
+ void GetName(
+ TDes& aName
+ ) const;
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ private:
+
+ void TestDifferentNamesL();
+
+ };
+
+#endif // CPOSTp81_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CPosTp9.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef CPOSTP9_H
+#define CPOSTP9_H
+
+// INCLUDES
+#include <EPos_CPosLandmark.h>
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// CLASS DECLARATION
+
+
+/**
+* Test procedure 9
+*/
+class CPosTp9 :public CLandmarkTestProcedureBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+
+ CPosTp9(TInt tpno, CStifLogger* aLog) : CLandmarkTestProcedureBase(tpno, aLog) {};
+
+ /**
+ * Destructor.
+ */
+ ~CPosTp9() {};
+
+ public: // Functions from base classes
+
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Runs the test in the module
+ */
+ void StartL();
+
+ /**
+ * From CLandmarkTestProcedureBase
+ * Cleans up after a test.
+ * Always called, even if the test leaves.
+ */
+ void CloseTest();
+
+ private:
+
+ void AddLandmarksL();
+
+ void IterateLandmarksL();
+
+ void IterateSetOfLandmarksL();
+
+ void IterateSortedLandmarksL();
+
+ CPosLandmark* InternalGet(TPosLmItemId id);
+
+ void CheckIteratorArgL(const CPosLandmark::TAttributes& aAttr);
+
+
+
+ private: // data
+
+ RPointerArray<CPosLandmark> iLandmarks;
+ };
+
+#endif // CPOSTP9_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CSearchResult.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+
+#ifndef CSEARCHRESULT_H
+#define CSEARCHRESULT_H
+
+// INCLUDES
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+#include "Ft_CSearchResultBase.h"
+
+class CSearchResult : public CSearchResultBase
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CSearchResult* NewL(const TDesC& aDes);
+
+ /**
+ * Destructor.
+ */
+ ~CSearchResult();
+
+ public:
+
+ TPtrC TextCriteria() const;
+
+ const RArray<TUint>& PositionFields() const;
+
+ private:
+
+ CSearchResult();
+
+ void ConstructL(const TDesC& aDes);
+
+
+ private:
+
+ // By default, prohibit copy constructor
+ CSearchResult(const CSearchResult&);
+ // Prohibit assigment operator
+ CSearchResult& operator=(const CSearchResult&);
+
+ void ParsePositionFields(const TDesC& aDes);
+
+ void Print();
+
+ TBool Equals32(const TReal aValue1, const TReal aValue2, const TReal aAccuracy);
+
+ private: // Data
+
+ enum TValueIndex
+ {
+ ETextCriteria =0,
+ EAttributes =1,
+ EPositionFields =2,
+ ELmSearchResult =3,
+ ERedefined =4
+ };
+
+ HBufC* iTextCriteria;
+
+ RArray<TUint> iPositionFields;
+
+ };
+
+#endif // CSEARCHRESULT_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_CSearchResultBase.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+
+#ifndef CSEARCHRESULTBASE_H
+#define CSEARCHRESULTBASE_H
+
+// INCLUDES
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+
+
+class CSearchResultBase : public CBase
+ {
+
+ public: // Constructors and destructor
+
+ CSearchResultBase();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CSearchResultBase();
+
+ public:
+
+ RArray<TPosLmItemId>& SearchResult();
+
+ TBool FindSearchResult(const TPosLmItemId aId);
+
+ TBool Redefined() const;
+
+ TUint Attributes() const;
+
+ protected:
+
+ void ParseSearchResult(const TDesC& aDes);
+
+ void ParseAttributesL(const TDesC& aDes);
+
+ private:
+
+ // By default, prohibit copy constructor
+ CSearchResultBase(const CSearchResultBase&);
+ // Prohibit assigment operator
+ CSearchResultBase& operator=(const CSearchResultBase&);
+
+ protected: // Data
+
+ TBool iRedefined;
+
+ TUint32 iAttributes;
+
+ RArray<TPosLmItemId> iSearchResult;
+
+ private: // Data
+
+
+ };
+
+#endif // CSearchResultBase_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_DatabaseUtility.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef FT_DATABASEUTILITY_H
+#define FT_DATABASEUTILITY_H
+
+// INCLUDES
+#include <e32std.h>
+
+// CONSTANTS
+const TInt KPosLmSqlStatementMaxLen = 256;
+_LIT(KPosLmSqlAll, "*");
+_LIT(KPosLmSqlSelect, "SELECT %S FROM %S");
+
+// Table names
+_LIT(KPosLmLandmarkTable, "lmt_landmark");
+_LIT(KPosLmLandmarkFieldTable, "lmt_lmfield");
+_LIT(KPosLmCategoryTable, "lmt_cat");
+_LIT(KPosLmLandmarkCategoryTable, "lmt_lmcat");
+_LIT(KPosLmIconTable, "lmt_icon");
+_LIT(KPosLmSettingsTable, "lmt_settings");
+
+// COLUMN NAMES: Landmark table
+_LIT(KPosLmLandmarkIdCol, "lmc_lmid");
+_LIT(KPosLmLatitudeCol, "lmc_lat");
+_LIT(KPosLmLongitudeCol, "lmc_long");
+_LIT(KPosLmAltitudeCol, "lmc_alt");
+_LIT(KPosLmHorizAccCol, "lmc_hacc");
+_LIT(KPosLmVertAccCol, "lmc_vacc");
+_LIT(KPosLmCoverageRadiusCol, "lmc_covrad");
+_LIT(KPosLmIconIdCol, "lmc_iconid");
+_LIT(KPosLmIconPicNrCol, "lmc_iconnr");
+_LIT(KPosLmMaskPicNrCol, "lmc_masknr");
+_LIT(KPosLmNameCol, "lmc_name");
+_LIT(KPosLmNDescCol, "lmc_desc");
+
+// COLUMN NAMES: Landmark Field
+// KPosLmLandmarkIdCol declared above
+_LIT(KPosLmFieldTypeCol, "lmc_fieldtype");
+_LIT(KPosLmFieldStringCol, "lmc_fieldstr");
+
+// COLUMN NAMES: Category table
+_LIT(KPosLmCategoryIdCol, "lmc_catid");
+_LIT(KPosLmGlobalCategoryIdCol, "lmc_glcatid");
+// KPosLmIconIdCol declared above
+// KPosLmIconPicNrCol declared above
+_LIT(KPosLmCategoryNameCol, "lmc_catname");
+_LIT(KPosLmCategoryNameModifiedCol, "lmc_namemod");
+
+// COLUMN NAMES: Landmark-Category table
+// KPosLmLandmarkIdCol declared above
+// KPosLmCategoryIdCol declared above
+
+// COLUMN NAMES: Icon table
+// KPosLmIconIdCol declared above
+_LIT(KPosLmIconPathCol, "lmc_iconpath");
+
+// COLUMN NAMES: Landmark settings table
+_LIT(KPosLmLanguageCol, "lmc_language");
+_LIT(KPosLmInitFlagCol, "lmc_init");
+
+// INDEXES: Landmark table
+_LIT(KPosLmLandmarkIdIndex, "lmi_lmid");
+
+// INDEXES: Category table
+_LIT(KPosLmCategoryIdIndex, "lmi_catid");
+_LIT(KPosLmGlobalCategoryIdIndex, "lmi_glcatid");
+_LIT(KPosLmCategoryNameIndex, "lmi_catname");
+
+// INDEXES: Icon table
+_LIT(KPosLmIconIdIndex, "lmi_iconid");
+
+// CLASS DECLARATION
+class RDbNamedDatabase;
+
+/**
+* Utility function for landmark database.
+*/
+class FTDatabaseUtility
+ {
+
+ public: // New functions
+
+ /**
+ * Removes the protocol (i.e. "file://") from the URI. This function
+ * assumes that the protocol is present first in the specified URI.
+ *
+ * @param aUri A URI. On out it contains the URI without the protocol.
+ */
+ IMPORT_C static void RemoveProtocolFromUriL(
+ /* IN/OUT */ TPtrC& aDbUri
+ );
+
+ static void CreateDatabaseL(const TDesC& aDbpath, TBool aReplaceDatabase= EFalse, TBool aWrongId=EFalse, TBool aCreateInvalidIndex=EFalse);
+
+
+ private:
+
+ static void CreateTablesL(RDbNamedDatabase& aDb, TBool aCreateInvalidIndex);
+
+ static void CreateLandmarkTableL(RDbNamedDatabase& aDb, TBool aCreateInvalidIndex);
+
+ static void CreateLandmarkFieldTableL(RDbNamedDatabase& aDb);
+
+ static void CreateCategoryTableL(RDbNamedDatabase& aDb, TBool aCreateInvalidIndex);
+
+ static void CreateLmCategoryTableL(RDbNamedDatabase& aDb);
+
+ static void CreateIconTableL(RDbNamedDatabase& aDb);
+
+ static void CreateSettingsTableL(RDbNamedDatabase& aDb);
+
+ static void CreateIndexesL(RDbNamedDatabase& aDb);
+
+ static void CreateIndexL(RDbNamedDatabase& aDb,const TDesC& aIndex,
+ const TDesC& aTable,
+ const TDesC& aColumn,
+ TBool aUnique
+ );
+
+ static void SetCounterToOneL(RDbNamedDatabase& aDb,const TDesC& aTable);
+
+ };
+
+#endif // FT_DATABASEUTILITY_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/FT_LandmarkConstants.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,185 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#ifndef LANDMARKCONSTANTS_H
+#define LANDMARKCONSTANTS_H
+
+#include <e32def.h>
+
+// CONSTANTS
+
+
+const TUint KTimeout = 10000000;
+
+
+const TReal32 KHorizontalAcc = 10;
+const TReal32 KVerticalAcc = 30;
+const TReal64 KLatitude = 65.3;
+const TReal64 KLongitude = 11.3;
+const TReal32 KAltitude = 2;
+const TReal32 KCoverageRadius = 50;
+
+_LIT(KMediaLinks, "3");
+_LIT(KMediaLink1, "https://www.aftonbladet.se");
+_LIT(KMediaLink2, "http://www.idg.se");
+_LIT(KMediaLink3, "http://www.svt.se");
+_LIT(KCountry, "Sweden");
+
+_LIT(KHorizontalSpeed, "126");
+_LIT(KOrientation, "10");
+
+_LIT(KMediaLinks2, "2");
+_LIT(KMediaLink4, "https://www.hotmail.com");
+_LIT(KMediaLink5, "http://www.sdsadsad.se");
+
+_LIT(KXMLMediaLink1, "html/text/http://www.enator.se");
+_LIT(KXMLMediaLink2, "http://www.sdsadsad.se");
+_LIT(KXMLMediaLink3, "mailto:sergey@nokia.com");
+_LIT(KXMLMediaLink4, "news:comp.infosystems.www.servers.unix");
+_LIT(KXMLMediaLink5, "html/text/http://www.awdawdawd.se");
+_LIT(KXMLMediaLink6, "http://www.glassbilen.se");
+_LIT(KXMLMediaLink7, "//http://www.testofparsing.se");
+_LIT(KXMLMediaLink8, "text/plain/mailto:jani@nokia.com");
+_LIT(KXMLMediaLink9, "application/wordperfect 5.1/z://some_application.exe");
+_LIT(KXMLMediaLink10, "text/plain/news:comp.infosystems.www.servers.dos");
+_LIT(KXMLMediaLink11, "z:/some_link_to_somewhere1");
+_LIT(KXMLMediaLink12, "z://some_link_to_somewhere2");
+_LIT(KXMLMediaLink13, "text/link/z://some_link_to_somewhere3");
+_LIT(KXMLMediaLink14, "image/png/some_png_file.html");
+
+//This is not exported, (ignored due to parsing)
+//_LIT(KXMLMediaLink13, "z:\\some_link_to_somewhere3");
+
+_LIT(KCountry2, "Finland");
+_LIT(KHorizontalSpeed2, "1");
+_LIT(KOrientation2, "120");
+_LIT(KLast, "Laaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaast");
+
+const TUint KNoPosFields = 7;
+const TInt KNoCategories = 3;
+
+_LIT(KMbmFileName, "c:\\system\\test\\landmarkstestsicon.mbm");
+const TInt KIconIndex = 0; // EMbmLandmarkstestsiconTelogo_25x20i;
+const TInt KIconMaskIndex = 0;
+
+const TReal32 KHorizontalAcc2 = 10;
+const TReal32 KVerticalAcc2 = 30;
+const TReal64 KLatitude2 = 45.3;
+const TReal64 KLongitude2 = 21.2;
+const TReal32 KAltitude2 = 2000;
+const TReal32 KCoverageRadius2 = 360;
+
+_LIT(KMbmFileName2, "c:\\system\\test\\landmarkstestsicon.mbm");
+const TInt KIconIndex2 = 323; // EMbmLandmarkstestsiconTelogo_25x20i;
+
+
+// Address Capabilities
+_LIT(KCountryCode,"SE");
+_LIT(KState, "-");
+_LIT(KCounty, "County??");
+_LIT(KCity, "Gothenborg");
+_LIT(KDistrict,"Gårda");
+_LIT(KStreet, "Vädursgatan 6");
+_LIT(KStreetExtension, "");
+_LIT(KLocationName, "TietoEnator");
+_LIT(KPostalCode, "412 50");
+_LIT(KLocality, "Gårda");
+_LIT(KCrossing1, "Fabriksgatan");
+_LIT(KCrossing2, "Åvägen");
+
+// Building Capabilities
+_LIT(KBuildingName, "BuildingName");
+_LIT(KBuildingFloor, "7");
+_LIT(KBuildingRoom, "Yellow");
+_LIT(KBuildingZone, "BuildingZone");
+_LIT(KBuildingTelephone, "031444444");
+
+_LIT(KName, "Micke's Pub");
+_LIT(KName2, "Drivhuset");
+_LIT(KCategoryName, "Pub");
+_LIT(KCategoryName2, "Resturant");
+
+_LIT(KDescription, "jada jada jada jada jada jada jada jada jada jada jada");
+//_LIT(KDescription, "jada");
+_LIT(KDescription2, "asddsadsads gg");
+
+//const TPosLmGlobalCategory KGlobalCategoryId = 123;
+
+const TInt KNoMultipleClients=5;
+
+const TInt KNoAddRequests=10;
+
+_LIT(KDefaultDb, "eposlm.ldb");
+_LIT(KTp25TestDb, "TP25Test.ldb");
+_LIT(KTp131TestDb, "TP131Test.ldb");
+_LIT(KTp1TestDb, "TP1Test.ldb");
+_LIT(KTp4TestDb, "TP4Test.ldb");
+_LIT(KTp10TestDb, "TP10Test.ldb");
+_LIT(KTp8TestDb, "TP8Test.ldb");
+_LIT(KDefaultDbPath, "c:\\system\\data\\");
+_LIT(KEmptyCopyPath, "c:\\system\\data\\eposEmpty.ldb");
+_LIT(KDb20, "EPOSLM_020.LDB");
+_LIT(KDb40, "EPOSLM_040.LDB");
+_LIT(KDb60, "EPOSLM_060.LDB");
+_LIT(KDb80, "EPOSLM_080.LDB");
+_LIT(KDb105, "EPOSLM_105.LDB");
+_LIT(KDbNamePath, "c:\\private\\100012a5\\DBS_101FE978_EPOSLM_%d.LDB");
+_LIT(KDbName, "eposlm_%d.ldb");
+
+// Note: This is defined in landmarks
+_LIT(KLmDbPath, "c:\\private\\100012a5\\DBS_101FE978_");
+_LIT(KLmFullDefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_EPOSLM.LDB");
+_LIT(KLmTp25DefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP25TEST.LDB");
+_LIT(KLmTp131DefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP131TEST.LDB");
+_LIT(KLmTp1DefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP1TEST.LDB");
+_LIT(KLmTp4DefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP4TEST.LDB");
+_LIT(KLmTp8DefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP8TEST.LDB");
+_LIT(KLmTp10DefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP10TEST.LDB");
+
+_LIT(KTestPath, "c:\\system\\test\\testdata\\");
+
+_LIT(KLandmarksEmptyDb, "eposEmpty.ldb");
+
+_LIT(KGlobalCategoryResFileWINS, "c:\\resource\\EPOSLMGLOBALCATEGORIES.R01");
+_LIT(KGlobalCategoryResFileROM, "c:\\resource\\EPOSLMGLOBALCATEGORIES.R01");
+_LIT(KGlobalCategoryResFileCOPY, "c:\\resource\\COPY_EPOSLMGLOBALCATEGORIES.R01");
+
+#ifdef __WINS__
+_LIT(KCopyDbPath, "c:\\");
+_LIT(KLandmarksDb, "c:\\system\\test\\TestData\\eposlm.ldb");
+
+_LIT(KCopiedDb, "c:\\eposlm.ldb");
+_LIT(KCompositeLandmarksDb, "c:\\system\\test\\TestData\\compositeeposlm.ldb");
+_LIT(K1000LandmarksDb, "eposlm_1000_LMs.ldb");
+_LIT(K5000LandmarksDb, "eposlm_5000_LMs.ldb");
+#else
+_LIT(KCopiedDb, "c:\\system\\test\\eposlm.ldb");
+_LIT(KCopyDbPath, "c:\\system\\test\\");
+_LIT(KLandmarksDb, "c:\\system\\test\\TestData\\eposlm.ldb");
+_LIT(KCompositeLandmarksDb, "c:\\system\\test\\TestData\\compositeeposlm.ldb");
+
+_LIT(K1000LandmarksDb, "eposlm_1000_LMs.ldb");
+_LIT(K5000LandmarksDb, "eposlm_5000_LMs.ldb");
+#endif
+
+#endif // LANDMARKCONSTANTS_H
+
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/LandMarksTestModule.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+
+#ifndef LANDMARKSTESTMODULE_H
+#define LANDMARKSTESTMODULE_H
+
+// INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+
+
+#include "FT_CLandmarkTestProcedureBase.h"
+
+// Logging path
+_LIT( KLandMarksTestModuleLogPath, "\\logs\\testframework\\LandMarksTestModule\\" );
+// Log file
+_LIT( KLandMarksTestModuleLogFile, "LandMarksTestModule.txt" );
+
+
+class CLandMarksTestModule;
+
+
+// CLASS DECLARATION
+
+/**
+* CLandMarksTestModule test class for STIF Test Framework TestScripter.
+*/
+NONSHARABLE_CLASS(CLandMarksTestModule) : public CScriptBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CLandMarksTestModule* NewL( CTestModuleIf& aTestModuleIf );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CLandMarksTestModule();
+
+ public: // Functions from base classes
+
+ /**
+ * From CScriptBase Runs a script line.
+ * @param aItem Script line containing method name and parameters
+ * @return Symbian OS error code
+ */
+ virtual TInt RunMethodL( CStifItemParser& aItem );
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CLandMarksTestModule( CTestModuleIf& aTestModuleIf );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ /**
+ * Frees all resources allocated from test methods.
+ */
+ void Delete();
+
+ /**
+ * Test methods are listed below.
+ */
+ void RunTestProcedureL(
+ CLandmarkTestProcedureBase* tp,
+ CStifItemParser* aItem = NULL );
+
+ template <class T>
+ TInt TestProcedure( TInt aId, CStifItemParser& );
+
+ TInt FT_CPosTp1( CStifItemParser& aItem );
+ TInt FT_CPosTp2( CStifItemParser& aItem );
+ TInt FT_CPosTp3( CStifItemParser& aItem );
+ TInt FT_CPosTp4( CStifItemParser& aItem );
+ TInt FT_CPosTp5( CStifItemParser& aItem );
+ TInt FT_CPosTp6( CStifItemParser& aItem );
+ TInt FT_CPosTp7( CStifItemParser& aItem );
+ TInt FT_CPosTp8( CStifItemParser& aItem );
+ TInt FT_CPosTp9( CStifItemParser& aItem );
+
+ TInt FT_CPosTp10( CStifItemParser& aItem );
+ TInt FT_CPosTp11( CStifItemParser& aItem );
+ TInt FT_CPosTp12( CStifItemParser& aItem );
+ TInt FT_CPosTp13( CStifItemParser& aItem );
+// TInt FT_CPosTp15( CStifItemParser& aItem );
+// TInt FT_CPosTp16( CStifItemParser& aItem );
+// TInt FT_CPosTp17( CStifItemParser& aItem );
+ TInt FT_CPosTp18( CStifItemParser& aItem );
+ TInt FT_CPosTp19( CStifItemParser& aItem );
+
+ TInt FT_CPosTp20( CStifItemParser& aItem );
+ TInt FT_CPosTp21( CStifItemParser& aItem );
+ TInt FT_CPosTp23( CStifItemParser& aItem );
+ TInt FT_CPosTp24( CStifItemParser& aItem );
+ TInt FT_CPosTp25( CStifItemParser& aItem );
+ TInt FT_CPosTp26( CStifItemParser& aItem );
+// TInt FT_CPosTp27( CStifItemParser& aItem );
+ TInt FT_CPosTp28( CStifItemParser& aItem );
+// TInt FT_CPosTp29( CStifItemParser& aItem );
+
+// TInt FT_CPosTp30( CStifItemParser& aItem );
+// TInt FT_CPosTp31( CStifItemParser& aItem );
+// TInt FT_CPosTp33( CStifItemParser& aItem );
+// TInt FT_CPosTp34( CStifItemParser& aItem );
+ TInt FT_CPosTp35( CStifItemParser& aItem );
+ TInt FT_CPosTp36( CStifItemParser& aItem );
+ TInt FT_CPosTp37( CStifItemParser& aItem );
+ TInt FT_CPosTp38( CStifItemParser& aItem );
+// TInt FT_CPosTp39( CStifItemParser& aItem );
+
+// TInt FT_CPosTp40( CStifItemParser& aItem );
+// TInt FT_CPosTp41( CStifItemParser& aItem );
+ TInt FT_CPosTp42( CStifItemParser& aItem );
+ TInt FT_CPosTp43( CStifItemParser& aItem );
+ TInt FT_CPosTp44( CStifItemParser& aItem );
+ TInt FT_CPosTp45( CStifItemParser& aItem );
+// TInt FT_CPosTp46( CStifItemParser& aItem );
+ TInt FT_CPosTp47( CStifItemParser& aItem );
+ TInt FT_CPosTp48( CStifItemParser& aItem );
+// TInt FT_CPosTp49( CStifItemParser& aItem );
+
+// TInt FT_CPosTp50( CStifItemParser& aItem );
+ TInt FT_CPosTp51( CStifItemParser& aItem );
+ TInt FT_CPosTp52( CStifItemParser& aItem );
+// TInt FT_CPosTp53( CStifItemParser& aItem );
+// TInt FT_CPosTp54( CStifItemParser& aItem );
+// TInt FT_CPosTp55( CStifItemParser& aItem );
+// TInt FT_CPosTp56( CStifItemParser& aItem );
+// TInt FT_CPosTp57( CStifItemParser& aItem );
+// TInt FT_CPosTp58( CStifItemParser& aItem );
+
+// TInt FT_CPosTp76( CStifItemParser& aItem );
+// TInt FT_CPosTp77( CStifItemParser& aItem );
+// TInt FT_CPosTp78( CStifItemParser& aItem );
+// TInt FT_CPosTp79( CStifItemParser& aItem );
+
+// TInt FT_CPosTp80( CStifItemParser& aItem );
+// TInt FT_CPosTp81( CStifItemParser& aItem );
+
+ TInt FT_CPosTp100( CStifItemParser& aItem );
+ TInt FT_CPosTp101( CStifItemParser& aItem );
+ TInt FT_CPosTp102( CStifItemParser& aItem );
+ TInt FT_CPosTp103( CStifItemParser& aItem );
+ TInt FT_CPosTp104( CStifItemParser& aItem );
+// TInt FT_CPosTp105( CStifItemParser& aItem );
+ TInt FT_CPosTp106( CStifItemParser& aItem );
+// TInt FT_CPosTp107( CStifItemParser& aItem );
+// TInt FT_CPosTp108( CStifItemParser& aItem );
+// TInt FT_CPosTp109( CStifItemParser& aItem );
+
+// TInt FT_CPosTp111( CStifItemParser& aItem );
+// TInt FT_CPosTp114( CStifItemParser& aItem );
+ TInt FT_CPosTp116( CStifItemParser& aItem );
+ TInt FT_CPosTp117( CStifItemParser& aItem );
+ TInt FT_CPosTp118( CStifItemParser& aItem );
+ TInt FT_CPosTp119( CStifItemParser& aItem );
+
+ TInt FT_CPosTp120( CStifItemParser& aItem );
+ TInt FT_CPosTp121( CStifItemParser& aItem );
+ TInt FT_CPosTp122( CStifItemParser& aItem );
+ TInt FT_CPosTp123( CStifItemParser& aItem );
+ TInt FT_CPosTp124( CStifItemParser& aItem );
+ TInt FT_CPosTp125( CStifItemParser& aItem );
+ TInt FT_CPosTp126( CStifItemParser& aItem );
+// TInt FT_CPosTp127( CStifItemParser& aItem );
+
+ TInt FT_CPosTp130( CStifItemParser& aItem );
+ TInt FT_CPosTp131( CStifItemParser& aItem );
+ TInt FT_CPosTp132( CStifItemParser& aItem );
+ TInt FT_CPosTp134( CStifItemParser& aItem );
+ TInt FT_CPosTp133( CStifItemParser& aItem );
+ TInt FT_CPosTp135( CStifItemParser& aItem );
+ TInt FT_CPosTp136( CStifItemParser& aItem );
+ TInt FT_CPosTp137( CStifItemParser& aItem );
+ TInt FT_CPosTp139( CStifItemParser& aItem );
+
+ TInt FT_CPosTp141( CStifItemParser& aItem );
+ TInt FT_CPosTp143( CStifItemParser& aItem );
+ TInt FT_CPosTp144( CStifItemParser& aItem );
+ TInt FT_CPosTp145( CStifItemParser& aItem );
+ TInt FT_CPosTp146( CStifItemParser& aItem );
+ TInt FT_CPosTp147( CStifItemParser& aItem );
+
+ TInt FT_CPosTp148( CStifItemParser& aItem );
+ TInt FT_CPosTp149( CStifItemParser& aItem );
+ TInt FT_CPosTp150( CStifItemParser& aItem );
+ TInt FT_CPosTp151( CStifItemParser& aItem );
+ TInt FT_CPosTp152( CStifItemParser& aItem );
+ TInt FT_CPosTp153( CStifItemParser& aItem );
+ TInt FT_CPosTp154( CStifItemParser& aItem );
+ TInt FT_CPosTp155( CStifItemParser& aItem );
+ TInt FT_CPosTp156( CStifItemParser& aItem );
+ TInt FT_CPosTp157( CStifItemParser& aItem );
+ TInt FT_CPosTp158( CStifItemParser& aItem );
+ TInt FT_CPosTp159( CStifItemParser& aItem );
+ TInt FT_CPosTp160( CStifItemParser& aItem );
+ TInt FT_CPosTp161( CStifItemParser& aItem );
+ TInt FT_CPosTp162( CStifItemParser& aItem );
+ TInt FT_CPosTp163( CStifItemParser& aItem );
+ TInt FT_CPosTp164( CStifItemParser& aItem );
+ };
+
+#endif // LANDMARKSTESTMODULE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/inc/lcfsbucommondefinitions.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,339 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#ifndef _LCF_SBU_COMMON_DEFINITIONS_H_
+#define _LCF_SBU_COMMON_DEFINITIONS_H_
+
+///////////////////////////////////////////////////////
+//
+// SBu Common Definitions
+//
+///////////////////////////////////////////////////////
+
+/**
+ $File: LcfSBuCommonDefitions.h
+ $Author: burnevsk $
+ $Date: 2004/10/18 08:14:23 $
+ $Revision: 1.6 $
+*/
+
+///////////////////////////////////////////////////////
+//
+// Constants
+//
+///////////////////////////////////////////////////////
+
+
+#include <e32def.h>
+#include <e32std.h>
+#include <e32err.h>
+
+#define DEF_LCFPSY1_MODULEID 0x03133002
+#define DEF_LCFPSY2_MODULEID 0x03133004
+#define DEF_LCFPSY3_MODULEID 0x03133006
+#define DEF_LCFPSYSLOW4_MODULEID 0x03133008
+#define DEF_LCFPSY6_MODULEID 0x0313300c
+
+const TInt KLcfPsy1UidValue = DEF_LCFPSY1_MODULEID;
+const TInt KLcfPsy3UidValue = DEF_LCFPSY3_MODULEID;
+const TInt KLcfPsy6UidValue = DEF_LCFPSY6_MODULEID;
+
+const TInt KSecondsToMicro = 1000*1000;
+
+// Show service formt
+_LIT(KShowServiceFormat, "Name: %S \nType: %d \n Id: %S");
+
+// time value formatting
+_LIT(KTimeSpec, "%H:%T:%S:%C");
+
+// default requestors
+_LIT(KServiceName, "Lcf.Service");
+_LIT(KServiceId, "Lcf.ServiceId");
+
+_LIT(KContactName, "Lcf.Contact");
+_LIT(KPhone, "+79217654321");
+
+_LIT(KFieldNamePhone, "Phone");
+_LIT(KFieldNameEmail, "Email");
+_LIT(KFieldNameUrl, "Url");
+
+///////////////////////////////////////////////////////
+//
+// Other text
+//
+///////////////////////////////////////////////////////
+
+// Indicate not yet implemented
+_LIT(KNotImplemented, "Not yet implemented");
+
+//_LIT(KBadRequestResult, "Wrong location request result (result=%d, expected=%d)");
+//_LIT(KBadDiagNum, "Wrong number of events in Notifier (count=%d, expected=%d)");
+//_LIT(KBadLcfResult, "Wrong notifier event result (result=%d, expected=%d)");
+
+_LIT(KBadDiagVerifEventNum, "Wrong number of Verification events in Notifier");
+_LIT(KBadDiagNotifEventNum, "Wrong number of Notification events in Notifier");
+
+///////////////////////////////////////////////////////
+//
+// Here are macros for error logging
+// Those imply that are called from within of
+// CUtfwTestBase-derived class's function (they use iLog member)
+//
+///////////////////////////////////////////////////////
+
+// LEAVES with _error_ if _condition_ is true
+#define LEAVE(condition, error) \
+ if (condition) { \
+ errStr.Format(_L("%s (line %d)"), _S(error), __LINE__); \
+ iLog->Log(errStr); \
+ User::Leave(KErrGeneral); \
+ }
+
+// if _error_ is descritor
+#define LEAVE_DES(condition, error_des) \
+ if (condition) { \
+ errStr.Format(_L("%S (line %d)"), &error_des, __LINE__); \
+ iLog->Log(errStr); \
+ User::Leave(KErrGeneral); \
+ }
+
+// Must be included in the begging of function definition
+// in order to use following ("ERROR") macros
+// (The string buffer needs to be defined once, otherwise,
+// in case when a lot of errors are checked, stack may be
+// overflown, and copilation will fail)
+#define DECLARE_ERROR_STR TBuf<160> errStr;
+#define DECLARE_MESSAGE_STR TBuf<160> message;
+
+#define DECLARE_ERROR_LOGGING DECLARE_ERROR_STR DECLARE_MESSAGE_STR
+
+#define START_ERROR_LOGGING iErrorCounter = 0;
+
+// Logs a message, which is defined as "..." constant
+#define LOG(msg) \
+ { \
+ errStr.Format(_L("%s (line %d)"), _S(msg), __LINE__); \
+ iLog->Log(errStr); \
+ }
+#define LOG_DES(msg_des) \
+ { \
+ errStr.Format(_L("%S (line %d)"), &msg_des, __LINE__); \
+ iLog->Log(errStr); \
+ }
+
+#define LOG_FORMAT_1(_format, _param) \
+ message.Format(_format, _param); \
+ LOG_DES(message);
+
+#define LOG_FORMAT_2(_format, _param1, _param2) \
+ message.Format(_format, _param, _param2); \
+ LOG_DES(message);
+
+#define LOG_IIF(condition, msg1, msg2) \
+ if (condition) LOG(msg1) else LOG(msg2)
+
+// Logs an error, which is defined as "..." constant
+#define ERR(error) \
+ { \
+ errStr.Format(_L("%s (line %d)"), _S(error), __LINE__); \
+ iLog->Log(errStr); \
+ iErrorCounter++; \
+ }
+#define ERR_DES(error) \
+ { \
+ errStr.Format(_L("%S (line %d)"), &error, __LINE__); \
+ iLog->Log(errStr); \
+ iErrorCounter++; \
+ }
+
+// Logs an _error_ if _condition_ is true
+#define ERROR(condition, error) \
+ if (condition) ERR(error)
+
+// Logs an error, which defined as descriptor
+#define ERROR_DES(condition, error_des) \
+ if (condition) ERR_DES(error_des)
+
+#define ERROR_1(condition, msg_fmt_des, param1) \
+ message.Format(msg_fmt_des, param1); \
+ ERROR_DES(condition, message);
+
+#define ERROR_2(condition, msg_fmt_des, param1, param2) \
+ message.Format(msg_fmt_des, param1, param2); \
+ ERROR_DES(condition, message);
+
+#define ERROR_3(condition, msg_fmt_des, param1, param2, param3) \
+ message.Format(msg_fmt_des, param1, param2, param3); \
+ ERROR_DES(condition, message);
+
+#define IF_ERROR(error_code, msg) \
+ { TInt32 _err = error_code; \
+ ERROR_2(_err != KErrNone, _L("%s (error=%d)"), _S(msg), _err); }
+
+#define IF_ERROR_DES(error_code, msg_des) \
+ { TInt32 _err = error_code; \
+ ERROR_2(_err != KErrNone, _L("%S (error=%d)"), &msg_des, _err); }
+
+#define CHECK_EQUAL(_actual, _expected, _msg) \
+ ERROR_3(_actual != _expected, _L("%s (actual=%d, expected=%d)"), _S(_msg), _actual, _expected);
+
+#define CHECK_EQUAL_DES(_actual, _expected, _msg_des) \
+ ERROR_3(_actual != _expected, _L("%S (actual=%d, expected=%d)"), &_msg_des, _actual, _expected);
+
+// Leaves if there were errors generated by ERROR macros
+// (put it at the end of you test function)
+#define LEAVE_IF_ERRORS() \
+ if (iErrorCounter > 0) { \
+ errStr.Format(_L("There were %d errors in the test, see previous messages!"), iErrorCounter); \
+ iLog->Log(errStr); \
+ User::Leave(KErrGeneral); \
+ }
+
+#define PAUSE_MS(_microseconds) \
+ User::After(TTimeIntervalMicroSeconds32(_microseconds));
+#define PAUSE(_seconds) \
+ PAUSE_MS(_seconds * KSecondsToMicro)
+
+class TWatch
+{
+ public:
+ TWatch() { RestartWatch(); };
+ void RestartWatch() { iTime.UniversalTime(); iLastTick = iTime; };
+ void Tick() { iLastTick.UniversalTime(); };
+ TTimeIntervalMicroSeconds ElapsedTotal()
+ {
+ TTime now;
+ now.UniversalTime();
+ return now.MicroSecondsFrom(iTime);
+ };
+ TTimeIntervalMicroSeconds ElapsedFromTick()
+ {
+ TTime now;
+ now.UniversalTime();
+ return now.MicroSecondsFrom(iLastTick);
+ };
+ TTime Time() {return iTime; };
+ private:
+ TTime iTime;
+ TTime iLastTick;
+};
+
+class TThreadUtility
+{
+ public:
+ typedef void (*TThreadFunctionL)(TAny* aPtr);
+
+ struct TOptions
+ {
+ TThreadFunctionL ThreadFunctionL;
+ TAny* parameters;
+ };
+
+ static TInt ThreadFunction(TAny* aPtr)
+ {
+ CTrapCleanup* cs = CTrapCleanup::New();
+ if (cs == NULL)
+ {
+ return KErrNoMemory;
+ }
+
+ // new ActiveScheduler
+ CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+
+ TOptions* options = reinterpret_cast<TOptions*>(aPtr);
+ TRAPD(err, (*options->ThreadFunctionL)(options->parameters));
+
+ delete scheduler;
+ delete cs;
+ User::Exit(err);
+ return err;
+ };
+
+ void CreateL(const TDesC& aThreadName, TOptions* aOptions)
+ {
+ iName.Set(aThreadName);
+ User::LeaveIfError( iThread.Create(aThreadName,
+ TThreadUtility::ThreadFunction,
+ KDefaultStackSize,
+ KMinHeapSize,
+ 10 * KMinHeapSize,
+ aOptions,
+ EOwnerProcess));
+ };
+ void CreateReuseHeapL(const TDesC& aThreadName, TOptions* aOptions)
+ {
+ iName.Set(aThreadName);
+ User::LeaveIfError( iThread.Create(aThreadName,
+ TThreadUtility::ThreadFunction,
+ KDefaultStackSize,
+ &User::Heap(),
+ aOptions,
+ EOwnerProcess));
+ };
+ void Start()
+ {
+ iThread.Resume();
+ };
+ void Stop()
+ {
+ iThread.Suspend();
+ };
+
+ TInt Wait()
+ {
+ TRequestStatus threadStatus;
+ if (iThread.ExitType() == EExitPending) // still executing
+ {
+ iThread.Logon(threadStatus);
+ User::WaitForRequest(threadStatus);
+ }
+ return iThread.ExitReason();
+ };
+
+ const RThread Handle()
+ {
+ return iThread;
+ };
+
+ void Format(TDes& aMessage)
+ {
+ TExitCategoryName category = iThread.ExitCategory();
+ _LIT(KThreadFormat, "Thread %S, Reason %d, ExitType %d, ExitName %S");
+ aMessage.Format(KThreadFormat,
+ &iName, iThread.ExitReason(), iThread.ExitType(), &category);
+ };
+
+ // used if class destroyed
+ void Close()
+ {
+ if (iThread.Handle())
+ {
+ if (iThread.ExitType() == EExitPending) // still executing
+ {
+ iThread.Kill(KErrNone);
+ }
+ iThread.Close();
+ }
+ };
+
+ protected:
+ RThread iThread;
+ TPtrC iName;
+};
+
+#endif // _LCF_SBU_COMMON_DEFINITIONS_H_
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/init/TestFramework.ini Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,172 @@
+#
+# This is STIFTestFramework initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+# - Set Test Reporting mode. TestReportMode's possible values are:
+# + 'Summary': Summary of the tested test cases.
+# + 'Environment': Hardware and software info.
+# + 'TestCases': Test case report.
+# + 'FullReport': Set of all above ones.
+# + Example 'TestReportMode= Summary TestCases'
+#
+# - CreateTestReport setting controls report creation mode
+# + YES, Test report will created.
+# + NO, No Test report.
+#
+# - File path indicates the base path of the test report.
+# - File name indicates the name of the test report.
+#
+# - File format indicates the type of the test report.
+# + TXT, Test report file will be txt type, for example 'TestReport.txt'.
+# + HTML, Test report will be html type, for example 'TestReport.html'.
+#
+# - File output indicates output source of the test report.
+# + FILE, Test report logging to file.
+# + RDEBUG, Test report logging to using rdebug.
+#
+# - File Creation Mode indicates test report overwriting if file exist.
+# + OVERWRITE, Overwrites if the Test report file exist.
+# + APPEND, Continue logging after the old Test report information if
+# report exist.
+
+[Engine_Defaults]
+
+TestReportMode= FullReport # Possible values are:
+ # 'Summary', 'Environment', 'TestCases' or 'FullReport'
+
+CreateTestReport= YES # Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+
+TestReportFormat= TXT # Possible values: TXT or HTML
+TestReportOutput= FILE # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= NormalCases.txt
+# TestCaseFile= SmokeCases.txt
+# TestCaseFile= ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\LandMarksTestModule1.cfg
+[End_Module]
+
+#Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= testcases1.cfg
+#TestCaseFile= testcases2.cfg
+#TestCaseFile= manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIFTestFramework logging overwrite parameters for Logger.
+# Hardware and emulator environment logging path and styles can
+# be configured from here to overwrite the Logger's implemented values.
+#
+# Settings description:
+# - Indicates option for creation log directory/directories. If log directory/directories
+# is/are not created by user they will make by software.
+# + YES, Create log directory/directories if not allready exist.
+# + NO, Log directory/directories not created. Only created one is used.
+#
+# - Overwrite emulator path setting.
+# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined
+# Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+# will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+# - Overwrite emulator's logging format.
+# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+# + HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+# - Overwrited emulator logging output source.
+# + FILE, Logging to file(s).
+# + RDEBUG, Logging to using rdebug(s).
+#
+# - Overwrite hardware path setting (Same description as above in emulator path).
+# - Overwrite hardware's logging format(Same description as above in emulator format).
+# - Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+# - File Creation Mode indicates file overwriting if file exist.
+# + OVERWRITE, Overwrites if file(s) exist.
+# + APPEND, Continue logging after the old logging information if file(s) exist.
+#
+# - Will thread id include to the log filename.
+# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+# + NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+# - Will time stamps include the to log file.
+# + YES, Time stamp added to each line in log file(s). Time stamp is
+# for example'12.Nov.2003 115958 LOGGING INFO'
+# + NO, No time stamp(s).
+#
+# - Will line breaks include to the log file.
+# + YES, Each logging event includes line break and next log event is in own line.
+# + NO, No line break(s).
+#
+# - Will event ranking include to the log file.
+# + YES, Event ranking number added to each line in log file(s). Ranking number
+# depends on environment's tics, for example(includes time stamp also)
+# '012 12.Nov.2003 115958 LOGGING INFO'
+# + NO, No event ranking.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+
+CreateLogDirectories= YES # Possible values: YES or NO
+
+EmulatorBasePath= C:\
+EmulatorFormat= TXT # Possible values: TXT or HTML
+EmulatorOutput= FILE # Possible values: FILE or RDEBUG
+
+HardwareBasePath= C:\
+HardwareFormat= TXT # Possible values: TXT or HTML
+HardwareOutput= FILE # Possible values: FILE or RDEBUG
+
+FileCreationMode= APPEND # Possible values: OVERWRITE or APPEND
+
+ThreadIdToLogFile= YES # Possible values: YES or NO
+WithTimeStamp= YES # Possible values: YES or NO
+WithLineBreak= YES # Possible values: YES or NO
+#WithEventRanking= YES # Possible values: YES or NO
+
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CAreaSearchResult.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,205 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+#include "FT_CAreaSearchResult.h"
+
+//CONSTANTS
+const TInt KMaxFieldLength = 80;
+
+// C++ Constructor
+CAreaSearchResult::CAreaSearchResult()
+ {
+ }
+
+CAreaSearchResult* CAreaSearchResult::NewL(const TDesC& aDes)
+ {
+ CAreaSearchResult* self = new(ELeave) CAreaSearchResult;
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ destructor
+CAreaSearchResult::~CAreaSearchResult()
+ {
+
+ }
+
+void CAreaSearchResult::ConstructL(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ESouthLat:
+ val.Val(iSouthLat, TChar(','));
+ break;
+ case ENorthLat:
+ val.Val(iNorthLat, TChar(','));
+ break;
+ case EWestLong:
+ val.Val(iWestLong, TChar(','));
+ break;
+ case EEastLong:
+ val.Val(iEastLong, TChar(','));
+ break;
+ case EErrorCode:
+ val.Val(iErrorCode);
+ break;
+ case ESearchResult:
+ ParseSearchResult(token);
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iRedefined = ETrue;
+ }
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CAreaSearchResult::SouthLat
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 CAreaSearchResult::SouthLat() const
+ {
+ return iSouthLat;
+ }
+
+// ---------------------------------------------------------
+// CAreaSearchResult::NortLat()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 CAreaSearchResult::NorthLat() const
+ {
+ return iNorthLat;
+ }
+
+// ---------------------------------------------------------
+// CAreaSearchResult::WestLong()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 CAreaSearchResult::WestLong() const
+ {
+ return iWestLong;
+ }
+
+// ---------------------------------------------------------
+// CAreaSearchResult::EastLong()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 CAreaSearchResult::EastLong() const
+ {
+ return iEastLong;
+ }
+
+// ---------------------------------------------------------
+// CAreaSearchResult::ErrorCode()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CAreaSearchResult::ErrorCode() const
+ {
+ return iErrorCode;
+ }
+
+// ---------------------------------------------------------
+// CAreaSearchResult::Print()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CAreaSearchResult::Print(TDes& aPrint)
+ {
+
+
+ TChar del(',');
+
+ TBuf<KMaxFieldLength> info;
+ _LIT(KPosInfo, "SouthLat=%g, NortLat=%g, WestLong=%g, EastLong=%g");
+
+ info.Format(KPosInfo, iSouthLat, iNorthLat, iWestLong, iEastLong);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KRedefined, "Redefined=%d");
+ info.Format(KRedefined, iRedefined);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KErrorCode, "ErrorCode = %d");
+ info.Format(KErrorCode, iErrorCode);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ aPrint.Append(_L("Search result = "));
+
+ for (TInt i=0; i<iSearchResult.Count(); i++)
+ {
+ _LIT(KSearchResult, "%d");
+ info.Format(KSearchResult, iSearchResult[i]);
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+
+
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CCategoryLandmarkSearchResult.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+#include "FT_CCategoryLandmarkSearchResult.h"
+
+//CONSTANTS
+const TInt KMaxFieldLength = 80;
+const TInt KMaxLineLength=255;
+
+//const TReal KReal32Accuracy = 5.96E-8;
+/*
+const TReal KAccuracyHigh = 5.96E-8;
+const TReal KAccuracyMedium = 4E-5;
+const TReal KAccuracyLow = 4E-3;
+*/
+
+// C++ Constructor
+CCategoryLandmarkSearchResult::CCategoryLandmarkSearchResult()
+ {
+ }
+
+CCategoryLandmarkSearchResult* CCategoryLandmarkSearchResult::NewL(const TDesC& aDes)
+ {
+ CCategoryLandmarkSearchResult* self = new(ELeave) CCategoryLandmarkSearchResult;
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ destructor
+CCategoryLandmarkSearchResult::~CCategoryLandmarkSearchResult()
+ {
+ delete iCategoryName;
+ iCategoryName = NULL;
+
+ iPositionFields.Close();
+ }
+
+void CCategoryLandmarkSearchResult::ConstructL(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0;
+ TInt id=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+
+ switch(index)
+ {
+ case ECategoryName:
+ iCategoryName = token.AllocL();
+ break;
+/* case EAttributes:
+ ParseAttributesL(token);
+ break;
+*/
+ case ECategoryId:
+ //iTextCriteria = token.AllocL();
+ val.Val(id);
+ iCategoryId = id;
+ break;
+/*
+ case EPositionFields:
+ ParsePositionFields(token);
+ break;
+*/
+ case ELmSearchResult:
+ ParseSearchResult(token);
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iRedefined = ETrue;
+ }
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ //Print();
+ }
+
+// ---------------------------------------------------------
+// CCategoryLandmarkSearchResult::ParsePositionFields()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+/*
+void CCategoryLandmarkSearchResult::ParsePositionFields(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt value=0;
+
+ while (!(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == ',' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ val.Val(value);
+ iPositionFields.Append(value);
+
+ if (line.Peek() == ',')
+ {
+ line.Inc();
+ line.Mark();
+ }
+ }
+ }
+ }
+*/
+// ---------------------------------------------------------
+// CCategoryLandmarkSearchResult::Print()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCategoryLandmarkSearchResult::Print()
+ {
+ TBuf<KMaxLineLength> print;
+
+ TChar del(',');
+
+ print.Append(*iCategoryName);
+ print.Append(del);
+
+ TBuf<KMaxFieldLength> info;
+ _LIT(KAttrInfo, "%x");
+ info.Format(KAttrInfo, iAttributes);
+ print.Append(info);
+ print.Append(del);
+
+ _LIT(KIntInfo, "%d");
+ TInt i=0;
+ for (i=0; i<iPositionFields.Count(); i++)
+ {
+ info.Format(KIntInfo, iPositionFields[i]);
+ print.Append(info);
+ print.Append(del);
+ }
+
+ for (i=0; i<iSearchResult.Count(); i++)
+ {
+ info.Format(KIntInfo, iSearchResult[i]);
+ print.Append(info);
+ print.Append(del);
+ }
+
+ RDebug::Print(print);
+ }
+
+// ---------------------------------------------------------
+// CCategoryLandmarkSearchResult::CategoryName()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPtrC CCategoryLandmarkSearchResult::CategoryName() const
+ {
+ return *iCategoryName;
+ }
+
+
+// ---------------------------------------------------------
+// CCategoryLandmarkSearchResult::CategoryId()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPosLmItemId CCategoryLandmarkSearchResult::CategoryId() const
+ {
+ return iCategoryId;
+ }
+
+// ---------------------------------------------------------
+// CCategoryLandmarkSearchResult::PositionFields
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const RArray<TUint>& CCategoryLandmarkSearchResult::PositionFields() const
+ {
+ return iPositionFields;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CCategorySearchResult.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+#include "FT_CCategorySearchResult.h"
+
+//CONSTANTS
+const TInt KMaxFieldLength = 80;
+const TInt KMaxLineLength=255;
+
+// C++ Constructor
+CCategorySearchResult::CCategorySearchResult()
+ {
+ }
+
+CCategorySearchResult* CCategorySearchResult::NewL(const TDesC& aDes)
+ {
+ CCategorySearchResult* self = new(ELeave) CCategorySearchResult;
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ destructor
+CCategorySearchResult::~CCategorySearchResult()
+ {
+ delete iTextCriteria;
+ iTextCriteria = NULL;
+
+ iPositionFields.Close();
+ }
+
+void CCategorySearchResult::ConstructL(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ETextCriteria:
+ iTextCriteria = token.AllocL();
+ break;
+ case ELmSearchResult:
+ ParseSearchResult(token);
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iRedefined = ETrue;
+ }
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CCategorySearchResult::ParsePositionFields()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCategorySearchResult::ParsePositionFields(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt value=0;
+
+ while (!(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == ',' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ val.Val(value);
+ iPositionFields.Append(value);
+
+ if (line.Peek() == ',')
+ {
+ line.Inc();
+ line.Mark();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CCategorySearchResult::Print()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCategorySearchResult::Print()
+ {
+ TBuf<KMaxLineLength> print;
+
+ TChar del(',');
+
+ print.Append(*iTextCriteria);
+ print.Append(del);
+
+ TBuf<KMaxFieldLength> info;
+ _LIT(KAttrInfo, "%x");
+ info.Format(KAttrInfo, iAttributes);
+ print.Append(info);
+ print.Append(del);
+
+ _LIT(KIntInfo, "%d");
+ TInt i=0;
+ for (i=0; i<iPositionFields.Count(); i++)
+ {
+ info.Format(KIntInfo, iPositionFields[i]);
+ print.Append(info);
+ print.Append(del);
+ }
+
+ for (i=0; i<iSearchResult.Count(); i++)
+ {
+ info.Format(KIntInfo, iSearchResult[i]);
+ print.Append(info);
+ print.Append(del);
+ }
+
+ RDebug::Print(print);
+ }
+
+// ---------------------------------------------------------
+// CCategorySearchResult::TextCriteria()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPtrC CCategorySearchResult::TextCriteria() const
+ {
+ return *iTextCriteria;
+ }
+
+// ---------------------------------------------------------
+// CCategorySearchResult::PositionFields
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const RArray<TUint>& CCategorySearchResult::PositionFields() const
+ {
+ return iPositionFields;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CCompositeSearchResult.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,644 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <LbsPosition.h>
+
+#include "FT_CCompositeSearchResult.h"
+
+#include <StifLogger.h>
+
+//CONSTANTS
+const TInt KMaxLineLength=255;
+
+// C++ Constructor
+CCompositeSearchResult::CCompositeSearchResult()
+ {
+ }
+
+CCompositeSearchResult* CCompositeSearchResult::NewL(CStifLogger* aLog)
+ {
+ CCompositeSearchResult* self = new(ELeave) CCompositeSearchResult;
+ CleanupStack::PushL(self);
+ self->ConstructL(aLog);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ destructor
+CCompositeSearchResult::~CCompositeSearchResult()
+ {
+ iFile.Close();
+ iFileSession.Close();
+
+ iResultIds.Close();
+ iIdList.Close();
+ iPositionList.Close();
+
+ delete iTextCriteria;
+ iTextCriteria = NULL;
+
+ delete iCategoryName;
+ iCategoryName = NULL;
+
+ }
+
+void CCompositeSearchResult::ConstructL(CStifLogger* aLog)
+ {
+ iLog = aLog;
+
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmDbCompositeSearchResult.txt");
+
+ User::LeaveIfError(iFileSession.Connect());
+ User::LeaveIfError(iFile.Open(iFileSession, KFileTestValues, EFileRead));
+ iTextEnabled = EFalse;
+ iAreaEnabled = EFalse;
+ iNearestEnabled = EFalse;
+ iCategoryEnabled = EFalse;
+ iIdListEnabled = EFalse;
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::GetCompositeSearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TBool CCompositeSearchResult::GetCompositeSearchResultsL(CPosLmCompositeCriteria& aComposite)
+ {
+ TBuf<KMaxLineLength> line;
+ TBool done = EFalse;
+
+ iTextEnabled = EFalse;
+ iAreaEnabled = EFalse;
+ iNearestEnabled = EFalse;
+ iCategoryEnabled = EFalse;
+ iIdListEnabled = EFalse;
+
+ iResultIds.Close();
+ iIdList.Close();
+ iPositionList.Close();
+
+ delete iTextCriteria;
+ iTextCriteria = NULL;
+
+ delete iCategoryName;
+ iCategoryName = NULL;
+
+ iCategoryId = 0;
+ iRedefined = 0;
+ iUseCoverageRadius = EFalse;
+ iMaxDistance = -1;
+
+ iSouthLat=0;iNorthLat=0;iWestLong=0;iEastLong=0;
+ iTestCounter++;
+
+ TBuf<50> buf;
+ buf.Format(_L(">>>>>>>>>>>>Test Round %d<<<<<<<<<<"), iTestCounter);
+ iLog->Log(buf);
+
+ aComposite.ClearArguments();
+
+ while (ReadLn(iFile, line) != KErrEof && !done)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ // Found "# TEXT" line
+ if (lex.Peek() == 'T')
+ {
+ ParseTextL(line);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(*iTextCriteria);
+ textCriteria->SetAttributesToSearch(iTextAttributes);
+ textCriteria->SetPositionFieldsToSearchL(iPositionList);
+
+ aComposite.AddArgument(textCriteria);
+ CleanupStack::Pop(textCriteria);
+ iTextEnabled = ETrue;
+ }
+ // Found "# AREA" line
+ else if (lex.Peek() == 'A')
+ {
+ ParseAreaL(line);
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(iSouthLat,
+ iNorthLat,
+ iWestLong,
+ iEastLong
+ );
+
+ aComposite.AddArgument(areaCriteria);
+ CleanupStack::Pop(areaCriteria);
+ iAreaEnabled = ETrue;
+ }
+ // Found "# CATEGORY" line
+ else if (lex.Peek() == 'C')
+ {
+ ParseCategoryL(line);
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ if (iCategoryId>0)
+ {
+ iLog->Log(_L("SetCategoryItemId"));
+ catSearchCriteria->SetCategoryItemId(iCategoryId);
+ }
+ if (iCategoryName != NULL)
+ {
+ iLog->Log(_L("SetCategoryNameL"));
+ catSearchCriteria->SetCategoryNameL(*iCategoryName);
+ }
+ aComposite.AddArgument(catSearchCriteria);
+ CleanupStack::Pop(catSearchCriteria);
+ iCategoryEnabled = ETrue;
+ }
+ // Found "# NEAREST" line
+ else if (lex.Peek() == 'N')
+ {
+ ParseNearestL(line);
+ TCoordinate coord(iLatitude, iLongitude);
+
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, iUseCoverageRadius);
+ if (iMaxDistance > 0)
+ {
+ nearestCriteria->SetMaxDistance(iMaxDistance);
+ }
+ nearestCriteria->SetUseCoverageRadius(iUseCoverageRadius);
+ aComposite.AddArgument(nearestCriteria);
+ CleanupStack::Pop(nearestCriteria);
+
+ iNearestEnabled = ETrue;
+ }
+ // Found "# IDLIST" line
+ else if (lex.Peek() == 'I')
+ {
+ ParseIdListL(line);
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+
+ for (TInt i=0;i<iIdList.Count();i++)
+ {
+ list.Append(iIdList[i]);
+ }
+ idList->SetLandmarkIdsL(list);
+
+ aComposite.AddArgument(idList);
+ CleanupStack::Pop(idList);
+ CleanupStack::PopAndDestroy(&list);
+ iIdListEnabled = ETrue;
+ }
+ // Found "# RESULT" line
+ else if (lex.Peek() == 'R')
+ {
+ ParseResultL(line);
+ }
+ // Found "# SEPARATOR" line
+ else if (lex.Peek() == 'S')
+ {
+ done = ETrue;
+ }
+ }
+ }
+
+ if (done != EFalse) return EFalse;
+ else return ETrue;
+
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ReadLn
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CCompositeSearchResult::ReadLn(RFile& aFile, TDes& aDes)
+ {
+ aDes = KNullDesC;
+ TBuf8<KMaxLineLength> line;
+
+ TInt err = aFile.Read(line);
+ if (line.Length() == 0)
+ {
+ return KErrEof;
+ }
+ if (err)
+ {
+ return err;
+ }
+
+ // Find line feed
+ TInt i = 0;
+ TLex8 fileData;
+ fileData.Assign(line);
+ while (fileData.Peek() != '\n' && !(fileData.Peek()).Eos())
+ {
+ fileData.Inc();
+ if (++i == KMaxLineLength)
+ {
+ // In case no carriage return or end of string characters are present.
+ break;
+ }
+ }
+
+ // Update file position
+ TInt diff = -(line.Length() - i - 1);
+ aFile.Seek(ESeekCurrent, diff);
+
+ // Convert to 16-bit
+ line.SetLength(i);
+ aDes.Copy(line);
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseAreaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseAreaL(const TDesC& aDes)
+ {
+ iLog->Log(_L("ParseAreaL"));
+ TLex line(aDes);
+ line.Mark();
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ESouthLat:
+ val.Val(iSouthLat, TChar(','));
+ break;
+ case ENorthLat:
+ val.Val(iNorthLat, TChar(','));
+ break;
+ case EWestLong:
+ val.Val(iWestLong, TChar(','));
+ break;
+ case EEastLong:
+ val.Val(iEastLong, TChar(','));
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseNearestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseNearestL(const TDesC& aDes)
+ {
+ iLog->Log(_L("ParseNearestL"));
+ TLex line(aDes);
+ line.Mark();
+ TInt useCoverageRadius = 0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ELatitude:
+ val.Val(iLatitude, TChar(','));
+ break;
+ case ELongitude:
+ val.Val(iLongitude, TChar(','));
+ break;
+ case EUseCoverageRadius:
+ val.Val(useCoverageRadius);
+ if (useCoverageRadius == 1)
+ {
+ iUseCoverageRadius = ETrue;
+ }
+ break;
+ case EMaxDistance:
+ val.Val(iMaxDistance);
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseTextL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseTextL(const TDesC& aDes)
+ {
+ iLog->Log(_L("ParseTextL"));
+ TLex line(aDes);
+ line.Mark();
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+
+ switch(index)
+ {
+ case ETextCriteria:
+ iTextCriteria = token.AllocL();
+ break;
+ case EAttributes:
+ ParseAttributesL(token);
+ iTextAttributes = iAttributes;
+ break;
+ case EPositionFields:
+ ExtractIdFields(token, iPositionList);
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseCategoryL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseCategoryL(const TDesC& aDes)
+ {
+ iLog->Log(_L("ParseCategoryL"));
+ TLex line(aDes);
+ line.Mark();
+ TInt tmp;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+
+ switch(index)
+ {
+ case ECategoryName:
+ iCategoryName = token.AllocL();
+ break;
+ case ECategoryId:
+ val.Val(tmp);
+ iCategoryId = tmp;
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseIdListL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseIdListL(const TDesC& aDes)
+ {
+ iLog->Log(_L("ParseIdListL"));
+ TLex line(aDes);
+ line.Mark();
+
+ RArray<TUint> list;
+ CleanupClosePushL(list);
+ TInt i=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ //TLex val(token);
+
+ switch(index)
+ {
+ case ELmIdList:
+ ExtractIdFields(token, list);
+ for (i=0;i<list.Count();i++)
+ {
+ iIdList.Append(list[i]);
+ }
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ParseResultL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ParseResultL(const TDesC& aDes)
+ {
+ iLog->Log(_L("ParseResultL"));
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0;
+
+ RArray<TUint> list;
+ CleanupClosePushL(list);
+ TInt i=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+
+ switch(index)
+ {
+ case ELmResultIdList:
+ ExtractIdFields(token, list);
+ for (i=0;i<list.Count();i++)
+ {
+ iResultIds.Append(list[i]);
+ }
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iLog->Log(_L("REDEFINED"));
+ iRedefined = ETrue;
+ }
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+// ---------------------------------------------------------
+// CCompositeSearchResult::ExtractIdFields()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCompositeSearchResult::ExtractIdFields(const TDesC& aDes, RArray<TUint>& aList)
+ {
+ iLog->Log(_L("ExtractIdFields"));
+ TLex line(aDes);
+ line.Mark();
+ TInt startValue=0;
+ TInt endValue=0;
+ while (!(line.Peek()).Eos())
+ {
+ line.Inc();
+
+ if (line.Peek() == ',' || line.Peek() == '-' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ val.Val(startValue);
+ iSearchResult.Append(startValue);
+ aList.Append(startValue);
+
+ if (line.Peek() == '-')
+ {
+ line.Inc();
+ line.Mark();
+ while (line.Peek() != ',' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ }
+ TPtrC endToken = line.MarkedToken();
+ TLex endVal(endToken);
+ endVal.Val(endValue);
+ for (TInt i=startValue+1; i<=endValue; i++)
+ {
+ aList.Append(i);
+ }
+ }
+ if (line.Peek() == ',')
+ {
+ line.Inc();
+ line.Mark();
+ }
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CLandmarkTestProcedureBase.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,2974 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+
+// INCLUDES
+#include "FT_CLandmarkTestProcedureBase.h"
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLMOperation.h>
+#include <EPos_TPosLMSortPref.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <LbsPosition.h>
+#include <lbs.h>
+#include <bautils.h>
+#include <s32file.h>
+#include "FT_LandmarkConstants.h"
+#include <e32def.h>
+#include <BaRsc2.H>
+#include <BaRsRead2.H>
+#include <BAUTILS.H>
+#include <utf.h>
+
+// CONSTANTS
+const TInt KBufSize=100;
+const TInt KMaxFieldLength = 80;
+
+const TInt KFirstNextStepLogLimit = 100000; //µs
+
+// CONSTANTS
+_LIT(KLt, "<");
+_LIT(KGt, ">");
+_LIT(KAmp, "&");
+_LIT(KApos, "'");
+_LIT(KQuot, "\"");
+
+_LIT(KLtXmlStr, "<");
+_LIT(KGtXmlStr, ">");
+_LIT(KAmpXmlStr, "&");
+_LIT(KAposXmlStr, "'");
+_LIT(KQuotXmlStr, """);
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// -----------------------------------------------------------------------------
+// CLandMarksTestModule::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+
+
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CLandmarkTestProcedureBase::CLandmarkTestProcedureBase(
+ TInt aModuleId, CStifLogger* aLog)
+ : iModuleId(aModuleId),
+ KFirstDelayTime(5000),
+ KIntervalTime(5000),
+ iLog(aLog)
+ {
+ iUseLogFromThreadIsDisabled = EFalse;
+ iFileSession.Connect();
+ }
+
+
+
+// Destructor
+CLandmarkTestProcedureBase::~CLandmarkTestProcedureBase()
+ {
+ iSearchResults.ResetAndDestroy();
+ iAreaSearchResults.ResetAndDestroy();
+
+ iCategorySearchResults.ResetAndDestroy();
+ iCategoryLandmarkSearchResults.ResetAndDestroy();
+ iFileSession.Close();
+ ReleaseLandmarkResources();
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::InitTestL()
+ {
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::StartL()
+ {
+ iLog->Log(_L("StartL not overridden"));
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CloseTest()
+ {
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RemoveAllLmDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RemoveAllLmDatabasesL()
+ {
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt count = dbArray->Count();
+
+ for (TInt i=0;i<count;i++)
+ {
+ iLog->Log((*dbArray)[i]);
+ TRAPD(error,dbManager->DeleteDatabaseL((*dbArray)[i]));
+ if (error != KErrNone)
+ {
+ if( error == KErrInUse )
+ {
+ iLog->Log(_L("Cannot delete database since it is in use"));
+ }
+ else
+ {
+ iLog->Log(_L("Delete database leaves with error = %d"),error);
+ User::Leave( error);
+ }
+
+ }
+ }
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+ iLog->Log(_L("DeleteAllDatabasesL Done"));
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RemoveDefaultDb
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RemoveDefaultDbL()
+ {
+
+
+
+ iLog->Log(_L("In CLandmarkTestProcedureBase::RemoveDefaultDbL() "));
+
+
+ // Retrieve default db from db manager and then delete
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+
+ CleanupStack::PushL(manager);
+
+ HBufC* defaultDbUri;
+ defaultDbUri = manager->DefaultDatabaseUriLC();
+
+ TRAPD(err, manager->DeleteDatabaseL(*defaultDbUri));
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ if( err == KErrInUse)
+ {
+ iLog->Log(_L("Cannot delete database since it is in use"));
+ }
+ else
+ {
+ iLog->Log(_L("Delete of the default landmarks database failed with %d"),err);
+ User::Leave(err);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+
+
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CreateCategoryLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkCategory* CLandmarkTestProcedureBase::CreateCategoryLC(const TDesC& aName)
+ {
+ _LIT(KGetCategoryNameErr, "GetCategory name returns incorrect error code");
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+
+ TInt err=0;
+ TPtrC name;
+ err=category->GetCategoryName(name);
+ AssertTrueSecL(err == KErrNotFound, KGetCategoryNameErr);
+
+ category->SetCategoryNameL(aName);
+
+ category->SetIconL(KMbmFileName, KIconIndex, KIconMaskIndex);
+
+ return category;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CreateLandmarkLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmark* CLandmarkTestProcedureBase::CreateLandmarkLC(const TDesC& aName)
+ {
+ _LIT(KGetNameErr, "GetLandmarks name returns incorrect error code");
+ _LIT(KFirstPositionFieldIdErr, "FirstPositionFieldId returns incorrect id");
+
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ TInt err=0;
+ TPtrC name;
+ err=landmark->GetLandmarkName(name);
+ AssertTrueSecL(err == KErrNotFound, KGetNameErr);
+
+ landmark->SetLandmarkNameL(aName);
+
+ TCoordinate coord(KLatitude, KLongitude, KAltitude);
+ TLocality loc(coord, KHorizontalAcc, KVerticalAcc);
+ TTime time;
+ time.UniversalTime();
+ TPosition pos(loc, time);
+ landmark->SetPositionL(pos);
+
+ landmark->SetIconL(KMbmFileName, KIconIndex, KIconMaskIndex);
+ landmark->SetLandmarkDescriptionL(KDescription);
+ landmark->SetCoverageRadius(KCoverageRadius);
+
+ AssertTrueSecL(landmark->FirstPositionFieldId()==EPositionFieldNone, KFirstPositionFieldIdErr);
+
+ AddFieldsL(landmark);
+
+ _LIT(KCategoryName, "%S Category %d");
+ for(TInt i=0; i<KNoCategories; i++)
+ {
+ TBuf<100> name;
+ HBufC* tmp = aName.Alloc();
+ name.Format(KCategoryName,tmp,i);
+ delete tmp;
+ landmark->AddCategoryL(CreateCategoryL(name));
+ }
+ return landmark;
+
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AddFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::AddFieldsL(CPosLandmark* aLandmark)
+ {
+ _LIT(KPositionFieldNoneErr, "SetPositionFieldL should return KErrArgumnet with EPositionFieldNone");
+
+ aLandmark->SetPositionFieldL(EPositionFieldCountry, KCountry);
+ aLandmark->SetPositionFieldL(EPositionFieldHorizontalSpeed, KHorizontalSpeed);
+ // Removed from LBSFieldsIds.h
+
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinks, KMediaLinks);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, KMediaLink1);
+
+ TUint16 tmp = (TUint16)EPositionFieldMediaLinksStart;
+ aLandmark->SetPositionFieldL(++tmp, KMediaLink2);
+ aLandmark->SetPositionFieldL(++tmp, KMediaLink3);
+
+ aLandmark->SetPositionFieldL(EPositionFieldIdLast, KOrientation);
+
+ TRAPD(err, aLandmark->SetPositionFieldL(EPositionFieldNone, KMediaLink3));
+ AssertTrueSecL(err == KErrArgument, KPositionFieldNoneErr);
+
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AddFields2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::AddFields2L(CPosLandmark* aLandmark)
+ {
+ aLandmark->SetPositionFieldL(EPositionFieldCountry, KCountry2);
+ aLandmark->SetPositionFieldL(EPositionFieldHorizontalSpeed, KHorizontalSpeed2);
+ // Removed from LBSFieldsIds.h
+
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, KMediaLinks2);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+1, KMediaLink4);
+
+ TUint16 tmp = (TUint16)EPositionFieldMediaLinksStart;
+ aLandmark->SetPositionFieldL(++tmp, KMediaLink5);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AddFields3L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::AddFields3L(CPosLandmark* aLandmark)
+ {
+ aLandmark->SetPositionFieldL(EPositionFieldCountryCode, KCountryCode);
+ aLandmark->SetPositionFieldL(EPositionFieldState, KState);
+ aLandmark->SetPositionFieldL(EPositionFieldCity, KCity);
+ aLandmark->SetPositionFieldL(EPositionFieldDistrict, KDistrict);
+ aLandmark->SetPositionFieldL(EPositionFieldStreet, KStreet);
+ aLandmark->SetPositionFieldL(EPositionFieldStreetExtension, KStreetExtension);
+ aLandmark->SetPositionFieldL(EPositionFieldLocationName, KLocationName);
+ aLandmark->SetPositionFieldL(EPositionFieldPostalCode, KPostalCode);
+ aLandmark->SetPositionFieldL(EPositionFieldLocality, KLocality);
+ aLandmark->SetPositionFieldL(EPositionFieldCrossing1, KCrossing1);
+ aLandmark->SetPositionFieldL(EPositionFieldCrossing2, KCrossing2);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingName, KBuildingName);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingFloor, KBuildingFloor);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingRoom, KBuildingRoom);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingZone, KBuildingZone);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, KBuildingTelephone);
+ }
+
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CreateXMLLandmarkLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmark* CLandmarkTestProcedureBase::CreateXMLLandmarkLC(const TDesC& aName)
+ {
+ _LIT(KGetNameErr, "GetLandmarks name returns incorrect error code");
+ _LIT(KFirstPositionFieldIdErr, "FirstPositionFieldId returns incorrect id");
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+
+ TInt err=0;
+ TPtrC name;
+ err=landmark->GetLandmarkName(name);
+ AssertTrueSecL(err == KErrNotFound, KGetNameErr);
+
+ landmark->SetLandmarkNameL(aName);
+
+ TCoordinate coord(KLatitude, KLongitude, KAltitude);
+ TLocality loc(coord, KHorizontalAcc, KVerticalAcc);
+ TTime time;
+ time.UniversalTime();
+ TPosition pos(loc, time);
+ landmark->SetPositionL(pos);
+
+ landmark->SetIconL(KMbmFileName, KIconIndex, KPosLmIconMaskNotUsed);
+
+ landmark->SetLandmarkDescriptionL(KDescription);
+
+ landmark->SetCoverageRadius(KCoverageRadius);
+
+ AssertTrueSecL(landmark->FirstPositionFieldId()==EPositionFieldNone, KFirstPositionFieldIdErr);
+
+ return landmark;
+ }
+
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AddAllXMLFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::AddAllXMLFieldsL(CPosLandmark* aLandmark)
+ {
+ aLandmark->SetPositionFieldL(EPositionFieldCountry, KCountry2);
+ aLandmark->SetPositionFieldL(EPositionFieldCountryCode, KCountryCode);
+ aLandmark->SetPositionFieldL(EPositionFieldState, KState);
+ aLandmark->SetPositionFieldL(EPositionFieldCounty, KCounty);
+ aLandmark->SetPositionFieldL(EPositionFieldCity, KCity);
+ aLandmark->SetPositionFieldL(EPositionFieldDistrict, KDistrict);
+ aLandmark->SetPositionFieldL(EPositionFieldPostalCode, KPostalCode);
+
+ aLandmark->SetPositionFieldL(EPositionFieldCrossing1, KCrossing1);
+ aLandmark->SetPositionFieldL(EPositionFieldCrossing2, KCrossing2);
+ aLandmark->SetPositionFieldL(EPositionFieldStreet, KStreet);
+
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingName, KBuildingName);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingFloor, KBuildingFloor);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingRoom, KBuildingRoom);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingZone, KBuildingZone);
+
+ aLandmark->SetPositionFieldL(EPositionFieldStreetExtension, KStreetExtension);
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, KBuildingTelephone);
+
+ // Set number of medialink fields
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinks, _L("13"));
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, KXMLMediaLink1);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+1, KXMLMediaLink2);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+2, KXMLMediaLink3);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+3, KXMLMediaLink4);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+4, KXMLMediaLink5);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+5, KXMLMediaLink6);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+6, KXMLMediaLink7);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+7, KXMLMediaLink8);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+8, KXMLMediaLink9);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+9, KXMLMediaLink10);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+10, KXMLMediaLink11);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+11, KXMLMediaLink12);
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart+12, KXMLMediaLink13);
+
+
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AddAllXMLFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::AddAllEmptyXMLFieldsL(CPosLandmark* aLandmark)
+ {
+ aLandmark->SetPositionFieldL(EPositionFieldCountry, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldCountryCode, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldState, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldCounty, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldCity, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldDistrict, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldPostalCode, _L(""));
+
+ aLandmark->SetPositionFieldL(EPositionFieldCrossing1, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldCrossing2, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldStreet, _L(""));
+
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingName, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingFloor, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingRoom, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingZone, _L(""));
+
+ aLandmark->SetPositionFieldL(EPositionFieldStreetExtension, _L(""));
+ aLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, _L(""));
+
+ aLandmark->SetPositionFieldL(EPositionFieldMediaLinks, _L("0"));
+
+
+ aLandmark->SetLandmarkDescriptionL(_L(""));
+
+
+ }
+
+//---------------------------------------------------------
+// CLandmarkTestProcedureBase::WriteBufferToFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CLandmarkTestProcedureBase::WriteBufferToFileL(const CBufBase* aBuffer, const TDesC& aFile)
+ {
+ iFileSession.Delete(aFile);
+
+ RFile file;
+ file.Create(iFileSession, aFile, EFileWrite);
+ CleanupClosePushL(file);
+
+ RFileWriteStream stream(file);
+ CleanupClosePushL(stream);
+
+ TInt pos=0;
+ TInt size = aBuffer->Size();
+ TInt length;
+ if (size < 255 )
+ {
+ length = size;
+ }
+ else
+ {
+ length = 255;
+ }
+
+ while (pos < size)
+ {
+ TBuf8<255> xml;
+
+ aBuffer->Read(pos, xml, length);
+
+ stream.WriteL(xml);
+
+ pos += 255;
+
+ if (pos + 255 > size )
+ {
+ length = size - pos;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(2, &file);
+ }
+
+//---------------------------------------------------------
+// CLandmarkTestProcedureBase::CreateCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPosLmItemId CLandmarkTestProcedureBase::CreateCategoryL(const TDesC& aName)
+ {
+ _LIT(KCategoryIdErr, "Category id is incorrect");
+
+ CPosLandmarkDatabase* lmd = OpenDatabaseLC();
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ TPosLmItemId id=0;
+
+
+
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(aName);
+
+ id = cm->AddCategoryL(*lmc);
+
+ AssertTrueSecL(id == lmc->CategoryId(), KCategoryIdErr);
+ CleanupStack::PopAndDestroy(lmc);
+
+
+ CleanupStack::PopAndDestroy(2, lmd);
+
+ return id;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::OpenLandmarkDatabaseLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::OpenDatabaseLC()
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ CPosLmOperation* op = lmd->InitializeL(); // Synchronous since no argument
+ op->ExecuteL();
+ delete op;
+ }
+ return lmd;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CompareLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CompareLandmarksL(const CPosLandmark& aSource, const CPosLandmark& aTarget)
+ {
+ _LIT(KCompareIdErr, "Landmark id's are not equal");
+ _LIT(KComparePositionErr, "Landmark positions are not equal");
+ _LIT(KComparePositionErr1, "Landmark longitude are not equal");
+ _LIT(KComparePositionErr2, "Landmark latitude are not equal");
+ _LIT(KComparePositionErr3, "Landmark horizontal accuracy are not equal");
+ _LIT(KComparePositionErr4, "Landmark vertical accuracy are not equal");
+ _LIT(KComparePositionErr5, "Landmark altitude are not equal");
+ _LIT(KCompareNameErr, "Landmark names are not equal");
+ _LIT(KCompareCoverageRadiusErr, "Landmark coverage radiuses are not equal");
+ _LIT(KCompareIconErr, "Landmark icons are not equal");
+ _LIT(KCompareDescErr, "Landmark descriptions are not equal");
+ _LIT(KCompareNoPositionFieldsErr, "Landmark no positioning fields are not equal");
+ _LIT(KComparePositionFieldIdErr, "Position field id's are not equal");
+ _LIT(KComparePositionFieldErr, "Position fields are not equal");
+ _LIT(KCompareNumOfCategoriesErr, "Number of categories is not equal");
+ _LIT(KCompareSetOfCategoriesErr, "Set of categories is not equal");
+
+ TInt sourceErr, targetErr;
+ TPtrC sourceName;
+ sourceErr=aSource.GetLandmarkName(sourceName);
+
+ TPtrC targetName;
+ targetErr=aTarget.GetLandmarkName(targetName);
+
+ AssertTrueSecL(targetErr == sourceErr, KCompareNameErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceName.Compare(targetName) == KErrNone, KCompareNameErr);
+ AssertTrueSecL(aSource.LandmarkId() == aTarget.LandmarkId(), KCompareIdErr);
+ }
+
+ TLocality sourceLoc, targetLoc;
+ sourceErr = aSource.GetPosition(sourceLoc);
+ targetErr = aTarget.GetPosition(targetLoc);
+ AssertTrueSecL(sourceErr == targetErr, KComparePositionErr);
+ if (!sourceErr)
+ {
+ // Difference between WINS and WINSCW/TARGET
+ // For WINS comparing TReal NaN == NaN evaluates to true
+ // but for TARGET and WINSCW it evaluates to false
+ TRealX vertAcc(sourceLoc.VerticalAccuracy());
+ TRealX targetVertAcc(targetLoc.VerticalAccuracy());
+ TRealX horAcc(sourceLoc.HorizontalAccuracy());
+ TRealX targetHorAcc(targetLoc.HorizontalAccuracy());
+ TRealX horAlt(sourceLoc.Altitude());
+ TRealX targetHorAlt(targetLoc.Altitude());
+
+ AssertTrueSecL(sourceLoc.Longitude() == targetLoc.Longitude(),KComparePositionErr1);
+ AssertTrueSecL(sourceLoc.Latitude() == targetLoc.Latitude(), KComparePositionErr2);
+
+ AssertTrueSecL((horAcc.IsNaN() && targetHorAcc.IsNaN()) || horAcc == targetHorAcc, KComparePositionErr3);
+ AssertTrueSecL((vertAcc.IsNaN() && targetVertAcc.IsNaN()) || vertAcc == targetVertAcc, KComparePositionErr4);
+ AssertTrueSecL((targetHorAlt.IsNaN() && horAlt.IsNaN()) || horAlt == targetHorAlt , KComparePositionErr5);
+ }
+
+ TReal32 sourceR, targetR;
+ sourceErr = aSource.GetCoverageRadius(sourceR);
+ targetErr = aTarget.GetCoverageRadius(targetR);
+ AssertTrueSecL(sourceErr == targetErr, KCompareCoverageRadiusErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceR == targetR, KCompareCoverageRadiusErr);
+ }
+
+ TPtrC sourceMbmFileName, targetMbmFileName;
+ TInt sourceIndex, targetIndex;
+ TInt sourceMaskIndex, targetMaskIndex;
+
+ sourceErr = aSource.GetIcon(sourceMbmFileName, sourceIndex, sourceMaskIndex);
+ targetErr = aTarget.GetIcon(targetMbmFileName, targetIndex, targetMaskIndex);
+
+ AssertTrueSecL(sourceErr == targetErr, KCompareIconErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceMbmFileName.Compare(targetMbmFileName) == KErrNone, KCompareIconErr);
+ AssertTrueSecL(sourceIndex == targetIndex, KCompareIconErr);
+ }
+
+ TPtrC sourceDesc, targetDesc;
+ sourceErr = aSource.GetLandmarkDescription(sourceDesc);
+ targetErr = aTarget.GetLandmarkDescription(targetDesc);
+ AssertTrueSecL(sourceErr == targetErr, KCompareDescErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceDesc.Compare(targetDesc) == KErrNone, KCompareDescErr);
+ }
+
+ AssertTrueSecL(aSource.NumOfAvailablePositionFields() == aTarget.NumOfAvailablePositionFields(), KCompareNoPositionFieldsErr);
+
+ TPositionFieldId sourceFieldId = aSource.FirstPositionFieldId();
+ TPositionFieldId targetFieldId = aTarget.FirstPositionFieldId();
+ AssertTrueSecL(sourceFieldId == targetFieldId, KComparePositionFieldIdErr);
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue, targetValue;
+
+ aSource.GetPositionField(sourceFieldId, sourceValue);
+ aTarget.GetPositionField(targetFieldId, targetValue);
+
+ AssertTrueSecL(sourceValue.Compare(targetValue) == KErrNone, KComparePositionFieldErr);
+
+ sourceFieldId = aSource.NextPositionFieldId(sourceFieldId);
+ targetFieldId = aTarget.NextPositionFieldId(targetFieldId);
+
+ AssertTrueSecL(sourceFieldId == targetFieldId, KComparePositionFieldIdErr);
+ }
+
+ RArray<TPosLmItemId> sourceCategories;
+ CleanupClosePushL(sourceCategories);
+ RArray<TPosLmItemId> targetCategories;
+ CleanupClosePushL(targetCategories);
+
+ aSource.GetCategoriesL(sourceCategories);
+ aTarget.GetCategoriesL(targetCategories);
+
+ AssertTrueSecL(sourceCategories.Count() == targetCategories.Count(), KCompareNumOfCategoriesErr);
+
+ for(TInt i=0; i<sourceCategories.Count(); i++)
+ {
+ TInt targetPos = targetCategories.Find( sourceCategories[i] );
+ AssertTrueSecL( targetPos >= 0, KCompareSetOfCategoriesErr );
+ }
+ CleanupStack::PopAndDestroy(2, &sourceCategories);
+ }
+
+// ---------------------------------------------------------
+// CPSYTesterTestProcedureBase::CompareCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CompareCategoriesL(
+ const TPosLmItemId& aSourceId,
+ const TPosLmItemId& aTargetId)
+ {
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(cm);
+
+ CPosLandmarkCategory* source = cm->ReadCategoryLC(aSourceId);
+ CPosLandmarkCategory* target = cm->ReadCategoryLC(aTargetId);
+
+ CompareCategoriesL(*source, *target);
+
+
+ CleanupStack::PopAndDestroy(3);
+ }
+
+// ---------------------------------------------------------
+// CPSYTesterTestProcedureBase::CompareCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CompareCategoriesL(
+ const CPosLandmarkCategory& aSource,
+ const CPosLandmarkCategory& aTarget)
+ {
+ _LIT(KCompareCategoryNameErr, "Category names are not equal");
+ _LIT(KCompareCategoryIdErr, "Category id's are not equal");
+ _LIT(KCompareGlobalCategoryIdErr, "Category global id's are not equal");
+ _LIT(KCompareCategoryIconErr, "Category icons are not equal");
+
+ TInt sourceErr, targetErr;
+ TPtrC sourceName, targetName;
+ sourceErr = aSource.GetCategoryName(sourceName);
+ targetErr = aTarget.GetCategoryName(targetName);
+
+ AssertTrueSecL(sourceErr == targetErr, KCompareCategoryNameErr);
+ AssertTrueSecL(sourceName.Compare(targetName) == KErrNone, KCompareCategoryNameErr);
+
+ AssertTrueSecL(aSource.CategoryId() == aTarget.CategoryId(), KCompareCategoryIdErr);
+ AssertTrueSecL(aSource.GlobalCategory() == aTarget.GlobalCategory(), KCompareGlobalCategoryIdErr);
+
+ TPtrC sourceMbmFileName, targetMbmFileName;
+ TInt sourceIndex, targetIndex;
+ TInt sourceMaskIndex, targetMaskIndex;
+
+ sourceErr = aSource.GetIcon(sourceMbmFileName, sourceIndex, sourceMaskIndex);
+ targetErr = aTarget.GetIcon(targetMbmFileName, targetIndex, targetMaskIndex);
+
+ AssertTrueSecL(sourceErr == targetErr, KCompareCategoryIconErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceMbmFileName.Compare(targetMbmFileName) == KErrNone, KCompareCategoryIconErr);
+ AssertTrueSecL(sourceIndex == targetIndex, KCompareCategoryIconErr);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CompareXMLLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CompareXMLLandmarksL(const CPosLandmark& aSource, const CPosLandmark& aTarget, TBool aDebug)
+ {
+ _LIT(KComparePositionErr, "Landmark positions are not equal");
+ _LIT(KComparePositionErr1, "Landmark longitude are not equal");
+ _LIT(KComparePositionErr2, "Landmark latitude are not equal");
+ _LIT(KComparePositionErr3, "Landmark horizontal accuracy are not equal");
+ _LIT(KComparePositionErr4, "Landmark vertical accuracy are not equal");
+ _LIT(KComparePositionErr5, "Landmark altitude are not equal");
+ _LIT(KCompareNameErr, "Landmark names are not equal, src %S, trg %S");
+ _LIT(KCompareCoverageRadiusErr, "Landmark coverage radiuses are not equal");
+ _LIT(KCompareDescErr, "Landmark descriptions are not equal");
+ _LIT(KCompareNoPositionFieldsErr, "ERROR: Landmark nr of positioning fields are not equal");
+ _LIT(KComparePositionFieldIdErr, "ERROR: Position field id's are not equal, src '%d', trg '%d'");
+ _LIT(KComparePositionFieldErr, "ERROR: Position fields are not equal, src '%S', trg '%S'");
+
+ if (aDebug) iLog->Log(_L("CompareXMLLandmarksL"));
+
+ TInt errorsFound = KErrNone;
+
+ TInt sourceErr, targetErr;
+ TPtrC sourceName;
+ sourceErr=aSource.GetLandmarkName(sourceName);
+ //iLog->Log(sourceName);
+
+ TPtrC targetName;
+ targetErr=aTarget.GetLandmarkName(targetName);
+ //iLog->Log(targetName);
+
+ AssertTrueSecL(targetErr == sourceErr, KCompareNameErr);
+ if (!sourceErr)
+ {
+ if (sourceName.Compare(targetName) != KErrNone)
+ {
+ iLog->Log(KCompareNameErr, &sourceName, &targetName);
+ }
+ }
+
+ TLocality sourceLoc, targetLoc;
+ sourceErr = aSource.GetPosition(sourceLoc);
+ targetErr = aTarget.GetPosition(targetLoc);
+ AssertTrueSecL(sourceErr == targetErr, KComparePositionErr);
+ if (!sourceErr)
+ {
+ // Difference between WINS and WINSCW/TARGET
+ // For WINS comparing TReal NaN == NaN evaluates to true
+ // but for TARGET and WINSCW it evaluates to false
+ TRealX vertAcc(sourceLoc.VerticalAccuracy());
+ TRealX targetVertAcc(targetLoc.VerticalAccuracy());
+ TRealX horAcc(sourceLoc.HorizontalAccuracy());
+ TRealX targetHorAcc(targetLoc.HorizontalAccuracy());
+ TRealX horAlt(sourceLoc.Altitude());
+ TRealX targetHorAlt(targetLoc.Altitude());
+
+ AssertTrueSecL(sourceLoc.Longitude() == targetLoc.Longitude(),KComparePositionErr1);
+ AssertTrueSecL(sourceLoc.Latitude() == targetLoc.Latitude(), KComparePositionErr2);
+
+ AssertTrueSecL((horAcc.IsNaN() && targetHorAcc.IsNaN()) || horAcc == targetHorAcc, KComparePositionErr3);
+ AssertTrueSecL((vertAcc.IsNaN() && targetVertAcc.IsNaN()) || vertAcc == targetVertAcc, KComparePositionErr4);
+ AssertTrueSecL((targetHorAlt.IsNaN() && horAlt.IsNaN()) || horAlt == targetHorAlt , KComparePositionErr5);
+ }
+
+ TReal32 sourceR, targetR;
+ sourceErr = aSource.GetCoverageRadius(sourceR);
+ targetErr = aTarget.GetCoverageRadius(targetR);
+ AssertTrueSecL(sourceErr == targetErr, KCompareCoverageRadiusErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceR == targetR, KCompareCoverageRadiusErr);
+ }
+ TPtrC sourceDesc, targetDesc;
+ sourceErr = aSource.GetLandmarkDescription(sourceDesc);
+ targetErr = aTarget.GetLandmarkDescription(targetDesc);
+ AssertTrueSecL(sourceErr == targetErr, KCompareDescErr);
+ if (!sourceErr)
+ {
+ AssertTrueSecL(sourceDesc.Compare(targetDesc) == KErrNone, KCompareDescErr);
+ }
+
+ if (aSource.NumOfAvailablePositionFields() != aTarget.NumOfAvailablePositionFields())
+ {
+ iLog->Log(KCompareNoPositionFieldsErr);
+ errorsFound++;
+ //PrintLandmarkFieldsL(aSource);
+ //PrintLandmarkFieldsL(aTarget);
+ }
+
+ TPositionFieldId sourceFieldId = aSource.FirstPositionFieldId();
+ TPositionFieldId targetFieldId = aTarget.FirstPositionFieldId();
+
+ if (sourceFieldId != targetFieldId)
+ {
+ iLog->Log(KComparePositionFieldIdErr);
+ errorsFound++;
+ }
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue, targetValue;
+
+ HBufC* buf1 = NULL;
+ HBufC* buf2 = NULL;
+
+ aSource.GetPositionField(sourceFieldId, sourceValue);
+ aTarget.GetPositionField(sourceFieldId, targetValue);
+
+ // Remove // from string starting with //
+ // The encoder adds "//" to medialinks with unknown mimetype
+ if (sourceValue.Find(_L("//")) == 0)
+ {
+ TPtrC sourceValue2 = sourceValue.Mid(2);
+ buf1 = sourceValue2.Alloc();
+ }
+ else buf1 = sourceValue.Alloc();
+ CleanupStack::PushL(buf1);
+
+ // Remove // from string starting with //
+ // The encoder adds "//" to medialinks with unknown mimetype
+ if (targetValue.Find(_L("//")) == 0)
+ {
+ TPtrC targetValue2 = targetValue.Mid(2);
+ buf2 = targetValue2.Alloc();
+ }
+ else buf2 = targetValue.Alloc();
+ CleanupStack::PushL(buf2);
+
+ // Check if strings are equal
+ if (buf1->Des().Compare(buf2->Des()))
+ {
+ iLog->Log(KComparePositionFieldErr, sourceFieldId, &sourceValue, &targetValue);
+ errorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(buf2);
+ CleanupStack::PopAndDestroy(buf1);
+
+ sourceFieldId = aSource.NextPositionFieldId(sourceFieldId);
+ }
+
+ return errorsFound;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CompareXMLCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CompareXMLCategoriesL(
+ const CPosLandmarkCategory& aSource,
+ const CPosLandmarkCategory& aTarget, TBool /*aDebug*/)
+ {
+ _LIT(KCompareCategoryNameErr1, "ERROR: Category names not correct found");
+ _LIT(KCompareCategoryNameErr2, "ERROR: Category names are not equal");
+ TInt errorsFound = KErrNone;
+ iLog->Log(_L("CompareXMLCategoriesL"));
+
+ TInt sourceErr, targetErr;
+ TPtrC sourceName, targetName;
+ sourceErr = aSource.GetCategoryName(sourceName);
+ targetErr = aTarget.GetCategoryName(targetName);
+
+ AssertTrueSecL(sourceErr == targetErr, KCompareCategoryNameErr1);
+ iLog->Log(_L("Source %S, target %S"), &sourceName, &targetName);
+
+ if (sourceName.Compare(targetName) != KErrNone)
+ {
+ iLog->Log(KCompareCategoryNameErr2);
+ errorsFound++;
+ }
+
+ if (aSource.GlobalCategory() != aTarget.GlobalCategory())
+ {
+ iLog->Log(KCompareCategoryNameErr2);
+ errorsFound++;
+ }
+
+ iLog->Log(_L("CompareXMLCategoriesL Done"));
+ return errorsFound;
+ }
+
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AssertTrueSecL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::AssertTrueSecL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode)
+ {
+ if (!aCondition)
+ {
+ TBuf<KBufSize> buf;
+ buf.Format(aErrorMsg, aErrorCode);
+ // Necessary to separate the case when aErrorCode==KErrNone
+
+ if (aErrorCode == KErrNone)
+ {
+ iLog->Log(buf);
+ User::Leave(KErrNone);
+
+ }
+ else
+ {
+ iLog->Log(buf);
+ User::Leave(aErrorCode);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CheckDefaultDbExitsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CheckDefaultDbExistL()
+ {
+ _LIT(KDefaultDbMissingErr, "Default landmarks db is missing, open returns %d");
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KDefaultDb, EFileRead);
+ file.Close();
+ AssertTrueSecL(err==KErrNone, KDefaultDbMissingErr, err);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::BackupDbFileL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::BackupDbFileL()
+ {
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ HBufC* defaultDbUri = manager->DefaultDatabaseUriLC();
+ TBuf<255> buf;
+ // Extract URI except characters ".ldb"
+ buf.Append(defaultDbUri->Left(defaultDbUri->Length()-4));
+ buf.Append(_L("COPY.LDB"));
+ // Delete in case it already exist
+ TRAPD(err, manager->DeleteDatabaseL(buf));
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Could not delete file"));
+ manager->CopyDatabaseL(*defaultDbUri, buf);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RestoreDbFileL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::RestoreDbFileL()
+ {
+
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ HBufC* defaultDbUri = manager->DefaultDatabaseUriLC();
+ TBuf<255> buf;
+ // Extract URI except characters ".ldb"
+ buf.Append(defaultDbUri->Left(defaultDbUri->Length()-4));
+ buf.Append(_L("COPY.LDB"));
+ // Delete in case it already exist
+ TRAPD(err, manager->DeleteDatabaseL(*defaultDbUri));
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Could not delete file"));
+ manager->CopyDatabaseL(buf, *defaultDbUri);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CopyDbFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+
+void CLandmarkTestProcedureBase::CopyDbFileL(const TDesC& aFileName)
+ {
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(aFileName);
+
+
+ TInt err = fileMan->Copy(srcPath, KLmFullDefaultDbPath, CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CopyTestDbFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CopyTestDbFileL(const TDesC& aFileName)
+ {
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+ TBuf<150> destPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(aFileName);
+
+ destPath.Append(KLmDbPath);
+ destPath.Append(aFileName);
+
+ TInt err = fileMan->Copy(srcPath, destPath, CFileMan::EOverWrite);
+ if (err != KErrNone) iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::UseGeneratedDbFile
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::UseGeneratedDbFileL()
+ {
+ CopyDbFileL(KDefaultDb);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KDefaultDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(KDefaultDb);
+ if ( db->IsInitializingNeeded() )
+ {
+ TRAPD( err, ExecuteAndDeleteLD( db->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+
+ return db;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::UseCompositeLandmarksDbFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::UseCompositeLandmarksDbFileL()
+ {
+ iLog->Log(_L("UseCompositeLandmarksDbFileL"));
+
+
+ _LIT(KDbFile, "compositeeposlm.ldb");
+ CopyTestDbFileL(KDbFile);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KDbFile);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL(KDbFile);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::UseEmptyDbFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::UseEmptyDbFileL()
+ {
+
+ CopyTestDbFileL(KLandmarksEmptyDb);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KLandmarksEmptyDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ return CPosLandmarkDatabase::OpenL(KLandmarksEmptyDb);
+
+ }
+
+
+// ---------------------------------------------------------
+// CPosLandmarkDatabase::UseGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CLandmarkTestProcedureBase::UseGlobalCategoriesL()
+ {
+ _LIT(KGlobalCategoryResFile, "c:\\system\\test\\testdata\\EPOSLMGLOBALCATEGORIES.R01");
+
+ _LIT(KGlobalCategoryResPath, "c:\\resource\\");
+
+ iLog->Log(_L("UseGlobalCategoriesL"));
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+ TInt err = KErrNone;
+ //check if landmark is flashed
+ TInt Value=BaflUtils::FileExists(iFileSession, KGlobalCategoryResFileROM);
+ // if (!BaflUtils::FileExists(fs, KGlobalCategoryResFileROM))
+ if(!Value)
+ {
+ iLog->Log(_L("Landmark is NOT flashed, rename global categories"));
+ //Landmark is not flashed rename the file before copy a own defiend file.
+ //since landmark is not flashed the file should exist hence leaving if it is not found!
+
+ err = fileMan->Rename(KGlobalCategoryResFileWINS, KGlobalCategoryResFileCOPY, CFileMan::EOverWrite);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ErrCode: from fileMan->Rename %d"),err);
+ iLog->Log(buf);
+ }
+
+ }
+ else
+ {
+ iLog->Log(_L("Landmark is flashed, copy global categories"));
+ }
+
+ // Recurse copy -> Create directory if it does not exist and overwrite file if it exists
+ err = fileMan->Copy(KGlobalCategoryResFile, KGlobalCategoryResPath, CFileMan::EOverWrite);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ErrCode: from fileMan->Copy %d"),err);
+ iLog->Log(buf);
+ }
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RemoveGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RemoveGlobalCategoriesL()
+ {
+
+ _LIT(KGlobalCategoryResFile, "c:\\resource\\EPOSLMGLOBALCATEGORIES.R01");
+
+ iLog->Log(_L("RemoveGlobalCategoriesL"));
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+ TInt err = KErrNone;
+
+ //check if the global category file exist in rom
+ //if landmarks is flushed it is just okej to remove
+ //any global gategory files in on the c drive.
+ if (BaflUtils::FileExists(iFileSession, KGlobalCategoryResFileROM))
+ {
+ iLog->Log(_L("Landmark is flashed, delete global categories"));
+ //in this case it is same just to remove it form c if it exists:
+ if (BaflUtils::FileExists(iFileSession, KGlobalCategoryResFile))
+ {
+ err = fileMan->Delete(KGlobalCategoryResFile);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ErrCode: from fileMan->Delete %d"),err);
+ iLog->Log(buf);
+ }
+ }
+ }
+ else
+ {
+ iLog->Log(_L("Landmark is NOT flashed, delete global categories and rename the old file"));
+ //If a copy exist this should be used, but if it does not
+ //exist the file is not removed since it is hard to know
+ //if anything has gone wrong.
+ if(BaflUtils::FileExists(iFileSession, KGlobalCategoryResFileCOPY))
+ {
+ //first delete the used file, if it exist
+ if (BaflUtils::FileExists(iFileSession, KGlobalCategoryResFile))
+ {
+
+ err = fileMan->Delete(KGlobalCategoryResFile);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ErrCode: from fileMan->Delete %d"),err);
+ iLog->Log(buf);
+ }
+ }
+ //Rename the copy file
+
+ err = fileMan->Rename(KGlobalCategoryResFileCOPY, KGlobalCategoryResFile, CFileMan::EOverWrite);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ErrCode: from fileMan->Rename %d"),err);
+ iLog->Log(buf);
+ }
+ }
+ }
+ iLog->Log(_L("RemoveGlobalCategoriesL Done in CLandmarkTestProcedureBase"));
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::Trace
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::Trace(TBuf8<KMsgBufSize> aMsg)
+ {
+ _LIT(KFileTrace, "c:\\LandmarksTestsTrace.txt");
+ _LIT8(KEnd,"\r\n");
+
+ RFs fs;
+ fs.Connect();
+
+ RFile file;
+ TInt err = file.Open(fs, KFileTrace, EFileWrite);
+
+ if ( err )
+ {
+ err = file.Create(fs, KFileTrace, EFileWrite);
+ }
+
+ if ( !err )
+ {
+ TInt pos = 0;
+ file.Seek( ESeekEnd, pos );
+ file.Write( aMsg );
+ file.Write( KEnd() );
+ }
+
+ file.Close();
+ fs.Close();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AppendSearchResultsL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CLandmarkTestProcedureBase::AppendSearchResultsL()
+ {
+ if (iSearchResults.Count() == 0 )
+ {
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmDbSearchResult.txt");
+
+ RFile file;
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+ CleanupClosePushL(file);
+
+ TBuf<KMaxLineLength> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ CSearchResult* searchResult = CSearchResult::NewL(line);
+ CleanupStack::PushL(searchResult);
+
+ User::LeaveIfError(iSearchResults.Append(searchResult));
+ CleanupStack::Pop(searchResult);
+ }
+ }
+ CleanupStack::PopAndDestroy(&file);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AppendAreaSearchResultsL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CLandmarkTestProcedureBase::AppendAreaSearchResultsL()
+ {
+ if (iSearchResults.Count() == 0)
+ {
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\lmDbAreaSearchResult.txt");
+
+ RFile file;
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+ CleanupClosePushL(file);
+
+ TBuf<KMaxLineLength> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ CAreaSearchResult* searchResult = CAreaSearchResult::NewL(line);
+ CleanupStack::PushL(searchResult);
+
+ User::LeaveIfError(iAreaSearchResults.Append(searchResult));
+ CleanupStack::Pop(searchResult);
+ }
+ }
+ CleanupStack::PopAndDestroy(&file);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AppendCategoryLandmarkSearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CLandmarkTestProcedureBase::AppendCategoryLandmarkSearchResultsL()
+ {
+ if (iCategoryLandmarkSearchResults.Count() == 0 )
+ {
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmDbCatLandmarkSearchResult.txt");
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTestValues, EFileRead);
+ AssertTrueSecL( err == KErrNone, _L("AppendCategoryLandmarkSearchResultsL file error"));
+ CleanupClosePushL(file);
+
+ TBuf<KMaxLineLength> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ CCategoryLandmarkSearchResult* oneLineResult = CCategoryLandmarkSearchResult::NewL(line);
+ CleanupStack::PushL(oneLineResult);
+
+ User::LeaveIfError(iCategoryLandmarkSearchResults.Append(oneLineResult));
+ CleanupStack::Pop(oneLineResult);
+
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AppendCategorySearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CLandmarkTestProcedureBase::AppendCategorySearchResultsL()
+ {
+ if (iCategorySearchResults.Count() == 0 )
+ {
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmDbCategorySearchResult.txt");
+
+ RFile file;
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+ CleanupClosePushL(file);
+
+
+ TBuf<KMaxLineLength> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ CCategorySearchResult* oneLineResult = CCategorySearchResult::NewL(line);
+ CleanupStack::PushL(oneLineResult);
+
+ User::LeaveIfError(iCategorySearchResults.Append(oneLineResult));
+ CleanupStack::Pop(oneLineResult);
+ //iLog->Log(line);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::SeachResults
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const RPointerArray<CSearchResult>& CLandmarkTestProcedureBase::SearchResults()
+ {
+ return iSearchResults;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::AreaSeachResults
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const RPointerArray<CAreaSearchResult>& CLandmarkTestProcedureBase::AreaSearchResults()
+ {
+ return iAreaSearchResults;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::ReadLn
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::ReadLn(RFile& aFile, TDes& aDes)
+ {
+ aDes = KNullDesC;
+ TBuf8<KMaxLineLength> line;
+
+ TInt err = aFile.Read(line);
+ if (line.Length() == 0)
+ {
+ return KErrEof;
+ }
+ if (err)
+ {
+ return err;
+ }
+
+ // Find line feed
+ TInt i = 0;
+ TLex8 fileData;
+ fileData.Assign(line);
+ while (fileData.Peek() != '\n' && !(fileData.Peek()).Eos())
+ {
+ fileData.Inc();
+ if (++i == KMaxLineLength)
+ {
+ // In case no carriage return or end of string characters are present.
+ break;
+ }
+ }
+
+ // Update file position
+ TInt diff = -(line.Length() - i - 1);
+ aFile.Seek(ESeekCurrent, diff);
+
+ // Convert to 16-bit
+ line.SetLength(i);
+ aDes.Copy(line);
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CompareL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CompareL(
+ const TDesC& aSourceFileName,
+ const TDesC& aTargetFileName)
+ {
+ _LIT(KCompareErr, "Compared file %S is not equal to %S");
+ _LIT(KLineErr, "Line %S is different to line %S");
+
+ iLog->Log(_L("CompareL: source file '%S' with target file '%S'"), &aSourceFileName, &aTargetFileName );
+
+ RFile targetFile, sourceFile;
+
+ TInt err = KErrNone;
+ err = sourceFile.Open(iFileSession, aSourceFileName, EFileRead);
+ if ( err )
+ {
+ iLog->Log(_L("Failed to open source file '%S', err % d"), &aSourceFileName, err );
+ User::Leave( err );
+ }
+ CleanupClosePushL(sourceFile);
+
+ err = targetFile.Open(iFileSession, aTargetFileName, EFileRead);
+ if ( err )
+ {
+ iLog->Log(_L("Failed to open target file '%S', err % d"), &aTargetFileName, err );
+ User::Leave( err );
+ }
+ CleanupClosePushL(targetFile);
+
+ TBuf<255> sourceLine;
+ TBuf<255> targetLine;
+
+ while (ReadLn(sourceFile, sourceLine) != KErrEof)
+ {
+ ReadLn(targetFile, targetLine);
+
+ if (sourceLine.Compare(targetLine) != 0)
+ {
+ TBuf<255> info;
+ info.Format(KCompareErr, &aSourceFileName, &aTargetFileName);
+ iLog->Log(info);
+
+ info.Format(KLineErr, &targetLine, &sourceLine);
+ iLog->Log(info);
+
+ err = KErrGeneral;
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&targetFile);
+ CleanupStack::PopAndDestroy(&sourceFile);
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CompareL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CompareL(const TDesC& aFileName)
+ {
+ _LIT(KTargetPath, "c:\\");
+
+ _LIT(KSourcePath, "c:\\system\\test\\testdata\\");
+
+ TBuf<100> target;
+ target.Append(KTargetPath);
+ target.Append(aFileName);
+
+ TBuf<100> source;
+ source.Append(KSourcePath);
+ source.Append(aFileName);
+
+ return CompareL(source, target);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::PrintLandmark
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::PrintLandmark(const CPosLandmark& aLandmark, TDes& aPrint)
+ {
+
+
+ TChar del(',');
+
+ _LIT(KIntInfo, "%d");
+ TBuf<KMaxFieldLength> info;
+ TPosLmItemId id = aLandmark.LandmarkId();
+ if (id != 0)
+ {
+ info.Format(KIntInfo, id);
+ aPrint.Append(info);
+ }
+ aPrint.Append(del);
+
+ RArray<TPosLmItemId> lmcats;
+ // How to do this in test code, with non leaving function? // fran
+ CleanupClosePushL(lmcats);
+ TRAPD(error, aLandmark.GetCategoriesL(lmcats));
+
+ if (error == KErrNone)
+ {
+ _LIT(KStart, "{");
+ _LIT(KStop, "}");
+ aPrint.Append(KStart);
+ for (TInt i=0; i<lmcats.Count(); i++)
+ {
+ info.Format(KIntInfo, lmcats[i]);
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+ aPrint.Append(KStop);
+ }
+ CleanupStack::PopAndDestroy(&lmcats);
+
+ TPtrC name;
+ aLandmark.GetLandmarkName(name);
+ aPrint.Append(name);
+ aPrint.Append(del);
+
+ TInt err;
+ _LIT(KRealInfo, "%f");
+ TReal32 coverageR;
+
+ err = aLandmark.GetCoverageRadius(coverageR);
+ if (!err)
+ {
+ info.Format(KRealInfo, coverageR);
+ aPrint.Append(info);
+ }
+
+ aPrint.Append(del);
+ TPtrC desc;
+ err = aLandmark.GetLandmarkDescription(desc);
+ if (!err)
+ {
+ aPrint.Append(desc);
+ }
+
+ aPrint.Append(del);
+
+ TPtrC iconName;
+ TInt iconIndex;
+ TInt iconMaskIndex;
+ err = aLandmark.GetIcon(iconName, iconIndex, iconMaskIndex);
+ if (!err)
+ {
+ aPrint.Append(iconName);
+ aPrint.Append(del);
+ info.Format(KIntInfo, iconIndex);
+ aPrint.Append(info);
+ }
+
+ aPrint.Append(del);
+ TPtrC street;
+ err = aLandmark.GetPositionField(EPositionFieldStreet, street);
+ if (!err)
+ {
+ aPrint.Append(street);
+ }
+
+ aPrint.Append(del);
+ TPtrC postalCode;
+ err = aLandmark.GetPositionField(EPositionFieldPostalCode, postalCode);
+ if (!err)
+ {
+ aPrint.Append(postalCode);
+ }
+
+ aPrint.Append(del);
+ TPtrC city;
+ err = aLandmark.GetPositionField(EPositionFieldCity, city);
+ if (!err)
+ {
+ aPrint.Append(city);
+ }
+
+ aPrint.Append(del);
+ TPtrC locationName;
+ err = aLandmark.GetPositionField(EPositionFieldLocationName, locationName);
+ if (!err)
+ {
+ aPrint.Append(locationName);
+ }
+
+ aPrint.Append(del);
+ TPtrC country;
+ err = aLandmark.GetPositionField(EPositionFieldCountry, country);
+ if (!err)
+ {
+ aPrint.Append(country);
+ }
+
+ aPrint.Append(del);
+ TPtrC mediaLink;
+ err = aLandmark.GetPositionField(EPositionFieldMediaLinksStart, mediaLink);
+ if (!err)
+ {
+ aPrint.Append(mediaLink);
+ }
+
+ aPrint.Append(del);
+ TUint16 tmp = (TUint16)EPositionFieldMediaLinksStart;
+ TPtrC mediaLink2;
+ err = aLandmark.GetPositionField(++tmp, mediaLink2);
+ if (!err)
+ {
+ aPrint.Append(mediaLink2);
+ }
+
+ aPrint.Append(del);
+ TLocality loc;
+ err = aLandmark.GetPosition(loc);
+ if (!err)
+ {
+ info.Format(KRealInfo, loc.Latitude());
+ aPrint.Append(info);
+ aPrint.Append(del);
+ info.Format(KRealInfo, loc.Longitude());
+ aPrint.Append(info);
+ aPrint.Append(del);
+ if (!Math::IsNaN(loc.HorizontalAccuracy()))
+ {
+ info.Format(KRealInfo, loc.HorizontalAccuracy());
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+ if (!Math::IsNaN(loc.VerticalAccuracy()))
+ {
+ info.Format(KRealInfo, loc.VerticalAccuracy());
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+ if (!Math::IsNaN(loc.Altitude()))
+ {
+ info.Format(KRealInfo, loc.Altitude());
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+ }
+
+
+ }
+
+TInt InternalLandmarksSortL(const CPosLandmark& aSource, const CPosLandmark& aTarget)
+ {
+ TPtrC sourceName, targetName;
+
+ User::LeaveIfError(aSource.GetLandmarkName(sourceName));
+ User::LeaveIfError(aTarget.GetLandmarkName(targetName));
+
+ return sourceName.CompareC(targetName);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::LandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::LandmarksSortL(RArray<TPosLmItemId>& aArray,
+ const TPosLmSortPref& aSortPref)
+ {
+ RPointerArray<CPosLandmark> landmarks;
+ CleanupClosePushL(landmarks);
+
+ for (TInt i=0; i<aArray.Count(); i++)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aArray[i]);
+ landmarks.Append(lm);
+ CleanupStack::Pop(lm);
+ }
+
+ TLinearOrder<CPosLandmark> order(InternalLandmarksSortL);
+ landmarks.Sort(order);
+
+ aArray.Reset();
+
+ if (aSortPref.SortOrder() == TPosLmSortPref::EAscending)
+ {
+ for (TInt j=0; j<landmarks.Count(); j++)
+ {
+ aArray.Append(landmarks[j]->LandmarkId());
+ }
+ }
+ else
+ {
+ for (TInt k=landmarks.Count()-1; k>=0; k--)
+ {
+ aArray.Append(landmarks[k]->LandmarkId());
+ }
+ }
+ landmarks.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&landmarks);
+ }
+
+
+// ---------------------------------------------------------
+// InternalCategorySortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt InternalCategorySortL(const CPosLandmarkCategory& aSource, const CPosLandmarkCategory& aTarget)
+ {
+ TPtrC sourceName, targetName;
+
+ User::LeaveIfError(aSource.GetCategoryName(sourceName));
+ User::LeaveIfError(aTarget.GetCategoryName(targetName));
+
+ return sourceName.CompareC(targetName);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CategoriesSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CategoriesSortL(RArray<TPosLmItemId>& aArray,
+ CPosLmCategoryManager::TCategorySortPref aSortPref)
+ {
+ RPointerArray<CPosLandmarkCategory> categories;
+ CleanupClosePushL(categories);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ for (TInt i=0; i<aArray.Count(); i++)
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(aArray[i]);
+ categories.Append(cat);
+ CleanupStack::Pop(cat);
+ }
+
+ TLinearOrder<CPosLandmarkCategory> order(InternalCategorySortL);
+ categories.Sort(order);
+
+ aArray.Reset();
+
+ if (aSortPref == CPosLmCategoryManager::ECategorySortOrderNameAscending)
+ {
+ for (TInt j=0; j<categories.Count(); j++)
+ {
+ aArray.Append(categories[j]->CategoryId());
+ }
+ }
+ else
+ {
+ for (TInt k=categories.Count()-1; k>=0; k--)
+ {
+ aArray.Append(categories[k]->CategoryId());
+ }
+ }
+ categories.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(&categories);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::LogToFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::LogToFileL(const TDesC& aFileName, TBuf8<KMsgBufSize> aMsg)
+ {
+ _LIT8(KEnd,"\r\n");
+
+ BaflUtils::EnsurePathExistsL( iFileSession, aFileName );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFileName, EFileWrite);
+ if ( err )
+ {
+ err = file.Create(iFileSession, aFileName, EFileWrite);
+ }
+
+ if ( !err )
+ {
+ TInt pos = 0;
+ file.Seek( ESeekEnd, pos );
+ file.Write( aMsg );
+ file.Write( KEnd );
+ }
+
+ file.Close();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RunAsyncOperationLD
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RunAsyncOperationLD(CPosLmOperation* aOperation)
+ {
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(iLog, iUseLogFromThreadIsDisabled);
+ CleanupStack::PushL(activeLmOperation);
+
+ activeLmOperation->Start(aOperation);
+
+ CActiveScheduler::Start();
+
+ activeLmOperation->CheckOperationL();
+ activeLmOperation->DeleteOperationD();
+
+ CleanupStack::PopAndDestroy(activeLmOperation);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RunAsyncOperationLD
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RunAsyncOperationL(
+ CPosLmOperation* aOperation)
+ {
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(iLog, iUseLogFromThreadIsDisabled);
+ CleanupStack::PushL(activeLmOperation);
+
+ activeLmOperation->Start(aOperation);
+
+ CActiveScheduler::Start();
+
+ activeLmOperation->CheckOperationL();
+
+ CleanupStack::PopAndDestroy(activeLmOperation);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RunAsyncOperationByWaitForReqL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RunAsyncOperationByWaitForReqL(
+ CPosLmOperation* aOperation)
+ {
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress = 0;
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ aOperation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ _LIT(KStatusError, "Executing CPosLmOperation by using User::WaitForRequest() failed with %d");
+ AssertTrueSecL(status.Int() == KErrNone, KStatusError, status.Int());
+
+ _LIT(KProgError, "Progress not 1.0 but %d when executing CPosLmOperation with User::WaitForRequest()");
+ AssertTrueSecL(progress == 1.0, KProgError, (TInt) (progress * 100));
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RunAsyncOperationAndCancelLD
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RunAsyncOperationAndCancelLD(CPosLmOperation* aOperation)
+ {
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(iLog, iUseLogFromThreadIsDisabled);
+ CleanupStack::PushL(activeLmOperation);
+
+ activeLmOperation->Start(aOperation);
+
+ activeLmOperation->DeleteOperationD();
+
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(activeLmOperation);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::RunAsyncOperationAndCancelInCallbackLD
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::RunAsyncOperationAndCancelInCallbackLD(
+ CPosLmOperation* aOperation,
+ TReal32 aThreshold)
+ {
+ if (aThreshold > 0)
+ {
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(
+ iLog, iUseLogFromThreadIsDisabled, aThreshold);
+ CleanupStack::PushL(activeLmOperation);
+
+ TCallBack callback(CancelTest, activeLmOperation);
+
+ CPeriodic* periodicTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ CleanupStack::PushL(periodicTimer);
+
+ periodicTimer->Start(1, 1, callback);
+
+ activeLmOperation->SetCancelTest();
+ activeLmOperation->Start(aOperation);
+
+ CActiveScheduler::Start();
+
+ periodicTimer->Cancel();
+
+ if (activeLmOperation->Operation())
+ {
+ // In case of no cancel
+ activeLmOperation->DeleteOperationD();
+ if (activeLmOperation->DeltaProgress() < 1 - aThreshold)
+ {
+ iLog->Log(_L("Test was never cancelled!"));
+ }
+ }
+
+ CleanupStack::PopAndDestroy(2, activeLmOperation);
+ }
+ else
+ {
+ // Cancel immediately
+ RunAsyncOperationAndCancelLD(aOperation);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::CancelTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CancelTest(TAny* aSelf)
+ {
+ CActiveLmOperation* activeLmOperation = static_cast<CActiveLmOperation*>(aSelf);
+
+ if (activeLmOperation->Progress() >= activeLmOperation->Threshold())
+ {
+ activeLmOperation->DeleteOperationD();
+ }
+
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::DeleteFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::DeleteFileL(const TDesC& aFile)
+ {
+ TInt err = iFileSession.Delete(aFile);
+
+ TBuf<512> buf;
+
+ if (err == KErrNone)
+ {
+ _LIT(KDebugText, "DeleteFileL: Specified file '%S' has been deleted");
+ buf.Format(KDebugText, &aFile, err);
+ iLog->Log(buf);
+ }
+ else
+ {
+ _LIT(KErrText, "DeleteFileL: Specified file '%S' could not be deleted, error %d");
+ buf.Format(KErrText, &aFile, err);
+ iLog->Log(buf);
+ switch ( err )
+ {
+ case KErrNotFound:
+ case KErrPathNotFound:
+ break;
+ default:
+ User::Leave(err);
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::ServerAliveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::MakeSurePanicDebugFileExistsL()
+ {
+ _LIT(KFileName, "c:\\system\\bootdata\\ErrRd");
+ _LIT(KFilePath, "c:\\system\\bootdata\\");
+
+ TInt res = iFileSession.MkDirAll(KFilePath);
+ if (res != KErrAlreadyExists && res != KErrNone)
+ {
+ iLog->Log(_L("Problem creating directory c:\\system\\bootdata\\"));
+ User::Leave(res);
+ }
+
+ RFile panicDebugFile;
+ res = panicDebugFile.Create(iFileSession, KFileName, EFileRead);
+ CleanupClosePushL(panicDebugFile);
+
+ if (res != KErrAlreadyExists && res != KErrNone)
+ {
+ iLog->Log(_L("Problem creating file c:\\system\\bootdata\\ErrRd"));
+ User::Leave(res);
+ }
+
+ CleanupStack::PopAndDestroy(&panicDebugFile);
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::ServerAliveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CLandmarkTestProcedureBase::ServerAlive(const TDesC& aServerName)
+ {
+ TFindServer find(aServerName);
+ TFullName name;
+ if (find.Next(name) == KErrNone) // server found
+ {
+ TBuf<100> buf;
+ buf.Append(_L("Found server: "));
+ buf.Append(name);
+ iLog->Log(buf);
+ return ETrue;
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::ListLandmarkDbsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CDesCArray* CLandmarkTestProcedureBase::ListLandmarkDbsL()
+ {
+ CPosLmDatabaseManager* dbman = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbman);
+ CDesCArray* dbs = dbman->ListDatabasesLC();
+ CleanupStack::Pop(dbs);
+ CleanupStack::PopAndDestroy(dbman);
+ return dbs;
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmOperation::CActiveLmOperation
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CActiveLmOperation::CActiveLmOperation(
+ CStifLogger* aLog,
+ TBool aUseLogFromThreadIsDisabled,
+ TReal32 aThreshold)
+: CActive(EPriorityNormal),
+ iThreshold(aThreshold),
+ iUseLogFromThreadIsDisabled(aUseLogFromThreadIsDisabled),
+ iLog(aLog)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+
+// Destructor
+CActiveLmOperation::~CActiveLmOperation()
+ {
+ Cancel();
+
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmOperation::Start(
+ CPosLmOperation* aOperation,
+ MProgressObserver* aObserver)
+ {
+ iOperation = aOperation;
+ iObserver = aObserver;
+
+ TTime start, stop;
+ start.UniversalTime();
+ iOperation->NextStep(iStatus, iPassedProgress);
+ stop.UniversalTime();
+
+ TInt64 usec = (stop.Int64() - start.Int64());
+
+ TBuf8<KMsgBufSize> msg;
+ _LIT8(KTrace, "First next step took %d µs");
+ msg.Format(KTrace, usec);
+ // Dont log if used from different threads
+ // ex TP30,TP31
+ // Log if step took more than 0.1 seconds
+ if (!iUseLogFromThreadIsDisabled && usec > KFirstNextStepLogLimit)
+ {
+ iLog->Log(msg);
+ }
+
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmOperation::RunL()
+ {
+ if (iPassedProgress < iLastProgress)
+ {
+ iAsyncProgressErr = ETrue;
+ }
+
+ iDeltaProgress = iPassedProgress - iLastProgress;
+ iLastProgress = iPassedProgress;
+ if (iObserver)
+ {
+ iObserver->NotifyProgress(iPassedProgress);
+ }
+
+ if (iStatus == KPosLmOperationNotComplete && iOperation)
+ {
+ if (iLastProgress == 1.0)
+ {
+ iPassedProgressErr = ETrue;
+ }
+
+ iOperation->NextStep(iStatus, iPassedProgress);
+
+ if (iCancelTest)
+ {
+ User::After(1);
+ }
+
+ SetActive();
+ }
+ else
+ {
+ if (iStatus == KErrNone && iPassedProgress != 1.0)
+ {
+ iPassedProgressErr = ETrue;
+ }
+
+ iLastProgress = 0;
+ CActiveScheduler::Stop();
+ }
+
+
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmOperation::DoCancel()
+ {
+
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::CheckOperationL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmOperation::CheckOperationL()
+ {
+ _LIT(KAsyncStatusErr, "Status incorrect in RunL = %d");
+ _LIT(KAsyncProgressErr, "Progress not updated in RunL");
+ _LIT(KPassedProgressErr, "Passed Progress is not updated correctly in RunL");
+
+ if (iAsyncProgressErr)
+ {
+ iLog->Log(KAsyncProgressErr);
+ User::Leave(KErrGeneral);
+ }
+
+ if (iPassedProgressErr)
+ {
+ iLog->Log(KPassedProgressErr);
+ User::Leave(KErrGeneral);
+ }
+
+ if (iStatus != KErrNone)
+ {
+ if (!iUseLogFromThreadIsDisabled)
+ {
+ TBuf<100> info;
+ info.Format(KAsyncStatusErr, iStatus.Int());
+ iLog->Log(info);
+ }
+ User::Leave(iStatus.Int());
+ }
+
+ iAsyncProgressErr = iPassedProgressErr = EFalse;
+
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DeleteOperationD
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CActiveLmOperation::DeleteOperationD()
+ {
+ delete iOperation;
+ iOperation = NULL;
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::Status
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CActiveLmOperation::Status() const
+ {
+ return iStatus.Int();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::Progress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal CActiveLmOperation::Progress() const
+ {
+ return iLastProgress;
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::Operation
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+CPosLmOperation* CActiveLmOperation::Operation()
+ {
+ return iOperation;
+ }
+
+//---------------------------------------------------------
+// CActiveLmOperation::SetCancelTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmOperation::SetCancelTest()
+ {
+ iCancelTest = ETrue;
+ }
+
+//---------------------------------------------------------
+// CActiveLmOperation::Threshold
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal32 CActiveLmOperation::Threshold()
+ {
+ return iThreshold;
+ }
+
+//---------------------------------------------------------
+// CActiveLmOperation::DeltaProgress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal32 CActiveLmOperation::DeltaProgress()
+ {
+ return iDeltaProgress;
+ }
+
+// <---------------- inner class COnTheFlyTester (utility class for testing multiDbSearch) ---------------->
+
+// Constructor
+CLandmarkTestProcedureBase::COnTheFlyTester::COnTheFlyTester() : CActive(CActive::EPriorityStandard)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Desctructor
+CLandmarkTestProcedureBase::COnTheFlyTester::~COnTheFlyTester()
+ {
+ delete iDisplayData;
+ delete iOperation;
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::COnTheFlyTester::NewLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CLandmarkTestProcedureBase::COnTheFlyTester* CLandmarkTestProcedureBase::COnTheFlyTester::NewLC()
+ {
+ CLandmarkTestProcedureBase::COnTheFlyTester* self = new (ELeave) CLandmarkTestProcedureBase::COnTheFlyTester;
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::COnTheFlyTester::StartSearchCampaignL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::COnTheFlyTester::StartSearchCampaignL(
+ CPosLmMultiDbSearch* aSearcher,
+ const RIdArray& aExpectedMatches,
+ CPosLmSearchCriteria* aSearchCriteria)
+ {
+ iSearcher = aSearcher;
+ iExpectedMatches = &aExpectedMatches;
+
+ // Set DisplayData
+ delete iDisplayData;
+ iDisplayData = NULL;
+ iDisplayData = CPosLmDisplayData::NewL();
+ CPosLmPartialReadParameters* partialReadParams = CPosLmPartialReadParameters::NewLC();
+ partialReadParams->SetRequestedAttributes(CPosLandmark::ELandmarkName);
+ iDisplayData->SetPartialReadParametersL(*partialReadParams);
+ iSearcher->SetDisplayData(*iDisplayData);
+ CleanupStack::PopAndDestroy(partialReadParams);
+
+ // Start search
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ delete iOperation;
+ iOperation = NULL;
+ iOperation = iSearcher->StartLandmarkSearchL(*aSearchCriteria, sortPref);
+ iOperation->NextStep(iStatus, iProgress);
+ SetActive();
+
+ CActiveScheduler::Start();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::COnTheFlyTester::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::COnTheFlyTester::RunL()
+ {
+ iErr = iStatus.Int();
+ switch (iErr)
+ {
+ case KPosLmOperationNotComplete:
+ VerifyOnTheFlyDataL();
+ iOperation->NextStep(iStatus, iProgress);
+ SetActive();
+ break;
+
+ case KErrNone:
+ VerifyOnTheFlyDataL(ETrue);
+ CActiveScheduler::Stop();
+ break;
+
+ default:
+ User::Leave(iErr);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::COnTheFlyTester::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::COnTheFlyTester::DoCancel()
+ {
+ delete iOperation;
+ iOperation = NULL;
+ CActiveScheduler::Stop();
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::COnTheFlyTester::RunError
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::COnTheFlyTester::RunError(TInt aError)
+ {
+ iErr = aError;
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::COnTheFlyTester::VerifyOnTheFlyDataL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::COnTheFlyTester::VerifyOnTheFlyDataL(TBool aIsFinished)
+ {
+ // No errors should have occurred
+ if (iSearcher->NumOfSearchErrors() != 0)
+ {
+ iBuf = _L("iSearcher->NumOfSearchErrors() != 0");
+ User::Leave(KErrGeneral);
+ }
+
+ // Verify that number of found matches does not decrease
+ TInt nrOfItems = iDisplayData->Count();
+ if (nrOfItems < iNrOfOldItems)
+ {
+ iBuf = _L("nrOfItems < iNrOfOldItems");
+ User::Leave(KErrGeneral);
+ }
+ iNrOfOldItems = nrOfItems;
+
+ // Verify sort order
+ for (TInt i = 0; i < nrOfItems; i++)
+ {
+ CPosLmDisplayItem& displayItem = iDisplayData->DisplayItem(i);
+ if (displayItem.DisplayItemType() != CPosLmDisplayItem::ELandmarkItem)
+ {
+ iBuf = _L("Wrong displayItemType");
+ User::Leave(KErrGeneral);
+ }
+ if (i < nrOfItems - 1)
+ {
+ TPtrC name1, name2;
+ displayItem.Landmark().GetLandmarkName(name1);
+ iDisplayData->DisplayItem(i + 1).Landmark().GetLandmarkName(name2);
+ if (name1.CompareC(name2) > 0)
+ {
+ iBuf.Format(_L("%S is greater than %S"), &name1, &name2);
+ User::Leave(KErrGeneral);
+ }
+ }
+ }
+
+ // When completed, the expected number of matches should have been found
+ if (aIsFinished)
+ {
+ TInt totNrOfMatches = iSearcher->TotalNumOfMatches();
+ TInt expectedNrOfHits = iExpectedMatches->Count();
+ if (totNrOfMatches != expectedNrOfHits)
+ {
+ iBuf.Format(_L("Wrong number of landmarks returned when searching for landmarks, found: %d expected %d"), totNrOfMatches, expectedNrOfHits);
+ User::Leave(KErrGeneral);
+ }
+ for (TInt i = 0; i < expectedNrOfHits; i++)
+ {
+ TInt found = iExpectedMatches->Find(iDisplayData->DisplayItem(i).Landmark().LandmarkId());
+ if (found == KErrNotFound)
+ {
+ iBuf.Format(_L("Non-qualified landmark was found"));
+ User::Leave(KErrNotFound);
+ }
+ TPtrC name;
+ iDisplayData->DisplayItem(i).Landmark().GetLandmarkName(name);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::ReadGlobalCategoriesFromResourceL(
+ RArray<TUint>& aCatIds,
+ RPointerArray<HBufC>& aCatNames,
+ TInt aMaxNum )
+ {
+ _LIT(KGlobalCategoryResourceFile, "z:\\Resource\\eposlmglobalcategories.rsc");
+ const TInt KPosLmGlCatResourceOffset = 1;
+
+ TFileName filename(KGlobalCategoryResourceFile);
+ BaflUtils::NearestLanguageFile( iFileSession, filename );
+
+ CResourceFile* resFile = CResourceFile::NewLC( iFileSession, filename, 0, 0 );
+
+ RResourceReader reader;
+ reader.OpenLC( resFile, KPosLmGlCatResourceOffset );
+
+ // Read the size of the icon path array.
+ TInt size = reader.ReadInt8L();
+
+ // read icon paths
+ for (TInt i = 0; i < size; i++)
+ {
+ HBufC* path = reader.ReadHBufCL();
+ delete path;
+ }
+
+ // read category data
+ size = reader.ReadInt16L();
+ if ( aMaxNum > 0 )
+ {
+ size = Min( size, aMaxNum );
+ }
+
+ for (TInt i = 0; i < size; i++)
+ {
+ TInt id = reader.ReadUint32L();
+ aCatIds.Append( id );
+ HBufC* name = reader.ReadHBufCL();
+ aCatNames.Append( name );
+
+ //iLog->Log(_L("Localized category: id: %d, name: '%S'"), id, name);
+
+ reader.ReadInt32L();
+ reader.ReadInt32L();
+ reader.ReadInt8L();
+ }
+ CleanupStack::PopAndDestroy( &reader );
+ CleanupStack::PopAndDestroy( resFile );
+ }
+
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::ResetAndDestroyHBufCArray( TAny* aPointer )
+ {
+ RPointerArray<HBufC>* array = ( RPointerArray<HBufC>* ) aPointer;
+ array->ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::CreateCorrectXmlFileL( const TDesC& aSampleFile, TFileName& aFileName )
+ {
+ _LIT( KTargetFolder, "c:\\documents\\" );
+ _LIT( KNewFileSuffix, ".localized" );
+
+ iLog->Log(_L("Making localized XML file out of '%S'"), &aSampleFile );
+
+ RFileReadStream source;
+ TInt err = source.Open( iFileSession, aSampleFile, EFileRead );
+ if ( err )
+ {
+ iLog->Log(_L("Failed to open source file '%S', err %d"), &aSampleFile, err );
+ User::Leave( err );
+ }
+ CleanupClosePushL( source );
+
+ TParse parse;
+ parse.Set( aSampleFile, 0, 0 );
+ aFileName = KTargetFolder;
+ aFileName.Append( parse.Name() );
+ aFileName.Append( KNewFileSuffix );
+ aFileName.Append( parse.Ext() );
+
+ RFile target;
+ err = target.Replace( iFileSession, aFileName, EFileRead );
+ if ( err )
+ {
+ iLog->Log(_L("Failed to create target file '%S', err %d"), &aFileName, err );
+ User::Leave( err );
+ }
+ CleanupClosePushL( target );
+
+ // Replace Global Category macros with correct strings
+
+ RArray<TUint> globalIds;
+ RPointerArray<HBufC> names;
+ CleanupStack::PushL( TCleanupItem( CLandmarkTestProcedureBase::ResetAndDestroyHBufCArray, &names ) );
+ ReadGlobalCategoriesFromResourceL( globalIds, names );
+
+ const TChar KIdStart = '{';
+ const TChar KIdEnd = '}';
+ //category name length should be <= 124
+ _LIT( KGlobalCategoryMacro, "__GLOBAL_CAT_{" );
+
+ TBuf8<1024> line8;
+ while ( !err )
+ {
+ TRAP( err, source.ReadL( line8, TChar('\n') ) );
+ if ( !err )
+ {
+ HBufC* line16 = CnvUtfConverter::ConvertToUnicodeFromUtf8L( line8 );
+ CleanupStack::PushL( line16 );
+ TPtr line( line16->Des() );
+
+ TInt macroStart = line.Find( KGlobalCategoryMacro );
+ if ( macroStart != KErrNotFound )
+ {
+ // find global categoryid in the macro
+ TInt idStart = line.Locate( KIdStart );
+ TInt idEnd = line.Locate( KIdEnd );
+
+ TLex idStr( line.Mid( idStart + 1, idEnd - idStart - 1 ) );
+
+ TUint globalId = 0;
+ idStr.Val( globalId );
+
+ // find localized string for the category
+ TInt idIndex = globalIds.Find( globalId );
+
+ // put it to the file instead of macro
+ if ( idIndex >= 0 )
+ {
+ HBufC* des = EscapeStringToXmlLC(*(names[idIndex]));
+
+
+ if(des->Length() > (idEnd - macroStart + 1))
+ {
+ TInt diffrence = des->Length() - (idEnd - macroStart + 1);
+ HBufC* diffStr = HBufC::NewLC(diffrence * 2);
+ TPtr ptr(diffStr->Des());
+ TInt i=0;
+ for(i=0; i<diffrence; i++)
+ {
+ ptr.Append(' ');
+ }
+ line16->ReAllocL(line.MaxLength() + i);
+ TPtr newPtr(line16->Des());
+ newPtr.Insert(idEnd, ptr);
+ newPtr.Replace( macroStart, (idEnd + i) - macroStart + 1, des->Des() );
+ HBufC8* newLine8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( newPtr );
+ target.Write( *newLine8 );
+ delete newLine8;
+ CleanupStack::PopAndDestroy( diffStr );
+ }
+ else
+ {
+ line.Replace( macroStart, idEnd - macroStart + 1, des->Des() );
+ HBufC8* newLine8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( line );
+ target.Write( *newLine8 );
+ delete newLine8;
+ }
+ CleanupStack::PopAndDestroy(des);
+ }
+
+
+ }
+ else
+ {
+ target.Write( line8 );
+ }
+
+ CleanupStack::PopAndDestroy( line16 );
+ }
+ else
+ {
+ iLog->Log(_L("Stopped reading from '%S' with code %d"), &aSampleFile, err );
+ }
+ }
+
+ target.Flush();
+ CleanupStack::PopAndDestroy(); // names
+ CleanupStack::PopAndDestroy( &target );
+ CleanupStack::PopAndDestroy( &source );
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+HBufC* CLandmarkTestProcedureBase::GetGlobalCategoryFromResourceLC( TPosLmGlobalCategory aGlobalId )
+ {
+ HBufC* name = NULL;
+ RArray<TUint> catIds;
+ RPointerArray<HBufC> catNames;
+
+ CleanupClosePushL( catIds );
+ CleanupStack::PushL( TCleanupItem( ResetAndDestroyHBufCArray, &catNames ));
+
+ ReadGlobalCategoriesFromResourceL( catIds, catNames );
+ TInt idIndex = catIds.Find( aGlobalId );
+ if ( idIndex >= 0 )
+ {
+ name = catNames[idIndex];
+ catNames.Remove( idIndex );
+ }
+ else
+ {
+ iLog->Log(_L("Global category %d not found"), aGlobalId );
+ User::Leave( KErrNotFound );
+ }
+ CleanupStack::PopAndDestroy(); //catNames
+ CleanupStack::PopAndDestroy( &catIds );
+
+ CleanupStack::PushL( name );
+ return name;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+HBufC* CLandmarkTestProcedureBase::ReadDefaultDatabaseNameFromResourceLC()
+ {
+ _LIT(KDatabaseNameResourceFile, "z:\\resource\\eposlmdefaultdbname.rsc");
+ const TInt KNameResourceOffset = 2;
+
+ TFileName filename( KDatabaseNameResourceFile );
+ BaflUtils::NearestLanguageFile( iFileSession, filename );
+
+ CResourceFile* resFile = CResourceFile::NewLC( iFileSession, filename, 0, 0 );
+
+ RResourceReader reader;
+ reader.OpenLC( resFile, KNameResourceOffset );
+
+ HBufC* name = reader.ReadHBufCL();
+
+ CleanupStack::PopAndDestroy( &reader );
+ CleanupStack::PopAndDestroy( resFile );
+
+ CleanupStack::PushL( name );
+ return name;
+ }
+
+// -----------------------------------------------------------------------------
+// PosLmConverterUtils::EscapeStringToXmlLC
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+HBufC* CLandmarkTestProcedureBase::EscapeStringToXmlLC(
+ const TDesC& aStrToEscape)
+ {
+ HBufC* string = HBufC::NewLC(CalculateEscapedStringSize(aStrToEscape));
+ string->Des().Copy(aStrToEscape);
+
+ // Must start with &, because when escaping other characters & will be
+ // added to the string.
+ TPtr ptr = string->Des();
+ EscapeString(ptr, KAmp, KAmpXmlStr);
+ EscapeString(ptr, KLt, KLtXmlStr);
+ EscapeString(ptr, KGt, KGtXmlStr);
+ EscapeString(ptr, KApos, KAposXmlStr);
+ EscapeString(ptr, KQuot, KQuotXmlStr);
+
+ return string;
+ }
+
+ // -----------------------------------------------------------------------------
+// PosLmConverterUtils::EscapeString
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLandmarkTestProcedureBase::EscapeString(
+ TDes& aStrToEscape,
+ const TDesC& aFromStr,
+ const TDesC& aToStr)
+ {
+ TPtrC ptr(aStrToEscape);
+ TInt lastPos = 0;
+
+ // Find first occurence of the escape string.
+ TInt pos = ptr.Find(aFromStr);
+
+ while (pos != KErrNotFound)
+ {
+ aStrToEscape.Replace(pos+lastPos, aFromStr.Length(), aToStr);
+
+ // Move ptr forward past the inserted aToStr in aStrToEscape
+ pos += aToStr.Length();
+ lastPos += pos;
+ ptr.Set(aStrToEscape.Right(aStrToEscape.Length() - lastPos));
+
+ // Find next occurence of the escape string.
+ pos = ptr.Find(aFromStr);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// PosLmConverterUtils::CalculateEscapedStringSize
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CalculateEscapedStringSize(
+ const TDesC& aStrToEscape)
+ {
+ return aStrToEscape.Length() +
+ CalculateIncrease(aStrToEscape, KAmp, KAmpXmlStr) +
+ CalculateIncrease(aStrToEscape, KLt, KLtXmlStr) +
+ CalculateIncrease(aStrToEscape, KGt, KGtXmlStr) +
+ CalculateIncrease(aStrToEscape, KApos, KAposXmlStr) +
+ CalculateIncrease(aStrToEscape, KQuot, KQuotXmlStr);
+ }
+
+// -----------------------------------------------------------------------------
+// PosLmConverterUtils::CalculateIncrease
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CLandmarkTestProcedureBase::CalculateIncrease(
+ const TDesC& aStrToEscape,
+ const TDesC& aFromStr,
+ const TDesC& aToStr)
+ {
+ TPtrC ptr(aStrToEscape);
+ TInt occurrences = 0;
+
+ // Find first occurence of the escape string.
+ TInt pos = ptr.Find(aFromStr);
+
+ while (pos != KErrNotFound)
+ {
+ ++occurrences;
+
+ // Move ptr forward past the found occurence.
+ ptr.Set(ptr.Right(ptr.Length() - (pos + aFromStr.Length())));
+
+ // Find next occurence of the escaped string.
+ pos = ptr.Find(aFromStr);
+ }
+
+ // Return the increased (or decreased) size impact on the string to escape.
+ return occurrences*(aToStr.Length() - aFromStr.Length());
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP26.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,271 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp26.h"
+
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp26::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp26::CloseTest()
+ {
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp26::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp26::StartL()
+ {
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ AppendSearchResultsL();
+
+ iLog->Log(_L("DoLandmarkSearchL(iSearchResults);"));
+ DoLandmarkSearchL(iSearchResults);
+
+ AppendCategorySearchResultsL();
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ iLog->Log(_L("DoLandmarkCategorySearchL(iCategorySearchResults);"));
+ DoLandmarkCategorySearchL(iCategorySearchResults);
+ }
+
+// ---------------------------------------------------------
+// CPosTp26::DoLandmarkCategorySearch
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp26::DoLandmarkCategorySearchL(const RPointerArray<CCategorySearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+ _LIT(KWrongIdErr, "Wrong id returned from iterator after reset");
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ // Use wildcard * as search pattern
+ nameCriteria->SetSearchPatternL(aSearchResults[0]->TextCriteria());
+
+ ExecuteAndDeleteLD(iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if ((TUint)(aSearchResults[0]->SearchResult()).Count() != iLandmarkSearch->NumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[0]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Name criteria: "));
+ iLog->Log(nameCriteria->SearchPattern());
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ // Get the first category in list, id1
+ TPosLmItemId id1 = iter->NextL();
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(id1);
+ TPtrC name;
+ cat->GetCategoryName(name);
+ iLog->Log(_L("First time"));
+ iLog->Log(name);
+ CleanupStack::PopAndDestroy(cat);
+
+ //Reset iterator and make sure that id1 is returned again
+ iter->Reset();
+ TPosLmItemId id11 = iter->NextL();
+ AssertTrueSecL(id1 == id11, KWrongIdErr);
+
+ iLog->Log(_L("******************"));
+ // Iterate through whole iterator
+ while (id11 != KPosLmNullItemId)
+ {
+ AssertTrueSecL(aSearchResults[0]->FindSearchResult(id11), KNotFoundErr, id11);
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(id11);
+ TPtrC name;
+ cat->GetCategoryName(name);
+ iLog->Log(name);
+ CleanupStack::PopAndDestroy(cat);
+ id11 = iter->NextL();
+ }
+ iLog->Log(_L("******************"));
+ RArray<TPosLmItemId> lmIdArray;
+ CleanupClosePushL(lmIdArray);
+
+ // Get a sequence of items from the iterated set
+ // lmIdArray should be reset in GetItemIdsL
+ // Use some magic numbers here, check landmarksDb.xls for more info
+ iter->GetItemIdsL(lmIdArray, 5, 10);
+ TInt nr = lmIdArray.Count();
+ for (TInt j=0;j<nr; j++)
+ {
+ AssertTrueSecL(aSearchResults[0]->FindSearchResult(lmIdArray[j]), KNotFoundErr);
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(lmIdArray[j]);
+ TPtrC name;
+ cat->GetCategoryName(name);
+ iLog->Log(name);
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&lmIdArray);
+ CleanupStack::PopAndDestroy(2, nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp26::DoLandmarkSearch
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp26::DoLandmarkSearchL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ iLog->Log(_L("DoLandmarkSearch()"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed asyncronously");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed asyncronously");
+ _LIT(KNumOfMatchesInIteratorErr, "Wrong number of matches in iterator");
+ _LIT(KWrongIdErr, "Wrong id returned from iterator after reset");
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ TBuf<150> buf;
+ _LIT(KDebug, "Searching for ");
+
+ // Put this RArray outside loop so that if reset of the array is missing in the code
+ // it will be noticed
+ RArray<TPosLmItemId> lmIdArray;
+ CleanupClosePushL(lmIdArray);
+
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[i]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[i]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[i]->PositionFields());
+
+ buf.Zero();
+ buf.Append(KDebug);
+ buf.Append(aSearchResults[i]->TextCriteria());
+ iLog->Log(buf);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, aSearchResults[i]->Redefined());
+ RunAsyncOperationLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ buf.Zero();
+ buf.Format(_L("Found %d nr of matches, should found %d nr of matches"), iLandmarkSearch->NumOfMatches(), (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(buf);
+ TUint nrOfMatches = iLandmarkSearch->NumOfMatches();
+ AssertTrueSecL((TUint)(aSearchResults[i]->SearchResult()).Count() == nrOfMatches, KNumOfMatchesErr);
+
+ TPosLmItemId id1 = iter->NextL();
+ TPosLmItemId id = KPosLmNullItemId;
+ if (id1 != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id1);
+ CleanupStack::PopAndDestroy(lm);
+ // Reset the iterator and make sure that the first id is returned again
+ iter->Reset();
+ id = iter->NextL();
+ }
+
+ AssertTrueSecL(id1 == id, KWrongIdErr);
+ TUint counter=0;
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr);
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id);
+ CleanupStack::PopAndDestroy(lm);
+ id = iter->NextL();
+ counter++;
+ }
+ TUint nrInIterator = iter->NumOfItemsL();
+ if (nrOfMatches != counter || nrOfMatches != nrInIterator)
+ {
+
+ iLog->Log(KNumOfMatchesInIteratorErr);
+ User::Leave(-1);
+ }
+
+ // Get a sequence of items and check ids
+ TInt startIndex = 0;
+ // Just to get some different starting index depending on nr of ids
+ if (nrOfMatches>2) startIndex = 2;
+ if (nrOfMatches>5) startIndex = 5;
+ if (nrOfMatches>20) startIndex = 20;
+
+ // Do this if there are some matches
+ if (nrOfMatches-startIndex>0)
+ {
+ buf.Zero();
+ buf.Format(_L("GetItemIdsL from index %d nr of items index %d"), startIndex, nrOfMatches-startIndex);
+ iLog->Log(buf);
+ // lmIdArray should be reset in GetItemIdsL
+ iter->GetItemIdsL(lmIdArray, startIndex, nrOfMatches-startIndex);
+
+ TInt nr = lmIdArray.Count();
+ for (TInt j=0;j<nr; j++)
+ {
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(lmIdArray[j]), KNotFoundErr);
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(lmIdArray[j]);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(2, textCriteria);
+ } // end for
+ CleanupStack::PopAndDestroy(&lmIdArray);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP27.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,368 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp27.h"
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp27::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp27::CloseTest()
+ {
+ delete iPeriodicTimer;
+ iPeriodicTimer = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp27::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp27::StartL()
+ {
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ CPosLmOperation* op = iDatabase->InitializeL();
+ delete op;
+ }
+
+ CancelLandmarkCategorySearch();
+
+ CancelLandmarkSearch();
+
+ AssertTrueSecL(iGlobalErr != KErrNone, _L("Errors found in TP27"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp27::CancelLandmarkCategorySearch
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp27::CancelLandmarkCategorySearch()
+ {
+ iLog->Log(_L("CancelLandmarkCategorySearch"));
+ CPosLmCatNameCriteria* searchCriteria = CPosLmCatNameCriteria::NewLC();
+
+ // Use name specified in test landmarksdb
+ searchCriteria->SetSearchPatternL(_L("Taxi"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase, this);
+ // Get maximum number of search attempts
+ iLandmarkSearch->StartCategorySearchL(*searchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ iHandleOperationDisabled = EFalse;
+ iActiveSchedulerWait->Start();
+ iHandleOperationDisabled = ETrue;
+ // Get the maximum of needed search rounds until search is complete
+ TInt MaxNrOfSearchRounds = iNrSearchRounds;
+
+ // First test to cancel the search before it even has started
+ // use the callback StopActiveSchedulerWait to stop the active scheduler
+ // just to make sure that no HandleOperationProgress take place
+ iNrSearchRounds = 0;
+ iLandmarkSearch->StartCategorySearchL(*searchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+ iLandmarkSearch->Cancel();
+
+ TCallBack callback(StopActiveSchedulerWait, this);
+ iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityStandard);
+ TTimeIntervalMicroSeconds32 stopTime = TTimeIntervalMicroSeconds32(4000000); // 4 sec
+ iPeriodicTimer->Start(stopTime, stopTime, callback);
+ iHandleOperationDisabled = ETrue;
+ iActiveSchedulerWait->Start();
+
+ delete iPeriodicTimer;
+ iPeriodicTimer = NULL;
+
+ iLog->Log(_L("Starting"));
+ TInt i=0;
+ for (i=0; i<=MaxNrOfSearchRounds; i++)
+ {
+ iNrSearchRounds = 0;
+ iBreakSearch = i;
+ // Set to 100 so that it differs from progress the first time
+ iProgress=100;
+ iLog->Log(_L("StartCategorySearchL->"));
+ iLandmarkSearch->StartCategorySearchL(*searchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+ iHandleOperationDisabled = EFalse;
+ iActiveSchedulerWait->Start();
+
+ iLog->Log(_L("After iActiveSchedulerWait->Start() inside for loop"));
+ iHandleOperationDisabled = ETrue;
+
+ // Check if anything was found
+ CPosLmItemIterator* iterator = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iterator);
+
+ TInt numOfItems = 0;
+ numOfItems = iLandmarkSearch->NumOfMatches();
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ if (numOfItems != 0)
+ {
+ iLog->Log(_L("Found something"));
+ // Maybe we should check this item
+ iterator->GetItemIdsL(ids, 0, numOfItems);
+ }
+
+ CleanupStack::PopAndDestroy(&ids);
+ CleanupStack::PopAndDestroy(iterator);
+ }
+
+ iNrSearchRounds=0;
+ iBreakSearch = -1;
+ iCancelOrDelete = ETrue;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("This time, delete the search object to cancel the search"));
+ for (i=0; i<=MaxNrOfSearchRounds; i++)
+ {
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase, this);
+ // Set to 100 so that it differs from progress the first time
+ iProgress=100;
+ iNrSearchRounds = 0;
+ iBreakSearch = i;
+ iLog->Log(_L("StartCategorySearchL2->"));
+ iLandmarkSearch->StartCategorySearchL(*searchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+ iHandleOperationDisabled = EFalse;
+ iActiveSchedulerWait->Start();
+ iHandleOperationDisabled = ETrue;
+ iLog->Log(_L("After iActiveSchedulerWait->Start() inside for loop"));
+ }
+ iHandleOperationDisabled = EFalse;
+ CleanupStack::PopAndDestroy(searchCriteria);
+
+ iCancelOrDelete = EFalse;
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp27::CancelLandmarkSearch
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp27::CancelLandmarkSearch()
+ {
+ iLog->Log(_L("CancelLandmarkSearch"));
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ textCriteria->SetAttributesToSearch(attr);
+ // Use name specified in test landmarksdb
+ textCriteria->SetTextL(_L("enator"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase, this);
+ iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ iHandleOperationDisabled = EFalse;
+ iActiveSchedulerWait->Start();
+ iHandleOperationDisabled = ETrue;
+
+ // Get the maximum of needed search rounds until search is complete
+ TInt MaxNrOfSearchRounds = iNrSearchRounds;
+
+ // First test to cancel the search before it even has started
+ // use the callback StopActiveSchedulerWait to stop the active scheduler
+ // just to make sure that no HandleOperationProgress take place
+ iNrSearchRounds = 0;
+ iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ iLandmarkSearch->Cancel();
+
+ TCallBack callback(StopActiveSchedulerWait, this);
+ iPeriodicTimer = CPeriodic::NewL(CActive::EPriorityStandard);
+ TTimeIntervalMicroSeconds32 stopTime = TTimeIntervalMicroSeconds32(4000000); // 4 sec
+ iPeriodicTimer->Start(stopTime, stopTime, callback);
+ iHandleOperationDisabled = ETrue;
+ iActiveSchedulerWait->Start();
+
+ delete iPeriodicTimer;
+ iPeriodicTimer = NULL;
+
+ iLog->Log(_L("Starting"));
+ TInt i=0;
+ for (i=0; i<=MaxNrOfSearchRounds; i++)
+ {
+ iNrSearchRounds = 0;
+ iBreakSearch = i;
+ // Set to 100 so that it differs from progress the first time
+ iProgress=100;
+ iLog->Log(_L("StartLandmarkSearchL->"));
+ iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ iHandleOperationDisabled = EFalse;
+ iActiveSchedulerWait->Start();
+
+ iLog->Log(_L("After iActiveSchedulerWait->Start() inside for loop"));
+ iHandleOperationDisabled = ETrue;
+
+ // Check if anything was found
+ CPosLmItemIterator* iterator = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iterator);
+
+ TInt numOfItems = 0;
+ numOfItems = iLandmarkSearch->NumOfMatches();
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ if (numOfItems != 0)
+ {
+ iLog->Log(_L("Found something"));
+ iterator->GetItemIdsL(ids, 0, numOfItems);
+ }
+
+ CleanupStack::PopAndDestroy(&ids);
+ CleanupStack::PopAndDestroy(iterator);
+ }
+
+ iNrSearchRounds=0;
+ iBreakSearch = -1;
+ iCancelOrDelete = ETrue;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("This time, delete the search object to cancel the search"));
+ for (i=0; i<=MaxNrOfSearchRounds; i++)
+ {
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase, this);
+ // Set to 100 so that it differs from progress the first time
+ iProgress=100;
+ iNrSearchRounds = 0;
+ iBreakSearch = i;
+ iLog->Log(_L("StartLandmarkSearchL2->"));
+ iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ iHandleOperationDisabled = EFalse;
+ iActiveSchedulerWait->Start();
+ iHandleOperationDisabled = ETrue;
+ iLog->Log(_L("After iActiveSchedulerWait->Start() inside for loop"));
+ }
+ iHandleOperationDisabled = EFalse;
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ iCancelOrDelete = EFalse;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp27::StopActiveSchedulerWait
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp27::StopActiveSchedulerWait(TAny* aSelf)
+ {
+ //do not forget to cancel the timer
+ CPosTp27* self = static_cast<CPosTp27*> (aSelf);
+ self->iPeriodicTimer->Cancel();
+ self->iActiveSchedulerWait->AsyncStop();
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPosTp27::HandleOperationProgress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp27::HandleOperationProgress(CPosLmOperation* aOperation)
+ {
+ //if (iDebug) iLog->Log(_L("HandleOperationProgress"));
+
+ // If no HandleOperationProgress should occur, eg no search is started
+ if (iHandleOperationDisabled)
+ {
+ iLog->Log(_L("ERROR: No HandleOperationProgress should occur"));
+ iGlobalErr++;
+ }
+ else
+ {
+ // If progress is 100%, always stop the search
+ // Check that progress is moving
+ TReal32 progress = aOperation->Progress();
+ if (iProgress == progress)
+ {
+ iLog->Log(_L("MyError:Progressindicator not moving"));
+ iGlobalErr++;
+ }
+ iProgress = progress;
+ TBuf<50> buf;
+ buf.Format(_L("****Progress %f"), progress);
+ if (iDebug) iLog->Log(buf);
+
+ // Not sure about this condition, is it ok to compare TReal32 like this
+ if (progress == 1)
+ {
+ if (iDebug) iLog->Log(_L("Stopping"));
+ iActiveSchedulerWait->AsyncStop();
+ return;
+ }
+
+ if (iNrSearchRounds == iBreakSearch)
+ {
+ if (!iCancelOrDelete)
+ {
+ if (iDebug) iLog->Log(_L("Cancelling"));
+ aOperation->Cancel();
+ iActiveSchedulerWait->AsyncStop();
+ if (aOperation->Status() != KErrCancel)
+ {
+ TBuf<50> buf;
+ buf.Format(_L("MyError: Wrong status, should be KErrCancel, but was %d"), aOperation->Status());
+ iLog->Log(buf);
+ iGlobalErr++;
+ }
+ }
+ else
+ {
+ if (iDebug) iLog->Log(_L("Cancel by deleting search object"));
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iActiveSchedulerWait->AsyncStop();
+ }
+ }
+ iNrSearchRounds++;
+ }
+ }
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP28.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,620 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp28.h"
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KMaxQueueSize = 5;
+_LIT(KTp28TestDb, "Tp28Test.ldb");
+_LIT(KTp28LmFullDefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP28TEST.LDB");
+
+// ---------------------------------------------------------
+// CPosTp28::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iCategoryManager;
+ iCategoryManager=NULL;
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::StartL()
+ {
+ // copy the test db to the private database path
+
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp28TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KTp28LmFullDefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp28TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KTp28TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ TRAPD( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL(err == KErrNone, _L("Init db failed"));
+ }
+
+
+
+ iActiveLmEvent = CActiveLmEvent::NewL(iLog);
+
+ LandmarkEventTest();
+
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KTp28TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+
+ iActiveLmEvent = CActiveLmEvent::NewL(iLog);
+
+ LandmarkEventQueueTest();
+
+ if (iActiveLmEvent->iGlobalErr != KErrNone)
+ {
+
+ iLog->Log(_L("Errors found in TP28"));
+ User::Leave(-1);
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::LandmarkEventTest()
+ {
+
+ iActiveLmEvent->Start();
+
+ /////////////////////////////////////////////
+ // Add three landmarks #1 #2 #3
+ /////////////////////////////////////////////
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Zu Hause"));
+ CPosLandmark* landmark2 = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Zu Hause jetzt"));
+ CPosLandmark* landmark3 = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Nicht Zu Hause"));
+
+ iActiveLmEvent->iLandmarkId = iDatabase->AddLandmarkL(*landmark);
+ iActiveLmEvent->iLandmarkId2 = iDatabase->AddLandmarkL(*landmark2);
+ iActiveLmEvent->iLandmarkId3 = iDatabase->AddLandmarkL(*landmark3);
+
+ CleanupStack::PopAndDestroy(landmark3);
+ CleanupStack::PopAndDestroy(landmark2);
+
+ /////////////////////////////////////////////
+ // Update landmark #4
+ /////////////////////////////////////////////
+ landmark->SetLandmarkNameL(_L("Nicht zu Hause"));
+ iDatabase->UpdateLandmarkL(*landmark);
+
+ /////////////////////////////////////////////
+ // Remove landmark #5
+ /////////////////////////////////////////////
+ iDatabase->RemoveLandmarkL(iActiveLmEvent->iLandmarkId);
+
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Add removed landmark again #6
+ /////////////////////////////////////////////
+ iActiveLmEvent->iLandmarkId4 = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Remove a set of landmarks sync #7
+ /////////////////////////////////////////////
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+ User::LeaveIfError(array.Append(iActiveLmEvent->iLandmarkId));
+ User::LeaveIfError(array.Append(iActiveLmEvent->iLandmarkId2));
+ User::LeaveIfError(array.Append(iActiveLmEvent->iLandmarkId3));
+ ExecuteAndDeleteLD(iDatabase->RemoveLandmarksL(array));
+
+ //array.Reset();
+
+ CleanupStack::PopAndDestroy(&array);
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Add new category #8
+ /////////////////////////////////////////////
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("My Category"));
+
+ iActiveLmEvent->iCategoryId = categoryManager->AddCategoryL(*category);
+
+ AssertTrueSecL(iActiveLmEvent->iCategoryId == category->CategoryId(), _L("CATEGORY ERROR"));
+
+ /////////////////////////////////////////////
+ // Update category #9
+ /////////////////////////////////////////////
+ categoryManager->UpdateCategoryL(*category);
+
+ /////////////////////////////////////////////
+ // Delete a non-existing category #10
+ /////////////////////////////////////////////
+ iActiveLmEvent->iNonExistingCategoryId = 998;
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(iActiveLmEvent->iNonExistingCategoryId));
+
+ /////////////////////////////////////////////
+ // Delete a category that exists in several landmarks #11
+ /////////////////////////////////////////////
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(iActiveLmEvent->iDeleteCategoryId));
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Delete several categories
+ /////////////////////////////////////////////
+ CPosLmItemIterator* iter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+ const TInt startIndex=1;
+ const TInt numOfItems=5;
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ iter->GetItemIdsL(ids, startIndex, numOfItems);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoriesL(ids));
+
+ CleanupStack::PopAndDestroy(2, iter); //ids
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Add new category to several landmarks
+ /////////////////////////////////////////////
+ CPosLandmarkCategory* newCategory = CPosLandmarkCategory::NewLC();
+ newCategory->SetCategoryNameL(_L("My New Category"));
+ iActiveLmEvent->iCategoryId2= categoryManager->AddCategoryL(*newCategory);
+ CleanupStack::PopAndDestroy(newCategory);
+
+ iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+ const TInt addStartIndex=5;
+ const TInt addNumOfItems=7;
+ CleanupClosePushL(ids);
+ iter->GetItemIdsL(ids, addStartIndex, addNumOfItems);
+
+ ExecuteAndDeleteLD(categoryManager->AddCategoryToLandmarksL(iActiveLmEvent->iCategoryId2, ids));
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Delete a category in several landmarks
+ /////////////////////////////////////////////
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryFromLandmarksL(iActiveLmEvent->iCategoryId2, ids));
+
+ CleanupStack::PopAndDestroy(4, categoryManager); // iter, ids, category
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Remove all landmarks
+ /////////////////////////////////////////////
+ ExecuteAndDeleteLD(iDatabase->RemoveAllLandmarksL());
+
+ CActiveScheduler::Start(); // For notifier
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventQueueTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::LandmarkEventQueueTest()
+ {
+
+ TInt i=0;
+ iActiveLmEvent->iQueueTest = ETrue;
+ iActiveLmEvent->Start();
+
+ /////////////////////////////////////////////
+ // Add one landmark #1
+ //////////////////////////////////////////////
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("TP28 event queue"));
+ iActiveLmEvent->iLandmarkId = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Add 6 landmarks #2
+ /////////////////////////////////////////////
+ _LIT(KLmName, "LmTP28");
+ for (i=0; i <= KMaxQueueSize; i++)
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(KLmName);
+ iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Updates landmark 6 times #3
+ /////////////////////////////////////////////
+ for (i=0; i <= KMaxQueueSize; i++)
+ {
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(iActiveLmEvent->iLandmarkId);
+ iDatabase->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Add 3 landmarks and 3 categories #4, #5 #6 #7
+ /////////////////////////////////////////////
+
+ for (i=0; i < 3; i++)
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(KLmName);
+ iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ _LIT(KCategoryName, "TP28 Category %d");
+ for (i =0; i < 3; i++)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName, i);
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(name);
+ if (i == 0)
+ {
+ iActiveLmEvent->iCategoryId = iCategoryManager->AddCategoryL(*category);
+ }
+ else
+ {
+ iCategoryManager->AddCategoryL(*category);
+ }
+ CleanupStack::PopAndDestroy(category);
+ }
+
+
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CActiveLmEvent::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CActiveLmEvent* CActiveLmEvent::NewL(CStifLogger* aLog)
+ {
+ CActiveLmEvent* self = new(ELeave) CActiveLmEvent(aLog);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmEvent::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CActiveLmEvent::ConstructL()
+ {
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmEvent::CActiveLmEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CActiveLmEvent::CActiveLmEvent(CStifLogger* aLog) :
+ CActive(EPriorityNormal),
+ iLog(aLog)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Destructor
+CActiveLmEvent::~CActiveLmEvent()
+ {
+ Cancel();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::Start()
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::RunL()
+ {
+
+ if (iQueueTest)
+ {
+ VerifyMergedEvent();
+ }
+ else
+ {
+ VerifyEvent();
+ }
+
+ if (!iQueueTest)
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::DoCancel()
+ {
+ iDatabase->CancelNotifyDatabaseEvent();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::VerifyEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::VerifyEvent()
+ {
+
+ iEventNumber++;
+ switch (iEventNumber)
+ {
+ // Added three landmarks
+ case 1: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId, iEvent.iLandmarkItemId);
+ break;
+ case 2: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId2, iEvent.iLandmarkItemId);
+ break;
+ case 3: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId3, iEvent.iLandmarkItemId);
+ break;
+ // Updated landmark
+ case 4: AssertCorrectEvent(EPosLmEventLandmarkUpdated, iEvent.iEventType, iLandmarkId, iEvent.iLandmarkItemId);
+ break;
+ // Deleted landmark
+ case 5: AssertCorrectEvent(EPosLmEventLandmarkDeleted, iEvent.iEventType, iLandmarkId, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Added removed landmark again
+ case 6: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId4, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Deleted several landmarks
+ case 7: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Added new category
+ case 8: AssertCorrectEvent(EPosLmEventCategoryCreated, iEvent.iEventType, iCategoryId, iEvent.iLandmarkItemId);
+ break;
+ //Updated category
+ case 9: AssertCorrectEvent(EPosLmEventCategoryUpdated, iEvent.iEventType, iCategoryId, iEvent.iLandmarkItemId);
+ break;
+ // Deleted non existing category
+ case 10: AssertCorrectEvent(EPosLmEventCategoryDeleted, iEvent.iEventType, iNonExistingCategoryId, iEvent.iLandmarkItemId);
+ break;
+ // Deleted existing category
+ case 11: AssertCorrectEvent(EPosLmEventCategoryDeleted, iEvent.iEventType, iDeleteCategoryId, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Deleted several categories
+ case 12: AssertCorrectEvent(EPosLmEventCategoryUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Added new category
+ case 13: AssertCorrectEvent(EPosLmEventCategoryCreated, iEvent.iEventType, iCategoryId2, iEvent.iLandmarkItemId);
+ break;
+ // Added created category to several landmarks
+ case 14: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Removed category from several landmarks
+ case 15: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Removed all landmarks
+ case 16: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ default:
+ iLog->Log(_L("Unexpected event received"));
+ ++iGlobalErr;
+ break;
+ }
+
+ }
+
+//---------------------------------------------------------
+// CActiveLmEvent::VerifyMergedEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::VerifyMergedEvent()
+ {
+ ++iMergedEventNumber;
+ switch (iMergedEventNumber)
+ {
+ case 1:
+ AssertCorrectEvent(
+ EPosLmEventLandmarkCreated,
+ iEvent.iEventType,
+ iLandmarkId,
+ iEvent.iLandmarkItemId);
+
+ CActiveScheduler::Stop();
+ break;
+ case 2:
+ case 3:
+ AssertCorrectEvent(
+ EPosLmEventLandmarkUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+
+ CActiveScheduler::Stop();
+ break;
+ case 4:
+ AssertCorrectEvent(
+ EPosLmEventLandmarkUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+ Start();
+ break;
+ case 5:
+ case 6:
+ case 7:
+ AssertCorrectEvent(EPosLmEventCategoryCreated,
+ iEvent.iEventType,
+ iCategoryId++,
+ iEvent.iLandmarkItemId);
+
+ if (iMergedEventNumber == 7)
+ {
+ CActiveScheduler::Stop();
+ }
+ else
+ {
+ Start();
+ }
+ break;
+ default:
+ _LIT(KError,"Unexpected event received, %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, iEvent.iEventType);
+ iLog->Log(error);
+ iGlobalErr++;
+ Start();
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::AssertCorrectEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::AssertCorrectEvent(
+ TPosLmEventType aExpectedEventType,
+ TPosLmEventType aEventType,
+ TPosLmItemId aExpectedLandMarkItemId,
+ TPosLmItemId aLandMarkItemId)
+ {
+ if (aExpectedEventType != aEventType)
+ {
+ _LIT(KError,"Unexpected eventtype. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aExpectedEventType, aEventType);
+ iLog->Log(error);
+ iGlobalErr++;
+ }
+ if (aExpectedLandMarkItemId != aLandMarkItemId)
+ {
+ _LIT(KError,"Unexpected item id. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aExpectedLandMarkItemId, aLandMarkItemId);
+ iLog->Log(error);
+ iGlobalErr++;
+ }
+
+ }
+
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP29.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1011 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp29.h"
+#include <utfw.h>
+#include <f32file.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <centralrepository.h>
+#include <UiklafInternalCRKeys.h>
+//#include <eposlmintservices.rsg>
+#include <barsread.h>
+#include <barsc.h>
+#include <bautils.h>
+
+// CONSTANTS
+_LIT(KFile1, "c:\\documents\\Tp29_1.txt");
+_LIT(KFile2, "c:\\documents\\Tp29_2.txt");
+//_LIT(KPosResourceFile, "\\resource\\eposlmintservices.rsc");
+//const TInt KOneK = 1024;
+
+// Size limit defined in "eposlmintservices.rss" to 250 kilobytes (kilo defined as 1024)
+//const TInt KMaxSize = 250000;
+// This is for KFile1, "fill" a file with contents until KSizeLimit1 limit is reached
+const TInt KSizeLimitOffset1 = 350000;
+// This is for KFile2, "fill" a file with contents until KSizeLimit2 limit is reached
+const TInt KSizeLimitOffset2 = 50000; // In bytes: 250000 bytes + 50000 bytes
+_LIT(KInternalServicesResFileRom, "z:\\resource\\eposlmintservices.rsc");
+_LIT(KInternalServicesResFileBackup, "c:\\resource\\copy_of_eposlmintservices.rsc");
+_LIT(KInternalServicesResFileCdrive, "c:\\resource\\eposlmintservices.rsc");
+//_LIT(KInternalServicesLargeResFile, "c:\\system\\test\\testdata\\eposlmintservices_453KB.rsc");
+//_LIT(KInternalServicesSmallResFile, "c:\\system\\test\\testdata\\eposlmintservices_198KB.rsc");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp29::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp29 - Out of disk");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::CloseTest()
+ {
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+
+ //TryRestoreResourceFile();
+
+ iFile1.Close();
+ iFile2.Close();
+ iFileServer.Delete(KFile1);
+ iFileServer.Delete(KFile2);
+ iFileServer.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::InitTestL()
+ {
+ // File setup, create two files
+ User::LeaveIfError(iFileServer.Connect());
+
+ // Try to restore if previous execution of Tp55 panicked or was killed.
+ //TryRestoreResourceFile();
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::StartL()
+ {
+#ifdef __WINS__
+ _LIT(KNotSupported, "Test case is not supported on WINS, exucute it on target!");
+ LogErrorAndLeave(KNotSupported);
+#else
+
+ //Retreive threshold from centralrepository
+ CRepository* repository = CRepository::NewLC(KCRUidUiklaf);
+ User::LeaveIfError(repository->Get(KUikOODDiskCriticalThreshold, iCriticalThreshold));
+ CleanupStack::PopAndDestroy(repository);
+
+ TBuf<100> buf;
+ buf.Format(_L("Critical threshold from central repository %d"), iCriticalThreshold);
+ iLog->Put(buf);
+
+ // Test import/export LMs when critical level is set to MLFW defined value.
+ InitiateCriticalLevelL();
+ ReInitTestL();
+ TestCriticalLevelL();
+
+ /*
+ // Test import/export LMs when critical level is set to a large value.
+ iLog->Put(_L("\r\nRedefining critical level to 453 KB and running all tests again...."));
+ CopyResourceFileL(KInternalServicesLargeResFile);
+ InitiateCriticalLevelL();
+ ReInitTestL();
+ TestCriticalLevelL();
+
+ // Test import/export LMs when critical level is set to a small value.
+ iLog->Put(_L("\r\nRedefining critical level to 198 KB and running all tests again...."));
+ CopyResourceFileL(KInternalServicesSmallResFile);
+ InitiateCriticalLevelL();
+ ReInitTestL();
+ TestCriticalLevelL();
+ */
+#endif
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::ReInitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::ReInitTestL()
+ {
+ iGlobalErr = KErrNone;
+ iFile1.Close();
+ iFile2.Close();
+
+ CFileMan* fileMan = CFileMan::NewL(iFileServer);
+ fileMan->Delete(KFile1);
+ fileMan->Delete(KFile2);
+ delete fileMan;
+
+ User::LeaveIfError(iFile1.Create(iFileServer, KFile1, EFileWrite));
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::TestCriticalLevelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::TestCriticalLevelL()
+ {
+
+ TTime startTime;
+ TTime stopTime;
+
+ startTime.UniversalTime();
+
+ RemoveDefaultDbL();
+
+ iLog->Put(_L("CPosLandmarkDatabase::OpenL();"));
+ iLandmarksDb = CPosLandmarkDatabase::OpenL();
+ if (iLandmarksDb->IsInitializingNeeded())
+ {
+ iLog->Put(_L("iLandmarksDb->InitializeL"));
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+ }
+
+ iLog->Put(_L("CPosLmCategoryManager::NewL;"));
+ iCategoryManager = CPosLmCategoryManager::NewL(*iLandmarksDb);
+
+ // Asynchronous
+ iLog->Put(_L("DoOutOfDiskTestL Asynchronous"));
+// iSearchCallback=ETrue;
+ DoOutOfDiskTestL(ETrue);
+ // iSearchCallback=EFalse;
+
+ // Delete "out-of-disk" file
+ iFile1.Close();
+ iFileServer.Delete(KFile1);
+ iFile2.Close();
+ iFileServer.Delete(KFile2);
+ TInt err = iFile1.Open(iFileServer, KFile1, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ err = iFile1.Create(iFileServer, KFile1, EFileWrite);
+ }
+ User::LeaveIfError(err);
+
+ err = iFile2.Open(iFileServer, KFile2, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ err = iFile2.Create(iFileServer, KFile2, EFileWrite);
+ }
+ User::LeaveIfError(err);
+
+ // Synchronous
+ iLog->Put(_L("DoOutOfDiskTestL Synchronous"));
+ DoOutOfDiskTestL(EFalse);
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ //TInt64 resse = executionTime.Int64()/1000000;
+
+ TInt resse = executionTime.Int64()/1000000;
+
+ TBuf<50> buf;
+ buf.Zero();
+ buf.Format(_L("TP29 took %d seconds"), resse);
+ iLog->Put(buf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::DoOutOfDiskTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::DoOutOfDiskTestL(TBool aSync)
+ {
+ TVolumeInfo volumeInfo;
+ TBuf<200> buf;
+ CPosLmOperation* op = NULL;
+
+ _LIT(KUID,"Unique ID: %08x\r\n");
+ _LIT(KSize,"Size: %d bytes\r\n");
+ _LIT(KFree,"Free space: %d bytes\r\n");
+ //_LIT(KVolName,"Volume name: %S\r\n");
+
+ TInt err=iFileServer.Volume(volumeInfo, EDriveC);
+ if (err != KErrNone) iLog->Put(_L("Error from iFileServer"));
+
+ buf.AppendFormat(KUID, volumeInfo.iUniqueID);
+ buf.AppendFormat(KSize, volumeInfo.iSize);
+ buf.AppendFormat(KFree, volumeInfo.iFree);
+ //buf.AppendFormat(KVolName, &volumeInfo.iName);
+ iLog->Put(buf);
+
+ TTime startTime;
+ TTime stopTime;
+
+ // Just in case
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ RArray<TPosLmItemId> lmIdArray;
+ CleanupClosePushL(lmIdArray);
+
+ // 1) Create a low disc space situation
+ startTime.UniversalTime();
+ ConsumeDiscSpace1L(iCriticalLevel + KSizeLimitOffset1);
+ ConsumeDiscSpace2L(iCriticalLevel + KSizeLimitOffset2);
+
+ err=iFileServer.Volume(volumeInfo, EDriveC);
+ if (err != KErrNone) iLog->Put(_L("Error from iFileServer"));
+ buf.AppendFormat(KUID, volumeInfo.iUniqueID);
+ buf.AppendFormat(KSize, volumeInfo.iSize);
+ buf.AppendFormat(KFree, volumeInfo.iFree);
+ iLog->Put(buf);
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ buf.Zero();
+ buf.Format(_L("ConsumeDiscSpaceL took %d seconds"), resse);
+ iLog->Put(buf);
+
+ // 2) Add Landmarks until "disk full" error occur
+ if (iLandmarksDb->IsInitializingNeeded())
+ {
+ iLog->Put(_L("InitializeL"));
+ // Synchronous
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+ }
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("LandMarkName1"));
+ iLog->Put(_L("Adding landmark1"));
+ lmIdArray.Append(iLandmarksDb->AddLandmarkL(*landmark));
+ CleanupStack::Pop(landmark);
+
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("LandMarkName2"));
+ iLog->Put(_L("Adding landmark2"));
+ lmIdArray.Append(iLandmarksDb->AddLandmarkL(*landmark));
+ CleanupStack::Pop(landmark);
+ err = KErrNone;
+ TPosLmItemId idde;
+ TInt i=0;
+
+ startTime.UniversalTime();
+ iLog->Put(_L("Adding landmark until KErrDiskFull.....1"));
+ // some while loop adding landmarks here until "disk full" error occur!!!
+ while (err != KErrDiskFull)
+ {
+ buf.Zero();
+ buf.Format(_L("Land Mark___________%d"), i++);
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(buf);
+ TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
+ if (err == KErrNone)
+ {
+ lmIdArray.Append(idde);
+ }
+ else if (err == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked when adding 1"));
+ User::After(100000);
+ }
+ CleanupStack::Pop(landmark);
+ }
+ stopTime.UniversalTime();
+ executionTime = stopTime.MicroSecondsFrom(startTime);
+ resse = executionTime.Int64()/1000000;
+ buf.Zero();
+ buf.Format(_L("Added %d nr of landmarks, took %d seconds"), i, resse);
+ iLog->Put(buf);
+
+ // Check that the filesize limit has not been exceeded
+ err=iFileServer.Volume(volumeInfo, EDriveC);
+ buf.Zero();
+ buf.AppendFormat(KFree, volumeInfo.iFree);
+ iLog->Put(buf);
+ if (volumeInfo.iFree < iCriticalLevel)
+ {
+ LogErrorAndLeave(_L("The max size limit has been exceeded!!!"));
+ }
+
+ //Check that the added landmarks can be read
+ iLog->Put(_L("Check that it is possible to read landmark"));
+ TInt nrOfLandmarks = lmIdArray.Count();
+ TInt p=0;
+ for (p=0;p<nrOfLandmarks;p++)
+ {
+ landmark = iLandmarksDb->ReadLandmarkLC(lmIdArray[p]);
+ CleanupStack::Pop(landmark);
+ }
+
+ // 3) Remove two landmarks and compress landmarks db
+ TInt nr = lmIdArray.Count()-1;
+ TPosLmItemId id = lmIdArray[nr];
+ iLog->Put(_L("Removing landmark1"));
+ lmIdArray.Remove(nr);
+ TRAP(err, iLandmarksDb->RemoveLandmarkL(id));
+ if (err == KErrDiskFull)
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ iLandmarksDb->RemoveLandmarkL(id);
+ iLog->Put(_L("DiskFull when removing1"));
+ }
+
+ nr = lmIdArray.Count() - 1;
+ id = lmIdArray[nr];
+ iLog->Put(_L("Removing landmark2"));
+ lmIdArray.Remove(nr);
+ iLandmarksDb->RemoveLandmarkL(id);
+ TRAP(err, iLandmarksDb->RemoveLandmarkL(id));
+ if (err == KErrDiskFull)
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ iLandmarksDb->RemoveLandmarkL(id);
+ iLog->Put(_L("DiskFull when removing2"));
+ }
+ err = KErrNone;
+ iLog->Put(_L("Compacting"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ startTime.UniversalTime();
+ iLog->Put(_L("Adding landmark until KErrDiskFull.....2"));
+ // 4) Add landmarks until "disk full" error occur!!!
+ while (err != KErrDiskFull)
+ {
+ buf.Zero();
+ buf.Format(_L("Land Mark___________%d"), i++);
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(buf);
+ //iLog->Put(_L("Adding landmark id to idArray"));
+ TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
+ if (err == KErrNone)
+ {
+ lmIdArray.Append(idde);
+ }
+ else if (err == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked when adding 2"));
+ User::After(100000);
+ }
+ CleanupStack::Pop(landmark);
+ }
+
+ stopTime.UniversalTime();
+ executionTime = stopTime.MicroSecondsFrom(startTime);
+ resse = executionTime.Int64()/1000000;
+ buf.Zero();
+ buf.Format(_L("Added %d nr of landmarks, took %d seconds"), i, resse);
+ iLog->Put(buf);
+
+ iLog->Put(_L("Check that it is possible to read landmark"));
+ //Check that the added landmarks can be read
+ nrOfLandmarks = lmIdArray.Count();
+ for (p=0;p<nrOfLandmarks;p++)
+ {
+ landmark = iLandmarksDb->ReadLandmarkLC(lmIdArray[p]);
+ CleanupStack::Pop(landmark);
+ }
+
+ iLog->Put(_L("Remove all landmarks"));
+ err = KErrNone;
+ // 5) Remove all landmarks and compact database
+ if (!aSync)
+ {
+ TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+ if (err == KErrNone)
+ {
+ ExecuteAndDeleteLD(op);
+ }
+ else if (err == KErrDiskFull)
+ {
+ iLog->Put(_L("KErrDiskFull when removing all landmarks"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ // Delete KFile2 to free more space on disc, method also open connection to iFile2 again
+ DeleteFile2L();
+
+ iLog->Put(_L("Removing after Compact sync"));
+ TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+ if (err == KErrDiskFull)
+ {
+ iLog->Put(_L("KErrDiskFull when Removing all landmarks after compact1"));
+ RemoveAllLandmarksL();
+ }
+ else
+ {
+ ExecuteAndDeleteLD(op);
+ }
+ }
+ }
+ else
+ {
+ iLog->Put(_L("Before RemoveAllLandmarksL(this)"));
+ TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+
+ if (err == KErrNone)
+ {
+ //***iActiveSchedulerWait->Start();
+ //***delete op; op=NULL;
+ RunAsyncOperationLD(op);
+ }
+ else if (err == KErrDiskFull)
+ {
+ iLog->Put(_L("KErrDiskFull when removing all landmarks"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ // Delete KFile2 to free more space on disc, method also open connection to iFile2 again
+ DeleteFile2L();
+
+ iLog->Put(_L("Removing after Compact async"));
+ TRAP(err, op = iLandmarksDb->RemoveAllLandmarksL());
+ if (err == KErrDiskFull)
+ {
+ iLog->Put(_L("KErrDiskFull when removing all landmarks after compact2"));
+ RemoveAllLandmarksL();
+ }
+ else
+ {
+ //***iActiveSchedulerWait->Start();
+ //***delete op; op=NULL;
+ RunAsyncOperationLD(op);
+ }
+ }
+ iLog->Put(_L("After RemoveAllLandmarksL(this)"));
+ }
+
+ ConsumeDiscSpace2L(iCriticalLevel + KSizeLimitOffset2);
+
+ if (err == KErrDiskFull) iLog->Put(_L("KErrDiskFull when RemoveAllLandmarksL"));
+ iLog->Put(_L("Compacting"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ lmIdArray.Reset();
+ i=0;
+ err = KErrNone;
+ startTime.UniversalTime();
+ iLog->Put(_L("Adding landmarkcategories until KErrDiskFull....."));
+
+ // 6) Add LandmarkCategories until "disk full" error occur
+ while (err != KErrDiskFull)
+ {
+ buf.Zero();
+ buf.Format(_L("Landmark Category _________ %d"), i++);
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(buf);
+ lmc->SetIconL(_L("Pelles Icon"), 111, KPosLmIconMaskNotUsed);
+
+ TRAP(err, idde = iCategoryManager->AddCategoryL(*lmc));
+ if (err == KErrNone)
+ {
+ lmIdArray.Append(idde);
+ }
+ else if (err== KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked when adding category"));
+ User::After(100000);
+ }
+ CleanupStack::PopAndDestroy(lmc);
+ }
+
+ stopTime.UniversalTime();
+ executionTime = stopTime.MicroSecondsFrom(startTime);
+
+ resse = executionTime.Int64()/1000000;
+ buf.Zero();
+ buf.Format(_L("Added %d nr of landmarkcategories, took %d seconds"), i, resse);
+ iLog->Put(buf);
+
+ //Check that the added landmarkcategories can be read
+ TInt nrOfCategories = lmIdArray.Count();
+ for (p=0;p<nrOfCategories;p++)
+ {
+ CPosLandmarkCategory* lmc = iCategoryManager->ReadCategoryLC(lmIdArray[p]);
+ CleanupStack::Pop(lmc);
+ }
+
+ // 7) Remove two categories and compress landmarks db
+ nr = lmIdArray.Count()-1;
+ id = lmIdArray[nr];
+ iLog->Put(_L("Removing landmarkcategory1"));
+ lmIdArray.Remove(nr);
+ op=NULL;
+ TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
+ if (err == KErrDiskFull)
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+ ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(id));
+ iLog->Put(_L("KErrDiskFull when removing landmarkcategory1"));
+ }
+
+ if (err == KErrNone)
+ {
+ ExecuteAndDeleteLD(op);
+ }
+ else
+ {
+ delete op;
+ op = NULL;
+ }
+
+ TBuf<50> buffe;
+ buffe.Format(_L("1) Err after RemoveCategoryL: %d"), err);
+ iLog->Put(buffe);
+
+ nr = lmIdArray.Count()-1;
+ id = lmIdArray[nr];
+ iLog->Put(_L("Removing landmarkcategory2"));
+ lmIdArray.Remove(nr);
+
+ if (!aSync)
+ {
+ TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
+ if (err == KErrDiskFull)
+ {
+ delete op;
+ op = NULL;
+ iLog->Put(_L("KErrDiskFull when removing landmarkcategory2"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ iLog->Put(_L("After compact before removing landmarkcategory2"));
+ ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(id));
+ }
+ else if (err == KErrNone)
+ {
+ ExecuteAndDeleteLD(op);
+ }
+ else if (err == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked returned from iCategoryManager->RemoveCategoryL"));
+ delete op;
+ op = NULL;
+ }
+ }
+ else
+ {
+ TRAP(err, op = iCategoryManager->RemoveCategoryL(id));
+ if (err == KErrNone)
+ {
+ //***iActiveSchedulerWait->Start();
+ //***delete op;
+ RunAsyncOperationLD(op);
+ }
+ else if (err == KErrDiskFull)
+ {
+ delete op;
+ op = NULL;
+ iLog->Put(_L("KErrDiskFull when removing landmarkcategory2 async"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ iLog->Put(_L("After compact before removing landmarkcategory2 async"));
+ op = iCategoryManager->RemoveCategoryL(id);
+
+ //***iActiveSchedulerWait->Start();
+ //***delete op;
+ RunAsyncOperationLD(op);
+ }
+ else if (err == KErrLocked)
+ {
+ delete op;
+ op = NULL;
+ iLog->Put(_L("KErrLocked returned from iCategoryManager->RemoveCategoryL"));
+ }
+ }
+
+ buffe.Zero();
+ buffe.Format(_L("2) Err after RemoveCategoryL: %d"), err);
+ iLog->Put(buffe);
+
+ iLog->Put(_L("Compacting"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+ iLog->Put(_L("After Compacting"));
+
+ lmIdArray.Reset();
+ i=0;
+ err = KErrNone;
+
+ startTime.UniversalTime();
+ // 8) Add LandmarkCategories until "disk full" error occur
+ while (err != KErrDiskFull)
+ {
+ buf.Zero();
+ buf.Format(_L("LandmarkCategory %d"), i++);
+
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(buf);
+ lmc->SetIconL(_L("PellesIcon"), 111, KPosLmIconMaskNotUsed);
+ iLog->Put(buf);
+
+ TRAP(err, idde = iCategoryManager->AddCategoryL(*lmc));
+ if (err == KErrNone)
+ {
+ lmIdArray.Append(idde);
+ }
+ else if (err == KErrLocked)
+ {
+ iLog->Put(_L("KerrLocked when addCategory"));
+ User::After(100000);
+ }
+ CleanupStack::PopAndDestroy(lmc);
+ }
+ stopTime.UniversalTime();
+ executionTime = stopTime.MicroSecondsFrom(startTime);
+
+ resse = executionTime.Int64()/1000000;
+ buf.Zero();
+ buf.Format(_L("Added %d nr of landmarkcategories, took %d seconds"), i, resse);
+ iLog->Put(buf);
+
+ // 9) Remove all categories and compact db
+ // sync method
+ // XXXX add async check here
+ iLog->Put(_L("Removing all categories"));
+ TRAP(err, iCategoryManager->RemoveCategoriesL(lmIdArray));
+ if (err == KErrDiskFull) iLog->Put(_L("KErrDiskFull when RemoveCategoriesL"));
+ iLog->Put(_L("Compacting"));
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+
+ // 10) Consume more space then the limit specified in resource file
+ ConsumeDiscSpace1L(iCriticalLevel - KSizeLimitOffset2);
+
+ // 11) Try to add a landmark
+ buf.Zero();
+ buf.Format(_L("LandMark%d"), i++);
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(buf);
+
+ TRAP(err, idde = iLandmarksDb->AddLandmarkL(*landmark));
+ if (err != KErrDiskFull)
+ {
+ buf.Zero();
+ buf.Format(_L("Should leave with KErrDiskFull instead %d"), err);
+ //LogErrorAndLeave(buf);
+ LogErrorAndLeave(buf);
+ }
+ CleanupStack::PopAndDestroy(landmark);
+ CleanupStack::PopAndDestroy(&lmIdArray);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp29::RemoveAllLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::RemoveAllLandmarksL()
+ {
+ iLog->Put(_L("CPosTp29::RemoveAllLandmarksL"));
+ CPosLmItemIterator* iter = iLandmarksDb->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt counter=0;
+ TTime startTime;
+ TTime stopTime;
+ TPosLmItemId id = iter->NextL();
+
+ startTime.UniversalTime();
+
+ while (id != KPosLmNullItemId)
+ {
+ TRAPD(err, iLandmarksDb->RemoveLandmarkL(id));
+ if (err == KErrDiskFull)
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ iLog->Put(_L(":-( DiskFull when removing single landmark entry !!!"));
+ iLandmarksDb->RemoveLandmarkL(id);
+ }
+ else if (err == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked when removing landmark"));
+ User::After(100000);
+ }
+ id = iter->NextL();
+ counter++;
+ }
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt64 resse = executionTime.Int64()/1000000;
+ TBuf<50> buf;
+ buf.Zero();
+ buf.Format(_L("Removing %d nr of landmarks, took %d seconds"), counter, resse);
+ iLog->Put(buf);
+
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::DeleteFile2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::DeleteFile2L()
+ {
+ iFile2.Close();
+ iFileServer.Delete(KFile2);
+ TInt err = iFile2.Open(iFileServer, KFile2, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ err = iFile2.Create(iFileServer, KFile2, EFileWrite);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::ConsumeDiscSpace1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::ConsumeDiscSpace1L(TInt aSizeLimit)
+ {
+ TInt err = KErrNone;
+
+ // Approx 2160 bytes
+ _LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenon \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+sensenonsensenonsensenonsensenonsensenonsensenonsense");
+
+ TVolumeInfo volumeInfo;
+ err=iFileServer.Volume(volumeInfo, EDriveC);
+
+ // Fill file fast
+ HBufC8* bigBuf = (&KNonsense)->AllocLC();
+ while (volumeInfo.iFree > aSizeLimit)
+ {
+ err = iFile1.Write(*bigBuf);
+ if (err != KErrNone) iLog->Put(_L("Problem writing"));
+ err = iFileServer.Volume(volumeInfo, EDriveC);
+ if (err != KErrNone) iLog->Put(_L("Problem voluming"));
+ }
+
+ CleanupStack::PopAndDestroy(1); // bigBuf
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::ConsumeDiscSpace2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::ConsumeDiscSpace2L(TInt aSizeLimit)
+ {
+ iLog->Put(_L("ConsumeDiscSpace2L"));
+ TInt err = KErrNone;
+
+ // Approx 2160 bytes
+ _LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenon \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense \
+sensenonsensenonsensenonsensenonsensenonsensenonsense");
+
+ TVolumeInfo volumeInfo;
+ err=iFileServer.Volume(volumeInfo, EDriveC);
+
+ // Fill file fast
+ HBufC8* bigBuf = (&KNonsense)->AllocLC();
+ while (volumeInfo.iFree > aSizeLimit)
+ {
+ err = iFile2.Write(*bigBuf);
+ if (err != KErrNone) iLog->Put(_L("Problem writing"));
+ err = iFileServer.Volume(volumeInfo, EDriveC);
+ if (err != KErrNone) iLog->Put(_L("Problem voluming"));
+ }
+
+ CleanupStack::PopAndDestroy(1); // bigBuf
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::InitiateCriticalLevelL
+// Extracts Critical Dsik Level. (value is extracted from an MLFW
+// resource file that can reside on any drive)
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::InitiateCriticalLevelL()
+ {
+ iLog->Put(_L("InitiateCriticalLevelL"));
+ /*
+ // Find drive that the resource file resides on.
+ TFindFile* filefinder = new (ELeave) TFindFile(iFileServer);
+ CleanupStack::PushL(filefinder);
+ TParse* fileparser = new (ELeave) TParse;
+ CleanupStack::PushL(fileparser);
+ fileparser->Set(KPosResourceFile, NULL, NULL);
+ User::LeaveIfError(
+ filefinder->FindByDir(fileparser->NameAndExt(), fileparser->DriveAndPath()));
+
+ // Open resource file
+ RResourceFile resFile;
+ resFile.OpenL(iFileServer, filefinder->File());
+ CleanupClosePushL(resFile);
+
+ // Allocate the critical level as a buffer
+ //TInt R_POS_LANDMARK_INTERNAL_CRITICAL_DISK_LEVEL = 250;
+ HBufC8* resourceBuffer = resFile.AllocReadLC(iCriticalThreshold);
+
+ // Convert the buffer to an int
+ TResourceReader resReader;
+ resReader.SetBuffer(resourceBuffer);
+ iCriticalLevel = KOneK * resReader.ReadInt16();
+ CleanupStack::PopAndDestroy(4, filefinder);
+ */
+
+ //iCriticalLevel = iCriticalThreshold * KOneK;
+ iCriticalLevel = iCriticalThreshold;
+
+ TBuf<50> msg;
+ msg.Format(_L("CriticalLevel = %d"), iCriticalLevel);
+ iLog->Put(msg);
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::CopyResourceFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::CopyResourceFileL(const TDesC& aResourceFile)
+ {
+ // Release all landmark references to make DLLs be unloaded.
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ CFileMan* fileMan = CFileMan::NewL(iFileServer);
+ CleanupStack::PushL(fileMan);
+
+ // Check if landmark is flashed
+ if (!BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
+ {
+ iLog->Put(_L("Landmark is NOT flashed, backing up eposlmintservices.rsc by renaming it bofore copying rsc-file."));
+ // Landmark FW is not flashed. Rename the file before copying an own defiend file.
+ // Since landmark FW is not flashed the file should exist hence leaving if it is not found!
+ User::LeaveIfError(fileMan->Rename(KInternalServicesResFileCdrive, KInternalServicesResFileBackup, CFileMan::EOverWrite));
+ }
+ else
+ {
+ iLog->Put(_L("Landmark framework is flashed, copying global categories to c:"));
+ }
+
+ User::LeaveIfError(fileMan->Copy(aResourceFile, KInternalServicesResFileCdrive, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp29::TryRestoreResourceFile
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp29::TryRestoreResourceFile()
+ {
+ iLog->Put(_L("TryRestoreResourceFile"));
+ CFileMan* fileMan = NULL;
+ TRAPD(err, fileMan = CFileMan::NewL(iFileServer));
+ User::LeaveIfError(err);
+ if (fileMan)
+ {
+ // Try to restore the backup up rsc-file (only possible when LM FW is not flashed.
+ TInt result = fileMan->Copy(KInternalServicesResFileBackup, KInternalServicesResFileCdrive, CFileMan::EOverWrite);
+ if (result == KErrNotFound)
+ {
+ if (BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
+ {
+ // LM FW is flashed. We need to remove the rsc-file on c:
+ fileMan->Delete(KInternalServicesResFileCdrive);
+ }
+ }
+ delete fileMan;
+ }
+ }
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP54.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,536 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp54.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmOperation.h>
+#include <utfw.h>
+#include <e32math.h>
+
+
+#include <LbsPosition.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp54::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp54::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP54 - Sorted DB Iterator");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp54::CloseTest()
+ {
+ iLog->Put(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp54::InitTestL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp54::StartL()
+ {
+ // All times in this test are measured in milliseconds
+ TBool wholeTestSuccessful = ETrue;
+ TBool subTestSuccessful;
+ TBool isSorted = ETrue;
+ TBool isSynch = ETrue;
+ TInt nrOfLms = 1000;
+ TInt64 execTime;
+ TInt64 maxExecTime;
+/*
+Use function below for creating landmark dbs with 1000 and 5000 landmarks
+Note: Only name and position is set
+
+/*
+CreateLargeDbs(1000);
+CleanupStack::PopAndDestroy();
+
+CreateLargeDbs(5000);
+CleanupStack::PopAndDestroy();
+*/
+
+// Measure 1000 sorted landmarks synchronously
+ iLog->Put(_L("\nTesting retrieving 1000 sorted landmarks using LandmarkIteratorL()"));
+ maxExecTime = 5000;
+ RecreateDatabaseL(K1000LandmarksDb);
+ execTime = ExecutionTimeSynchL(isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, isSorted, maxExecTime, isSynch);
+ if (wholeTestSuccessful)
+ {
+// We are not allowed to leave because of this. Error report ESLI-653HBG was ignored
+// wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 1000 unsorted landmarks synchronously
+ iLog->Put(_L("\nTesting retrieving 1000 unsorted landmarks using LandmarkIteratorL()"));
+ maxExecTime = 1000;
+ RecreateDatabaseL(K1000LandmarksDb);
+ execTime = ExecutionTimeSynchL(!isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, !isSorted, maxExecTime, isSynch);
+ if (wholeTestSuccessful)
+ {
+// We are not allowed to leave because of this. Error report ESLI-653HBG was ignored
+// wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 5000 sorted landmarks synchronously
+ iLog->Put(_L("\nTesting retrieving 5000 sorted landmarks using LandmarkIteratorL()"));
+ nrOfLms = 5000;
+ maxExecTime = 10000;
+ RecreateDatabaseL(K5000LandmarksDb);
+ execTime = ExecutionTimeSynchL(isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, isSorted, maxExecTime, isSynch);
+ if (wholeTestSuccessful)
+ {
+// We are not allowed to leave because of this. Error report ESLI-653HBG was ignored
+// wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 5000 unsorted landmarks synchronously
+ iLog->Put(_L("\nTesting retrieving 5000 unsorted landmarks using LandmarkIteratorL()"));
+ maxExecTime = 5000;
+ RecreateDatabaseL(K5000LandmarksDb);
+ execTime = ExecutionTimeSynchL(!isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, !isSorted, maxExecTime, isSynch);
+ if (wholeTestSuccessful)
+ {
+// We are not allowed to leave because of this. Error report ESLI-653HBG was ignored
+// wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 1000 sorted landmarks asynchronously
+ iLog->Put(_L("\nTesting retrieving 1000 sorted landmarks using the search API"));
+ nrOfLms = 1000;
+ maxExecTime = 5000;
+ RecreateDatabaseL(K1000LandmarksDb);
+ execTime = ExecutionTimeAsynchL(isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, isSorted, maxExecTime, !isSynch);
+
+ if (wholeTestSuccessful)
+ {
+ wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 1000 unsorted landmarks asynchronously
+ iLog->Put(_L("\nTesting retrieving 1000 unsorted landmarks using the search API"));
+ maxExecTime = 1000;
+ RecreateDatabaseL(K1000LandmarksDb);
+ execTime = ExecutionTimeAsynchL(!isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, !isSorted, maxExecTime, !isSynch);
+ if (wholeTestSuccessful)
+ {
+ wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 5000 sorted landmarks asynchronously
+ iLog->Put(_L("\nTesting retrieving 5000 sorted landmarks using the search API"));
+ nrOfLms = 5000;
+ maxExecTime = 10000;
+ RecreateDatabaseL(K5000LandmarksDb);
+ execTime = ExecutionTimeAsynchL(isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, isSorted, maxExecTime, !isSynch);
+ if (wholeTestSuccessful)
+ {
+ wholeTestSuccessful = subTestSuccessful;
+ }
+
+// Measure 5000 unsorted landmarks asynchronously
+ iLog->Put(_L("\nTesting retrieving 5000 unsorted landmarks using the search API"));
+ maxExecTime = 5000;
+ RecreateDatabaseL(K5000LandmarksDb);
+ execTime = ExecutionTimeAsynchL(!isSorted);
+ subTestSuccessful = VerifyResult(execTime, nrOfLms, !isSorted, maxExecTime, !isSynch);
+ if (wholeTestSuccessful)
+ {
+ wholeTestSuccessful = subTestSuccessful;
+ }
+
+ if (!wholeTestSuccessful)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::ExecutionTimeSynchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt64 CPosTp54::ExecutionTimeSynchL(TBool aIsSorted)
+ {
+ TTime startTime;
+ TTime stopTime;
+ CPosLmItemIterator* iterator = NULL;
+
+ if (aIsSorted)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ // The method to measure
+ startTime.UniversalTime();
+ iterator = iDatabase->LandmarkIteratorL(sortPref);
+ stopTime.UniversalTime();
+ }
+ else
+ {
+ // The method to measure
+ startTime.UniversalTime();
+ iterator = iDatabase->LandmarkIteratorL();
+ stopTime.UniversalTime();
+ }
+ delete iterator;
+
+ TTimeIntervalMicroSeconds execTime =
+ stopTime.MicroSecondsFrom(startTime);
+ return execTime.Int64() / 1000; // return execution time in milliseconds
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::ExecutionTimeAsynchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt64 CPosTp54::ExecutionTimeAsynchL(TBool aIsSorted)
+ {
+ // Create a landmark searcher
+ CPosLandmarkSearch* lmSearcher = CPosLandmarkSearch::NewL(*iDatabase);
+ CleanupStack::PushL(lmSearcher);
+
+ // Create search criteria, search by name.
+ CPosLmTextCriteria* searchCriteria = CPosLmTextCriteria::NewLC();
+ searchCriteria->SetTextL(_L("*"));
+ searchCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+
+ CPosLmOperation* searchOp = NULL;
+ if (aIsSorted)
+ {
+ // Create search operation, sort ascending by name
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ searchOp = lmSearcher->StartLandmarkSearchL(*searchCriteria, sortPref);
+ }
+ else
+ {
+ // Create search operation, without sorting
+ searchOp = lmSearcher->StartLandmarkSearchL(*searchCriteria);
+ }
+
+ TInt res(0);
+ TTimeIntervalMicroSeconds longestExecTimeSoFar = ExecuteLmOp(searchOp, res);
+ AssertTrueSecL(res == KErrNone, _L("Searching did not result in KErrNone but in %d."), res);
+
+ // Get the iterator
+ TTime startTime, stopTime;
+ startTime.UniversalTime();
+ CPosLmItemIterator* iterator = lmSearcher->MatchIteratorL();
+ stopTime.UniversalTime();
+ delete iterator;
+
+ TTimeIntervalMicroSeconds execTime = stopTime.MicroSecondsFrom(startTime);
+ if (execTime > longestExecTimeSoFar)
+ {
+ longestExecTimeSoFar = execTime;
+ }
+
+ CleanupStack::PopAndDestroy(2, lmSearcher);
+ return longestExecTimeSoFar.Int64() / 1000; // return execution time in milliseconds
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::VerifyResult
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp54::VerifyResult(
+ TInt64 aExecTime,
+ TInt aNrOfLandmarks,
+ TBool aSorted,
+ TInt64 aLimit,
+ TBool aSynch)
+ {
+ _LIT(KOups, "Ouppps! ");
+ _LIT(KSynch, "%SRetrieving %d %S landmarks using %S took %d milliseconds");
+ _LIT(KAsynch, "%SLongest execution time in RunL() took %d milliseconds when retrieving %d %S landmarks using %S.");
+ _LIT(KSorted, "sorted");
+ _LIT(KUnSorted, "UNsorted");
+ _LIT(KSynchIterator, "CPosLandmarkDatabse::LandmarkIteratorL()");
+ _LIT(KAsynchSearch, "LM search API");
+ TBool testSucessful;
+ TInt time = aExecTime;
+ // Present result
+ TBuf<200> buf;
+
+ if (aExecTime > aLimit)
+ {
+ aSorted
+ ? aSynch
+ ? buf.Format(KSynch, &KOups, aNrOfLandmarks, &KSorted, &KSynchIterator, time)
+ : buf.Format(KAsynch, &KOups, time, aNrOfLandmarks, &KSorted, &KAsynchSearch)
+ : aSynch
+ ? buf.Format(KSynch, &KOups, aNrOfLandmarks, &KUnSorted, &KSynchIterator, time)
+ : buf.Format(KAsynch, &KOups, time, aNrOfLandmarks, &KUnSorted, &KAsynchSearch);
+
+ iLog->PutError(buf);
+ testSucessful = EFalse;
+ }
+ else
+ {
+ aSorted
+ ? aSynch
+ // XXX ? buf.Format(KSynch, &KNullDesC, aNrOfLandmarks, &KSorted, &KSynchIterator, aExecTime.Low())
+ ? buf.Format(KSynch, &KNullDesC, aNrOfLandmarks, &KSorted, &KSynchIterator, time)
+ //XXX : buf.Format(KAsynch, &KNullDesC, aExecTime.Low(), aNrOfLandmarks, &KSorted, &KAsynchSearch)
+ : buf.Format(KAsynch, &KNullDesC, time, aNrOfLandmarks, &KSorted, &KAsynchSearch)
+ : aSynch
+ //? buf.Format(KSynch, &KNullDesC, aNrOfLandmarks, &KUnSorted, &KSynchIterator, aExecTime.Low())
+ //: buf.Format(KAsynch, &KNullDesC, aExecTime.Low(), aNrOfLandmarks, &KUnSorted, &KAsynchSearch);
+ ? buf.Format(KSynch, &KNullDesC, aNrOfLandmarks, &KUnSorted, &KSynchIterator, time)
+ : buf.Format(KAsynch, &KNullDesC, time, aNrOfLandmarks, &KUnSorted, &KAsynchSearch);
+
+ iLog->Put(buf);
+ testSucessful = ETrue;
+ }
+
+ return testSucessful;
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::TestIteratorSynchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt64 CPosTp54::TestIteratorSynchL(const TDesC& aDatabase, TBool aIsSorted)
+ {
+ RecreateDatabaseL(aDatabase);
+
+ return ExecutionTimeSynchL(aIsSorted);
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::TestIteratorAsynchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt64 CPosTp54::TestIteratorAsynchL(const TDesC& aDatabase, TBool aIsSorted)
+ {
+ RecreateDatabaseL(aDatabase);
+
+ return ExecutionTimeAsynchL(aIsSorted);
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::RecreateDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp54::RecreateDatabaseL(const TDesC& aDatabase)
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ CopyDbFileL(aDatabase);
+ iDatabase = CPosLandmarkDatabase::OpenL(KDefaultDb);
+ }
+
+// ---------------------------------------------------------
+// CPosTp54::ExecuteLmOp
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt64 CPosTp54::ExecuteLmOp(CPosLmOperation* aOp, TInt& aResult)
+ {
+ TReal32 progress(0);
+ TRequestStatus status(KPosLmOperationNotComplete);
+ TTime startTime;
+ TTime stopTime;
+ TTimeIntervalMicroSeconds longestExecTimeSoFar(0);
+
+ while (status.Int() == KPosLmOperationNotComplete)
+ {
+ startTime.UniversalTime();
+ aOp->NextStep(status, progress);
+ User::WaitForRequest(status);
+ stopTime.UniversalTime();
+
+ TTimeIntervalMicroSeconds execTime = stopTime.MicroSecondsFrom(startTime);
+ if (execTime > longestExecTimeSoFar)
+ {
+ longestExecTimeSoFar = execTime;
+ }
+ _LIT(KExecTime, "Progress = %d%%. Execution of NextStep took %d µs");
+ TBuf<100> buf;
+ //buf.Format(KExecTime, (TInt) (progress * 100), execTime.Int64().Low());
+ buf.Format(KExecTime, (TInt) (progress * 100), execTime.Int64());
+// iLog->Put(buf);
+ }
+
+ aResult = status.Int();
+ return longestExecTimeSoFar.Int64();
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp54::CreateLargeDbs
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp54::CreateLargeDbs(TInt aNrOfItems)
+ {
+
+ TTime startTime;
+ TTime stopTime;
+
+ iLog->Put(_L("RemoveAllLmDatabasesL();"));
+ RemoveAllLmDatabasesL();
+ startTime.UniversalTime();
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ if (db->IsInitializingNeeded())
+ {
+ iLog->Put(_L("IsInitializingNeeded()"));
+ ExecuteAndDeleteLD(db->InitializeL());
+ }
+
+ CPosLmCategoryManager* catManager = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catManager);
+ TInt j = 0;
+
+ while (j < aNrOfItems)
+ {
+ TTime seedTime;
+ seedTime.UniversalTime();
+
+ TInt64 seed = seedTime.Int64();
+ TBuf<150> name;
+ TReal randNr = Math::FRand(seed);
+
+ TUint bokstav1 = (randNr*25)+65;
+ randNr = Math::FRand(seed);
+ TUint bokstav2 = (randNr*25)+65;
+
+ //Create a landmark name that contains of two random characters+"NearestSearch"+iCounter
+ name.Format(_L("%c%cLandmark Nr %d"),bokstav1, bokstav2, j);
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+
+ landmark->SetLandmarkNameL(name);
+
+ /*
+ HBufC* desc = HBufC::NewLC(4095);
+ TPtr descPtr = desc->Des();
+ for (TInt k = 0; k < 16; k++)
+ {
+ descPtr.Append(name);
+ }
+ descPtr = descPtr.Left(4095);
+ landmark->SetLandmarkDescriptionL(descPtr);
+ CleanupStack::PopAndDestroy(desc);
+
+ */
+/*
+ // Update coverage radius
+ TReal32 radius = 345345345;
+ landmark->SetCoverageRadius(radius);
+ // Update street
+ landmark->SetPositionFieldL(EPositionFieldStreet, name);
+ // Update postal code
+ landmark->SetPositionFieldL(EPositionFieldPostalCode, name);
+ // Update city
+ landmark->SetPositionFieldL(EPositionFieldCity, name);
+
+ // Update country
+ landmark->SetPositionFieldL(EPositionFieldCountry, name);
+*/
+ TReal latitude(123), longitude(321);
+ TReal32 altitude(54), horAcc(1), verAcc(12);
+ TCoordinate coordinate(latitude, longitude, altitude);
+ TLocality newLocation(coordinate, horAcc, verAcc);
+ landmark->SetPositionL(newLocation);
+
+ db->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ /*
+ if (j<100)
+ {
+ // Add category
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+
+ _LIT(KCatName, "Category nr %d");
+ TBuf<100> nameCategory;
+ nameCategory.Format(KCatName, j);
+ category->SetCategoryNameL(nameCategory);
+ catManager->AddCategoryL(*category);
+
+ CleanupStack::PopAndDestroy(category);
+ }
+ */
+ j++;
+ }
+ ExecuteAndDeleteLD(db->CompactL());
+ stopTime.UniversalTime();
+ CleanupStack::PopAndDestroy(2, db);
+
+ TTimeIntervalMicroSeconds execTime = stopTime.MicroSecondsFrom(startTime);
+
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ TBuf<100> buf;
+ buf.Format(_L("Create %d nr of landmarks took %d seconds"), aNrOfItems, resse);
+ iLog->Put(buf);
+
+ }
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP55.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1156 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp55.h"
+#include "FT_LandmarkConstants.h"
+//#include <eposlmintservices.rsg>
+#include <centralrepository.h>
+#include <UiklafInternalCRKeys.h>
+#include <utfw.h>
+#include <f32file.h>
+#include <coemain.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <barsread.h>
+#include <bautils.h>
+
+// CONSTANTS
+_LIT(KFile1, "c:\\documents\\Tp55_1.txt");
+_LIT(KFile2, "c:\\documents\\Tp55_2.txt");
+_LIT(KFile3, "c:\\documents\\Tp55_3.txt");
+const TInt KOneK = 1024;
+const TInt KNrOfLandmarksToExport = 10;
+//_LIT(KPosResourceFile, "\\resource\\eposlmintservices.rsc");
+#ifdef __WINS__
+_LIT(KXmlInputFile, "z:\\system\\test\\testdata\\TP55-DiskFullDuringExportImport.xml");
+#else
+_LIT(KXmlInputFile, "c:\\system\\test\\testdata\\TP55-DiskFullDuringExportImport.xml");
+#endif
+_LIT(KXmlOutputFile, "c:\\documents\\TP55-ExportedLandmarks.xml");
+_LIT(KXmlBufferDumpFile, "c:\\documents\\BufferDump.xml");
+_LIT(KInternalServicesResFileRom, "z:\\resource\\eposlmintservices.rsc");
+_LIT(KInternalServicesResFileBackup, "c:\\resource\\copy_of_eposlmintservices.rsc");
+_LIT(KInternalServicesResFileCdrive, "c:\\resource\\eposlmintservices.rsc");
+//_LIT(KInternalServicesLargeResFile, "c:\\system\\test\\testdata\\eposlmintservices_453KB.rsc");
+//_LIT(KInternalServicesSmallResFile, "c:\\system\\test\\testdata\\eposlmintservices_198KB.rsc");
+
+// Approx 2141 bytes
+_LIT8(KNonsense, "nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense\
+sensenonsensenonsensenonsensenonsensenonsensenonsense");
+
+_LIT8(K64B, "nonsensenonsensenonsensenonsensenonsensenonsensenonsensenonsense");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp55::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp55 - Disk Full Checking during Import/Export");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iOperationWrapper;
+ delete iLandmarkEncoder;
+ delete iLandmarkParser;
+ delete iOutputBuffer;
+ delete iInputBuffer;
+
+ iFile1.Close();
+ iFile2.Close();
+ iFile3.Close();
+ iFileServer.Delete(KFile1);
+ iFileServer.Delete(KFile2);
+ iFileServer.Delete(KFile3);
+
+ //TryRestoreResourceFile();
+
+ iXmlOutputFile.Close();
+ iFileServer.Delete(KXmlOutputFile);
+ iFileServer.Delete(KXmlBufferDumpFile);
+
+ iFileServer.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::InitTestL()
+ {
+ // File setup, create two files
+ User::LeaveIfError(iFileServer.Connect());
+
+ // Try to restore if previous execution of Tp55 panicked or was killed.
+ //TryRestoreResourceFile();
+
+ iOperationWrapper = new (ELeave) CActiveLmOperation(iLog);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::StartL()
+ {
+ // Retreive threshold from centralrepository
+ CRepository* repository = CRepository::NewLC(KCRUidUiklaf);
+ User::LeaveIfError(repository->Get(KUikOODDiskCriticalThreshold, iCriticalThreshold));
+ CleanupStack::PopAndDestroy(repository);
+
+ // Test import/export LMs when critical level is set to MLFW defined value.
+ InitiateCriticalLevelL();
+ TestCriticalLevelL();
+
+/*
+ // Test import/export LMs when critical level is set to a large value.
+ iLog->Put(_L("\r\nRedefining critical level to 453 KB and running all tests again...."));
+ CopyResourceFileL(KInternalServicesLargeResFile);
+ InitiateCriticalLevelL();
+ TestCriticalLevelL();
+
+ // Test import/export LMs when critical level is set to a small value.
+ iLog->Put(_L("\r\nRedefining critical level to 198 KB and running all tests again...."));
+ CopyResourceFileL(KInternalServicesSmallResFile);
+ InitiateCriticalLevelL();
+ TestCriticalLevelL();
+ */
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::NotifyProgress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::NotifyProgress(TReal aProgress)
+ {
+ iProgress = (TInt) (aProgress * 100);
+// iMsg.Format(_L("Progress = %d"), iProgress);
+// iLog->Put(iMsg);
+// LogVolumeInfoL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::TestCriticalLevelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::TestCriticalLevelL()
+ {
+ // Restore disk space
+ RecreateAndOpenFilesL();
+
+ // ************ 1. Open database ************
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // ************ 2. Fill up disk space ************
+ iLog->Put(_L("Consuming disk space..."));
+ ConsumeDiskSpaceL(iFile1, iCriticalLevel + 3 * KOneK);
+ LogVolumeInfoL();
+
+//// Test importing landmarks
+ iLog->Put(_L("Testing Importing..."));
+ iLog->Put(_L("-- Testing import below critical level"));
+ TBool testBeyondCriticalLevel = ETrue;
+ ImportLandmarksTestL(!testBeyondCriticalLevel);
+
+ // ************ 11. Repeat steps 3-10 ************
+ iLog->Put(_L("\r\n-- Testing import beyond critical level"));
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ iLog->Put(_L("Consuming disk space..."));
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ ConsumeDiskSpaceL(iFile2, iSizeLimit2);
+ LogVolumeInfoL();
+ ImportLandmarksTestL(testBeyondCriticalLevel);
+
+ // Restore disk space
+ RecreateAndOpenFilesL();
+
+ // Use suitable database for exporting LMs
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // ************ 12. Fill up disk space ************
+ iLog->Put(_L("Consuming disk space..."));
+ ConsumeDiskSpaceL(iFile1, iSizeLimit1);
+ LogVolumeInfoL();
+
+//// Test importing landmarks
+ iLog->Put(_L("Testing Exporting..."));
+ ExportLandmarksTestL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::RecreateAndOpenFilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::RecreateAndOpenFilesL()
+ {
+ iLog->Put(_L("Removing large files..."));
+
+ // Delete files
+ iFile1.Close();
+ iFileServer.Delete(KFile1);
+ iFile2.Close();
+ iFileServer.Delete(KFile2);
+ iFile3.Close();
+ iFileServer.Delete(KFile3);
+
+ // Create and open files
+ User::LeaveIfError(iFile1.Create(iFileServer, KFile1, EFileWrite));
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ User::LeaveIfError(iFile3.Create(iFileServer, KFile3, EFileWrite));
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ExportLandmarksTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::ExportLandmarksTestL()
+ {
+ TInt result(0);
+ TBool doAddAllLandmarks = ETrue;
+ TBool doExecuteIncrementally = ETrue;
+
+//// Testing Disk full during addition of LMs to encoder
+ iLog->Put(_L("\r\n--- Testing Disk full during addition of LMs to encoder"));
+
+ // 13. ************ Export to file using encoder stand-alone ************
+ iLog->Put(_L("------ Export to file incrementally using encoder stand-alone"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ AddLandmarksToEncoderL(doAddAllLandmarks);
+
+ // ************ Export to buffer incrementally using encoder stand-alone ************
+// iLog->Put(_L("------ Export to buffer incrementally using encoder stand-alone"));
+// Not tested here since it does not result in KErrDiskFull but in KErrNoMemory. Time-consuming test
+/* ReInitializeEncoderEtcL();
+ delete iOutputBuffer;
+ iOutputBuffer = NULL;
+ iOutputBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ AddCollectionDataToEncoderL();
+ while (result == KErrNone)
+ {
+ TRAP(result, AddLandmarksToEncoderL(!doAddAllLandmarks));
+ iMsg.Format(_L("Size of output buffer: %d"), iOutputBuffer->Size());
+ iLog->Put(iMsg);
+ }
+ iMsg.Format(_L("Export to buffer left with error code %d"), result);
+ iLog->Put(iMsg);
+ */
+
+//// Testing Disk full during ExportLandmarksL()
+ iLog->Put(_L("\r\n--- Testing Disk full during ExportLandmarksL()"));
+
+ // Create array of all IDs in database
+ RArray<TPosLmItemId> itemIds;
+ CleanupClosePushL(itemIds);
+ PopulateArrayL(itemIds, doAddAllLandmarks);
+
+ // ************ 14. Export to file incrementally using ExportLandmarksL() ************
+ iLog->Put(_L("------ Export to file incrementally using ExportLandmarksL()"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ ExportWithExportLandmarksMethodL(itemIds, doExecuteIncrementally);
+
+ // ************ 15. Export to file synchronously using ExportLandmarksL() ************
+ iLog->Put(_L("------ Export to file synchronously using ExportLandmarksL()"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ ExportWithExportLandmarksMethodL(itemIds, !doExecuteIncrementally);
+
+ // ************ Export to buffer incrementally using ExportLandmarksL() ************
+// iLog->Put(_L("------ Export to buffer incrementally using ExportLandmarksL()"));
+// Not tested here since it does not result in KErrDiskFull but in KErrNoMemory. Time-consuming test
+
+ // ************ Export to buffer synchronously ExportLandmarksL() ************
+// iLog->Put(_L("------ Export to buffer synchronously ExportLandmarksL() ------"));
+// Not tested here since it does not result in KErrDiskFull but in KErrNoMemory. Time-consuming test
+
+ CleanupStack::PopAndDestroy(&itemIds);
+
+//// Testing Disk full during finalizing of encoder
+ iLog->Put(_L("\r\n--- Testing Disk full during finalizing of encoder"));
+
+ // ************ 16. Export to file using encoder stand-alone and finalizing incrementally ************
+ iLog->Put(_L("------ Export to file using encoder stand-alone and finalizing incrementally"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ AddLandmarksToEncoderL(!doAddAllLandmarks);
+ FillFile3L(); // Fill up disk space so much that next call to FinalizeL results in KErrDiskFull.
+ FinalizeEncoderL(doExecuteIncrementally);
+
+ // ************ 17. Export to file using encoder stand-alone and finalizing synchronously ************
+ iLog->Put(_L("------ Export to file using encoder stand-alone and finalizing synchronously"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ AddLandmarksToEncoderL(!doAddAllLandmarks);
+ FillFile3L(); // Fill up disk space so much that next call to FinalizeL results in KErrDiskFull.
+ FinalizeEncoderL(!doExecuteIncrementally);
+
+ // Create array of some IDs in database
+ CleanupClosePushL(itemIds);
+ PopulateArrayL(itemIds, !doAddAllLandmarks);
+
+ // ************ 18. Export to file using ExportLandmarksL() and finalizing incrementally ************
+ iLog->Put(_L("------ Export to file using ExportLandmarksL() and finalizing incrementally"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ ExportWithExportLandmarksMethodL(itemIds, doExecuteIncrementally);
+ FillFile3L(); // Fill up disk space so much that next call to FinalizeL results in KErrDiskFull.
+ FinalizeEncoderL(doExecuteIncrementally);
+
+ // ************ 19. Export to file using ExportLandmarksL() and finalizing synchronously ************
+ iLog->Put(_L("------ Export to file using ExportLandmarksL() and finalizing synchronously"));
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ ExportWithExportLandmarksMethodL(itemIds, !doExecuteIncrementally);
+ FillFile3L(); // Fill up disk space so much that next call to FinalizeL results in KErrDiskFull.
+ FinalizeEncoderL(!doExecuteIncrementally);
+
+ CleanupStack::PopAndDestroy(&itemIds);
+
+//// Testing when disk is already full
+ iLog->Put(_L("\r\n--- Testing when disk is already full"));
+ TVolumeInfo volumeInfoBeforeTest, volumeInfoAfterTest;
+
+ // ************ 20. CPosLandmarkEncoder::SetOutPutFileL() ************
+ iLog->Put(_L("------ CPosLandmarkEncoder::SetOutPutFileL()"));
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ ReInitializeEncoderEtcL();
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ ConsumeDiskSpaceL(iFile2, iSizeLimit2);
+ User::LeaveIfError(iFileServer.Volume(volumeInfoBeforeTest, EDriveC));
+ TRAP(result, iLandmarkEncoder->SetOutputFileL(KXmlOutputFile));
+ User::LeaveIfError(iFileServer.Volume(volumeInfoAfterTest, EDriveC));
+
+ // Verify
+ _LIT(KSetFile1, "SetOutPutFileL() didn't result in KErrDiskFull but in %d");
+ AssertTrueSecL(result == KErrDiskFull, KSetFile1, result);
+ iLog->Put(_L("SetOutputFileL() left with KErrDiskFull"));
+ _LIT(KSetFile2, "SetOutPutFileL() consumed disk space even if critical level has been passed. %d");
+ AssertTrueSecL(volumeInfoBeforeTest.iFree == volumeInfoAfterTest.iFree, KSetFile2);
+
+ // ************ 21. CPosLandmarkEncoder::AddLandmarkL() ************
+ iLog->Put(_L("------ CPosLandmarkEncoder::AddLandmarkL()"));
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ CPosLmItemIterator* iterator = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iterator);
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(iterator->NextL());
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ ConsumeDiskSpaceL(iFile2, iSizeLimit2);
+ User::LeaveIfError(iFileServer.Volume(volumeInfoBeforeTest, EDriveC));
+ TRAP(result, iLandmarkEncoder->AddLandmarkL(*landmark));
+ User::LeaveIfError(iFileServer.Volume(volumeInfoAfterTest, EDriveC));
+ CleanupStack::PopAndDestroy(2, iterator);
+
+ // Verify
+ _LIT(KAddLmErr1, "Adding LM to encoder didn't result in KErrDiskFull but in %d when beyond critical level");
+ AssertTrueSecL(result == KErrDiskFull, KAddLmErr1, result);
+ iLog->Put(_L("AddLandmarkL() left with KErrDiskFull"));
+ _LIT(KAddLmErr2, "AddLandmarkL() consumed disk space even if critical level has been passed. %d");
+ AssertTrueSecL(volumeInfoBeforeTest.iFree == volumeInfoAfterTest.iFree, KAddLmErr2);
+
+ // ************ 22. CPosLandmarkEncoder::FinalizeL() ************
+ iLog->Put(_L("------ CPosLandmarkEncoder::FinalizeL()"));
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+ AddLandmarksToEncoderL(!doAddAllLandmarks);
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ ConsumeDiskSpaceL(iFile2, iSizeLimit2);
+ delete iOperation;
+ iOperation = NULL;
+ User::LeaveIfError(iFileServer.Volume(volumeInfoBeforeTest, EDriveC));
+ TRAP(result, iOperation = iLandmarkEncoder->FinalizeEncodingL());
+ User::LeaveIfError(iFileServer.Volume(volumeInfoAfterTest, EDriveC));
+
+ // Verify
+ _LIT(KFinalizeErr1, "FinalizeL() didn't result in KErrDiskFull but in %d");
+ AssertTrueSecL(result == KErrDiskFull, KFinalizeErr1, result);
+ iLog->Put(_L("FinalizeEncodingL() left with KErrDiskFull"));
+ _LIT(KFinalizeErr2, "FinalizeL() consumed disk space even if critical level has been passed. %d");
+ AssertTrueSecL(volumeInfoBeforeTest.iFree == volumeInfoAfterTest.iFree, KFinalizeErr2);
+
+ // ************ 23. CPosLandmarkEncoder::SetOutPutFileL() - Bonus test 1 ************
+ iLog->Put(_L("------ CPosLandmarkEncoder::SetOutPutFileL() - Bonus test 1"));
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ ReInitializeEncoderEtcL();
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ ConsumeDiskSpaceL(iFile2, iSizeLimit2);
+ TRAP(result, iLandmarkEncoder->SetOutputFileL(KXmlOutputFile));
+
+ // Verify
+ AssertTrueSecL(result == KErrDiskFull, KSetFile1, result);
+ iLog->Put(_L("SetOutputFileL() left with KErrDiskFull"));
+
+ // Try it again
+ TRAP(result, iLandmarkEncoder->SetOutputFileL(KXmlOutputFile));
+
+ // Verify
+ _LIT(KSetFile3, "SetOutPutFileL() didn't result in KErrAlreadyExists but in %d");
+ AssertTrueSecL(result == KErrAlreadyExists, KSetFile3, result);
+ iLog->Put(_L("SetOutputFileL() left with KErrAlreadyExists"));
+
+ // ************ 24. CPosLandmarkEncoder::FinalizeL() - Bonus test 2 ************
+ // This test tests if it is possible to finalize when adding LMs to encoder has
+ // been interrupted due to KErrDiskFull.
+ iLog->Put(_L("------ CPosLandmarkEncoder::FinalizeL() - Bonus test 2"));
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ ReInitializeEncoderEtcL();
+ iLandmarkEncoder->SetOutputFileL(KXmlOutputFile);
+ AddCollectionDataToEncoderL();
+
+ // Add landmarks will result in KErrDiskFull
+ AddLandmarksToEncoderL(doAddAllLandmarks);
+
+ // Restore some disk space
+ iFile1.Close();
+ DeleteFileL(KFile1);
+
+ // Try to finalize
+ delete iOperation;
+ iOperation = NULL;
+ TRAP(result, ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL()));
+ AssertTrueSecL(result == KErrNone, _L("FinalizeL() left with %d"), result);
+ iLog->Put(_L("FinalizeL() successful"));
+
+ // ************ CPosLandmarkEncoder::SetOutPutFileL() - Bonus test 3 ************
+// Not tested here since this is a panic test. (Not tested anywhere else)
+/* iLog->Put(_L("------ CPosLandmarkEncoder::SetOutPutFileL() - Bonus test 3"));
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ ReInitializeEncoderEtcL();
+ User::LeaveIfError(iFile2.Create(iFileServer, KFile2, EFileWrite));
+ ConsumeDiskSpaceL(iFile2, iSizeLimit2);
+ TRAP(result, iLandmarkEncoder->SetOutputFileL(KXmlOutputFile));
+
+ // Verify
+ AssertTrueSecL(result == KErrDiskFull, KSetFile1, result);
+ iLog->Put(_L("SetOutputFileL() left with KErrDiskFull"));
+
+ // Free some disc space and try to finish the export operation. (AddLandmarksL will panic with EPosLmProtocolBreak)
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ AddLandmarksToEncoderL(!doAddAllLandmarks);
+ FinalizeEncoderL(doExecuteIncrementally);*/
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ImportLandmarksTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::ImportLandmarksTestL(TBool aCriticalLevelPassed)
+ {
+ delete iInputBuffer;
+ iInputBuffer = NULL;
+ iInputBuffer = CreateInputBufferL();
+ TBool doExecuteIncrementally = ETrue;
+
+ // ************ 3. Import all LMs in XML file incrementally ************
+ iLog->Put(_L("---- Import all LMs in XML file incrementally"));
+ ImportLandmarksL(KXmlInputFile, NULL, doExecuteIncrementally, aCriticalLevelPassed);
+
+ // ************ 4. Import all LMs in XML file synchronously ************
+ iLog->Put(_L("---- Import all LMs in XML file synchronously"));
+ ImportLandmarksL(KXmlInputFile, NULL, !doExecuteIncrementally, aCriticalLevelPassed);
+
+ // ************ 5. Import all LMs in XML buffer incrementally ************
+ iLog->Put(_L("---- Import all LMs in XML buffer incrementally"));
+ ImportLandmarksL(KNullDesC, NULL, doExecuteIncrementally, aCriticalLevelPassed);
+
+ // ************ 6. Import all LMs in XML buffer synchronously ************
+ iLog->Put(_L("---- Import all LMs in XML buffer synchronously"));
+ ImportLandmarksL(KNullDesC, NULL, !doExecuteIncrementally, aCriticalLevelPassed);
+
+ // Create array of ids to Import (subset of all landmarks in the input file/buffer)
+ RArray<TUint> itemIds;
+ CleanupClosePushL(itemIds);
+ for (TInt i = 10; i < 60; i++)
+ {
+ User::LeaveIfError(itemIds.Append(i));
+ }
+
+ // ************ 7. Import a subset of LMs in XML file incrementally ************
+ iLog->Put(_L("---- Import a subset of LMs in XML file incrementally"));
+ ImportLandmarksL(KXmlInputFile, &itemIds, doExecuteIncrementally, aCriticalLevelPassed);
+
+ // ************ 8. Import a subset of LMs in XML file synchronously ************
+ iLog->Put(_L("---- Import a subset of LMs in XML file synchronously"));
+ ImportLandmarksL(KXmlInputFile, &itemIds, !doExecuteIncrementally, aCriticalLevelPassed);
+
+ // ************ 9. Import a subset of LMs in XML buffer incrementally ************
+ iLog->Put(_L("---- Import a subset of LMs in XML buffer incrementally"));
+ ImportLandmarksL(KNullDesC, &itemIds, doExecuteIncrementally, aCriticalLevelPassed);
+
+ // ************ 10. Import a subset of LMs in XML buffer synchronously ************
+ iLog->Put(_L("---- Import a subset of LMs in XML buffer synchronously"));
+ ImportLandmarksL(KNullDesC, &itemIds, !doExecuteIncrementally, aCriticalLevelPassed);
+
+ CleanupStack::PopAndDestroy(&itemIds);
+
+ iFile2.Close();
+ DeleteFileL(KFile2);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ConsumeDiskSpaceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::ConsumeDiskSpaceL(
+ RFile& aFile, TInt aSizeLimit)
+ {
+ TInt err(KErrNone);
+
+ TVolumeInfo volumeInfo;
+ err=iFileServer.Volume(volumeInfo, EDriveC);
+
+ // Fill file fast
+ HBufC8* bigBuf = (&KNonsense)->AllocLC();
+ while (volumeInfo.iFree > aSizeLimit)
+ {
+ err = aFile.Write(*bigBuf);
+ if (err != KErrNone) iLog->Put(_L("Problem writing"));
+ err = iFileServer.Volume(volumeInfo, EDriveC);
+ if (err != KErrNone) iLog->Put(_L("Problem voluming"));
+ }
+
+ CleanupStack::PopAndDestroy(bigBuf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ImportLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::ImportLandmarksL(
+ const TDesC& aInputFile,
+ RArray<TUint>* aArrayOfIds,
+ TBool aExecuteIncrementally,
+ TBool aTestBeyondCriticalLevel)
+ {
+ // Recreate parser
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ // to minimize risk of KErrLocked
+ User::After(500000);
+ iLog->Put(_L("Compacting"));
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ User::After(500000);
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KMimeType);
+
+ iProgress = 0;
+ TBool useInputFile = aInputFile != KNullDesC;
+ TBool importSubset = aArrayOfIds != NULL;
+ TInt result(KErrNone);
+
+ // Prepare and set output for exported LMs
+ if (useInputFile)
+ {
+ iLog->Put(_L("SetInputFileL"));
+ iLandmarkParser->SetInputFileL(aInputFile);
+ }
+ else // use buffer as output
+ {
+ iLog->Put(_L("SetInputBuffer"));
+ iLandmarkParser->SetInputBuffer(*iInputBuffer);
+ }
+
+ // Sample the db size
+ CPosLandmarkDatabase::TSize dbSizeBeforeImport;
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, dbSizeBeforeImport = iDatabase->SizeL());
+ if (err == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked from iDatabase->SizeL()"));
+ User::After(100000);
+ }
+ }
+
+ // Start importing LMs.
+ delete iOperation;
+ iOperation = NULL;
+ if (importSubset)
+ {
+ iLog->Put(_L("ImportLandmarksL"));
+ iOperation = iDatabase->ImportLandmarksL(
+ *iLandmarkParser, *aArrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+ }
+ else
+ {
+ iLog->Put(_L("ImportLandmarksL"));
+ iOperation = iDatabase->ImportLandmarksL(
+ *iLandmarkParser, CPosLandmarkDatabase::EDefaultOptions);
+ }
+
+ // Execute importing LMs
+ iLog->Put(_L("ExecuteLmOperationL"));
+ result = ExecuteLmOperationL(aExecuteIncrementally);
+
+ // Check result
+ _LIT(KErrMsg, "ImportLandmarksL() didn't result in KErrDiskFull but in %d");
+ AssertTrueSecL(result == KErrDiskFull, KErrMsg, result);
+
+ if (aTestBeyondCriticalLevel)
+ {
+ // Sample the db size
+ TInt err2 = KErrLocked;
+ CPosLandmarkDatabase::TSize dbSizeAfterImport;
+ while (err2 == KErrLocked)
+ {
+ TRAP(err2, dbSizeAfterImport = iDatabase->SizeL());
+ if (err2 == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked from iDatabase->SizeL(2)"));
+ User::After(100000);
+ }
+ }
+
+ TBool dbSizeIsConstant = dbSizeAfterImport.iFileSize == dbSizeBeforeImport.iFileSize;
+ _LIT(KErrMsg, "Database size has changed when importing landmarks beyond critical level");
+ if (!dbSizeIsConstant)
+ {
+ LogErrorAndLeave(KErrMsg);
+ }
+ iLog->Put(_L("Size of database untouched when importing landmarks beyond critical level"));
+ }
+ else
+ {
+ if (aExecuteIncrementally)
+ {
+ _LIT(KFormat, "Got KErrDiskFull after importing %d%% of the landmarks.");
+ iMsg.Format(KFormat, iProgress);
+ }
+ else
+ {
+ _LIT(KFormat, "Got KErrDiskFull when importing landmarks synchronously");
+ iMsg.Copy(KFormat());
+ }
+ iLog->Put(iMsg);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::InitiateCriticalLevelL
+// Initiates iCriticalLevel. (value of iCriticalLevel is extracted from an MLFW
+// resource file that can reside on any drive)
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::InitiateCriticalLevelL()
+ {
+ iLog->Put(_L("InitiateCriticalLevelL"));
+ /*
+ // Find drive that the resource file resides on.
+ TFindFile* filefinder = new (ELeave) TFindFile(iFileServer);
+ CleanupStack::PushL(filefinder);
+ TParse* fileparser = new (ELeave) TParse;
+ CleanupStack::PushL(fileparser);
+ fileparser->Set(KPosResourceFile, NULL, NULL);
+ User::LeaveIfError(
+ filefinder->FindByDir(fileparser->NameAndExt(), fileparser->DriveAndPath()));
+
+ // Open resource file
+ RResourceFile resFile;
+ resFile.OpenL(iFileServer, filefinder->File());
+ CleanupClosePushL(resFile);
+
+ // Allocate the critical level as a buffer
+ //TInt R_POS_LANDMARK_INTERNAL_CRITICAL_DISK_LEVEL = 250;
+ HBufC8* resourceBuffer = resFile.AllocReadLC(iCriticalThreshold);
+
+ // Convert the buffer to an int
+ TResourceReader resReader;
+ resReader.SetBuffer(resourceBuffer);
+ iCriticalLevel = KOneK * resReader.ReadInt16();
+ CleanupStack::PopAndDestroy(4, filefinder);
+ */
+ iCriticalLevel = iCriticalThreshold;
+ iSizeLimit1 = iCriticalLevel + 18 * KOneK; // Do not mess with this value!
+ iSizeLimit2 = iCriticalLevel - 20 * KOneK;
+
+ iMsg.Format(_L("CriticalLevel = %d, limit1 = %d, limit2 = %d "), iCriticalLevel, iSizeLimit1, iSizeLimit2);
+ iLog->Put(iMsg);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::LogVolumeInfoL
+// Initiates iCriticalLevel. (value of iCriticalLevel is extracted from an MLFW
+// resource file that can reside on any drive)
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::LogVolumeInfoL()
+ {
+ _LIT(KUID,"Unique ID: %08x\r\n");
+ _LIT(KSize,"Size: %d bytes\r\n");
+ _LIT(KFree,"Free space: %d bytes\r\n");
+
+ TVolumeInfo volumeInfo;
+ TInt err = iFileServer.Volume(volumeInfo, EDriveC);
+ if (err != KErrNone)
+ LogErrorAndLeave(_L("Error from iFileServer"));
+
+ iMsg.Zero();
+ iMsg.AppendFormat(KUID, volumeInfo.iUniqueID);
+ iMsg.AppendFormat(KSize, volumeInfo.iSize);
+ iMsg.AppendFormat(KFree, volumeInfo.iFree);
+ iLog->Put(_L("\r\nMemory info:"));
+ iLog->Put(iMsg);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::DeleteFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::DeleteFileL(const TDesC& aFile)
+ {
+ TInt err = iFileServer.Delete(aFile);
+
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ _LIT(KErrText, "DeleteFileL(): The file %S could not be deleted, errorcode %d");
+ iMsg.Format(KErrText, &aFile, err);
+ LogErrorAndLeave(iMsg, err);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::FillFile3L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::FillFile3L()
+ {
+ iFile3.Close();
+ iFileServer.Delete(KFile3);
+ User::LeaveIfError(iFile3.Create(iFileServer, KFile3, EFileWrite));
+
+ TVolumeInfo volumeInfo;
+ User::LeaveIfError(iFileServer.Volume(volumeInfo, EDriveC));
+ while (volumeInfo.iFree > iCriticalLevel + 512)
+ {
+ User::LeaveIfError(iFile3.Write(K64B));
+ User::LeaveIfError(iFileServer.Volume(volumeInfo, EDriveC));
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::CreateInputBufferL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+HBufC8* CPosTp55::CreateInputBufferL()
+ {
+ RFile inputFile;
+ User::LeaveIfError(inputFile.Open(iFileServer, KXmlInputFile, EFileRead));
+ CleanupClosePushL(inputFile);
+
+ TInt fileSize;
+ User::LeaveIfError(inputFile.Size(fileSize));
+ HBufC8* buffer = HBufC8::NewLC(fileSize);
+
+ // Copy file contents to buffer
+ TPtr8 writableBuffer = buffer->Des();
+ User::LeaveIfError(inputFile.Read(writableBuffer, fileSize));
+
+ CleanupStack::Pop(buffer);
+ CleanupStack::PopAndDestroy(&inputFile);
+ return buffer;
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ReInitializeEncoderEtcL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::ReInitializeEncoderEtcL()
+ {
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KMimeType);
+
+ DeleteFileL(KXmlOutputFile);
+ DeleteFileL(KXmlBufferDumpFile);
+ iFile3.Close();
+ DeleteFileL(KFile3);
+
+ iProgress = 0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ReInitializeEncoderEtcL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp55::ExecuteLmOperationL(
+ TBool aExecuteIncrementally)
+ {
+ TInt result(0);
+
+ if (aExecuteIncrementally)
+ {
+ // Execute the finalizing incrementally.
+ iOperationWrapper->Start(iOperation, this);
+ CActiveScheduler::Start();
+ result = iOperationWrapper->iStatus.Int();
+ }
+ else
+ {
+ TRAP(result, iOperation->ExecuteL());
+ }
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::SetOutputBufferL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::SetOutputBufferL()
+ {
+ delete iOutputBuffer;
+ iOutputBuffer = NULL;
+ iOutputBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::AddCollectionDataToEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::AddCollectionDataToEncoderL()
+ {
+ // Add long collection name to encoder
+ HBufC* collectionName = HBufC::NewLC(2 * KNonsense().Length());
+ collectionName->Des().Copy(KNonsense);
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, *collectionName);
+
+ // Add long collection desc to encoder
+ HBufC* collectionDesc = HBufC::NewLC(3 * collectionName->Length());
+ collectionDesc->Des().Append(*collectionName);
+ collectionDesc->Des().Append(*collectionName);
+ collectionDesc->Des().Append(*collectionName);
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, *collectionDesc);
+ CleanupStack::PopAndDestroy(2, collectionName);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::AddLandmarksToEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::AddLandmarksToEncoderL(TBool aAddAll)
+ {
+ // Add landmarks to export to encoder manually.
+ TInt result(0);
+ CPosLmItemIterator* iterator = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iterator);
+ TInt maxNrOfLMs = (aAddAll) ? iterator->NumOfItemsL() : KNrOfLandmarksToExport;
+ for (TInt i = 0; i < maxNrOfLMs && result != KErrDiskFull; i++)
+ {
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(iterator->NextL());
+ TRAP(result, iLandmarkEncoder->AddLandmarkL(*landmark));
+ if (result == KErrLocked)
+ {
+ iLog->Put(_L("KErrLocked when AddLandmarkL in AddLandmarksToEncoderL"));
+ User::After(100000);
+ }
+ CleanupStack::PopAndDestroy(landmark);
+ iProgress = (TInt) (100 * i / maxNrOfLMs);
+ }
+ CleanupStack::PopAndDestroy(iterator);
+
+ if (aAddAll)
+ {
+ if (result == KErrDiskFull)
+ {
+ iMsg.Format(_L("Got KErrDiskFull after adding %d%% of the landmarks to the encoder."), iProgress);
+ iLog->Put(iMsg);
+ }
+ else
+ {
+ _LIT(KAddLmErr, "Didn't get EKrrDiskFull but %d when adding LMs to encoder");
+ LogVolumeInfoL();
+ LogErrorAndLeave(KAddLmErr);
+ }
+ }
+ else
+ {
+ _LIT(KAddLmErr, "Didn't get EKrrNone but %d when adding LMs to encoder");
+ AssertTrueSecL(result == KErrNone, KAddLmErr, result);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::ExportWithExportLandmarksMethodL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::ExportWithExportLandmarksMethodL(
+ RArray<TPosLmItemId>& aArrayOfIds,
+ TBool aExecuteIncrementally)
+ {
+ delete iOperation;
+ iOperation = NULL;
+ iOperation = iDatabase->ExportLandmarksL(
+ *iLandmarkEncoder, aArrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+ TInt result = ExecuteLmOperationL(aExecuteIncrementally);
+
+ if (aArrayOfIds.Count() == KNrOfLandmarksToExport) // not all of the LMs have been added
+ {
+ // Check that KErrDiskFull is not returned
+ _LIT(KErrMsg, "Expected KErrNone from ExportLandmarksL() but got %d.");
+ AssertTrueSecL(result == KErrNone, KErrMsg, result);
+ }
+ else // We should have gotten KErrDiskFull when adding LMs to encoder.
+ {
+ _LIT(KErrMsg, "ExportLandmarksL() didn't result in KErrDiskFull but in %d");
+ AssertTrueSecL(result == KErrDiskFull, KErrMsg, result);
+ if (aExecuteIncrementally)
+ {
+ iMsg.Format(_L("Got KErrDiskFull after adding %d%% of the landmarks to the encoder."), iProgress);
+ }
+ else
+ {
+ iMsg = _L("Got KErrDiskFull when exporting landmarks synchronously");
+ }
+ iLog->Put(iMsg);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::FinalizeEncoderL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::FinalizeEncoderL(
+ TBool aExecuteIncrementally)
+ {
+ delete iOperation;
+ iOperation = NULL;
+ TRAPD(result, iOperation = iLandmarkEncoder->FinalizeEncodingL());
+ if (result == KErrNone)
+ {
+ result = ExecuteLmOperationL(aExecuteIncrementally);
+
+ // Check that KErrDiskFull is returned
+ _LIT(KErrMsg, "FinalizeL() didn't result in KErrDiskFull but in %d");
+ AssertTrueSecL(result == KErrDiskFull, KErrMsg, result);
+ iLog->Put(_L("Execution of FinalizeEncodingL() left with KErrDiskFull"));
+ }
+ else
+ {
+ AssertTrueSecL(result == KErrDiskFull, _L("FinalizeEncodingL() left with %d"), result);
+ iLog->Put(_L("FinalizeEncodingL() left with KErrDiskFull"));
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::FinalizeEncoderL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::PopulateArrayL(
+ RArray<TPosLmItemId>& aArray,
+ TBool aDoAddAllLms)
+ {
+ CPosLmItemIterator* iterator = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iterator);
+ TInt nrOfLms = aDoAddAllLms ? iterator->NumOfItemsL() : KNrOfLandmarksToExport;
+ for (TInt i = 0; i < nrOfLms; i++)
+ {
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(iterator->NextL());
+ User::LeaveIfError(aArray.Append(landmark->LandmarkId()));
+ CleanupStack::PopAndDestroy(landmark);
+ }
+ CleanupStack::PopAndDestroy(iterator);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::CopyResourceFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::CopyResourceFileL(const TDesC& aResourceFile)
+ {
+ // Release all landmark references to make DLLs be unloaded.
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ delete iOperation;
+ iOperation = NULL;
+
+ CFileMan* fileMan = CFileMan::NewL(iFileServer);
+ CleanupStack::PushL(fileMan);
+
+ // Check if landmark is flashed
+ if (!BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
+ {
+ iLog->Put(_L("Landmark is NOT flashed, backing up eposlmintservices.rsc by renaming it bofore copying rsc-file."));
+ // Landmark FW is not flashed. Rename the file before copying an own defiend file.
+ // Since landmark FW is not flashed the file should exist hence leaving if it is not found!
+ User::LeaveIfError(fileMan->Rename(KInternalServicesResFileCdrive, KInternalServicesResFileBackup, CFileMan::EOverWrite));
+ }
+ else
+ {
+ iLog->Put(_L("Landmark framework is flashed, copying global categories to c:"));
+ }
+
+ User::LeaveIfError(fileMan->Copy(aResourceFile, KInternalServicesResFileCdrive, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp55::TryRestoreResourceFile
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp55::TryRestoreResourceFile()
+ {
+ CFileMan* fileMan = NULL;
+ TRAPD(err, fileMan = CFileMan::NewL(iFileServer));
+ if (fileMan)
+ {
+ // Try to restore the backup up rsc-file (only possible when LM FW is not flashed.
+ TInt result = fileMan->Copy(KInternalServicesResFileBackup, KInternalServicesResFileCdrive, CFileMan::EOverWrite);
+ if (result == KErrNotFound)
+ {
+ if (BaflUtils::FileExists(iFileServer, KInternalServicesResFileRom))
+ {
+ // LM FW is flashed. We need to remove the rsc-file on c:
+ fileMan->Delete(KInternalServicesResFileCdrive);
+ }
+ }
+ delete fileMan;
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp1.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,169 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp1.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_LandmarkConstants.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp1::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp1::StartL()
+ {
+ _LIT(KUriErr, "Incorrect URI is returned from the API");
+ _LIT(KDefaultDbUri, "file://C:eposlm.ldb");
+
+ // Init test part
+ RemoveAllLmDatabasesL();
+
+
+ // End init test part
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ iLog->Log(_L("CPosLandmarkDatabase::OpenL done"));
+ CleanupStack::PushL(lmd);
+
+ // Check that THAN-65NHQW has been corrected by doing a ExecuteAndDeleteLD(lmd->InitializeL()) followed by
+
+ if (lmd->IsInitializingNeeded())
+ {
+ iLog->Log(_L("IsInitializingNeeded()"));
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ RunAsyncOperationLD(lmd->InitializeL());
+ }
+ else
+ {
+ iLog->Log(_L("IsInitializingNeeded() Not needed"));
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ RunAsyncOperationLD(lmd->InitializeL());
+ }
+
+
+ CleanupStack::PopAndDestroy(lmd);
+
+ VerifyLockedDatabaseL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp1::VerifyLockedDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp1::VerifyLockedDatabaseL()
+ {
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+ // copy the test db to the private path
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp1TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KLmTp1DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp1TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL(KTp1TestDb);
+ CleanupStack::PushL(db1);
+ if (db1->IsInitializingNeeded())
+ {
+ TRAPD( err, ExecuteAndDeleteLD( db1->InitializeL() ) );
+ AssertTrueSecL(err == KErrNone, _L("Init db failed"));
+ }
+
+
+
+ // Take read lock
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ User::LeaveIfError(ids.Append(1));
+ User::LeaveIfError(ids.Append(3));
+ User::LeaveIfError(ids.Append(4));
+ User::LeaveIfError(ids.Append(6));
+ User::LeaveIfError(ids.Append(7));
+ User::LeaveIfError(ids.Append(9));
+ User::LeaveIfError(ids.Append(24));
+ User::LeaveIfError(ids.Append(14));
+ User::LeaveIfError(ids.Append(66));
+ User::LeaveIfError(ids.Append(61));
+ User::LeaveIfError(ids.Append(14));
+ CPosLmOperation* operation = db1->PreparePartialLandmarksL(ids);
+ CleanupStack::PushL(operation);
+ TReal32 progress(0);
+ TRequestStatus status;
+ while (progress < 0.4)
+ {
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ // Try to instantiate a new db handle
+ operation->NextStep(status, progress);
+ CPosLandmarkDatabase* db2 = CPosLandmarkDatabase::OpenL();
+ iLog->Log(_L("CPosLandmarkDatabase::OpenL done"));
+ delete db2;
+ User::WaitForRequest(status);
+
+ // Release read lock
+ CleanupStack::PopAndDestroy(operation);
+
+ // Take write lock
+ operation = db1->RemoveAllLandmarksL();
+ CleanupStack::PushL(operation);
+ progress = 0;
+ while (progress < 0.4)
+ {
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ // Try to instantiate a new db handle - should result in KErrLocked
+ operation->NextStep(status, progress);
+ db2 = NULL;
+ TRAPD(err1, db2 = CPosLandmarkDatabase::OpenL());
+ delete db2;
+ User::WaitForRequest(status);
+ AssertTrueSecL(err1 == KErrLocked, _L("OpenL() didn't result in KErrLocked but in %d"), err1);
+
+ CleanupStack::PopAndDestroy(3, db1);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp10.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1465 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp10.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMOperation.h>
+#include <e32math.h>
+
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KNoCategoriesTp10 = 100;
+const TInt KNoLandmarksTp10 = 100;
+
+const TInt KAddStartIndex=5;
+const TInt KAddEndIndex=20;
+const TInt KAddCategoryIndex=8;
+
+const TInt KAddStartIndexAsync=21;
+const TInt KAddEndIndexAsync=82;
+const TInt KAddCategoryIndexAsync=10;
+
+const TInt KRemoveStartIndex=85;
+const TInt KRemoveEndIndex=95;
+
+const TInt KRemoveStartIndexAsync=75;
+const TInt KRemoveEndIndexAsync=84;
+
+const TInt KRemoveSetStartIndex=50;
+const TInt KRemoveSetEndIndex=74;
+
+const TInt KRemoveSetStartIndexAsync=0;
+const TInt KRemoveSetEndIndexAsync=49;
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp10::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::StartL()
+ {
+ _LIT(KLogFileName, "c:\\documents\\TP10TimeMeasurements.txt");
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+ // Test LMREQ121 below
+ TestMissingCategories1L();
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+ TestMissingCategories2L();
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+ // copy the test db to the private path
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp10TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KLmTp10DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp10TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ iDatabase= CPosLandmarkDatabase::OpenL(KTp10TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL()); // Synchronous since no argument
+ }
+
+ TTime start, stop, totalStart, totalStop;
+ totalStart.UniversalTime();
+
+ start.UniversalTime();
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ stop.UniversalTime();
+
+ TInt64 msec = (stop.Int64() - start.Int64());
+ TBuf8<KMsgBufSize> msg;
+ _LIT8(KTrace, "CPosLmCategoryManager::NewL = %d usec");
+ msg.Format(KTrace, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Add Category
+ start.UniversalTime();
+ AddCategoriesL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace2, "AddCategoriesL = %d msec");
+ msg.Format(KTrace2, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Read Category
+ start.UniversalTime();
+ ReadCategoriesL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace3, "ReadCategoriesL = %d msec");
+ msg.Format(KTrace3, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Update Category
+ start.UniversalTime();
+ UpdateCategoriesL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace4, "UpdateCategoriesL = %d msec");
+ msg.Format(KTrace4, msec);
+ LogToFileL(KLogFileName, msg);
+
+ ReadCategoriesL();
+ AddLandmarksL();
+
+// Add Categories to LM synch
+ start.UniversalTime();
+ AddCategoriesToLandmarksL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace5, "AddCategoriesToLandmarksL = %d msec");
+ msg.Format(KTrace5, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Add Categories to LM asynch
+ start.UniversalTime();
+ AddCategoriesToLandmarksAsyncL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace6, "AddCategoriesToLandmarksAsyncL = %d msec");
+ msg.Format(KTrace6, msec);
+ LogToFileL(KLogFileName, msg);
+
+ AddCategoriesToLandmarksAsyncErrCheckL();
+
+// Add Categories to LM using WaitForReq
+ start.UniversalTime();
+ AddCategoriesToLandmarksUsingWaitForReqL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace6b, "AddCategoriesToLandmarksUsingWaitForReqL = %d msec");
+ msg.Format(KTrace6b, msec);
+ LogToFileL(KLogFileName, msg);
+
+ AddCategoriesToLandmarksAsyncErrCheckL();
+
+// Remove Category synchronously
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ start.UniversalTime();
+ RemoveCategoryL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace7, "RemoveCategoryL = %d msec");
+ msg.Format(KTrace7, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove Category asynchronously
+ start.UniversalTime();
+ RemoveCategoryAsyncL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace8, "RemoveCategoryAsyncL = %d msec");
+ msg.Format(KTrace8, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove Category using WaitForRequest
+ start.UniversalTime();
+ RemoveCategoryUsingWaitForReqL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace8b, "RemoveCategoryUsingWaitForReqL = %d msec");
+ msg.Format(KTrace8b, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove set of categories synchronously
+ start.UniversalTime();
+ RemoveSetOfCategoriesL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace9, "RemoveSetOfCategoriesL = %d msec");
+ msg.Format(KTrace9, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove set of categories asynchronously
+ start.UniversalTime();
+ RemoveSetOfCategoriesAsyncL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace10, "RemoveSetOfCategoriesAsyncL = %d msec");
+ msg.Format(KTrace10, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove set of categories using WaitForRequest
+ start.UniversalTime();
+ RemoveSetOfCategoriesUsingWaitForReqL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace10b, "RemoveSetOfCategoriesUsingWaitForReqL = %d msec");
+ msg.Format(KTrace10b, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove category from set of landmarks synchronously
+ iCategories.ResetAndDestroy();
+ AddCategoriesL();
+ AddCategoriesToLandmarksL();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ start.UniversalTime();
+ RemoveCategoryFromSetOfLandmarksL();
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace11, "RemoveCategoryFromSetOfLandmarksL = %d msec");
+ msg.Format(KTrace11, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove category from set of landmarks asynchronously
+ start.UniversalTime();
+ RemoveCategoryFromSetOfLandmarksAsyncL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace12, "RemoveCategoryFromSetOfLandmarksAsyncL = %d msec");
+ msg.Format(KTrace12, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Remove category from set of landmarks using User::WaitForRequest()
+ start.UniversalTime();
+ RemoveCategoryFromSetOfLandmarksUsingWaitForReqL();
+ stop.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace12b, "RemoveCategoryFromSetOfLandmarksUsingWaitForReqL = %d msec");
+ msg.Format(KTrace12b, msec);
+ LogToFileL(KLogFileName, msg);
+
+ AddCategoriesToLandmarksL();
+ delete iDatabase;
+ iDatabase=NULL;
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+
+ iLog->Log(_L("BEFORE : BackupDbFileL"));
+ iDatabase = BackupTp10DbFileL();
+ iLog->Log(_L("AFTER : BackupDbFileL"));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+
+ // Cancel tests immediately
+ iLog->Log(_L("TESTS BELOW ARE TESTING CANCEL"));
+ AddCategoriesToLandmarksAsyncAndCancelL();
+ RemoveCategoryAsyncAndCancelL();
+ RemoveSetOfCategoriesAsyncAndCancelL();
+ RemoveCategoryFromSetOfLandmarksAsyncAndCancelL();
+
+ // Cancel tests after a while
+ iLog->Log(_L("TESTS BELOW ARE CANCEL IN CALLBACK"));
+ delete iDatabase;
+ iDatabase=NULL;
+
+
+ iLog->Log(_L("BEFORE : RestoreDbFileL"));
+ iDatabase = RestoreTp10DbFileL();
+ iLog->Log(_L("AFTER : RestoreDbFileL"));
+
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ AddCategoriesToLandmarksAsyncAndCancelL(ETrue);
+ RemoveCategoryAsyncAndCancelL(ETrue);
+ RemoveSetOfCategoriesAsyncAndCancelL(ETrue);
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase = RestoreTp10DbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ RemoveCategoryFromSetOfLandmarksAsyncAndCancelL(ETrue);
+
+
+ totalStop.UniversalTime();
+ msec = (totalStop.Int64() - totalStart.Int64())/1000;
+ _LIT8(KTrace13, "Complete test case = %d msec");
+ msg.Format(KTrace13, msec);
+ LogToFileL(KLogFileName, msg);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::CloseTest()
+ {
+ iCategories.ResetAndDestroy();
+ iCategories.Close();
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+ delete iDatabase;
+ iDatabase=NULL;
+ delete iCategoryManager;
+ iCategoryManager=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddCategoriesL()
+ {
+ iLog->Log(_L("Adding and copying categories"));
+ _LIT(KAlreadyExistErr, "A category with the same name is already added so add should return KErrAlreadyExists");
+ _LIT(KNoNameErr, "The Category has no name so add should return KErrArgument");
+
+ _LIT(KCategoryName, "CategoryTP10 - %d");
+
+ TInt index=0;
+ while (index < KNoCategoriesTp10)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName, ++index);
+ CPosLandmarkCategory* category = CreateCategoryLC(name);
+
+ CPosLandmarkCategory* copy = CPosLandmarkCategory::NewLC(*category);
+ name.Format(KCategoryName, ++index);
+ copy->SetCategoryNameL(name);
+
+ CPosLandmarkCategory* category2 = CPosLandmarkCategory::NewL();
+ CleanupStack::PushL(category2);
+ name.Format(KCategoryName, ++index);
+ category2->SetCategoryNameL(name);
+
+ CPosLandmarkCategory* copy2 = CPosLandmarkCategory::NewL(*category2);
+ CleanupStack::PushL(copy2);
+ name.Format(KCategoryName, ++index);
+ copy2->SetCategoryNameL(name);
+
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ iCategoryManager->AddCategoryL(*category);
+ iCategoryManager->AddCategoryL(*copy);
+ iCategoryManager->AddCategoryL(*category2);
+ iCategoryManager->AddCategoryL(*copy2);
+
+ CPosLandmarkCategory* category3 = CPosLandmarkCategory::NewLC();
+ category3->SetCategoryNameL(name);
+
+ TInt err = 0;
+ TRAP(err, iCategoryManager->AddCategoryL(*category3));
+ AssertTrueSecL(err == KErrAlreadyExists, KAlreadyExistErr);
+ CleanupStack::PopAndDestroy(category3);
+
+ CPosLandmarkCategory* category4 = CPosLandmarkCategory::NewLC();
+ TRAP(err, iCategoryManager->AddCategoryL(*category3));
+ AssertTrueSecL(err == KErrArgument, KNoNameErr);
+ CleanupStack::PopAndDestroy(category4);
+
+ iCategories.Append(category);
+ iCategories.Append(copy);
+ iCategories.Append(category2);
+ iCategories.Append(copy2);
+
+ CleanupStack::Pop(4);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::CompareTwoCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::CompareTwoCategoriesL(TInt aIndex)
+ {
+ CPosLandmarkCategory* category = iCategoryManager->ReadCategoryLC(iCategories[aIndex]->CategoryId());
+ CompareCategoriesL(*iCategories[aIndex], *category);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::ReadCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::ReadCategoriesL()
+ {
+ iLog->Log(_L("Reading categories"));
+ _LIT(KReadNotFoundErr, "The category id doesn't exist so ReadCategory should return not found");
+
+ for (TInt i = 0; i<iCategories.Count(); i++)
+ {
+
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, CompareTwoCategoriesL(i));
+ if (err == KErrLocked)
+ {
+ iLog->Log(_L("KErrLocked from CompareTwoCategoriesL, try again"));
+ User::After(100000);
+ }
+ }
+ }
+
+ TPosLmItemId id = 5123321;
+
+ CPosLandmarkCategory* category=NULL;
+ TRAPD(err, category=iCategoryManager->ReadCategoryLC(id));
+ delete category;
+ AssertTrueSecL(err == KErrNotFound, KReadNotFoundErr);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::UpdateCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::UpdateCategoriesL()
+ {
+ iLog->Log(_L("Updating categories"));
+ _LIT(KCategoryNameNotSetErr, "UpdateCategory does not leave with KErrArgumenet when name is not set");
+ _LIT(KCategoryExistsErr, "UpdateCategory does not leave with KErrAlreadyExist");
+
+ TInt err;
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ TRAP(err, iCategoryManager->UpdateCategoryL(*category));
+ AssertTrueSecL(err == KErrArgument, KCategoryNameNotSetErr);
+ CleanupStack::PopAndDestroy(category);
+
+ CPosLandmarkCategory* category2 = CPosLandmarkCategory::NewLC(*iCategories[0]);
+
+ TPtrC nameThatExist;
+ User::LeaveIfError(iCategories[1]->GetCategoryName(nameThatExist));
+ category2->SetCategoryNameL(nameThatExist);
+ TRAP(err, iCategoryManager->UpdateCategoryL(*category2));
+ AssertTrueSecL(err == KErrAlreadyExists, KCategoryExistsErr);
+ CleanupStack::PopAndDestroy(category2);
+
+ _LIT(KUpdatedCategoryName, "UpdatedCategoryTP10 - %d");
+
+ for (TInt i = 0; i<iCategories.Count(); i++)
+ {
+ TBuf<100> name;
+ name.Format(KUpdatedCategoryName, i);
+ iCategories[i]->SetCategoryNameL(name);
+ iCategories[i]->SetIconL(KMbmFileName2, KIconIndex2, KPosLmIconMaskNotUsed);
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iCategoryManager->UpdateCategoryL(*iCategories[i]));
+ }
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddLandmarksL()
+ {
+ iLog->Log(_L("Adding landmarks"));
+ _LIT(KLmName, "LmTP10 - %d");
+ _LIT(KLmDescription, "LmTP10Description - %d");
+
+ for (TInt i=0; i<(KNoLandmarksTp10); i++)
+ {
+ TBuf<100> lmName;
+ lmName.Format(KLmName,i);
+ TBuf<100> lmDesc;
+ lmDesc.Format(KLmDescription,i);
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ landmark->SetLandmarkDescriptionL(lmDesc);
+
+ landmark->AddCategoryL(iCategories[i]->CategoryId());
+
+ TInt err=KErrLocked;
+ while (err==KErrLocked)
+ {
+ TRAP(err, iDatabase->AddLandmarkL(*landmark));
+ }
+ iLandmarks.Append(landmark);
+ CleanupStack::Pop();
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddCategoriesToSetOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddCategoriesToLandmarksL()
+ {
+ iLog->Log(_L("Adding categories to landmarks"));
+
+ RArray<TPosLmItemId> landmarksIds;
+ CleanupClosePushL(landmarksIds);
+ for(TInt i=KAddStartIndex; i<=KAddEndIndex; i++)
+ {
+ landmarksIds.Append(iLandmarks[i]->LandmarkId());
+ iLandmarks[i]->AddCategoryL(iCategories[KAddCategoryIndex]->CategoryId());
+ }
+
+ // Add some invalid as well
+ landmarksIds.Append(2000);
+ landmarksIds.Append(3000);
+
+ TInt err=KErrLocked;
+ while (err==KErrLocked)
+ {
+ TRAP( err, ExecuteAndDeleteLD(iCategoryManager->AddCategoryToLandmarksL(
+ iCategories[KAddCategoryIndex]->CategoryId(),
+ landmarksIds)) );
+ }
+
+ CleanupStack::PopAndDestroy(&landmarksIds);
+ CheckLandmarksL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddCategoriesToSetOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddCategoriesToLandmarksAsyncL()
+ {
+ iLog->Log(_L("Adding categories to landmarks asynchronously"));
+ RArray<TPosLmItemId> landmarksIds;
+ CleanupClosePushL(landmarksIds);
+
+ for(TInt i=KAddStartIndexAsync; i<=KAddEndIndexAsync; i++)
+ {
+ landmarksIds.Append(iLandmarks[i]->LandmarkId());
+ iLandmarks[i]->AddCategoryL(iCategories[KAddCategoryIndexAsync]->CategoryId());
+ }
+
+
+ RunAsyncOperationLD(iCategoryManager->AddCategoryToLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ landmarksIds
+ ));
+ CheckLandmarksL();
+
+ CleanupStack::PopAndDestroy(&landmarksIds);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddCategoriesToLandmarksUsingWaitForReqL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddCategoriesToLandmarksUsingWaitForReqL()
+ {
+ iLog->Log(_L("AddCategoriesToLandmarksUsingWaitForReqL"));
+ RArray<TPosLmItemId> landmarksIds;
+ CleanupClosePushL(landmarksIds);
+
+ for(TInt i=KAddStartIndexAsync; i<=KAddEndIndexAsync; i++)
+ {
+ landmarksIds.Append(iLandmarks[i]->LandmarkId());
+ iLandmarks[i]->AddCategoryL(iCategories[KAddCategoryIndexAsync]->CategoryId());
+ }
+
+ CPosLmOperation* op = iCategoryManager->AddCategoryToLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ landmarksIds);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+
+ CheckLandmarksL();
+
+ CleanupStack::PopAndDestroy(&landmarksIds);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddCategoriesToSetOfLandmarksAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddCategoriesToLandmarksAsyncAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("Adding categories to landmarks asyncronously and cancel"));
+ RArray<TPosLmItemId> landmarksIds;
+ CleanupClosePushL(landmarksIds);
+
+ for(TInt i=KAddStartIndexAsync; i<=KAddEndIndexAsync; i++)
+ {
+ landmarksIds.Append(iLandmarks[i]->LandmarkId());
+ iLandmarks[i]->AddCategoryL(iCategories[KAddCategoryIndexAsync]->CategoryId());
+ }
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iCategoryManager->AddCategoryToLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ landmarksIds
+ ));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iCategoryManager->AddCategoryToLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ landmarksIds
+ ));
+ }
+
+ CleanupStack::PopAndDestroy(&landmarksIds);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::AddCategoriesToLandmarksAsyncErrCheckL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::AddCategoriesToLandmarksAsyncErrCheckL()
+ {
+ iLog->Log(_L("Adding category not in db to landmarks async."));
+
+ _LIT(KNotFoundErr, "AddCategoryToLandmarksL is not returning -1 for a category id not in db");
+
+ TPosLmItemId idNotInDb = 5123321;
+
+ RArray<TPosLmItemId> landmarksIds;
+ CleanupClosePushL(landmarksIds);
+
+ landmarksIds.Append(iLandmarks[0]->LandmarkId());
+
+ TRAPD(err, iOperation = iCategoryManager->AddCategoryToLandmarksL(idNotInDb, landmarksIds));
+
+ AssertTrueSecL(err == KErrNotFound, KNotFoundErr);
+
+
+ iOperation = NULL;
+ CleanupStack::PopAndDestroy(&landmarksIds);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::CheckLandmarks
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::CheckLandmarksL()
+ {
+ for (TInt i = 0; i<iLandmarks.Count(); i++)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(iLandmarks[i]->LandmarkId());
+ CompareLandmarksL(*iLandmarks[i], *lm);
+ CleanupStack::PopAndDestroy(); // lm
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryL()
+ {
+ iLog->Log(_L("Removing categories"));
+
+ TInt i=0;
+ for (i=0; i<iLandmarks.Count(); i++)
+ {
+ iLandmarks[i]->AddCategoryL(iCategories[KRemoveStartIndex]->CategoryId());
+ if (i % 2)
+ {
+ TInt index = 1+KRemoveStartIndex;
+ iLandmarks[i]->AddCategoryL(iCategories[index]->CategoryId());
+ }
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveStartIndex; i <= KRemoveEndIndex; i++)
+ {
+ ExecuteAndDeleteLD(iCategoryManager->RemoveCategoryL(iCategories[i]->CategoryId()));
+ }
+ CheckRemovedL(KRemoveStartIndex, KRemoveEndIndex);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryAsyncL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryAsyncL()
+ {
+ iLog->Log(_L("Removing categories asyncronously"));
+ TInt i=0;
+ for (i=0; i<iLandmarks.Count(); i++)
+ {
+ iLandmarks[i]->AddCategoryL(iCategories[KRemoveStartIndexAsync]->CategoryId());
+ if (i % 2)
+ {
+ TInt index = 1+KRemoveStartIndexAsync;
+ iLandmarks[i]->AddCategoryL(iCategories[index]->CategoryId());
+ }
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveStartIndexAsync; i <= KRemoveEndIndexAsync; i++)
+ {
+ RunAsyncOperationLD(iCategoryManager->RemoveCategoryL(iCategories[i]->CategoryId()));
+ }
+ CheckRemovedL(KRemoveStartIndexAsync, KRemoveEndIndexAsync);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryUsingWaitForReqL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryUsingWaitForReqL()
+ {
+ iLog->Log(_L("Removing categories using User::WaitForRequest"));
+ TInt i=0;
+ for (i=0; i<iLandmarks.Count(); i++)
+ {
+ iLandmarks[i]->AddCategoryL(iCategories[KRemoveStartIndexAsync]->CategoryId());
+ if (i % 2)
+ {
+ TInt index = 1+KRemoveStartIndexAsync;
+ iLandmarks[i]->AddCategoryL(iCategories[index]->CategoryId());
+ }
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveStartIndexAsync; i <= KRemoveEndIndexAsync; i++)
+ {
+ CPosLmOperation* op = iCategoryManager->RemoveCategoryL(iCategories[i]->CategoryId());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ CheckRemovedL(KRemoveStartIndexAsync, KRemoveEndIndexAsync);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryAsyncAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryAsyncAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("Removing categories asyncronously and cancel"));
+ TInt i=0;
+ for (i=0; i<iLandmarks.Count(); i++)
+ {
+ iLandmarks[i]->AddCategoryL(iCategories[KRemoveStartIndexAsync]->CategoryId());
+ if (i % 2)
+ {
+ TInt index = 1+KRemoveStartIndexAsync;
+ iLandmarks[i]->AddCategoryL(iCategories[index]->CategoryId());
+ }
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveStartIndexAsync; i <= KRemoveEndIndexAsync; i++)
+ {
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iCategoryManager->RemoveCategoryL(iCategories[i]->CategoryId()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iCategoryManager->RemoveCategoryL(iCategories[i]->CategoryId()));
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveSetOfCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveSetOfCategoriesL()
+ {
+ iLog->Log(_L("Removing set of categories"));
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ for (TInt i=KRemoveSetStartIndex; i<=KRemoveSetEndIndex; i++)
+ {
+ ids.Append(iCategories[i]->CategoryId());
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ ExecuteAndDeleteLD(iCategoryManager->RemoveCategoriesL(ids));
+
+ CheckRemovedL(KRemoveSetStartIndex, KRemoveSetEndIndex);
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveSetOfCategoriesAsyncL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveSetOfCategoriesAsyncL()
+ {
+ iLog->Log(_L("Removing set of categories asyncronously"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ TInt i=0;
+ for (i=KRemoveSetStartIndexAsync; i<=KRemoveSetEndIndexAsync; i++)
+ {
+ ids.Append(iCategories[i]->CategoryId());
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveSetStartIndexAsync; i <= KRemoveSetEndIndexAsync; i++)
+ {
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, RunAsyncOperationLD(iCategoryManager->RemoveCategoriesL(ids)));
+ }
+ }
+ CheckRemovedL(KRemoveSetStartIndexAsync, KRemoveSetEndIndexAsync);
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveSetOfCategoriesUsingWaitForReqL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveSetOfCategoriesUsingWaitForReqL()
+ {
+ iLog->Log(_L("Removing set of categories using User::WaitForRequest"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ TInt i=0;
+ for (i=KRemoveSetStartIndexAsync; i<=KRemoveSetEndIndexAsync; i++)
+ {
+ ids.Append(iCategories[i]->CategoryId());
+ }
+
+ // Add some unvalid ids as well
+ ids.Append(222);
+ ids.Append(223);
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveSetStartIndexAsync; i <= KRemoveSetEndIndexAsync; i++)
+ {
+ CPosLmOperation* op = iCategoryManager->RemoveCategoriesL(ids);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ CheckRemovedL(KRemoveSetStartIndexAsync, KRemoveSetEndIndexAsync);
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveSetOfCategoriesAsyncAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveSetOfCategoriesAsyncAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("Removing set of categories asyncronously and cancel"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ TInt i=0;
+ for (i=KRemoveSetStartIndexAsync; i<=KRemoveSetEndIndexAsync; i++)
+ {
+ ids.Append(iCategories[i]->CategoryId());
+ }
+
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KRemoveSetStartIndexAsync; i <= KRemoveSetEndIndexAsync; i++)
+ {
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iCategoryManager->RemoveCategoriesL(ids));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iCategoryManager->RemoveCategoriesL(ids));
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryFromSetOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryFromSetOfLandmarksL()
+ {
+ iLog->Log(_L("Removing set of categories from landmarks"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ for (TInt i = KAddStartIndex; i<=KAddEndIndex; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+
+ iLandmarks[i]->RemoveCategory(iCategories[KAddCategoryIndex]->CategoryId());
+ }
+ // Append some non-existing as well
+ ids.Append(666);
+ ids.Append(667);
+
+ for (TInt j=0; j<2; j++)
+ {
+ ExecuteAndDeleteLD(
+ iCategoryManager->RemoveCategoryFromLandmarksL(
+ iCategories[KAddCategoryIndex]->CategoryId(),
+ ids));
+
+ CheckLandmarksL();
+ }
+
+ // Test that RemoveCategoryFromLandmarksL leaves with KErrNotFound if
+ // category is not found
+ TRAPD(err, iCategoryManager->ReadCategoryLC(123456));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ReadCategoryLC should leave with KErrNotFound"));
+ User::Leave(err);
+
+ }
+ TRAP(err, iOperation = iCategoryManager->RemoveCategoryFromLandmarksL(123456 ,ids));
+ if (err == KErrNone)
+ {
+ delete iOperation;
+ iOperation = NULL;
+ iLog->Log(_L("RemoveCategoryFromLandmarksL should leave with KErrNotFound"));
+ User::Leave(err);
+ }
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("RemoveCategoryFromLandmarksL should leave with KErrNotFound"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryFromSetOfLandmarksAsyncL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryFromSetOfLandmarksAsyncL()
+ {
+ iLog->Log(_L("Removing set of categories from landmarks asyncronously"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ TInt i=0;
+ for (i=KAddStartIndexAsync; i<=KAddEndIndexAsync; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ }
+ for (TInt j=0; j<2; j++)
+ {
+
+ for (i = KAddStartIndexAsync; i <= KAddEndIndexAsync; i++)
+ {
+ RunAsyncOperationLD(iCategoryManager->RemoveCategoryFromLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ ids
+ ));
+ }
+ CheckLandmarksL();
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryFromSetOfLandmarksUsingWaitForReqL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryFromSetOfLandmarksUsingWaitForReqL()
+ {
+ iLog->Log(_L("Removing set of categories from landmarks using User::WaitForRequest()"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ TInt i=0;
+ for (i=KAddStartIndexAsync; i<=KAddEndIndexAsync; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ }
+ for (TInt j=0; j<2; j++)
+ {
+
+ for (i = KAddStartIndexAsync; i <= KAddEndIndexAsync; i++)
+ {
+ CPosLmOperation* op = iCategoryManager->RemoveCategoryFromLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ ids);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ CheckLandmarksL();
+ }
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemoveCategoryFromSetOfLandmarksAsyncAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemoveCategoryFromSetOfLandmarksAsyncAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("Removing set of categories from landmarks asyncronously and cancel"));
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ TInt i=0;
+ for (i=KAddStartIndexAsync; i<=KAddEndIndexAsync; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ }
+ for (TInt j=0; j<2; j++)
+ {
+ for (i = KAddStartIndexAsync; i <= KAddEndIndexAsync; i++)
+ {
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(
+ iCategoryManager->RemoveCategoryFromLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ ids
+ ));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(
+ iCategoryManager->RemoveCategoryFromLandmarksL(
+ iCategories[KAddCategoryIndexAsync]->CategoryId(),
+ ids
+ ));
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&ids);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::CheckRemoved
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::CheckRemovedL(const TInt aStartIndex, const TInt aStopIndex)
+ {
+ _LIT(KRemoveNotFoundErr, "Category has not been removed");
+ _LIT(KRemoveFoundErr, "Category should not been removed");
+
+ for (TInt i = 0; i<=aStopIndex; i++)
+ {
+ TRAPD(err, ReadCategoryL(iCategories[i]->CategoryId()));
+ if (i >= aStartIndex && i <= aStopIndex)
+ {
+ AssertTrueSecL(err == KErrNotFound, KRemoveNotFoundErr);
+ RemovedFromLandmarksInternalL(iCategories[i]->CategoryId());
+ }
+ else
+ {
+ AssertTrueSecL(err == KErrNone, KRemoveFoundErr);
+ }
+ }
+
+ CheckLandmarksL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RemovedFromLandmarksInternalL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::RemovedFromLandmarksInternalL(TPosLmItemId aCategoryId)
+ {
+ for (TInt i = 0; i < iLandmarks.Count(); i++)
+ {
+ iLandmarks[i]->RemoveCategory(aCategoryId);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::ReadCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::ReadCategoryL(TPosLmItemId aCategoryId)
+ {
+ CPosLandmarkCategory* lmc = iCategoryManager->ReadCategoryLC(aCategoryId);
+ CleanupStack::PopAndDestroy(lmc);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::TestMissingCategories1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::TestMissingCategories1L()
+ {
+ iLog->Log(_L("TestMissingCategories1L"));
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+ // copy the test db to the private path
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp10TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KLmTp10DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp10TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KTp10TestDb);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ ExecuteAndDeleteLD(lmd->CompactL());
+
+ // Remove categories 1,2,3 (Pizzeria, Hamburgerbar, Kinarestaurang)
+ // Landmark with id=7 "Billigt" contains categories: 1,2,3 and 14-17
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLandmark* lm = lmd->ReadLandmarkLC(7);
+
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(1));
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(2));
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(3));
+
+ // Change landmark name and update landmark, the server must not crash
+ lm->SetLandmarkNameL(_L("NyttBilligtNamn"));
+
+ lmd->UpdateLandmarkL(*lm);
+
+ CleanupStack::PopAndDestroy(lm);
+ lm = lmd->ReadLandmarkLC(7);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ lm->GetCategoriesL(categories);
+
+ // Now list all categories belonging to this landmark
+ // verify that the removed categories 1,2,3 are no longer referred from this landmark
+ // Should now only contain 14-17
+ if (categories.Count() != 4)
+ {
+ iLog->Log(_L("Wrong number of categories"));
+ User::Leave(-1);
+ }
+
+ for (TInt i=0;i<categories.Count();i++)
+ {
+ if (categories[i] == 1 || categories[i] == 2 || categories[i] == 3)
+ {
+ iLog->Log(_L("Wrong number of categories"));
+ User::Leave(-1);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(lm);
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::TestMissingCategories2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp10::TestMissingCategories2L()
+ {
+ iLog->Log(_L("TestMissingCategories2L"));
+
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+ // copy the test db to the private path
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp10TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KLmTp10DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp10TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KTp10TestDb);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ ExecuteAndDeleteLD(lmd->CompactL());
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(categoryManager);
+
+ // Now create a landmark containing some categories, before adding this landmark to
+ // the database remove some of the categories from the landmarks database
+ CPosLandmark* lm = CreateXMLLandmarkLC(_L("PelleFantLandmark"));
+ // Add categories with id=7, id=14 and id=10 to this landmark
+ lm->AddCategoryL(7);
+ lm->AddCategoryL(14);
+ lm->AddCategoryL(10);
+
+ //Then remove categories id=14 and id=7 from the landmark db
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(14));
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(7));
+
+ TPosLmItemId id = lmd->AddLandmarkL(*lm);
+
+ CleanupStack::PopAndDestroy(lm);
+
+ lm = lmd->ReadLandmarkLC(id);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ lm->GetCategoriesL(categories);
+
+ // Now list all categories belonging to this landmark
+ if (categories.Count() != 1)
+ {
+ TBuf<50> buf;
+ buf.Format(_L("Wrong number of categories, was %d should be %d"), categories.Count(), 1);
+ for (TInt j=0;j<categories.Count();j++)
+ {
+ TBuf<50> buffe;
+ buffe.Format(_L("%d Category id: %d"), j, categories[j]);
+ iLog->Log(buffe);
+ }
+ iLog->Log(buf);
+ User::Leave(KErrNone);
+ }
+
+ for (TInt i=0;i<categories.Count();i++)
+ {
+ if (categories[i] == 7 || categories[i] == 14)
+ {
+ iLog->Log(_L("Wrong number of categories"));
+ User::Leave(-1);
+ }
+ }
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(lm);
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(lmd);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::BackupTp10DbFileL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp10::BackupTp10DbFileL()
+ {
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ manager->SetDefaultDatabaseUriL(KTp10TestDb);
+ HBufC* defaultDbUri = manager->DefaultDatabaseUriLC();
+ TBuf<255> buf;
+ // Extract URI except characters ".ldb"
+ buf.Append(defaultDbUri->Left(defaultDbUri->Length()-4));
+ buf.Append(_L("COPY.LDB"));
+ // Delete in case it already exist
+ TRAPD(err, manager->DeleteDatabaseL(buf));
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Could not delete file"));
+ manager->CopyDatabaseL(*defaultDbUri, buf);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp10::RestoreTp10DbFileL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp10::RestoreTp10DbFileL()
+ {
+
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ manager->SetDefaultDatabaseUriL(KTp10TestDb);
+ HBufC* defaultDbUri = manager->DefaultDatabaseUriLC();
+ TBuf<255> buf;
+ // Extract URI except characters ".ldb"
+ buf.Append(defaultDbUri->Left(defaultDbUri->Length()-4));
+ buf.Append(_L("COPY.LDB"));
+ // Delete in case it already exist
+ TRAPD(err, manager->DeleteDatabaseL(*defaultDbUri));
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Could not delete file"));
+ manager->CopyDatabaseL(buf, *defaultDbUri);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp100.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp100.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_LandmarkConstants.h"
+
+
+// CONSTANTS
+
+_LIT(KDb1, "eposlm1.ldb");
+_LIT(KDb2, "eposlm2.ldb");
+_LIT(KDb3, "eposlm3.ldb");
+
+_LIT(KDbUri1, "file://c:eposlm.ldb");
+_LIT(KDbUri2, "c:eposlm.ldb");
+_LIT(KDbUri3, "eposlm.ldb");
+_LIT(KDbUri4, "file://eposlm.ldb");
+_LIT(KDbUri5, "testlm.ldb");
+
+// Use hardcoded path here
+_LIT(KDbUri6, "c:\\private\\100012a5\\DBS_101FE978_eposlm.ldb");
+// Use hardcoded path here
+_LIT(KDbUri7, "file://c:\\private\\100012a5\\DBS_101FE978_eposlm.ldb");
+
+_LIT(KDbUri8, "eposlm");
+_LIT(KDbUri9, "c:eposlm");
+_LIT(KDbUri10, "file://c:eposlm");
+
+_LIT(KDbUri11, "file://c:XXXX.ldb");
+_LIT(KDbUri12, "http://c:eposlm.ldb");
+_LIT(KDbUri13, "");
+
+_LIT(KDbUri14, "file://\\eposlm.ldb"); // UNC
+_LIT(KDbUri15, "\\eposlm.ldb");
+
+// File on media that does not exist
+_LIT(KDbUri16, "file://R:eposlm.ldb");
+
+_LIT(KTestDb, "testlm.ldb");
+
+// Will need to be changed to the secure dbms path when security is implemented
+
+
+_LIT(KExportFileFullPath, "c:\\TP100-LandmarksFromThreeDatabases.xml");
+_LIT(KExportFile, "TP100-LandmarksFromThreeDatabases.xml");
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+
+// ---------------------------------------------------------
+// CPosTp100::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp100::StartL()
+ {
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KDefaultDb);
+ manager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KDefaultDb);
+
+
+ CleanupStack::PopAndDestroy(manager);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ delete lmd;
+
+ TestOpenSpecificDbL();
+
+ TestMultipleExportL();
+
+ TestLockedDatabaseL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp100::TestMultipleExportL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp100::TestMultipleExportL()
+ {
+ iLog->Log(_L("TestMultipleExportL()"));
+ CreateDatabasesL();
+ iLog->Log(_L("1"));
+
+ CPosLandmarkDatabase* lmd1 = CPosLandmarkDatabase::OpenL(KDb1);
+ CleanupStack::PushL(lmd1);
+ iLog->Log(_L("2"));
+ CPosLandmarkDatabase* lmd2 = CPosLandmarkDatabase::OpenL(KDb2);
+ CleanupStack::PushL(lmd2);
+ iLog->Log(_L("3"));
+ CPosLandmarkDatabase* lmd3 = CPosLandmarkDatabase::OpenL(KDb3);
+ CleanupStack::PushL(lmd3);
+ ExecuteAndDeleteLD(lmd3->CompactL());
+ iLog->Log(_L("4"));
+ CPosLandmark* lm = CreateXMLLandmarkLC(_L("TP100 - LM with all fields set"));
+ AddAllXMLFieldsL(lm);
+ iLog->Log(_L("5"));
+ lmd1->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ iLog->Log(_L("6"));
+ CPosLandmark* lm2 = CreateXMLLandmarkLC(_L("TP100 - LM2"));
+ lmd2->AddLandmarkL(*lm2);
+ CleanupStack::PopAndDestroy(lm2);
+ iLog->Log(_L("7"));
+ CPosLandmark* lm3 = CreateXMLLandmarkLC(_L("TP100 - LM3"));
+ iLog->Log(_L("8"));
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd3);
+ CleanupStack::PushL(cm);
+ iLog->Log(_L("9"));
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("category"));
+
+ TPosLmItemId id = cm->AddCategoryL(*category);
+ CleanupStack::PopAndDestroy(2, cm);
+ iLog->Log(_L("10"));
+ lm3->AddCategoryL(id);
+ iLog->Log(_L("11"));
+
+ iLog->Log(_L("12"));
+ lmd3->AddLandmarkL(*lm3);
+ CleanupStack::PopAndDestroy(lm3);
+ iLog->Log(_L("13"));
+
+ CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ CleanupStack::PushL(encoder);
+
+ encoder->SetOutputFileL(KExportFileFullPath);
+
+ CPosLmItemIterator* iter = lmd1->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ ExecuteAndDeleteLD(lmd1->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions));
+
+ RunAsyncOperationLD(lmd2->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions));
+
+ ExecuteAndDeleteLD(lmd3->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories));
+
+ ExecuteAndDeleteLD(encoder->FinalizeEncodingL());
+
+ CleanupStack::PopAndDestroy(6, lmd1);
+
+ TInt err = CompareL(KExportFile);
+ AssertTrueSecL(err == KErrNone, _L("The exported file is not equal to file exported prevoius release"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp100::CreateDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp100::CreateDatabasesL()
+ {
+ iLog->Log(_L("CreateDatabasesL()"));
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy(lmd);
+
+ TInt res = iFileSession.Delete(KExportFileFullPath);
+ if (res != KErrNone && res != KErrNotFound)
+ {
+ iLog->Log(_L("File could not be deleted"));
+ User::Leave(res);
+
+ }
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+ TBuf<150> destPath;
+
+ srcPath.Append(KLmDbPath);
+ srcPath.Append(KDefaultDb);
+
+ // Copy file eposlm.ldb to three databases
+ destPath.Append(KLmDbPath);
+ destPath.Append(KDb1);
+ User::LeaveIfError(fileMan->Copy(srcPath, destPath, CFileMan::EOverWrite));
+
+ destPath.Zero();
+ destPath.Append(KLmDbPath);
+ destPath.Append(KDb2);
+ User::LeaveIfError(fileMan->Copy(srcPath, destPath, CFileMan::EOverWrite));
+
+ destPath.Zero();
+ destPath.Append(KLmDbPath);
+ destPath.Append(KDb3);
+ User::LeaveIfError(fileMan->Copy(srcPath, destPath, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp100::TestOpenSpecificDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp100::TestOpenSpecificDbL()
+ {
+ _LIT(KHttpErr, "http is not a supported protocol");
+ _LIT(KURIErr, "Not a valid URI");
+ _LIT(KArgumentErr, "An empty descr is not a valid URI");
+
+ iLog->Log(_L("TestOpenSpecificDbL()"));
+
+ TestOpenDbL(KDbUri1);
+ TestOpenDbL(KDbUri2);
+ TestOpenDbL(KDbUri3);
+ TestOpenDbL(KDbUri4);
+
+ // Copy to secure area
+ CopyTestDbFileL(KTestDb);
+
+ TestOpenDbL(KDbUri5);
+
+ TRAPD(err, TestOpenDbL(KDbUri6));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri7));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri8));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri9));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri10));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri11));
+ AssertTrueSecL(err == KErrNotFound, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri12));
+ AssertTrueSecL(err == KErrNotSupported, KHttpErr);
+
+ TRAP(err, TestOpenDbL(KDbUri13))
+ AssertTrueSecL(err == KErrArgument, KArgumentErr);
+
+ TRAP(err, TestOpenDbL(KDbUri14));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri15));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri16));
+ AssertTrueSecL(err == KErrNotReady, KURIErr);
+ }
+
+// ---------------------------------------------------------
+// CPosTp100::TestOpenDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp100::TestOpenDbL(const TDesC& aDbURI)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(aDbURI);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+// ---------------------------------------------------------
+// CPosTp100::TestLockedDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp100::TestLockedDatabaseL()
+ {
+ iLog->Log(_L("TestLockedDatabaseL()"));
+
+ CPosLandmarkDatabase* db1 = UseGeneratedDbFileL();
+ CleanupStack::PushL(db1);
+
+ // Take read lock
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ User::LeaveIfError(ids.Append(1));
+ User::LeaveIfError(ids.Append(3));
+ User::LeaveIfError(ids.Append(4));
+ User::LeaveIfError(ids.Append(6));
+ User::LeaveIfError(ids.Append(7));
+ User::LeaveIfError(ids.Append(9));
+ User::LeaveIfError(ids.Append(24));
+ User::LeaveIfError(ids.Append(14));
+ User::LeaveIfError(ids.Append(66));
+ User::LeaveIfError(ids.Append(61));
+ User::LeaveIfError(ids.Append(14));
+ CPosLmOperation* operation = db1->PreparePartialLandmarksL(ids);
+ CleanupStack::PushL(operation);
+ TReal32 progress(0);
+ TRequestStatus status;
+ while (progress < 0.4)
+ {
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ // Try to instantiate a new db handle
+ operation->NextStep(status, progress);
+ CPosLandmarkDatabase* db2 = CPosLandmarkDatabase::OpenL(KDbUri1);
+ delete db2;
+ User::WaitForRequest(status);
+
+ // Release read lock
+ CleanupStack::PopAndDestroy(operation);
+
+ // Take write lock
+ operation = db1->RemoveAllLandmarksL();
+ CleanupStack::PushL(operation);
+ progress = 0;
+ while (progress < 0.4)
+ {
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ // Try to instantiate a new db handle - should result in KErrLocked
+ operation->NextStep(status, progress);
+ db2 = NULL;
+ TRAPD(err, db2 = CPosLandmarkDatabase::OpenL(KDbUri1));
+ delete db2;
+ User::WaitForRequest(status);
+ AssertTrueSecL(err == KErrLocked, _L("OpenL() didn't result in KErrLocked but in %d"), err);
+
+ CleanupStack::PopAndDestroy(3, db1);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp101.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1245 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp101.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryManager.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmDisplayData.h>
+
+// CONSTANTS
+const TInt KNrOfDbs = 5;
+const TInt KLmPerDb = 20;
+const TInt KTotLms = 105;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp101::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iDbArray;
+
+ delete iLmMultiSearch;
+ iLmMultiSearch = NULL;
+
+ iSearchResults.ResetAndDestroy();
+
+ REComSession::FinalClose();
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::StartL()
+ {
+ // Split databases, NrOfDBs db, LmPerDb lm in each, TotLms is last lm id from original db, debug
+ iDbArray = CreateDatabasesL(KNrOfDbs, KLmPerDb, KTotLms); //, ETrue);
+
+
+ // Check setting of databases is correct
+ // Should be move to TC119 - Multi Db - Extended testing
+ VerifySetOfDatabasesL();
+
+ // Constructing a lm multi search
+ iLmMultiSearch = CPosLmMultiDbSearch::NewL(*iDbArray);
+
+ // Check that iterator is NOT NULL before search has started (and that iterator is empty)
+ for (TInt i=0;i<iDbArray->Count();i++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == 0, _L("Iterator should be empty"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ // Read search information from file
+ AppendSearchResultsL();
+
+ // Do the search testing
+ iLog->Log(_L("Testing multi db search with criterias read from LmDbSearchResult.txt syncronously"));
+ SearchL(iSearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing multi db search with criterias read from LmDbSearchResult.txt asyncronously"));
+ SearchL(iSearchResults, EAsynchronous);
+
+ // Not possible to use User::WaitForRequest when using Multi Db search!
+ // iLog->Log(_L("Testing multi db search with criterias read from LmDbSearchResult.txt asyncronously using User::WaitForRequest"));
+ // SearchL(SearchResults(), EWaitForRequest);
+
+ iLog->Log(_L("Testing search with a defined sortorder"));
+ SearchWithSortOrderL(iSearchResults);
+
+ iLog->Log(_L("Testing search and cancel"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Testing maximum number of matches"));
+ SearchWithMaximumL(iSearchResults);
+
+ iLog->Log(_L("Testing searching on the fly"));
+ OnTheFlySearchL();
+
+ iLog->Log(_L("Testing search after a landmark has been removed"));
+ SearchAndDeleteL(iSearchResults);
+
+ iLog->Log(_L("Testing search after landmarks have been renamed"));
+ SearchAndRenameL(iSearchResults);
+
+
+ // Test specific Text Criteria error case
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetAttributesToSearch(attr);
+ textCriteria->SetTextL(_L(""));
+
+ _LIT(KEmptyTextCriteriaErr, "An empty string as text criteria should not be allowed");
+ TRAPD(err, iLmMultiSearch->StartLandmarkSearchL(*textCriteria));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ delete iLmMultiSearch;
+ iLmMultiSearch = NULL;
+ // Constructing a lm multi search
+ iLmMultiSearch = CPosLmMultiDbSearch::NewL(*iDbArray);
+
+ // Check that iterator is NOT NULL before search has started (and that iterator is empty)
+ for (TInt i=0;i<iDbArray->Count();i++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == 0, _L("Iterator should be empty"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::VerifySetOfDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::VerifySetOfDatabasesL()
+ {
+ // Testing error situations for multi db search
+ _LIT(KEmptyError, "KErrArgument should be returned when no db's are specified.");
+ CDesCArray* emptyArray = new (ELeave) CDesCArrayFlat(5);
+ CleanupStack::PushL(emptyArray);
+ TRAPD(err, CPosLmMultiDbSearch::NewL(*emptyArray));
+ AssertTrueSecL(err == KErrArgument, KEmptyError);
+
+ CDesCArray* duplicateArray = new (ELeave) CDesCArrayFlat(5);
+ CleanupStack::PushL(duplicateArray);
+
+ duplicateArray->AppendL(_L("eposlm.ldb"));
+ duplicateArray->AppendL(_L("c:eposlm.ldb"));
+ duplicateArray->AppendL(_L("file://c:eposlm.ldb"));
+
+ VerifyDatabaseL(duplicateArray);
+
+ duplicateArray->Reset();
+ duplicateArray->AppendL(_L("eposlm.ldb"));
+ duplicateArray->AppendL(_L("eposlm.ldb"));
+ duplicateArray->AppendL(_L("eposlm.ldb"));
+
+ VerifyDatabaseL(duplicateArray);
+
+ CDesCArray* dupArray = new (ELeave) CDesCArrayFlat(5);
+ CleanupStack::PushL(dupArray);
+ dupArray->AppendL(_L("eposlm.ldb"));
+ dupArray->AppendL(_L("eposlm.ldb"));
+ dupArray->AppendL(_L("eposlm.ldb"));
+ dupArray->AppendL(_L("eposlm.ldb"));
+
+ VerifyDatabaseL(duplicateArray, dupArray);
+
+ dupArray->Reset();
+ dupArray->AppendL(_L("eposlm.ldb"));
+ dupArray->AppendL(_L("eposlm.ldb"));
+
+ VerifyDatabaseL(duplicateArray, dupArray);
+
+ CleanupStack::PopAndDestroy(dupArray);
+ CleanupStack::PopAndDestroy(duplicateArray);
+
+ // Check setting of empty databases
+ iLmMultiSearch = CPosLmMultiDbSearch::NewL(*iDbArray);
+
+ TRAP(err, iLmMultiSearch->SetDatabasesToSearchL(*emptyArray));
+ AssertTrueSecL(err == KErrArgument, KEmptyError);
+ CleanupStack::PopAndDestroy(emptyArray);
+ delete iLmMultiSearch;
+
+ VerifyDatabaseL(iDbArray);
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::VerifyDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::VerifyDatabaseL(
+ CDesCArray* aLmUris,
+ CDesCArray* aNewLmUris)
+ {
+ iLmMultiSearch = CPosLmMultiDbSearch::NewL(*aLmUris);
+ CheckDatabasesL(aLmUris);
+
+ if (aNewLmUris)
+ {
+ iLmMultiSearch->SetDatabasesToSearchL(*aNewLmUris);
+ CheckDatabasesL(aNewLmUris);
+ }
+
+ delete iLmMultiSearch;
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::CheckDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::CheckDatabasesL(
+ CDesCArray* aExpectedLmUris,
+ TUint aExpectedMaxMatches)
+ {
+ CDesCArray* dbToSearch = iLmMultiSearch->DatabasesToSearchL();
+ CleanupStack::PushL(dbToSearch);
+
+ _LIT(KWrongNrDatabases, "Wrong number of databases to search!");
+ AssertTrueSecL(aExpectedLmUris != dbToSearch, KWrongNrDatabases);
+ AssertTrueSecL(aExpectedLmUris->Count() == dbToSearch->Count(), KWrongNrDatabases);
+ CleanupStack::PopAndDestroy(dbToSearch);
+
+ AssertTrueSecL(aExpectedLmUris->Count() == iLmMultiSearch->NumOfDatabasesToSearch(),
+ KWrongNrDatabases);
+ for (TInt i=0; i<aExpectedLmUris->Count(); i++)
+ {
+ AssertTrueSecL(aExpectedLmUris->MdcaPoint(i) == iLmMultiSearch->DatabaseUriPtr(i),
+ KWrongNrDatabases);
+ }
+
+ _LIT(KWrongNrMatches, "Wrong number of max matches!");
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == aExpectedMaxMatches,
+ KWrongNrMatches);
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::SearchL(
+ const RPointerArray<CSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+ _LIT(KSearchNr, "Multi search test #%d executed ok.");
+
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[i]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[i]->Attributes());
+
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[i]->PositionFields());
+
+ CPosLmOperation* operation =
+ iLmMultiSearch->StartLandmarkSearchL(*textCriteria, aSearchResults[i]->Redefined());
+ CleanupStack::PushL(operation);
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(operation);
+ CleanupStack::Pop(operation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(operation);
+ CleanupStack::Pop(operation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(operation);
+ CleanupStack::PopAndDestroy(operation);
+ break;
+ }
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ // Check total number of matches
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() !=
+ iLmMultiSearch->TotalNumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLmMultiSearch->TotalNumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(textCriteria->Text());
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr);
+ User::LeaveIfError(lmids.Append(id));
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+ }
+
+ AssertTrueSecL(aSearchResults[i]->SearchResult().Count() == lmids.Count(),
+ _L("Expected number of hits and found hits don't match"));
+
+ for (TInt k=0; k<lmids.Count(); k++)
+ {
+ // Check that found id is expected from all ids
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(lmids[k]), KNotFoundErr);
+ }
+
+ CleanupStack::PopAndDestroy(&lmids); // lmids
+
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ TBuf<100> buf;
+ buf.Format(KSearchNr, i);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::SearchWithSortOrderL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed syncronously");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+
+ iLog->Log(aSearchResults[j]->TextCriteria());
+
+ for (TInt i=0; i<4; i++)
+ {
+ switch (i)
+ {
+ //**** sync
+ case 0:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 1:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 2:
+ //**** async
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ RunAsyncOperationLD(iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 3:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ RunAsyncOperationLD(iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ //**** asych with User::WaitForRequest()
+ case 4:
+ {
+ CPosLmOperation* op = iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ case 5:
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmOperation* op = iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ }
+ }
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ // Check total number of matches
+ if ((TUint)(aSearchResults[j]->SearchResult()).Count() !=
+ iLmMultiSearch->TotalNumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[j]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLmMultiSearch->TotalNumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(textCriteria->Text());
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[j]->SearchResult();
+ for (TInt n=0; n<iLmMultiSearch->NumOfDatabasesToSearch(); n++)
+ {
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+ GetLmIdsL(n, *searchResults, lmids);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(n));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ LandmarksSortL(lmids, sortPref);
+
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(n);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TInt lmid = 0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ CheckEqualsLmsL(id, lmids[lmid]);
+
+ id = iter->NextL();
+ ++lmid;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ CleanupStack::PopAndDestroy(&lmids);
+ }
+
+ }
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::GetLmIdsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::GetLmIdsL(
+ TInt aDbId,
+ RArray<TPosLmItemId> aSearchResults,
+ RArray<TPosLmItemId>& aLmIdForADb)
+ {
+ TInt startId = aDbId * KLmPerDb + 1;
+ TInt stopId = 0;
+
+ if (aDbId == KNrOfDbs - 1)
+ {
+ stopId = KTotLms;
+ }
+ else
+ {
+ stopId = (aDbId+1) * KLmPerDb;
+ }
+
+ for (TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ if (aSearchResults[i] >= startId && aSearchResults[i] <= stopId)
+ {
+ User::LeaveIfError(aLmIdForADb.Append(aSearchResults[i]));
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::CheckEqualsLmsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::CheckEqualsLmsL(
+ TPosLmItemId aSource,
+ TPosLmItemId aTarget)
+ {
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+
+ if (aSource != aTarget)
+ {
+ // Check if same name then don't Leave
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(aSource);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(aTarget);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+
+ if (EFalse)
+ {
+ // For debugging purposes
+ TBuf<100> buf;
+ buf.Append(_L("Name:"));
+ buf.Append(sourceName);
+ buf.Append(targetName);
+ iLog->Log(buf);
+ }
+
+ AssertTrueSecL(!sourceName.CompareC(targetName), KSortorderErr, aSource);
+ CleanupStack::PopAndDestroy(2, source); // target, source
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::OnTheFlySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::OnTheFlySearchL()
+ {
+ TInt KTestIndex = 4;
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(iSearchResults[KTestIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(iSearchResults[KTestIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(iSearchResults[KTestIndex]->PositionFields());
+
+ COnTheFlyTester* onTheFlyTester = COnTheFlyTester::NewLC();
+ onTheFlyTester->StartSearchCampaignL(iLmMultiSearch,
+ iSearchResults[KTestIndex]->SearchResult(),
+ textCriteria);
+
+ TInt result = onTheFlyTester->Err();
+ if (result != KErrNone)
+ {
+ TPtrC msg;
+ onTheFlyTester->GetErrMsg(msg);
+ iLog->Log(msg);
+ User::Leave(result);
+ }
+
+ CleanupStack::PopAndDestroy(2, textCriteria);
+
+ iLmMultiSearch->UnsetDisplayData();
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::SearchAndDeleteL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::SearchAndDeleteL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a redefined search is performed");
+ const TInt KTestIndex = 11;
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[KTestIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[KTestIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[KTestIndex]->PositionFields());
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*textCriteria, sortPref));
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[KTestIndex]->SearchResult();
+
+ TPosLmItemId lmid = (*searchResults)[0];
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ iDatabase->RemoveLandmarkL(lmid);
+ searchResults->Remove(0);
+ searchResults->Compress();
+ delete iDatabase;
+ iDatabase = NULL;
+
+ // Search
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*textCriteria, sortPref, ETrue));
+
+ // Check result
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL((TUint)searchResults->Count() == iLmMultiSearch->TotalNumOfMatches(),
+ KNumOfMatchesErr);
+
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results");
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(aSearchResults[KTestIndex]->FindSearchResult(id), KNotFoundErr);
+ User::LeaveIfError(lmids.Append(id));
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+ }
+
+ AssertTrueSecL(aSearchResults[KTestIndex]->SearchResult().Count() == lmids.Count(),
+ _L("Expected number of hits and found hits don't match"));
+
+ for (TInt k=0; k<lmids.Count(); k++)
+ {
+ // Check that found id is expected from all ids
+ AssertTrueSecL(aSearchResults[KTestIndex]->FindSearchResult(lmids[k]), KNotFoundErr);
+ }
+
+ CleanupStack::PopAndDestroy(&lmids); // lmids
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::SearchAndRenameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::SearchAndRenameL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a redefined search is performed");
+ const TInt KTestIndex=4;
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[KTestIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[KTestIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[KTestIndex]->PositionFields());
+
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(textCriteria->Text());
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*textCriteria, sortPref));
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[KTestIndex]->SearchResult();
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL((TUint) searchResults->Count() ==
+ iLmMultiSearch->TotalNumOfMatches(), KNumOfMatchesErr);
+
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results");
+
+ _LIT(KLmName, "l");
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+ iDatabase =
+ CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(j));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(aSearchResults[KTestIndex]->FindSearchResult(id),
+ KNotFoundErr);
+
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id);
+
+ TBuf<30> lmName;
+ lmName = KLmName;
+ lm->SetLandmarkNameL(lmName);
+ iDatabase->UpdateLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(textCriteria->Text());
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*textCriteria, sortPref, ETrue));
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL((TUint) searchResults->Count() ==
+ iLmMultiSearch->TotalNumOfMatches(), KNumOfMatchesErr);
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ iDatabase =
+ CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(j));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(aSearchResults[KTestIndex]->FindSearchResult(id),
+ KNotFoundErr);
+
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id);
+
+ TPtrC16 lmName;
+ lm->GetLandmarkName(lmName);
+ AssertTrueSecL(lmName == KLmName, _L("Wrong landmark name"));
+
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::SearchAndCancelL(const TBool& aInCallback)
+ {
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(iSearchResults[KIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(iSearchResults[KIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(iSearchResults[KIndex]->PositionFields());
+
+ if (aInCallback)
+ {
+ TReal threshold = 0;
+ for (TReal i=0; i<100; i+=10)
+ {
+ threshold = i/100;
+ RunAsyncOperationAndCancelInCallbackLD(iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria, iSearchResults[KIndex]->Redefined()), threshold);
+
+ _LIT(KCancelNr, "Multi search test, cancel after progress %f, canceled ok.");
+ TBuf<100> buf;
+ buf.Format(KCancelNr, threshold);
+ iLog->Log(buf);
+ }
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLmMultiSearch->StartLandmarkSearchL(
+ *textCriteria, iSearchResults[KIndex]->Redefined()));
+ }
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::SearchWithMaximumL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp101::SearchWithMaximumL(
+ const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchWithMaximumL is performed");
+
+ // Test search with one criteria
+ const TInt KTestIndex = 0;
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(iSearchResults[KTestIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(iSearchResults[KTestIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(iSearchResults[KTestIndex]->PositionFields());
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+
+ // First get the maximum number of matches
+ TInt maxMatches = KNrOfDbs;
+ iLmMultiSearch->SetMaxNumOfMatches(maxMatches);
+ _LIT(KErrNrOfMatches, "Number of matches is incorrect");
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*textCriteria, sortPref));
+
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[KTestIndex]->SearchResult();
+ TInt totalMatches = iLmMultiSearch->TotalNumOfMatches();
+
+ // Check database array
+ CheckDatabasesL(iDbArray, maxMatches);
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+ // Check that nr is not expected number of results
+ AssertTrueSecL((TUint) searchResults->Count() !=
+ totalMatches, KNumOfMatchesErr);
+
+ for (TInt n=0; n<iLmMultiSearch->NumOfDatabasesToSearch(); n++)
+ {
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+ GetLmIdsL(n, *searchResults, lmids);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(n));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ LandmarksSortL(lmids, sortPref);
+
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(n);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == iLmMultiSearch->NumOfMatches(n),
+ KNumOfMatchesErr);
+
+ TInt lmid = 0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ CheckEqualsLmsL(id, lmids[lmid]);
+
+ id = iter->NextL();
+ ++lmid;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ CleanupStack::PopAndDestroy(&lmids);
+ }
+
+ // Test max matches again
+ TInt incMatches = 2;
+ maxMatches = maxMatches + incMatches;
+ iLmMultiSearch->SetMaxNumOfMatches(maxMatches);
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*textCriteria));
+
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+ TInt reTotalMatches = iLmMultiSearch->TotalNumOfMatches();
+
+ AssertTrueSecL(reTotalMatches != totalMatches,
+ _L("Total number of matches should not be that same."));
+
+ // Check database array
+ CheckDatabasesL(iDbArray, maxMatches);
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+ // Check that nr is not expected number of results
+ AssertTrueSecL((TUint) searchResults->Count() !=
+ reTotalMatches, KNumOfMatchesErr);
+
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ // Unset max number of matches to normal/unlimited again
+ iLmMultiSearch->SetMaxNumOfMatches();
+ }
+
+// ---------------------------------------------------------
+// CPosTp101::CreateDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CDesCArray* CPosTp101::CreateDatabasesL(TInt aNrOfLmDbs, TInt aLmPerDb,
+ TInt aLastId, TBool aDebug)
+ {
+
+ CDesCArray* iDbArray = new (ELeave) CDesCArrayFlat(aNrOfLmDbs);
+ CleanupStack::PushL(iDbArray);
+
+ RemoveDefaultDbL();
+
+ // Populate default db
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ delete iDatabase;
+ iDatabase = NULL;
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ // Create databases
+ TInt i=0;
+ for (i=1; i < aNrOfLmDbs; i++)
+ {
+ TBuf<100> db;
+ db.Format(KDbNamePath, i * aLmPerDb);
+
+ iFileSession.Delete(db);
+ User::LeaveIfError(fileMan->Copy(KLmFullDefaultDbPath, db, CFileMan::EOverWrite));
+ }
+ CleanupStack::PopAndDestroy(fileMan);
+
+ for (TInt db=0; db < aNrOfLmDbs; db++)
+ {
+ TInt dbform = db;
+ if (db == aNrOfLmDbs)
+ {
+ dbform = aNrOfLmDbs - 1;
+ }
+
+ CPosLandmarkDatabase* lmd = NULL;
+ TBuf<100> name;
+ if (db == 0)
+ {
+ _LIT(KDefLmDb, "eposlm.ldb");
+ name = KDefLmDb;
+ lmd = CPosLandmarkDatabase::OpenL();
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ }
+ else
+ {
+ name.Format(KDbName, dbform * aLmPerDb);
+ lmd = CPosLandmarkDatabase::OpenL(name);
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ }
+ CleanupStack::PushL(lmd);
+ // Append db name to array
+ iDbArray->AppendL(name);
+
+ if (aDebug)
+ {
+ iLog->Log(name);
+ }
+
+ TInt startItemid = dbform * aLmPerDb + 1;
+ TInt stopItemid = dbform * aLmPerDb + aLmPerDb;
+ if (dbform == aNrOfLmDbs - 1)
+ {
+ stopItemid = aLastId;
+ }
+
+ for (TInt lmid=1; lmid <= aLastId; lmid++)
+ {
+ TBuf<100> lmidbuf;
+
+ if (aDebug)
+ {
+ _LIT(KLmId, "Landmark with LmId: %d");
+ lmidbuf.Format(KLmId, lmid);
+ iLog->Log(lmidbuf);
+ }
+
+ if (lmid < startItemid || lmid > stopItemid)
+ {
+ if (aDebug)
+ {
+ _LIT(KDelLmId, "Removing LmId: %d");
+ lmidbuf.Format(KDelLmId, lmid);
+ iLog->Log(lmidbuf);
+ }
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, lmd->RemoveLandmarkL(lmid));
+ }
+ }
+ }
+
+ // Compact database
+ ExecuteAndDeleteLD(lmd->CompactL());
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+ // Log/print landmark databases.
+ if (aDebug)
+ {
+ // DEBUG
+ for (i=0; i < aNrOfLmDbs; i++)
+ {
+ TBuf<100> dbNo;
+ dbNo.Format(_L(" -------- Printing Db %d --------------"), i);
+ iLog->Log(dbNo);
+
+ CPosLandmarkDatabase* lmd = NULL;
+ if (i == 0)
+ {
+ _LIT(KDbDefName, "Default Lm DB");
+ iLog->Log(KDbDefName);
+ lmd = CPosLandmarkDatabase::OpenL();
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ }
+ else
+ {
+ TInt dbform = i;
+ if (i == 5)
+ {
+ dbform = 4;
+ }
+
+ TBuf<100> db;
+ db.Format(KDbName, dbform * aLmPerDb);
+ iLog->Log(db);
+
+ lmd = CPosLandmarkDatabase::OpenL(db);
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ }
+ CleanupStack::PushL(lmd);
+ CPosLmCategoryManager* lmcat = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(lmcat);
+
+ CPosLmItemIterator* iter = lmd->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ _LIT(KNrLms, "Nr of Lms: %d");
+ TBuf<20> lms;
+ lms.Format(KNrLms, iter->NumOfItemsL());
+ iLog->Log(lms);
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = lmd->ReadLandmarkLC(id);
+
+ TBuf<255> info;
+ PrintLandmark(*lm, info);
+ iLog->Log(info);
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ CPosLmItemIterator* catiter = lmcat->CategoryIteratorL();
+ CleanupStack::PushL(catiter);
+
+ _LIT(KNrLmCats, "Nr of Lm Cats: %d");
+ TBuf<20> lmcats;
+ lmcats.Format(KNrLmCats, catiter->NumOfItemsL());
+ iLog->Log(lmcats);
+
+ id = catiter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmarkCategory* cat = lmcat->ReadCategoryLC(id);
+
+ TBuf<255> info;
+ // PrintLandmark(*lm, info);
+ _LIT(KCatId, "Category id: %d");
+ _LIT(KCatGlobalId, "Global Category id: %d");
+ _LIT(KCatName, "Category name: %S");
+
+ info.Format(KCatId, cat->CategoryId());
+ iLog->Log(info);
+
+ info.Format(KCatGlobalId, cat->GlobalCategory());
+ iLog->Log(info);
+
+ TPtrC catname;
+ TInt err = cat->GetCategoryName(catname);
+ info.Format(KCatName, &catname);
+ iLog->Log(info);
+
+ CleanupStack::PopAndDestroy(cat);
+
+ id = catiter->NextL();
+ }
+
+
+ CleanupStack::PopAndDestroy(3, lmd); // catiter, lmcat
+ }
+ }
+
+ CleanupStack::Pop(iDbArray);
+ return iDbArray;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp102.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,806 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp102.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_DatabaseUtility.h"
+#include <EPos_CPosLmTextCriteria.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp102::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp102::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::StartL()
+ {
+ _LIT(KDatabase1, "Tp102_Database1.ldb");
+ _LIT(KDatabaseUri1, "file://C:Tp102_Database1.ldb");
+ _LIT(KDatabase1MissingProtocol, "C:Tp102_Database1.ldb");
+ _LIT(KDatabase1MissingDrive, "Tp102_Database1.ldb");
+ _LIT(KDatabase1MissingExtension, "C:Tp102_Database1");
+ _LIT(KDatabase1FullPath, "c:\\private\\100012a5\\DBS_101FE978_Tp102_Database1.ldb");
+ _LIT(KRemoteDatabaseUri, "http://c:eposlm.ldb");
+ _LIT(KDatabase3, "C:Tp102_DBMS_Database3.ldb");
+ _LIT(KDatabaseUri3, "file://C:Tp102_DBMS_Database3.ldb");
+ // Change here if path to private area ever changes
+ _LIT(KDatabase4FullPath, "c:\\private\\100012a5\\DBS_101FE978_Tp102_DefaultDatabase.ldb");
+ _LIT(KDatabase4, "Tp102_DefaultDatabase.ldb");
+ _LIT(KDatabaseUri4, "file://C:Tp102_DefaultDatabase.ldb");
+
+ _LIT(KDatabaseUri5, "file://R:NonExistingDrive.ldb");
+
+#ifdef __WINS__
+ // D on wins
+ _LIT(KDbOnMedia, "D:TP102EPOSLM.LDB");
+ _LIT(KDbOnMediaUri, "file://D:TP102EPOSLM.LDB");
+
+ _LIT(KDbOnMedia2, "D:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2Uri, "file://D:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2MissingDrive, "file://TP102EPOSLM_2.LDB");
+#else
+
+ _LIT(KDbOnMedia, "F:TP102EPOSLM.LDB");
+ _LIT(KDbOnMediaUri, "file://F:TP102EPOSLM.LDB");
+
+ _LIT(KDbOnMedia2, "F:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2Uri, "file://F:TP102EPOSLM_2.LDB");
+ _LIT(KDbOnMedia2MissingDrive, "file://TP102EPOSLM_2.LDB");
+#endif
+
+ _LIT(KEmptyURI, "");
+
+ iLog->Log(_L("Warning: this test case requires E: drive"));
+
+ TInt err=KErrNone;
+
+ RemoveAllLmDatabasesL();
+ // Create defaultdb
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+ dbManager->CreateDatabaseL(*dbInfo4);
+ CleanupStack::PopAndDestroy(dbInfo4);
+ dbManager->SetDefaultDatabaseUriL(KDatabase4);
+
+ // 1) Remove all landmark db
+ RemoveAllLmDatabasesL();
+
+ // check the count of databases that could not be delted since they were in use
+ CDesCArray* dbList = dbManager->ListDatabasesLC();
+ TInt count = dbList->Count();
+
+
+ // 2) Verify no *.ldb files on file system
+ VerifyNrOfDatabasesL(count);
+
+ // 3) Check default db
+ HBufC* defaultDbUri;
+ defaultDbUri = dbManager->DefaultDatabaseUriLC();
+
+ // 4) List all database, should return 0
+ VerifyNrOfDatabasesL(count);
+
+ // 5) Check that database does not exist
+ if (dbManager->DatabaseExistsL(KDatabaseUri1))
+ {
+
+ iLog->Log(_L("This database should not exist"));
+ User::Leave(-1);
+ }
+
+ // 6) Create a new database using db api
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+
+ // 7) List dbs, should contain db created in step6
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ if (dbArray->Count() != count+1)
+ {
+ iLog->Log(_L("Database does not contain the last created db"));
+ User::Leave(-1);
+ }
+
+ iLog->Log((*dbArray)[0]);
+ // 8) Check that dabase does not exist
+ if (!dbManager->DatabaseExistsL(KDatabaseUri1))
+ {
+
+ iLog->Log(_L("This database should exist"));
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy(dbArray);
+
+ // 9)
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL(KDatabaseUri1);
+ CleanupStack::PushL(db1);
+ if (db1->IsInitializingNeeded())
+ {
+ iLog->Log(_L("db1->InitializeL"));
+ ExecuteAndDeleteLD(db1->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+
+ // 11) Open the default db
+ CPosLandmarkDatabase* defaultDatabase = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(defaultDatabase);
+
+ iLog->Log(_L("12) List all databases"));
+ // 12) List all databases
+ TInt verifyDbCount = count +2;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri4);
+
+ // 13)
+ iLog->Log(_L("13) Does defaultDB exist"));
+ if (!dbManager->DatabaseExistsL(KDatabaseUri4))
+ {
+
+ iLog->Log(_L("The default database should have been created"));
+ User::Leave(-1);
+ }
+
+ // 14) Try to delete the physical file while db is open
+
+ // Fix this path
+ err = iFileSession.Delete(KDatabase4FullPath);
+ if (err != KErrInUse)
+ {
+
+ iLog->Log(_L("It was possible to delete default db from file system"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(defaultDatabase);
+
+ // 15) Create a landmark database using the DBMS API
+ iLog->Log(_L("15) Create a landmark database using the DBMS API"));
+ FTDatabaseUtility::CreateDatabaseL(KDatabase3);
+ // 16)
+ verifyDbCount = count +3;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri3);
+
+ // 17) Create a database on a removable media
+ iLog->Log(_L("17) Create a database on a removable media"));
+ HPosLmDatabaseInfo* dbInfoMedia = HPosLmDatabaseInfo::NewLC(KDbOnMedia);
+ dbManager->CreateDatabaseL(*dbInfoMedia);
+ CleanupStack::PopAndDestroy(dbInfoMedia);
+
+ // 18) Verify database
+ verifyDbCount = count + 4;
+ VerifyNrOfDatabasesL(verifyDbCount, KDbOnMediaUri);
+
+ // 19) Retrieve the display name for the default db, it should be different from actual the filename
+ iLog->Log(_L("19) Retrieve the display name for the default db, it should be different from actual the filename"));
+ HBufC* defUri = dbManager->DefaultDatabaseUriLC();
+ HPosLmDatabaseInfo* dbInfoReadback = HPosLmDatabaseInfo::NewLC(*defUri);
+ dbManager->GetDatabaseInfoL(*dbInfoReadback);
+ TPosLmDatabaseSettings settings = dbInfoReadback->Settings();
+ TPtrC name1 = settings.DatabaseName();
+ CleanupStack::PopAndDestroy(dbInfoReadback);
+ CleanupStack::PopAndDestroy(defUri);
+
+
+ // 20) Set a new db as default
+ dbManager->SetDefaultDatabaseUriL(KDbOnMediaUri);
+
+ // 21) Retrieve the display name for the new default db, should be the same as in step 19
+ iLog->Log(_L("21) Retrieve the display name for the new default db, should be the same as in step 19"));
+ dbInfoReadback = HPosLmDatabaseInfo::NewLC(KDbOnMediaUri);
+ dbManager->GetDatabaseInfoL(*dbInfoReadback);
+ TPosLmDatabaseSettings settings2 = dbInfoReadback->Settings();
+ TPtrC name2 = settings2.DatabaseName();
+ CleanupStack::PopAndDestroy(dbInfoReadback);
+
+ if (name1.Compare(name2) != 0)
+ {
+ iLog->Log(_L("Names does not match"));
+ User::Leave(-1);
+ }
+
+ _LIT(KFileColonSlashSlash, "file://");
+ _LIT(KCColonSomeTestDbDotLdb, "c:SomeTestDb.ldb");
+ _LIT(KFileColonSlashSlashSomeTestDb2DotLdb, "file://SomeTestDb2.ldb");
+ _LIT(KCColonSomeTestDb3DotDoc, "c:SomeTestDb3.doc");
+ _LIT(KEmptyString, "");
+ _LIT(KFileColonSlahSlashCColonDotLdb, "file://C:.LDB");
+ _LIT(KVeryLongString, "c:\\SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb");
+
+ HPosLmDatabaseInfo* dbInfoFileColonSlashSlash = HPosLmDatabaseInfo::NewLC(KFileColonSlashSlash);
+ HPosLmDatabaseInfo* dbInfoCColonSomeTestDbDotLdb = HPosLmDatabaseInfo::NewLC(KCColonSomeTestDbDotLdb);
+ HPosLmDatabaseInfo* dbInfoFileColonSlashSlashSomeTestDb2DotLdb = HPosLmDatabaseInfo::NewLC(KFileColonSlashSlashSomeTestDb2DotLdb);
+ HPosLmDatabaseInfo* dbInfoCColonSomeTestDb3DotDoc = HPosLmDatabaseInfo::NewLC(KCColonSomeTestDb3DotDoc);
+ HPosLmDatabaseInfo* dbInfoEmptyString = HPosLmDatabaseInfo::NewLC(KEmptyString);
+ HPosLmDatabaseInfo* dbInfoFileColonSlahSlashCColonDotLdb = HPosLmDatabaseInfo::NewLC(KFileColonSlahSlashCColonDotLdb);
+ HPosLmDatabaseInfo* dbInfoVeryLongString = HPosLmDatabaseInfo::NewLC(KVeryLongString);
+
+
+ // 22) Createa db with same name as an existing
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfo1));
+ CleanupStack::PopAndDestroy(dbInfo1);
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("22 Should leave with KErrAlreadyExist"));
+ User::Leave(err);
+ }
+
+ // 23) Create a new database using the db management API with a nonsense URI
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlashSlash));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("23 Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 24) Create a new database using the db management API with a URI specifying a remote database
+ HPosLmDatabaseInfo* dbInfoRem = HPosLmDatabaseInfo::NewLC(KRemoteDatabaseUri);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoRem));
+ CleanupStack::PopAndDestroy(dbInfoRem);
+
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("24 Should leave with KErrNotSupported"));
+ User::Leave(err);
+ }
+
+ // 25) Create a new database using the db management API with a URI with missing protocol
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoCColonSomeTestDbDotLdb));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("25 Should NOT leave"));
+ User::Leave(err);
+ }
+
+ // 26) Create a new database using the db management API with a URI with missing drive
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlashSlashSomeTestDb2DotLdb));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("26 Should NOT leave"));
+ User::Leave(err);
+ }
+
+ // 27) Create a new database using the db management API with a URI that does not end with *.ldb
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoCColonSomeTestDb3DotDoc));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("27 Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 28) Create a new database using the db management API with a URI containing the path to the database file
+ HPosLmDatabaseInfo* dbInfoUri1 = HPosLmDatabaseInfo::NewLC(KDatabaseUri1);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoUri1));
+ CleanupStack::PopAndDestroy(dbInfoUri1);
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("28 Should leave with KErrAlreadyExist"));
+ User::Leave(err);
+ }
+
+ // 29) Create a new database using the db management API with an empty URI
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoEmptyString));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("29 Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 29b) Create a new database using the db management API with an empty URI (containing file://c:.ldb)
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoFileColonSlahSlashCColonDotLdb));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("29b Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 30) Create a new database using the db management API with a URI that is longer than allowed
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoVeryLongString));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L(" Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(dbInfoVeryLongString);
+ CleanupStack::PopAndDestroy(dbInfoFileColonSlahSlashCColonDotLdb);
+ CleanupStack::PopAndDestroy(dbInfoEmptyString);
+ CleanupStack::PopAndDestroy(dbInfoCColonSomeTestDb3DotDoc);
+ CleanupStack::PopAndDestroy(dbInfoFileColonSlashSlashSomeTestDb2DotLdb);
+ CleanupStack::PopAndDestroy(dbInfoCColonSomeTestDbDotLdb);
+ CleanupStack::PopAndDestroy(dbInfoFileColonSlashSlash);
+
+ // 31 Try to delete an existing db
+ dbManager->DeleteDatabaseL(KDatabaseUri1);
+ // 32) Check that it is deleted from file system
+ iLog->Log(_L("Trap error below:"));
+ verifyDbCount = count + 5;
+ TRAP(err, VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("32 Should not be found"));
+ User::Leave(err);
+ }
+
+ // 33) Delete same file again, according to header file, nothing should happen
+ // when the file does not exist
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("33 DeleteDatbaseL, nothing should happen"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("After DeleteDatabaseL"));
+
+ CFileMan* fileMan = NULL;
+ fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+ // 34 Set an existing non-default db to be read-only (attribute found in F32FILE.H)
+ err = fileMan->Attribs(KDatabase1FullPath, KEntryAttReadOnly, KEntryAttNormal, TTime(0));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Attributes could not be changed for KDatabase1FullPath"));
+ User::Leave(err);
+ }
+
+ // 35) Try to delete db with read only
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrAccessDenied)
+ {
+ iLog->Log(_L("35 Err delete of KDatabaseUri1"));
+ User::Leave(err);
+ }
+
+ // Change back to writeable (attribute found in F32FILE.H)
+ err = fileMan->Attribs(KDatabase1FullPath, KEntryAttNormal, KEntryAttReadOnly, TTime(0));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Attributes could not be changed KDatabase1FullPath"));
+ User::Leave(err);
+ }
+
+ // 36) Take a read lock on a db by using a search operation
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KDatabaseUri1);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ iOperation = landmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+
+ // 37) Try to delete db with read lock
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrInUse)
+ {
+ iLog->Log(_L("37) Err delete of Read Locked KDatabaseUri1"));
+ User::Leave(err);
+ }
+
+ ExecuteAndDeleteLD(iOperation);
+
+ // 38) List databases
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+
+ //39) Take a write lock on a db by trying to delete all landmarks operations
+ iOperation = lmd->RemoveAllLandmarksL();
+ // 40) Try to delete db with write lock
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri1));
+ if (err != KErrInUse)
+ {
+ iLog->Log(_L("40) Err delete of Write Locked KDatabaseUri1"));
+ User::Leave(err);
+ }
+
+ ExecuteAndDeleteLD(iOperation);
+
+ // 41) List databases
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ CleanupStack::PopAndDestroy(lmd);
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ // 42) Try to delete a non-existing URI
+ TRAP(err, dbManager->DeleteDatabaseL(_L("c:\\NonsenseURI")));
+ if (err != KErrArgument)
+ {
+
+ iLog->Log(_L("42: Should leave with KErrArgument11"));
+ User::Leave(err);
+ }
+
+ // 43) Try to delete a remote URI
+ TRAP(err, dbManager->DeleteDatabaseL(KRemoteDatabaseUri));
+ if (err!=KErrNotSupported)
+ {
+ iLog->Log(_L("43) Err KRemoteDatabaseUri"));
+ User::Leave(err);
+ }
+
+ // 44) Try to delete a local db specifying URI with missing protocol
+ dbManager->DeleteDatabaseL(KDatabase1MissingProtocol);
+
+ // 45) List databases
+ verifyDbCount = count + 5;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 46) Try to delete a db on removable media excluding drive in URI
+ // Since the DeleteDatabaseL just returns if the db is not found, verify that no db has been removed
+
+ HPosLmDatabaseInfo* dbInfoMedia2 = HPosLmDatabaseInfo::NewLC(KDbOnMedia2);
+ dbManager->CreateDatabaseL(*dbInfoMedia2);
+ CleanupStack::PopAndDestroy(dbInfoMedia2);
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDbOnMedia2Uri);
+ TRAP(err , dbManager->DeleteDatabaseL(KDbOnMedia2MissingDrive));
+
+ if (err != KErrNone)
+ {
+ TBuf<100> buffe;
+ buffe.Format(_L("46) Wrong error when deleting KDbOnMedia2MissingDrive, was %d should be %d"), err, KErrNone);
+
+ iLog->Log(buffe);
+ User::Leave(err);
+ }
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount, KDbOnMedia2Uri);
+
+ // 47) Try to delete a db on c drive excluding drive in URI
+ iLog->Log(_L("47) Try to delete a db on c drive excluding drive in URI"));
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfo1));
+ CleanupStack::PopAndDestroy(dbInfo1);
+ if (err != KErrNone && err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("Problem creating file KDatabase1"));
+ User::Leave(err);
+ }
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabase1MissingDrive));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Wrong errro when deleting file"));
+ User::Leave(err);
+ }
+ verifyDbCount = count + 6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+ verifyDbCount = count +7;
+ VerifyNrOfDatabasesL(verifyDbCount, KDatabaseUri1);
+
+ // 48) Try to delete a db with URI that does not end with .ldb
+ iLog->Log(_L("48) Try to delete a db with URI that does not end with .ldb"));
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabase1MissingExtension));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("48) Wrong error when deleting KDatabase1MissingExtension"));
+ User::Leave(err);
+ }
+
+ // 49) Try to delete a database with a URI that includes the path to the database
+ iLog->Log(_L("49) Try to delete a database with a URI that includes the path to the database"));
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabase1FullPath));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Wrong error when deleting KDatabase1FullPath"));
+ User::Leave(err);
+ }
+ verifyDbCount = count +7;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 50 Delete with empty URI
+ iLog->Log(_L("50) "));
+ TRAP(err, dbManager->DeleteDatabaseL(KEmptyURI));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Wrong error when deleting KEmptyURI"));
+ User::Leave(err);
+ }
+
+ // 51) Try to delete a db with URI that is longer than allowed
+ iLog->Log(_L("51) "));
+ TRAP(err, dbManager->DeleteDatabaseL(_L("SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Wrong error when deleting long filename file"));
+ User::Leave(err);
+ }
+
+ // 52) Try to delete the existing default db
+ iLog->Log(_L("52) "));
+ dbManager->SetDefaultDatabaseUriL(KDatabase1);
+ dbManager->DeleteDatabaseL(KDatabase1);
+
+ // 53) List databases
+ iLog->Log(_L("53) "));
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 54 Create db on drive that does not exist
+ HPosLmDatabaseInfo* dbInfoUri5 = HPosLmDatabaseInfo::NewLC(KDatabaseUri5);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoUri5));
+ CleanupStack::PopAndDestroy(dbInfoUri5);
+ if (err != KErrNotReady)
+ {
+ iLog->Log(_L("54) Wrong error when creating db on media that does not exist"));
+ User::Leave(err);
+ }
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 55 Delete db on drive that does not exist
+ TRAP(err, dbManager->DeleteDatabaseL(KDatabaseUri5));
+ if (err != KErrNotReady)
+ {
+ iLog->Log(_L("55) Wrong error when deleting db on media that does not exist"));
+ User::Leave(err);
+ }
+
+ _LIT(KLongFileName, "file://C:ABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRST.ldb");
+
+ // 56 Create db with long filename
+ HPosLmDatabaseInfo* dbInfoLong = HPosLmDatabaseInfo::NewLC(KLongFileName);
+ TRAP(err, dbManager->CreateDatabaseL(*dbInfoLong));
+ CleanupStack::PopAndDestroy(dbInfoLong);
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("57) Wrong error when creating db with long filename"));
+ User::Leave(err);
+ }
+ verifyDbCount = count +6;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ // 57) Check that database with long filename does not exist
+ if (dbManager->DatabaseExistsL(KLongFileName))
+ {
+ //LogErrorAndLeave(_L("Database with long filename should not exist"));
+ iLog->Log(_L("57) Database with long filename should not exist"));
+ User::Leave(-1);
+ }
+
+ // 58) Check error ESLI-6ARN66, delete a db with strange filename
+ HPosLmDatabaseInfo* dbInfoWeird =
+ HPosLmDatabaseInfo::NewLC(_L("file://c:!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb"));
+ dbManager->CreateDatabaseL(*dbInfoWeird);
+ CleanupStack::PopAndDestroy(dbInfoWeird);
+ verifyDbCount = count +7;
+ VerifyNrOfDatabasesL(verifyDbCount);
+
+ CleanupStack::PopAndDestroy(dbList);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ TRAP(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone)
+ {
+
+ iLog->Log(_L("RemoveAllLmDatabasesL should not leave with error"));
+ User::Leave(err);
+ }
+
+ TestDifferentUrisL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp102::TestDifferentUrisL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::TestDifferentUrisL()
+ {
+ iLog->Log(_L("TestDifferentUrisL"));
+ _LIT(KDbUri1, "file://:://c:::en helt \" sjuk .ldb databas\".ldb.ldb.ldb");
+ _LIT(KDbUri2, "file://c:en helt sjuk databas.ldb");
+ _LIT(KDbUri3, "file:///c:en helt sjuk databas.ldb");
+ _LIT(KDbUri4, "file://c::en helt sjuk databas.ldb");
+ _LIT(KDbUri5, "file://c:en helt sjuk .ldb databas.ldb");
+ _LIT(KDbUri6, "file://c:en helt sjuk databas.ldb.ldb.ldb");
+ _LIT(KDbUri7, "file://c:en helt \" sjuk databas.ldb");
+ _LIT(KDbUri8, "file://c:en helt < sjuk databas.ldb");
+ _LIT(KDbUri9, "file://c:en helt > sjuk databas.ldb");
+ _LIT(KDbUri10, "file://c:en helt | sjuk databas.ldb");
+ _LIT(KDbUri11, "file://c:en helt / sjuk databas.ldb");
+ _LIT(KDbUri12, "file://c:en helt ? sjuk databas.ldb");
+ _LIT(KDbUri13, "file://c:en helt \\ sjuk databas.ldb");
+ _LIT(KDbUri14, "file://c:en helt : sjuk databas.ldb");
+ // Below tested separately in step 58)
+ //_LIT(KDbUri15, "file://c:!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb");
+ _LIT(KDbUri16, "file://c:qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM.ldb");
+ _LIT(KDbUri17, "file://en otroligt helt sjuk databas.ldb");
+ _LIT(KDbUri18, "c:en helsjuk databas.ldb");
+ _LIT(KDbUri19, "file://c:\\system\\data\\en helt sjuk databas.ldb");
+ _LIT(KDbUri20, "file://c:.ldb");
+ _LIT(KDbUri21, "file://c:filename");
+ _LIT(KDbUri22, "file://c:filename.dip");
+ _LIT(KDbUri23, "file://c:filename. ldb");
+ _LIT(KDbUri24, "file://c:*.ldb");
+ _LIT(KDbUri25, "file://allan:en helt sjuk databas.ldb");
+ _LIT(KDbUri26, "file://g:en helt sjuk databas.ldb");
+ _LIT(KDbUri27, "file://c:filename.ldb");
+ _LIT(KDbUri28, "file://c:012345678901234567890123456789012345678901234567890123456789.ldb");
+
+ const TInt KNrOfUris = 8;
+ const TDesC* listOfUris[] = {&KDbUri2, &KDbUri5, &KDbUri6
+ , &KDbUri16 , &KDbUri17, &KDbUri18
+ , &KDbUri27, &KDbUri28
+ };
+ /* &KDbUri1*/
+
+ const TInt KNrOfNonWorkingUris = 19;
+ const TDesC* listOfUrisNonWorking[] = {&KDbUri1, &KDbUri3 ,&KDbUri4, &KDbUri7, &KDbUri8, &KDbUri9
+ , &KDbUri10, &KDbUri11, &KDbUri12, &KDbUri13, &KDbUri14, &KDbUri19, &KDbUri20, &KDbUri21
+ , &KDbUri22, &KDbUri23, &KDbUri24, &KDbUri25, &KDbUri26};
+
+ TInt errorList[] = {KErrArgument, KErrBadName, KErrBadName, KErrBadName, KErrBadName ,KErrBadName,KErrBadName,
+ KErrBadName, KErrBadName, KErrArgument, KErrBadName, KErrArgument, KErrArgument,
+ KErrArgument, KErrArgument,KErrArgument, KErrBadName, KErrBadName, KErrNotReady};
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ RemoveAllLmDatabasesL();
+ TBuf<100> buf;
+ // get the count of dbs that have notbeen deleted isnce they are in use
+ CDesCArray* dbArray1 = dbManager->ListDatabasesLC();
+ TInt count = dbArray1->Count();
+ TInt verifyDbcount;
+
+ for (TInt i=0;i<KNrOfUris;i++)
+ {
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(*listOfUris[i]);
+ iLog->Log(_L("Creating db:"));
+ iLog->Log(*listOfUris[i]);
+ TRAPD(err, dbManager->CreateDatabaseL(*dbInfo));
+ if (err != KErrNone)
+ {
+ buf.Format(_L("Failed with err %d"), err);
+ iLog->Log(buf);
+ User::Leave(err);
+ }
+ else
+ {
+ iLog->Log(_L("Db created..."));
+ }
+ CleanupStack::PopAndDestroy(dbInfo);
+ verifyDbcount = count + i+1;
+ VerifyNrOfDatabasesL(verifyDbcount);
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+
+ buf.Format(_L("DB count %d"), nr);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(dbArray);
+ }
+
+ for (TInt i=0;i<KNrOfNonWorkingUris;i++)
+ {
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(*listOfUrisNonWorking[i]);
+ iLog->Log(_L("Trying to create db:"));
+ iLog->Log(*listOfUrisNonWorking[i]);
+ TRAPD(err, dbManager->CreateDatabaseL(*dbInfo));
+ if (err != errorList[i])
+ {
+ buf.Format(_L("Failed with err %d should be %d"), err, errorList[i]);
+ iLog->Log(buf);
+
+ iLog->Log(buf);
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(dbInfo);
+ verifyDbcount = count + KNrOfUris;
+ VerifyNrOfDatabasesL(verifyDbcount);
+ }
+
+ CleanupStack::PopAndDestroy(dbArray1);
+ CleanupStack::PopAndDestroy(dbManager);
+ iLog->Log(_L("TestDifferentUrisL"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp102::VerifyNrOfDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp102::VerifyNrOfDatabasesL(TInt aExpNrOfDatabases, const TDesC& aDatabaseUri)
+ {
+ iLog->Log(_L("VerifyNrOfDatabasesL"));
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+ if (nr != aExpNrOfDatabases)
+ {
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ TBuf<100> buf;
+ buf.Format(_L("Wrong number of databases, was %d, should be %d"), nr, aExpNrOfDatabases);
+
+ iLog->Log(buf);
+ User::Leave(-1);
+ }
+
+ TBool found = EFalse;
+ if (aDatabaseUri != KNullDesC)
+ {
+ for (TInt i=0;i<nr;i++)
+ {
+ iLog->Log((*dbArray)[i]);
+ if ((*dbArray)[i].Compare(aDatabaseUri) == KErrNone)
+ {
+ found = ETrue;
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ if (aDatabaseUri != KNullDesC && !found)
+ {
+ iLog->Log(_L("Database was not found"));
+ User::Leave(KErrNotFound);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp103.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,435 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp103.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmTextCriteria.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp103::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp103::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp103::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp103::StartL()
+ {
+ // TInt expNrOfDbs = 0;
+
+ RemoveAllLmDatabasesL();
+
+ TestPartCopyDatabasesL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp103::TestPartCopyDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp103::TestPartCopyDatabasesL()
+ {
+ iLog->Log(_L("TestPartCopyDatabasesL"));
+
+ _LIT(KDbName1, "TP103_Database1.ldb");
+ _LIT(KDbNameNonExisting, "NonExisting_TP103_Database1.ldb");
+ _LIT(KDbNameCopy1, "file://C:TP103_DATABASE1COPY1.LDB");
+ _LIT(KDbNameCopy5, "file://C:TP103_DATABASE2COPY5.LDB");
+ _LIT(KDbNameCopy6, "file://C:TP103_DATABASE2COPY6.LDB");
+
+ _LIT(KDbName7MissingDrive, "file://TP103_DATABASE7.LDB");
+ _LIT(KDbName7, "file://C:TP103_DATABASE7.LDB");
+
+ // DB on drive that does no exist
+ _LIT(KDbName8, "file://R:TP103_DATABASE8.LDB");
+ _LIT(KDbName8_1, "file://C:TP103_DATABASE8_1.LDB");
+
+ _LIT(KDefaultCopyDb, "CopyOfDefaultDb.ldb");
+ _LIT(KDefaultCopyDbUri, "file://C:CopyOfDefaultDb.ldb");
+
+ _LIT(KDbSourceNameMissingExtension, "file://C:TP103_DATABASE2COPY6");
+ _LIT(KDbTargetNameMissingExtension, "file://C:TP103_DATABASE2COPY_666");
+
+ _LIT(KRemoteDatabaseUri, "http://RemoteLmDb.ldb");
+
+#ifdef __WINS__
+ // D on wins
+ _LIT(KDbNameCopy2, "file://D:TP103_DATABASE1COPY2.LDB");
+ _LIT(KDbNameCopy2MissingDrive, "file://TP103_DATABASE1COPY2.LDB");
+ _LIT(KDbNameCopy3, "file://D:TP103_DATABASE1COPY3.LDB");
+#else
+ _LIT(KDbNameCopy2, "file://F:TP103_DATABASE1COPY2.LDB");
+ _LIT(KDbNameCopy2MissingDrive, "file://TP103_DATABASE1COPY2.LDB");
+ _LIT(KDbNameCopy3, "file://F:TP103_DATABASE1COPY3.LDB");
+#endif
+ _LIT(KDbNameCopy4, "file://C:TP103_DATABASE1COPY4.LDB");
+
+ _LIT(KDbNameEmptyUri1, "");
+ _LIT(KDbNameEmptyUri2, "file://c");
+
+ _LIT(KDummyDb, "file://SomeDummyDbName.ldb");
+ TInt err = KErrNone;
+
+ iLog->Log(_L("Warning: this test case requires E: drive"));
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // check the count of databases that could not be delted since they were in use
+ CDesCArray* dbList = dbManager->ListDatabasesLC();
+ TInt count = dbList->Count();
+ TInt verifyDbcount;
+
+ // 1) Create a new database
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDbName1);
+ dbManager->CreateDatabaseL(*dbInfo1);
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL(KDbName1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+ CleanupStack::PushL(db1);
+ if (db1->IsInitializingNeeded())
+ {
+ iLog->Log(_L("db1->InitializeL"));
+ ExecuteAndDeleteLD(db1->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+ // 2) Copy db to file system, include file:// in URI
+ dbManager->CopyDatabaseL(KDbName1, KDbNameCopy1);
+
+ // 3) Copy db to removable media, include file:// in URI
+ dbManager->CopyDatabaseL(KDbName1, KDbNameCopy2);
+
+ // 4) Copy the db on removable media to removable media
+ dbManager->CopyDatabaseL(KDbNameCopy2, KDbNameCopy3);
+
+ // 5) Copy the db from removable media to c drive
+ dbManager->CopyDatabaseL(KDbNameCopy2, KDbNameCopy4);
+
+ // 6) Verify that the four databases (copied in step 2-5) exists
+ if (!dbManager->DatabaseExistsL(KDbNameCopy1))
+ {
+ iLog->Log(_L("DatabaseCopy1 should exist"));
+ User::Leave(-1);
+ }
+ if (!dbManager->DatabaseExistsL(KDbNameCopy2))
+ {
+ iLog->Log(_L("DatabaseCopy2 should exist"));
+ User::Leave(-1);
+ }
+ if (!dbManager->DatabaseExistsL(KDbNameCopy3))
+ {
+ iLog->Log(_L("DatabaseCopy3 should exist"));
+ User::Leave(-1);
+ }
+ if (!dbManager->DatabaseExistsL(KDbNameCopy4))
+ {
+ iLog->Log(_L("DatabaseCopy4 should exist"));
+ User::Leave(-1);
+ }
+
+ // 7) Repat step 5, but this time should the target of the copy operation exist
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameCopy2, KDbNameCopy4));
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("CopyDatabaseL should leave with KErrAlreadyExists"));
+ User::Leave(err);
+ }
+
+ // 8) Take a read lock (using a search operation) on db and try to copy it
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KDbNameCopy2);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ iOperation = landmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+
+ // Try to copy db with read lock
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameCopy2, KDbNameCopy5));
+ if (err != KErrInUse)
+ {
+ iLog->Log(_L("8) Copy should leave with KErrInUse"));
+ User::Leave(err);
+ }
+ ExecuteAndDeleteLD(iOperation);
+
+ // 9) Take a write lock on db and try to copy it
+ iOperation = lmd->RemoveAllLandmarksL();
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameCopy2, KDbNameCopy6));
+ if (err != KErrLocked) iLog->Log(_L("9) Copy should leave with KErrLocked"));
+ ExecuteAndDeleteLD(iOperation);
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ CleanupStack::PopAndDestroy(lmd);
+
+ // 10) Try to copy a database that does not exist
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameNonExisting, _L("DummyTarget.ldb")));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("10) CopyDatabaseL should leave with KErrNotFound"));
+ User::Leave(err);
+ }
+
+ // 11) Try to copy an existing db to a nonexisting path/target
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, _L("c://pelle//DummyTarget.ldb")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("11) CopyDatabaseL should leave with KErrNotFound"));
+ User::Leave(err);
+ }
+
+ // 12) Try to copy an existing db to remote path/target
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, KRemoteDatabaseUri));
+ if (err != KErrArgument) //LogErrorAndLeave(_L("12) CopyDatabaseL should leave with KErrBadName"));
+ {
+ iLog->Log(_L("12) CopyDatabaseL should leave with KErrBadName"));
+ User::Leave(err);
+ }
+
+ // 13) Try to copy a db on c drive without specifying a drive in the source uri
+ dbManager->CopyDatabaseL(KDbName1, KDbNameCopy5);
+ verifyDbcount = count +6;
+ VerifyNrOfDatabasesL(verifyDbcount, KDbNameCopy5);
+
+ // 14) Try to copy a db on removable media drive without specifying the drive in the source uri
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameCopy2MissingDrive, KDummyDb));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L(" CopyDatabaseL should leave with KErrNotFound"));
+ User::Leave(err);
+ }
+
+ // 15) Try to copy a db on removable media drive without specifying the drive in the target uri
+ if (!dbManager->DatabaseExistsL(KDbNameCopy2))
+ {
+ iLog->Log(_L("DatabaseCopy2 should exist"));
+ User::Leave(KErrNone);
+ }
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameCopy2, KDbName7MissingDrive));
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("KDbNameCopy2 should be copied"));
+ User::Leave(err);
+ }
+ verifyDbcount = count + 7;
+ VerifyNrOfDatabasesL(verifyDbcount, KDbName7);
+
+ // 16) Try to copy without .ldb in source URI
+ TRAP(err, dbManager->CopyDatabaseL(KDbSourceNameMissingExtension, _L("DummyTarget.ldb")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 17) Try to copy without .ldb in target URI
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, KDbTargetNameMissingExtension));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("CopyDatabaseL should leave with XXX"));
+ User::Leave(err);
+ }
+
+ // 18) Try to copy db to itself
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, KDbName1));
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("CopyDatabaseL should leave with KErrAlreadyExists"));
+ User::Leave(err);
+ }
+
+ // 19) Try to copy db to itself XXX Should be removed, same as step18
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, KDbName1));
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("CopyDatabaseL should leave with KErrAlreadyExists"));
+ User::Leave(err);
+ }
+
+ // 20) Try to copy db with empty target URI
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, KDbNameEmptyUri1));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("20a) CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, KDbNameEmptyUri2));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("20b) CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 21) Try to copy db with empty source URI
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameEmptyUri1, KDummyDb));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("21a) CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+ TRAP(err, dbManager->CopyDatabaseL(KDbNameEmptyUri2, KDummyDb));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("21b) CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 22) Try to copy db with target URI that is longer than allowed
+ TRAP(err, dbManager->CopyDatabaseL(_L("c:\\SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb"), KDummyDb));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("22) CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 23) Try to copy db with source URI that is longer than allowed
+ TRAP(err, dbManager->CopyDatabaseL(KDbName1, _L("c:\\SomeVeryLongFilename1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890.ldb")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("23) CopyDatabaseL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ // 24) Try to copy the default db
+ dbManager->SetDefaultDatabaseUriL(KDbName7);
+ HBufC* defaultDbUri;
+ defaultDbUri = dbManager->DefaultDatabaseUriLC();
+ dbManager->CopyDatabaseL(*defaultDbUri, KDefaultCopyDb);
+
+ verifyDbcount = count + 8;
+ VerifyNrOfDatabasesL(verifyDbcount, KDefaultCopyDbUri);
+
+ // 25) Delete default db and then copy a new db to its location
+ dbManager->DeleteDatabaseL(*defaultDbUri);
+ dbManager->CopyDatabaseL(KDefaultCopyDbUri, *defaultDbUri);
+ verifyDbcount = count + 8;
+ VerifyNrOfDatabasesL(verifyDbcount , KDefaultCopyDbUri);
+ VerifyNrOfDatabasesL(verifyDbcount , *defaultDbUri);
+
+ // 26) Try to copy a db on a drive that does not exist
+ TRAP(err, dbManager->CopyDatabaseL(KDbName8, KDbName8_1));
+ if (err != KErrNotReady)
+ {
+ iLog->Log(_L("26) CopyDatabaseL should leave with KErrNotReady"));
+ User::Leave(err);
+ }
+ VerifyNrOfDatabasesL(verifyDbcount, KDefaultCopyDbUri);
+
+ // 27) Try to copy defaultdb to db with long filenames
+ _LIT(KLongFileName, "file://C:ABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRSTABCDEFGHIJKLMNOPQRST.ldb");
+
+ TRAP(err, dbManager->CopyDatabaseL(KDefaultCopyDbUri, KLongFileName));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("27) CopyDatabaseL should leave"));
+ User::Leave(err);
+ }
+
+ VerifyNrOfDatabasesL(verifyDbcount);
+
+ // 28) Try to copy db with long file name
+ TRAP(err, dbManager->CopyDatabaseL(KLongFileName, _L("SomeDummyFile.ldb")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("28) CopyDatabaseL should leave "));
+ User::Leave(err);
+ }
+ VerifyNrOfDatabasesL(verifyDbcount);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(dbList);
+ CleanupStack::PopAndDestroy(dbManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp103::VerifyNrOfDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp103::VerifyNrOfDatabasesL(TInt aExpNrOfDatabases, const TDesC& aDatabaseUri)
+ {
+ iLog->Log(_L("VerifyNrOfDatabasesL"));
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+ if (nr != aExpNrOfDatabases)
+ {
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ TBuf<100> buf;
+ buf.Format(_L("Wrong number of databases, was %d, should be %d"), nr, aExpNrOfDatabases);
+
+ iLog->Log(buf);
+ User::Leave(-1);
+ }
+
+ TBool found = EFalse;
+ if (aDatabaseUri != KNullDesC)
+ {
+ for (TInt i=0;i<nr;i++)
+ {
+ iLog->Log((*dbArray)[i]);
+ if ((*dbArray)[i].Compare(aDatabaseUri) == KErrNone)
+ {
+ found = ETrue;
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ if (aDatabaseUri != KNullDesC && !found)
+ {
+ iLog->Log(_L("Database was not found"));
+ User::Leave(KErrNotFound);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp104.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,529 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp104.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include "FT_LandmarkConstants.h"
+#include <centralrepository.h>
+
+// CONSTANTS
+const TUint32 KLandmarkDefaultUri = 0x00000001;
+const TUid KCRUidLandmarks = {0x101FE99B};
+
+// _LIT(KSettingsFileInRom, "c:\\system\\data\\cenrep\\[101FE99B].txt");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp104::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp104::StartL()
+ {
+ _LIT(KLmA, "LandmarkA");
+ _LIT(KLmB, "LandmarkB");
+ _LIT(KLmC, "LandmarkC");
+ _LIT(KNonExistingDb, "nonexistingdb.ldb");
+ _LIT(KLogAboutToSetDefaultDB, "About to set default landmark DB to a non existing DB.");
+ _LIT(KLogAboutToDeleteAllDbs, "About to delete all landmark DBs");
+ _LIT(KLogAboutToReadBackLmA, "About to read back landmark A");
+ _LIT(KLogAboutToReadBackLmB, "About to read back landmark B");
+ _LIT(KLogAboutToReadBackLmC, "About to read back landmark C");
+ _LIT(KErrorNonExisting, "Was able to set an non-existing DB as default.");
+ _LIT(KLandmarksDbB, "lmdb104b.ldb");
+ _LIT(KLandmarksDbBFull, "file://c:lmdb104b.ldb");
+ _LIT(KErrorWrongDefaultDB, "Unexpected default database");
+ _LIT(KCopyOfDefaultDB, "lmdb104copy.ldb");
+ _LIT(KFailedToDeleteDB, "Failed to delete default database");
+ _LIT(KLogAboutToSetLmDbBAsDefault, "About to set landmarks DB B as default DB.");
+ _LIT(KOriginalDb, "file://c:eposlm.ldb");
+
+ #ifdef __WINS__
+ _LIT(KRemovableMediaDB, "d:removabledb.ldb");
+ #else
+ _LIT(KRemovableMediaDB, "f:removabledb.ldb");
+ #endif
+
+ _LIT(KNr01, "01");
+ _LIT(KNr02, "02");
+ _LIT(KNr03, "03");
+ _LIT(KNr04, "04");
+ _LIT(KNr05, "05");
+ _LIT(KNr06, "06");
+ _LIT(KNr07, "07");
+ _LIT(KNr08, "08");
+
+ _LIT(KNr10, "10");
+ _LIT(KNr11, "11");
+ _LIT(KNr12, "12");
+ _LIT(KNr13, "13");
+ _LIT(KNr14, "14");
+ _LIT(KNr15, "15");
+ _LIT(KNr16, "16");
+ _LIT(KNr17, "17");
+ _LIT(KNr18, "18");
+ _LIT(KNr19, "19");
+ _LIT(KNr20, "20");
+ _LIT(KNr21, "21");
+ _LIT(KNr22, "22");
+ _LIT(KNr23, "23");
+ _LIT(KNr24, "24");
+ _LIT(KNr25, "25");
+ _LIT(KNr26, "26");
+
+ iLog->Log(_L("Warning: this test case requires E: drive"));
+
+ iRepository = CRepository::NewL(KCRUidLandmarks);
+ iDbMan = CPosLmDatabaseManager::NewL();
+
+ RemoveAllLmDatabasesL();
+ ArgumentTestsL();
+ TInt err;
+
+
+ TBuf16<NCentralRepositoryConstants::KMaxUnicodeStringLength> defaultUriRep;
+ //NCentralRepositoryConstants::KMaxUnicodeStringLength
+ User::LeaveIfError(iRepository->Get(KLandmarkDefaultUri, defaultUriRep));
+
+
+
+ // 3
+ iLog->Log(KNr03);
+ // Open and initialize default db
+ iLandmarksDb = CPosLandmarkDatabase::OpenL();
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+
+
+ // Add landmark A to DB:
+ CPosLandmark* lmA = CreateXMLLandmarkLC(KLmA);
+ TPosLmItemId lmAId = iLandmarksDb->AddLandmarkL(*lmA);
+ CleanupStack::PopAndDestroy(lmA);
+ User::After(2000000);
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+ // User::After(2000000);
+ // Check that it was actually added:
+ iLog->Log(KLogAboutToReadBackLmA);
+ lmA = iLandmarksDb->ReadLandmarkLC(lmAId);
+ iLog->Log(KLogAboutToReadBackLmA);
+ CleanupStack::PopAndDestroy(lmA);
+
+ // 4
+ iLog->Log(KNr04);
+ // Test to set a non-existing db as default:
+ iLog->Log(KLogAboutToSetDefaultDB);
+ TRAP(err, iDbMan->SetDefaultDatabaseUriL(KNonExistingDb));
+
+ if (err != KErrNotFound)
+ {
+
+ iLog->Log(KErrorNonExisting);
+ User::Leave(err);
+ }
+
+ // 5
+ iLog->Log(KNr05);
+ // Create a new db and add a landmark to it:
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+ HPosLmDatabaseInfo* dbInfoB = HPosLmDatabaseInfo::NewLC(KLandmarksDbB);
+ iDbMan->CreateDatabaseL(*dbInfoB);
+ CleanupStack::PopAndDestroy(dbInfoB);
+ iLandmarksDb = CPosLandmarkDatabase::OpenL(KLandmarksDbB);
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+
+ CPosLandmark* lmB = CreateXMLLandmarkLC(KLmB);
+ TPosLmItemId lmBId = iLandmarksDb->AddLandmarkL(*lmB);
+ User::After(2000000);
+ CleanupStack::PopAndDestroy(lmB);
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+
+ // Read back the landmark:
+ iLog->Log(KLogAboutToReadBackLmB);
+ lmB = iLandmarksDb->ReadLandmarkLC(lmBId);
+ CleanupStack::PopAndDestroy(lmB);
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ // 6
+ iLog->Log(KNr06);
+ // Set the new DB as default, and check that it worked OK:
+ iLog->Log(KLogAboutToSetLmDbBAsDefault);
+ iDbMan->SetDefaultDatabaseUriL(KLandmarksDbB);
+ HBufC* defaultURI = iDbMan->DefaultDatabaseUriLC();
+
+ // 7
+ iLog->Log(KNr07);
+ if (defaultURI->Des().CompareF(KLandmarksDbBFull))
+ {
+
+ iLog->Log(KErrorWrongDefaultDB);
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(defaultURI);
+
+ // 8
+ iLog->Log(KNr08);
+ // Open the default DB and try to find the landmark that was added before:
+ iLandmarksDb = CPosLandmarkDatabase::OpenL();
+ if (iLandmarksDb->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+ }
+
+ iLog->Log(KLogAboutToReadBackLmB);
+ lmB = iLandmarksDb->ReadLandmarkLC(lmBId);
+ CleanupStack::PopAndDestroy(lmB);
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ // 9
+ iLog->Log(KNr01);
+ // Change the default db:
+ iDbMan->SetDefaultDatabaseUriL(defaultUriRep);
+ defaultURI = iDbMan->DefaultDatabaseUriLC();
+
+ if (defaultURI->Des().CompareF(defaultUriRep))
+ {
+
+ iLog->Log(KErrorWrongDefaultDB);
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(defaultURI);
+
+ // 10
+ iLog->Log(KNr10);
+ // Open the default DB and check that it contains landmark A:
+ iLandmarksDb = CPosLandmarkDatabase::OpenL();
+ if (iLandmarksDb->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+ }
+ iLog->Log(KLogAboutToReadBackLmA);
+ lmA = iLandmarksDb->ReadLandmarkLC(lmAId);
+ CleanupStack::PopAndDestroy(lmA);
+
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+
+ // ********************** Test Copy **********************
+ // 11
+ iLog->Log(KNr11);
+ // Copy the default DB:
+ iDbMan->CopyDatabaseL(defaultUriRep, KCopyOfDefaultDB);
+
+ // 12
+ iLog->Log(KNr12);
+
+ // 13
+ iLog->Log(KNr13);
+ // Check which DB that is the default:
+ defaultURI = iDbMan->DefaultDatabaseUriLC();
+ if (defaultURI->Des().CompareF(defaultUriRep))
+ {
+
+ iLog->Log(KErrorWrongDefaultDB);
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy(defaultURI);
+
+ // 14
+ iLog->Log(KNr14);
+ iDbMan->SetDefaultDatabaseUriL(KCopyOfDefaultDB);
+
+ // Open the default DB and check that it contains landmark A:
+ iLandmarksDb = CPosLandmarkDatabase::OpenL();
+ if (iLandmarksDb->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+ }
+ iLog->Log(KLogAboutToReadBackLmA);
+ lmA = iLandmarksDb->ReadLandmarkLC(lmAId);
+ CleanupStack::PopAndDestroy(lmA);
+
+ // 15
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+ iLog->Log(KNr15);
+
+ // Create a landmarks DB on the memory card:
+ HPosLmDatabaseInfo* dbInfoRemMedia = HPosLmDatabaseInfo::NewLC(KRemovableMediaDB);
+ iDbMan->CreateDatabaseL(*dbInfoRemMedia);
+ CleanupStack::PopAndDestroy(dbInfoRemMedia);
+
+ iLandmarksDb = CPosLandmarkDatabase::OpenL(KRemovableMediaDB);
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+
+ // Add a landmark to it:
+ CPosLandmark* lmC = CreateXMLLandmarkLC(KLmC);
+ TPosLmItemId lmCId = iLandmarksDb->AddLandmarkL(*lmC);
+ CleanupStack::PopAndDestroy(lmC);
+ User::After(200000);
+ ExecuteAndDeleteLD(iLandmarksDb->CompactL());
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ // 16
+ iLog->Log(KNr16);
+ iDbMan->SetDefaultDatabaseUriL(KRemovableMediaDB);
+
+ iLandmarksDb = CPosLandmarkDatabase::OpenL();
+ if (iLandmarksDb->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iLandmarksDb->InitializeL());
+ }
+
+ // Check that landmark C exists:
+ iLog->Log(KLogAboutToReadBackLmC);
+ lmC = iLandmarksDb->ReadLandmarkLC(lmCId);
+ CleanupStack::PopAndDestroy(lmC);
+
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ // URI Testing:
+ _LIT(KTestDB104A, "file://c:TestDb104a.ldb");
+ _LIT(KTestDB104B, "file://c:TestDb104b.ldb");
+ #ifdef __WINS__
+ _LIT(KTestDB104MMC, "file://d:TestDbMMC.ldb");
+ #else
+ _LIT(KTestDB104MMC, "file://f:TestDbMMC.ldb");
+ #endif
+
+ // Create some testdb:s
+ HPosLmDatabaseInfo* dbInfo104A = HPosLmDatabaseInfo::NewLC(KTestDB104A);
+ HPosLmDatabaseInfo* dbInfo104B = HPosLmDatabaseInfo::NewLC(KTestDB104B);
+ HPosLmDatabaseInfo* dbInfo104MMC = HPosLmDatabaseInfo::NewLC(KTestDB104MMC);
+ iDbMan->CreateDatabaseL(*dbInfo104A);
+ iDbMan->CreateDatabaseL(*dbInfo104B);
+ iDbMan->CreateDatabaseL(*dbInfo104MMC);
+ CleanupStack::PopAndDestroy(dbInfo104MMC);
+ CleanupStack::PopAndDestroy(dbInfo104B);
+ CleanupStack::PopAndDestroy(dbInfo104A);
+
+
+ _LIT(KNonsenseURI, "&t87%(s!,uy.poffd");
+ _LIT(KNotEndingWithLdbURI, "file://c:TestDb104a");
+ _LIT(KEmptyURI, "");
+ _LIT(KLongerThanAllowedURI, "longdatabaseewjktgjfkdnbnbfjghskwuwrqtrccxbdhfbbjgnmglkytiyitiugjqoiwiejakxngjhdygrgdskhdhdbxvafarqtwyrjgjtihjkjbnbjyhkjltoyouiylhjrnbmdngfhurtwgewvetqwsahdgfey4756eyrg8328yrgfgggbbnnmnkjgjdhajaqiwuwueytriutiiiutuithjhgergfbfhgnbmbmnmklkrjsfadadeqwyteutiyibnvcbxvdafsdgdhey.ldb"); // more than 256 (KMaxUnicodeStringLength)
+ _LIT(KCorrectURI, "file://c:TestDb104b.ldb");
+ _LIT(KCorrectButWithoutDriveURI, "file://TestDb104a.LDB");
+ _LIT(KOnMmcButWithoutDriveURI, "file://TestDb104c.ldb");
+ _LIT(KRemoteURI, "http://www.landmarks.com/dbs/remote104.ldb");
+ _LIT(KNoProtocolURI, "c:TestDb104b.ldb");
+
+ // 17
+ iLog->Log(KNr17);
+ TestSetUriL(KNonsenseURI, KErrArgument);
+ // 18
+ iLog->Log(KNr18);
+ TestSetUriL(KNotEndingWithLdbURI, KErrArgument);
+ // 19
+ iLog->Log(KNr19);
+ TestSetUriL(KEmptyURI, KErrArgument);
+ // 20
+ iLog->Log(KNr20);
+ TestSetUriL(KLongerThanAllowedURI, KErrArgument);
+ // 21
+ iLog->Log(KNr21);
+ TestSetUriL(KCorrectURI, KErrNone);
+ // 22
+ iLog->Log(KNr22);
+ TestSetUriL(KCorrectButWithoutDriveURI, KErrNone);
+ // 23
+ iLog->Log(KNr23);
+ TestSetUriL(KOnMmcButWithoutDriveURI, KErrNotFound);
+ // 24
+ iLog->Log(KNr24);
+ TestSetUriL(KRemoteURI, KErrNotSupported);
+ // 25
+ iLog->Log(KNr25);
+ TestSetUriL(KNoProtocolURI, KErrNone);
+ // 26
+ iLog->Log(KNr26);
+ TestSetUriL(KNoProtocolURI, KErrNone);
+
+ delete iDbMan;
+ iDbMan = NULL;
+
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ delete iRepository;
+ iRepository = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp104::TestSetUriL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp104::TestSetUriL(const TDesC& aUriString, TInt aExpectedErrorCode)
+ {
+ TRAPD(err,iDbMan->SetDefaultDatabaseUriL(aUriString));
+ if (err != aExpectedErrorCode)
+ {
+ _LIT(KErrorText, "Received wrong error code when setting URI. Expected %d, Received %d");
+ TBuf<100> buf;
+ buf.Format(KErrorText, aExpectedErrorCode, err);
+
+ iLog->Log(buf);
+ User::Leave(err);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp104::ArgumentTests
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp104::ArgumentTestsL()
+ {
+ _LIT(KErrorWrongCode, "Didn't receive correct error code");
+ _LIT(KMaxLengthString64, "1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString64Bad, "x1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString66, "c:2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString66Bad, "c:x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString71, "file://3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString71Bad, "file://x3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString73, "file://c:4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString73Bad, "file://c:x4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ TInt err = 0;
+
+ // Should work OK:
+ HPosLmDatabaseInfo* dbInfo64 = HPosLmDatabaseInfo::NewLC(KMaxLengthString64);
+ HPosLmDatabaseInfo* dbInfo64Bad = HPosLmDatabaseInfo::NewLC(KMaxLengthString64Bad);
+ HPosLmDatabaseInfo* dbInfo66 = HPosLmDatabaseInfo::NewLC(KMaxLengthString66);
+ HPosLmDatabaseInfo* dbInfo66Bad = HPosLmDatabaseInfo::NewLC(KMaxLengthString66Bad);
+ HPosLmDatabaseInfo* dbInfo71 = HPosLmDatabaseInfo::NewLC(KMaxLengthString71);
+ HPosLmDatabaseInfo* dbInfo71Bad = HPosLmDatabaseInfo::NewLC(KMaxLengthString71Bad);
+ HPosLmDatabaseInfo* dbInfo73 = HPosLmDatabaseInfo::NewLC(KMaxLengthString73);
+ HPosLmDatabaseInfo* dbInfo73Bad = HPosLmDatabaseInfo::NewLC(KMaxLengthString73Bad);
+
+ iDbMan->CreateDatabaseL(*dbInfo64);
+ iDbMan->CreateDatabaseL(*dbInfo66);
+ iDbMan->CreateDatabaseL(*dbInfo71);
+ iDbMan->CreateDatabaseL(*dbInfo73);
+
+
+
+ TRAP(err, iDbMan->CreateDatabaseL(*dbInfo64Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->CreateDatabaseL(*dbInfo66Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->CreateDatabaseL(*dbInfo71Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->CreateDatabaseL(*dbInfo73Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+
+ CleanupStack::PopAndDestroy(dbInfo73Bad);
+ CleanupStack::PopAndDestroy(dbInfo73);
+ CleanupStack::PopAndDestroy(dbInfo71Bad);
+ CleanupStack::PopAndDestroy(dbInfo71);
+ CleanupStack::PopAndDestroy(dbInfo66Bad);
+ CleanupStack::PopAndDestroy(dbInfo66);
+ CleanupStack::PopAndDestroy(dbInfo64Bad);
+ CleanupStack::PopAndDestroy(dbInfo64);
+
+/////////////////////////////////////////////////////////////////////
+ // Should work OK:
+ iDbMan->DatabaseExistsL(KMaxLengthString64);
+ iDbMan->DatabaseExistsL(KMaxLengthString66);
+ iDbMan->DatabaseExistsL(KMaxLengthString71);
+ iDbMan->DatabaseExistsL(KMaxLengthString73);
+
+ TRAP(err, iDbMan->DatabaseExistsL(KNullDesC));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+
+ TRAP(err, iDbMan->DatabaseExistsL(KMaxLengthString64Bad));
+ AssertTrueSecL(err == KErrNone, KErrorWrongCode);
+ TRAP(err, iDbMan->DatabaseExistsL(KMaxLengthString66Bad));
+ AssertTrueSecL(err == KErrNone, KErrorWrongCode);
+ TRAP(err, iDbMan->DatabaseExistsL(KMaxLengthString71Bad));
+ AssertTrueSecL(err == KErrNone, KErrorWrongCode);
+ TRAP(err, iDbMan->DatabaseExistsL(KMaxLengthString73Bad));
+ AssertTrueSecL(err == KErrNone, KErrorWrongCode);
+
+/////////////////////////////////////////////////////////////////////
+
+ // Should work OK:
+ iDbMan->SetDefaultDatabaseUriL(KMaxLengthString64);
+ iDbMan->SetDefaultDatabaseUriL(KMaxLengthString66);
+ iDbMan->SetDefaultDatabaseUriL(KMaxLengthString71);
+ iDbMan->SetDefaultDatabaseUriL(KMaxLengthString73);
+
+ // Should not work:
+ TRAP(err, iDbMan->SetDefaultDatabaseUriL(KNullDesC));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->SetDefaultDatabaseUriL(KMaxLengthString64Bad));
+ AssertTrueSecL(err == KErrNotFound, KErrorWrongCode);
+ TRAP(err, iDbMan->SetDefaultDatabaseUriL(KMaxLengthString66Bad));
+ AssertTrueSecL(err == KErrNotFound, KErrorWrongCode);
+ TRAP(err, iDbMan->SetDefaultDatabaseUriL(KMaxLengthString71Bad));
+ AssertTrueSecL(err == KErrNotFound, KErrorWrongCode);
+ TRAP(err, iDbMan->SetDefaultDatabaseUriL(KMaxLengthString73Bad));
+ AssertTrueSecL(err == KErrNotFound, KErrorWrongCode);
+
+/////////////////////////////////////////////////////////////////////
+ // Should work OK:
+ iDbMan->DeleteDatabaseL(KMaxLengthString64);
+ iDbMan->DeleteDatabaseL(KMaxLengthString66);
+ iDbMan->DeleteDatabaseL(KMaxLengthString71);
+ iDbMan->DeleteDatabaseL(KMaxLengthString73);
+
+ // Should not work:
+
+ TRAP(err, iDbMan->DeleteDatabaseL(KMaxLengthString64Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->DeleteDatabaseL(KMaxLengthString66Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->DeleteDatabaseL(KMaxLengthString71Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+ TRAP(err, iDbMan->DeleteDatabaseL(KMaxLengthString73Bad));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCode);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp104::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp104::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDbMan;
+ iDbMan = NULL;
+
+ delete iLandmarksDb;
+ iLandmarksDb = NULL;
+
+ delete iRepository;
+ iRepository = NULL;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp105.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,334 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp105.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include "FT_LandmarkConstants.h"
+#include <centralrepository.h>
+#include <bautils.h>
+
+// CONSTANTS
+
+_LIT(KResourceFileROM, "z:\\resource\\eposlmdefaultdbname.R");
+_LIT(KResourceFile, "c:\\resource\\eposlmdefaultdbname.R");
+_LIT(KResourceFileCOPY, "c:\\resource\\COPY_eposlmdefaultdbname.R");
+
+#ifdef __WINS__
+ _LIT(KResourceFileTEST, "z:\\system\\test\\testdata\\tp105_eposlmdefaultdbname.R");
+#else
+ _LIT(KResourceFileTEST, "c:\\system\\test\\testdata\\tp105_eposlmdefaultdbname.R");
+#endif
+
+_LIT(KDefaultName_En, "TP105 Default Landmarks");
+_LIT(KDefaultName_Sw, "Mina små landmarks");
+_LIT(KEnglish, "English");
+_LIT(KSwedish, "Swedish");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp105::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp105::StartL()
+ {
+#ifdef __WINS__
+ _LIT(KNotSupported, "Test case is not supported on WINS, execute on target!");
+ LogErrorAndLeave(KNotSupported);
+#endif
+ _LIT(KCancelled, "Test cancelled");
+ _LIT(KLangChanged, "Have you changed the language to swedish in the phone ? (Should be English currently.)");
+ _LIT(KChangeLang, "Change language to Swedish in phone (you will need to reboot the phone)");
+ _LIT(KWrongLanguageEnglish, "Wrong language on phone, should be English");
+ _LIT(KWrongLanguageSwedish, "Wrong language on phone, should be Swedish");
+
+ /*
+LMREQ200: Display Name for Default Database
+If the display name has not been set for the default database,
+a localized default display name shall be used. The localized display name
+is read from a resource file and it is language dependent.
+If the user changes language for the phone, the localized display name shall change accordingly.
+*/
+
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(KLangChanged, EUtfwDialogTypeYesNo, EFalse);
+ //TUtfwUserAnswer answer = EUtfwUserAnswerNo;
+ if(answer == EUtfwUserAnswerNo)
+ {
+ RemoveAllLmDatabasesL();
+ // Copy the default display name resource file with english name to
+ // c:\\resource
+ // This file should be used when language is english
+ CopyResourceFileL(_L("01"));
+
+ // Create a database and set it to be default
+ // Since the display name has not been set for this db it should be read
+ // from localiased resource file
+ _LIT(KDB, "TP105_Db.ldb");
+ iDbMan = CPosLmDatabaseManager::NewL();
+ HPosLmDatabaseInfo* dbInfo01 = HPosLmDatabaseInfo::NewLC(KDB);
+ iDbMan->CreateDatabaseL(*dbInfo01);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ iDbMan->SetDefaultDatabaseUriL(KDB);
+
+ delete iDbMan;
+ iDbMan = NULL;
+
+ TBuf<50> buf;
+ TInt lang = User::Language();
+ buf.Format(_L("***** Language %d ******"), lang);
+ iLog->Put(buf);
+
+ if (lang != 1)
+ {
+ LogErrorAndLeave(KWrongLanguageEnglish, KErrGeneral);
+ }
+
+ CheckDisplayNameL(KEnglish, KDefaultName_En);
+
+ answer = iUserInfo->ShowDialog(KChangeLang, EUtfwDialogTypeOkCancel, EFalse);
+ //answer = EUtfwUserAnswerOk;
+ AssertTrueSecL(answer == EUtfwUserAnswerOk, KCancelled, KErrCancel);
+ }
+ else
+ {
+ TInt lang = User::Language();
+ TBuf<50> buf;
+ buf.Format(_L("***** Language %d ******"), lang);
+ iLog->Put(buf);
+
+ if (lang != 6)
+ {
+ LogErrorAndLeave(KWrongLanguageSwedish, KErrGeneral);
+ }
+
+ // Copy the default display name resource file with swedish name to
+ // c:\\resource
+ // This file should be used when language is changed into swedish
+ CopyResourceFileL(_L("06"));
+
+ CheckDisplayNameL(KSwedish, KDefaultName_Sw);
+
+ _LIT(KTestSucceeded, "Localization test for displayname succeeded!");
+ //iUserInfo->ShowDialog(KTestSucceeded, EUtfwDialogTypeOk, EFalse);
+
+ // Remove both swedish and english test resource files
+ // used in this test, also restores the original resource files
+ RemoveResourceFileL(_L("01"));
+ RemoveResourceFileL(_L("06"));
+ iLog->Put(KTestSucceeded);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp105::CheckDisplayNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp105::CheckDisplayNameL(const TDesC& aLanguage, const TDesC& aDisplayName)
+ {
+ iLog->Put(_L("CheckDisplayNameL"));
+ _LIT(KQuestionFormat, "Does the language look like %S?: %S");
+ _LIT(KErrLangError, "The language of the displayname is not correct.");
+ _LIT(KMatchCriteria, "://");
+ _LIT(KErrMatch, "Error. Displayname matches filename.");
+ _LIT(KErrMatchUri, "Error. Displayname matches URI.");
+ _LIT(KErrMatchDisplay, "Error. Displayname does not match localised name");
+
+ // Get the display name:
+ iDbMan = CPosLmDatabaseManager::NewL();
+ HBufC* defaultUri = iDbMan->DefaultDatabaseUriLC();
+
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(defaultUri->Des());
+
+ iDbMan->GetDatabaseInfoL(*dbInfo);
+
+ TPosLmDatabaseSettings settings = dbInfo->Settings();
+ TPtrC defaultDisplayName = settings.DatabaseName();
+ CleanupStack::PopAndDestroy(dbInfo);
+
+ TInt stringPos = defaultUri->Find(KMatchCriteria);
+ TBuf<50> uriFileName = defaultUri->Right(defaultUri->Length() - (stringPos + 5));
+
+ AssertTrueSecL(uriFileName != defaultDisplayName, KErrMatch);
+ AssertTrueSecL(defaultUri->Des() != defaultDisplayName, KErrMatchUri);
+ AssertTrueSecL(defaultDisplayName.CompareC(aDisplayName) == 0, KErrMatchDisplay);
+
+ iLog->Put(defaultDisplayName);
+ iLog->Put(uriFileName);
+ iLog->Put(defaultUri->Des());
+
+ TBuf<100> question;
+ question.Format(KQuestionFormat, &aLanguage, &defaultDisplayName);
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(question, EUtfwDialogTypeYesNo, EFalse);
+ CleanupStack::PopAndDestroy(defaultUri);
+ //TUtfwUserAnswer answer = EUtfwUserAnswerYes;
+ AssertTrueSecL(answer == EUtfwUserAnswerYes, KErrLangError);
+
+ delete iDbMan;
+ iDbMan = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp105::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp105::CloseTest()
+ {
+ iLog->Put(_L("CloseTest"));
+
+ delete iDbMan;
+ iDbMan = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp105::CopyResourceFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp105::CopyResourceFileL(const TDesC& aResourceNr)
+ {
+ iLog->Put(_L("CopyResourceFileL"));
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<55> pathROM;
+ TBuf<55> pathWINS;
+ TBuf<55> pathCOPY;
+ TBuf<55> pathTEST;
+
+ pathROM.Append(KResourceFileROM);
+ pathWINS.Append(KResourceFile);
+ pathCOPY.Append(KResourceFileCOPY);
+ pathTEST.Append(KResourceFileTEST);
+
+ pathROM.Append(aResourceNr);
+ pathWINS.Append(aResourceNr);
+ pathCOPY.Append(aResourceNr);
+ pathTEST.Append(aResourceNr);
+
+ iLog->Put(pathROM);
+ //check if landmark is flashed
+ if (!BaflUtils::FileExists(fs, pathROM))
+ {
+ iLog->Put(_L("Landmark is NOT flashed, rename resource file"));
+ //Landmark is not flashed rename the file before copy a own defiend file.
+ //since landmark is not flashed the file should exist hence leaving if it is not found!
+ iLog->Put(pathWINS);
+ iLog->Put(pathCOPY);
+
+ TInt err = fileMan->Rename(pathWINS, pathCOPY, CFileMan::EOverWrite);
+ if (err != KErrNone && err != KErrNotFound)
+ iLog->Put(_L("Problem renaming original global categories file"));
+ }
+ else
+ {
+ iLog->Put(_L("Landmark is flashed, copy resource file"));
+ }
+ iLog->Put(pathTEST);
+ iLog->Put(pathWINS);
+
+ User::LeaveIfError(fileMan->Copy(pathTEST, pathWINS, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+ iLog->Put(_L("CopyResourceFileL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp105::RemoveResourceFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp105::RemoveResourceFileL(const TDesC& aResourceNr)
+ {
+ iLog->Put(_L("RemoveResourceFileL"));
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<55> pathROM;
+ TBuf<55> pathWINS;
+ TBuf<55> pathCOPY;
+ TBuf<55> pathTEST;
+
+ pathROM.Append(KResourceFileROM);
+ pathWINS.Append(KResourceFile);
+ pathCOPY.Append(KResourceFileCOPY);
+ pathTEST.Append(KResourceFileTEST);
+
+ pathROM.Append(aResourceNr);
+ pathWINS.Append(aResourceNr);
+ pathCOPY.Append(aResourceNr);
+ pathTEST.Append(aResourceNr);
+
+ //check if the default display name resource file exist in rom
+ //if landmarks is flashed it is just okej to remove
+ // file in on the c drive.
+ iLog->Put(pathROM);
+ if (BaflUtils::FileExists(fs, pathROM))
+ {
+ iLog->Put(_L("Landmark is flashed, delete resource file"));
+ //in this case it is same just to remove it form c if it exists:
+ iLog->Put(pathWINS);
+ if (BaflUtils::FileExists(fs, pathWINS))
+ {
+ User::LeaveIfError(fileMan->Delete(pathWINS));
+ }
+ }
+ else
+ {
+ iLog->Put(_L("Landmark is NOT flashed, delete resource file and rename the old file"));
+ //If a copy exist this should be used, but if it does not
+ //exist the file is not removed since it is hard to know
+ //if anything has gone wrong.
+ iLog->Put(pathCOPY);
+ iLog->Put(pathWINS);
+ if(BaflUtils::FileExists(fs, pathCOPY))
+ {
+ //first delete the used file, if it exist
+ if (BaflUtils::FileExists(fs, pathWINS))
+ {
+ User::LeaveIfError(fileMan->Delete(pathWINS));
+ }
+ //Rename the copy file
+ User::LeaveIfError(fileMan->Rename(pathCOPY, pathWINS, CFileMan::EOverWrite));
+ }
+ }
+ CleanupStack::PopAndDestroy(2);
+ iLog->Put(_L("RemoveResourceFileL Done"));
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp106.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,580 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <e32std.h>
+#include <ss_std.h>
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLmDatabaseManager.h>
+
+#include "FT_CPosTp106.h"
+
+// Nr of simultaneous clients (threads)
+const TInt KNoMultipleClients = 5;
+
+// Nr of created dbs
+const TInt KNrOfDBs=25;
+const TInt KCheckIfExistDBs=10;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp106::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iUseLogFromThreadIsDisabled = EFalse;
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("Error when deleting all lm dbs"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::StartL()
+ {
+ MakeSurePanicDebugFileExistsL();
+
+ RemoveAllLmDatabasesL();
+
+ iUseLogFromThreadIsDisabled = ETrue;
+
+ TBuf<150> buf;
+
+ _LIT(KTrace1, "Create %d x %d (=%d) nr of dbs took = %d msec");
+ _LIT(KTrace2, "Copy %d x %d (=%d) nr of dbs took = %d msec");
+ _LIT(KTrace3, "Get and Set default URI for %d x %d (=%d) nr of dbs took = %d msec");
+ _LIT(KTrace4, "Get display name for %d x %d (=%d) nr of dbs took = %d msec");
+ _LIT(KTrace5, "Check if db exist for %d x %d (=%d) nr of dbs took = %d msec");
+ _LIT(KTrace6, "Delete %d x %d (=%d) nr of dbs took = %d msec");
+
+ iTestStep=Step1;
+ StartMultipleClientsL(KNoMultipleClients);
+ TInt64 msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(KTrace1, KNrOfDBs, KNoMultipleClients, KNrOfDBs*KNoMultipleClients, msec);
+ iLog->Log(buf);
+
+ iTestStep=Step2;
+ StartMultipleClientsL(KNoMultipleClients);
+ msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(KTrace2, KNrOfDBs, KNoMultipleClients, KNrOfDBs*KNoMultipleClients, msec);
+ iLog->Log(buf);
+
+ iTestStep=Step3;
+ StartMultipleClientsL(KNoMultipleClients);
+ msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(KTrace3, KNrOfDBs, KNoMultipleClients, KNrOfDBs*KNoMultipleClients, msec);
+ iLog->Log(buf);
+
+ iTestStep=Step4;
+ StartMultipleClientsL(KNoMultipleClients);
+ msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(KTrace4, KNrOfDBs, KNoMultipleClients, KNrOfDBs*KNoMultipleClients, msec);
+ iLog->Log(buf);
+
+ iTestStep=Step5;
+ StartMultipleClientsL(KNoMultipleClients);
+ msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(KTrace5, KNrOfDBs, KNoMultipleClients, KNrOfDBs*KNoMultipleClients, msec);
+ iLog->Log(buf);
+
+ iTestStep=Step6;
+ StartMultipleClientsL(KNoMultipleClients);
+ msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(KTrace6, KNrOfDBs, KNoMultipleClients, KNrOfDBs*KNoMultipleClients, msec);
+ iLog->Log(buf);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::StartMultipleClientsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::StartMultipleClientsL(const TUint aNoClients)
+ {
+ _LIT(KMultipleErr, "Error %d from thread %d");
+ _LIT(KPanicErr, "Thread %d has panicked or is alive");
+ _LIT(KSuccess, "Thread %d is successful");
+
+ CreateThreadsL(aNoClients);
+
+ RArray<TRequestStatus> statuses;
+ CleanupClosePushL(statuses);
+
+ // Start measuring time
+ iStart.UniversalTime();
+
+ for (TUint j=0; j<aNoClients; j++)
+ {
+ TRequestStatus status;
+ statuses.Append(status);
+ }
+
+ TInt i=0;
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ User::WaitForRequest(statuses[i]);
+ }
+
+ TInt errors=0;
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ TInt exitReason = iThreads[i].ExitReason();
+ TBuf<100> info;
+
+ if (exitReason != KErrNone)
+ {
+ errors++;
+ info.Format(KMultipleErr, exitReason, i+1);
+ }
+ else
+ {
+ info.Format(KSuccess, i+1);
+ }
+ iLog->Log(info);
+
+ AssertTrueSecL(iThreads[i].ExitType() == EExitKill, KPanicErr, i+1);
+ AssertTrueSecL(exitReason == KErrNone || exitReason == KErrLocked, info);
+ }
+
+ // Stop measuring time
+ iStop.UniversalTime();
+/*
+ if (iTestStep != EReadLockTaken)
+ {
+ AssertTrueSecL(errors == KNoMultipleClients - 1, KAllErr);
+ }
+ else
+ {
+ // All imports should have failed since the started search should have taken a read lock
+ AssertTrueSecL(errors == KNoMultipleClients, KAllNotFailedErr);
+ }
+ */
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreadIndex=0;
+ iThreads.Close();
+ CleanupStack::PopAndDestroy(&statuses);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::RunTestL(TAny* aData)
+ {
+ CPosTp106* self = reinterpret_cast<CPosTp106*>(aData);
+ TInt index = ++self->iThreadIndex;
+
+ TBuf<100> info;
+ _LIT(KInfo2, "Thread %d before execute");
+ info.Format(KInfo2, index);
+ RDebug::Print(info);
+
+ switch (self->iTestStep)
+ {
+ case Step1:
+ self->CreateAndListDatabasesL(index);
+ break;
+ case Step2:
+ self->CopyDatabasesL(index);
+ break;
+ case Step3:
+ self->SetAndGetUriL(index);
+ break;
+ case Step4:
+ self->GetDisplayNameL();
+ break;
+ case Step5:
+ self->CheckIfExistL(index);
+ break;
+ case Step6:
+ self->DeleteDatabasesL();
+ break;
+ }
+
+ _LIT(KInfo3, "Thread %d after execute");
+ info.Format(KInfo3, index);
+ RDebug::Print(info);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::CreateAndListDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::CreateAndListDatabasesL(TInt index)
+ {
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ _LIT(KLmName, "Thread_%d_LmDbIndex%d.ldb");
+ _LIT(KLmURI, "file://C:Thread_%d_LmDbIndex%d.ldb");
+ TBuf<50> lmDbName;
+ TBuf<50> lmDbUri;
+ TInt i=0;
+ TInt NrOfFoundDbs=0;
+ // Create KNrOfDBs nr of landmark dbs
+
+ HPosLmDatabaseInfo* dbInfo = NULL;
+ for (i=0;i<KNrOfDBs;i++)
+ {
+ lmDbName.Zero();
+ lmDbName.Format(KLmName, index, i);
+ dbInfo = HPosLmDatabaseInfo::NewLC(lmDbName);
+ manager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+ /*
+ This increases the filesize to much
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(lmDbName);
+ CleanupStack::PushL(db);
+
+ if (db->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(db->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(db);
+ */
+ }
+
+ // List all dbs
+ CDesCArray* dbArray = manager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+
+ // Check that at least KNrOfDBs nr of dbs exist
+ if (nr < KNrOfDBs) User::Panic(_L("Wrong Nr"), -666);
+
+ // Check that all created dbs are listed
+ for (TInt j=0;j<KNrOfDBs;j++)
+ {
+ lmDbUri.Zero();
+ lmDbUri.Format(KLmURI, index, j);
+ for (i=0;i<nr;i++)
+ {
+ if ((*dbArray)[i].CompareC(lmDbUri) == KErrNone)
+ {
+ // Found
+ i=nr;
+ NrOfFoundDbs++;
+ }
+ }
+ }
+
+ if (NrOfFoundDbs != KNrOfDBs) User::Panic(_L("Wrong Nr"), -667);
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::CopyDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::CopyDatabasesL(TInt index)
+ {
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ _LIT(KLmName, "Thread_%d_LmDbIndex%d.ldb");
+ _LIT(KLmNameCopy, "Thread_%d_LmDbIndex%d_Copy.ldb");
+ _LIT(KLmURICopy, "file://C:Thread_%d_LmDbIndex%d_Copy.ldb");
+ TBuf<50> lmDbName;
+ TBuf<50> lmDbNameCopy;
+ TBuf<50> lmDbUriCopy;
+ TInt i=0;
+ TInt NrOfFoundDbs=0;
+ // Create KNrOfDBs nr of landmark dbs
+ for (i=0;i<KNrOfDBs;i++)
+ {
+ lmDbName.Zero();
+ lmDbName.Format(KLmName, index, i);
+
+ lmDbNameCopy.Zero();
+ lmDbNameCopy.Format(KLmNameCopy, index, i);
+ manager->CopyDatabaseL(lmDbName, lmDbNameCopy);
+ }
+
+ // List all dbs
+ CDesCArray* dbArray = manager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+
+ // Check that at least all copied dbs are listed
+ for (TInt j=0;j<KNrOfDBs;j++)
+ {
+ lmDbUriCopy.Zero();
+ lmDbUriCopy.Format(KLmURICopy, index, j);
+ for (i=0;i<nr;i++)
+ {
+ if ((*dbArray)[i].Compare(lmDbUriCopy) == KErrNone)
+ {
+ // Found
+ i=nr;
+ NrOfFoundDbs++;
+ }
+ }
+ }
+
+ if (NrOfFoundDbs != KNrOfDBs) User::Panic(_L("WrongNrOfCopiedDb"), -667);
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::DeleteDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::DeleteDatabasesL()
+ {
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // _LIT(KLmURICopy, "file://C:Thread_%d_LmDbIndex%d_Copy.LDB");
+ // _LIT(KLmURI, "file://C:THREAD_%d_LMDBINDEX%d.LDB");
+
+ TBuf<50> lmDbUri;
+ TBuf<50> lmDbUriCopy;
+
+ CDesCArray* dbArray = manager->ListDatabasesLC();
+ TInt nr = dbArray->Count();
+
+ // Delete all created dbs and copied dbs
+ for (TInt j=0;j<nr;j++)
+ {
+ TRAPD(err, manager->DeleteDatabaseL((*dbArray)[j]));
+ }
+
+ /*
+ // Delete all created dbs and copied dbs
+ for (TInt j=0;j<KNrOfDBs;j++)
+ {
+ lmDbUriCopy.Zero();
+ lmDbUri.Zero();
+ lmDbUriCopy.Format(KLmURICopy, index, j);
+ lmDbUri.Format(KLmURI, index, j);
+
+ manager->DeleteDatabaseL(lmDbUriCopy);
+ manager->DeleteDatabaseL(lmDbUri);
+ }
+ */
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::SetAndGetUriL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::SetAndGetUriL(TInt /*index*/)
+ {
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ _LIT(KLmURI, "file://C:Thread_%d_LmDbIndex%d.ldb");
+
+ // Try to set (and get) defaultdb to dbs created by first thread
+ TBuf<50> name;
+
+ // index = 0;
+ for (TInt j=0;j<KNrOfDBs;j++)
+ {
+ name.Zero();
+ // Use first thread index 1
+ name.Format(KLmURI, 1, j);
+ manager->SetDefaultDatabaseUriL(name);
+
+ HBufC* defaultName = manager->DefaultDatabaseUriLC();
+
+ // TBD Maybe some other client has succeeded in changing the default name already
+ if (defaultName->Compare(name) != KErrNone)
+ {
+ User::Panic(_L("WrongDefaultDb"), -671);
+ }
+ CleanupStack::PopAndDestroy(defaultName);
+ }
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::GetDisplayNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::GetDisplayNameL()
+ {
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // Get display name for default db
+ for (TInt j=0;j<KNrOfDBs;j++)
+ {
+ HBufC* dbUri = manager->DefaultDatabaseUriLC();
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(dbUri->Des());
+ TPosLmDatabaseSettings settings = dbInfo->Settings();
+ TPtrC displayName = settings.DatabaseName();
+ CleanupStack::PopAndDestroy(2);
+ }
+
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::CheckIfExistL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::CheckIfExistL(TInt index)
+ {
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ _LIT(KLmURICopy, "file://C:Thread_%d_LmDbIndex%d_Copy.ldb");
+ _LIT(KLmURI, "file://C:Thread_%d_LmDbIndex%d.ldb");
+
+ _LIT(KLmNonExistingURI, "file://C:THREAD_%d_PELLE_%d.LDB");
+
+ TBuf<50> lmDbUri;
+ TBuf<50> lmDbUriCopy;
+ TBuf<50> lmDbNonExistingUri;
+
+ TInt j=0;
+ // Check that some created dbs and copied dbs exist
+ // Check that non existing db does not exist
+
+ // Check files created by first thread only
+ index=1;
+
+ for (j=0;j<KCheckIfExistDBs;j++)
+ {
+ lmDbUriCopy.Zero();
+ lmDbUri.Zero();
+ lmDbUriCopy.Format(KLmURICopy, index, j);
+ lmDbUri.Format(KLmURI, index, j);
+
+ lmDbNonExistingUri.Zero();
+ lmDbNonExistingUri.Format(KLmNonExistingURI, index, j);
+
+ // Should exist
+ TBool res = manager->DatabaseExistsL(lmDbUriCopy);
+ if (!res) User::Panic(_L("DbNotExist"), -668);
+
+ // Should exist
+ res = manager->DatabaseExistsL(lmDbUri);
+ if (!res) User::Panic(_L("DbNotExist"), -669);
+
+ // Should NOT exist
+ res = manager->DatabaseExistsL(lmDbNonExistingUri);
+ if (res) User::Panic(_L("DbExist"), -670);
+ }
+
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp106::RunTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp106::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp106::CreateThreadsL(const TUint aNoThreads)
+ {
+ _LIT(KThreadName, "Tp106testthread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TUint i=0; i<aNoThreads; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1 + iThreadNum++);
+
+ TInt err;
+ err = thread.Create(name, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp107.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDE FILES
+#include "FT_CPosTp666.h"
+
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLmCategoryManager.h>
+
+// CONSTANTS
+_LIT(KSetCapPath, "c:\\sys\\bin\\setcap.exe");
+// Nr of tests in this TP
+const TInt KNrOfTests = 4;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Destructor
+CPosTp666::~CPosTp666()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp666::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CPosTp666::GetName(TDes& aName) const
+ {
+ _LIT(KTestName0, "SetCap-TP107");
+ aName = KTestName0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp666::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp666::StartL()
+ {
+ iLog->Put(_L("StartL"));
+
+ SetupTestPartL(0);
+ SetupTestPartL(1);
+ SetupTestPartL(2);
+ SetupTestPartL(3);
+ }
+
+// ---------------------------------------------------------
+// CPosTp666::SetupTestPartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp666::SetupTestPartL(TInt aIndex)
+ {
+ iLog->Put(_L("StartL(TInt aIndex)"));
+/*
+#ifdef __WINS__
+ _LIT(KNotOnWins, "!!!!This test is NOT supported on WINS!!!!");
+ LogErrorAndLeave(KNotOnWins);
+
+#endif
+*/
+TBuf<20> capability;
+switch (aIndex)
+{
+ case 0:
+ iLog->Put(_L("Part1"));
+ capability.Zero();
+ // Set to all cap but readuserdata and writeuserdata
+ capability.Append(_L("27FFF"));
+ break;
+
+ case 1:
+ iLog->Put(_L("Part2"));
+ // Set to Set to all cap but writeuserdata
+ capability.Append(_L("2FFFF"));
+ break;
+
+ case 2:
+ iLog->Put(_L("Part3"));
+ // Set to Set to all cap but readuserdata
+ capability.Append(_L("37FFF"));
+ break;
+
+ case 3:
+ iLog->Put(_L("Part4"));
+ // Set to only readuserdata and writeuserdata
+ capability.Append(_L("18000"));
+ break;
+
+ default:
+ iLog->Put(_L("Default"));
+ LogErrorAndLeave(_L("We should never come here"));
+ break;
+}
+ // Only for target, on winscw use bat-script
+ RProcess execlient;
+ RFile file;
+ RFs fileSession;
+ User::LeaveIfError(fileSession.Connect());
+ CleanupClosePushL(fileSession);
+ CleanupClosePushL(file);
+ CFileMan* fileMan = CFileMan::NewL(fileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<100> buf;
+
+ buf.Append(_L("CapabilityTests.exe "));
+ buf.Append(capability);
+ buf.Append(_L(" CapabilityTests_tmp.exe"));
+
+ // Make call to SetCap
+ TInt result = execlient.Create(KSetCapPath,
+ //_L("CapabilityTests.exe 3FFFF CapabilityTests_All.exe"),
+ buf,
+ TUidType(KNullUid, KNullUid, KNullUid));
+ User::LeaveIfError(result);
+ execlient.Resume(); //make the execlient visible
+ User::After(800000); //Wait 0.8 s
+
+ execlient.Close(); //Close handle to exe-client
+
+ // now move file CapabilityTests_tmp.exe to CapabilityTests.exe
+ TInt err = fileMan->Move(_L("c:\\sys\\bin\\CapabilityTests_tmp.exe"), _L("c:\\sys\\bin\\CapabilityTests.exe"), CFileMan::EOverWrite);
+ if (err != KErrNone)
+ {
+ iLog->Put(_L("Move problem"));
+ LogErrorAndLeave(_L("Move problem"), err);
+ }
+
+ CleanupStack::PopAndDestroy(fileMan); //fileMan
+ CleanupStack::PopAndDestroy(&file); //file
+ CleanupStack::PopAndDestroy(&fileSession); //fileSession
+
+ // Prepare test conditions
+ SetupTestEnvironmentL();
+
+ buf.Zero();
+ buf.Format(_L("SetCap done, Now Execute CapabilityTest TP107, part %d"), aIndex+1);
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(buf, EUtfwDialogTypeOk, EFalse);
+ //if(answer == EUtfwUserAnswerNo)
+ }
+
+// ---------------------------------------------------------
+// CPosTp666::SetupTestEnvironmentL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp666::SetupTestEnvironmentL()
+ {
+ iLog->Put(_L("SetupTestEnvironmentL"));
+
+ // Setup start conditions for compatibility test
+ _LIT(KDefaultDb, "file://c:eposlm.ldb");
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // Remove all landmark databases
+ CDesCArray* uris = dbManager->ListDatabasesL();
+ CleanupStack::PushL(uris);
+ for (TInt i = 0; i < uris->Count(); i++)
+ {
+ dbManager->DeleteDatabaseL((*uris)[i]);
+ }
+ CleanupStack::PopAndDestroy(uris);
+
+ // Create and initialize a default database
+ dbManager->CreateDatabaseL(KDefaultDb);
+ dbManager->SetDefaultDatabaseL(KDefaultDb);
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+ ExecuteAndDeleteLD(database->InitializeL());
+
+ // Add 5 landmarks - will generate ids 1 - 5
+ const TInt KFive = 5;
+ for (TInt j = 0; j < KFive; j++)
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("Landmark"));
+ database->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ // Add 5 categories
+ CPosLmCategoryManager* catManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(catManager);
+ for (TInt k = 0; k < KFive; k++)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ TBuf<15> name;
+ name = _L("Category ");
+ name.AppendNum(k);
+ category->SetCategoryNameL(name);
+ catManager->AddCategoryL(*category);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ CleanupStack::PopAndDestroy(3, dbManager);
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp108.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDE FILES
+#include "FT_CPosTp667.h"
+
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLmCategoryManager.h>
+
+// CONSTANTS
+_LIT(KSetCapPath, "c:\\sys\\bin\\setcap.exe");
+// Nr of tests in this TP
+const TInt KNrOfTests = 6;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Destructor
+CPosTp667::~CPosTp667()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp667::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CPosTp667::GetName(TDes& aName) const
+ {
+ _LIT(KTestName0, "SetCap-TP108");
+ aName = KTestName0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp667::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp667::StartL()
+ {
+ iLog->Put(_L("StartL"));
+
+ SetupTestPartL(0);
+ SetupTestPartL(1);
+ SetupTestPartL(2);
+ SetupTestPartL(3);
+ SetupTestPartL(4);
+ SetupTestPartL(5);
+ }
+
+// ---------------------------------------------------------
+// CPosTp667::SetupTestPartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp667::SetupTestPartL(TInt aIndex)
+ {
+ iLog->Put(_L("StartL(TInt aIndex)"));
+/*
+#ifdef __WINS__
+ _LIT(KNotOnWins, "!!!!This test is NOT supported on WINS!!!!");
+ LogErrorAndLeave(KNotOnWins);
+
+#endif
+*/
+TBuf<20> capability;
+switch (aIndex)
+{
+ case 0:
+ iLog->Put(_L("Part1"));
+ capability.Zero();
+ // Set to no capablities at all
+ capability.Append(_L("0"));
+ break;
+
+ case 1:
+ iLog->Put(_L("Part2"));
+ // Set to ReadUserData
+ capability.Append(_L("8000"));
+ break;
+
+ case 2:
+ iLog->Put(_L("Part3"));
+ // Set to WriteUserData
+ capability.Append(_L("10000"));
+ break;
+
+ case 3:
+ iLog->Put(_L("Part4"));
+ // Set to ReadUserData and WriteUserData
+ capability.Append(_L("18000"));
+ break;
+
+ case 4:
+ iLog->Put(_L("Part5"));
+ // Set to WriteDeviceData
+ capability.Append(_L("20"));
+ break;
+
+ case 5:
+ iLog->Put(_L("Part6"));
+ // Set to ReadUserData, WriteUserData and WriteDeviceData
+ capability.Append(_L("18020"));
+ break;
+
+ default:
+ iLog->Put(_L("Default"));
+ LogErrorAndLeave(_L("We should never come here"));
+ break;
+}
+ // Only for target, on winscw use bat-script
+ RProcess execlient;
+ RFile file;
+ RFs fileSession;
+ User::LeaveIfError(fileSession.Connect());
+ CleanupClosePushL(fileSession);
+ CleanupClosePushL(file);
+ CFileMan* fileMan = CFileMan::NewL(fileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<100> buf;
+
+ buf.Append(_L("CapabilityTests.exe "));
+ buf.Append(capability);
+ buf.Append(_L(" CapabilityTests_tmp.exe"));
+
+ // Make call to SetCap
+ TInt result = execlient.Create(KSetCapPath,
+ //_L("CapabilityTests.exe 3FFFF CapabilityTests_All.exe"),
+ buf,
+ TUidType(KNullUid, KNullUid, KNullUid));
+ User::LeaveIfError(result);
+ execlient.Resume(); //make the execlient visible
+ User::After(800000); //Wait 0.8 s
+
+ execlient.Close(); //Close handle to exe-client
+
+ // now move file CapabilityTests_tmp.exe to CapabilityTests.exe
+ TInt err = fileMan->Move(_L("c:\\sys\\bin\\CapabilityTests_tmp.exe"), _L("c:\\sys\\bin\\CapabilityTests.exe"), CFileMan::EOverWrite);
+ if (err != KErrNone)
+ {
+ iLog->Put(_L("Move problem"));
+ LogErrorAndLeave(_L("Move problem"), err);
+ }
+
+ CleanupStack::PopAndDestroy(fileMan); //fileMan
+ CleanupStack::PopAndDestroy(&file); //file
+ CleanupStack::PopAndDestroy(&fileSession); //fileSession
+
+ // Prepare test conditions
+ SetupTestEnvironmentL();
+
+ buf.Zero();
+ buf.Format(_L("SetCap done, Now Execute CapabilityTest TP108, part %d"), aIndex+1);
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(buf, EUtfwDialogTypeOk, EFalse);
+ //if(answer == EUtfwUserAnswerNo)
+ }
+
+// ---------------------------------------------------------
+// CPosTp667::SetupTestEnvironmentL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp667::SetupTestEnvironmentL()
+ {
+ iLog->Put(_L("SetupTestEnvironmentL"));
+
+ // Setup start conditions for compatibility test
+ _LIT(KDefaultDb, "file://c:eposlm.ldb");
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // Remove all landmark databases
+ CDesCArray* uris = dbManager->ListDatabasesL();
+ CleanupStack::PushL(uris);
+ for (TInt i = 0; i < uris->Count(); i++)
+ {
+ dbManager->DeleteDatabaseL((*uris)[i]);
+ }
+ CleanupStack::PopAndDestroy(uris);
+
+ // Create and initialize a default database
+ dbManager->CreateDatabaseL(KDefaultDb);
+ dbManager->SetDefaultDatabaseL(KDefaultDb);
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+ ExecuteAndDeleteLD(database->InitializeL());
+
+ // Add 5 landmarks - will generate ids 1 - 5
+ const TInt KFive = 5;
+ for (TInt j = 0; j < KFive; j++)
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("Landmark"));
+ database->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ // Add 5 categories
+ CPosLmCategoryManager* catManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(catManager);
+ for (TInt k = 0; k < KFive; k++)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ TBuf<15> name;
+ name = _L("Category ");
+ name.AppendNum(k);
+ category->SetCategoryNameL(name);
+ catManager->AddCategoryL(*category);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ CleanupStack::PopAndDestroy(3, dbManager);
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp109.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,280 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDE FILES
+#include "FT_CPosTp668.h"
+
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLmCategoryManager.h>
+
+// CONSTANTS
+_LIT(KSetCapPath, "c:\\sys\\bin\\setcap.exe");
+// Nr of tests in this TP
+const TInt KNrOfTests = 12;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Destructor
+CPosTp668::~CPosTp668()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp668::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CPosTp668::GetName(TDes& aName) const
+ {
+ _LIT(KTestName0, "SetCap-TP109");
+ aName = KTestName0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp668::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp668::StartL()
+ {
+ iLog->Put(_L("StartL"));
+
+ SetupTestPartL(0);
+ SetupTestPartL(1);
+ SetupTestPartL(2);
+ SetupTestPartL(3);
+ SetupTestPartL(4);
+ SetupTestPartL(5);
+ SetupTestPartL(6);
+ SetupTestPartL(7);
+ SetupTestPartL(8);
+ SetupTestPartL(9);
+ SetupTestPartL(10);
+ SetupTestPartL(11);
+ }
+
+// ---------------------------------------------------------
+// CPosTp668::SetupTestPartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp668::SetupTestPartL(TInt aIndex)
+ {
+ iLog->Put(_L("StartL(TInt aIndex)"));
+/*
+#ifdef __WINS__
+ _LIT(KNotOnWins, "!!!!This test is NOT supported on WINS!!!!");
+ LogErrorAndLeave(KNotOnWins);
+
+#endif
+*/
+TBuf<20> capability;
+switch (aIndex)
+{
+ case 0:
+ iLog->Put(_L("Part1"));
+ capability.Zero();
+ // Set to no capabilites at all
+ capability.Append(_L("0"));
+ break;
+
+ case 1:
+ iLog->Put(_L("Part2"));
+ // Set to All capabilities of CAP_CLIENT_DLL but ReadUserData
+ capability.Append(_L("37FFE"));
+ break;
+
+ case 2:
+ iLog->Put(_L("Part3"));
+ // Set to All capabilities of CAP_CLIENT_DLL but WriteUserData
+ capability.Append(_L("2FFFE"));
+ break;
+
+ case 3:
+ iLog->Put(_L("Part4"));
+ // Set to All capabilities of CAP_CLIENT_DLL but WriteUserData and ReadUserData
+ capability.Append(_L("27FFE"));
+ break;
+
+ case 4:
+ iLog->Put(_L("Part5"));
+ // Set to all capabilities of CAP_CLIENT_DLL
+ capability.Append(_L("3FFFE"));
+ break;
+
+ case 5:
+ iLog->Put(_L("Part6"));
+ // Set to Only TCB
+ capability.Append(_L("1"));
+ break;
+
+ case 6:
+ iLog->Put(_L("Part7"));
+ // Set to All capabilities but CAP_RECOGNIZER_DLL and TCB
+ capability.Append(_L("3FEFE"));
+ break;
+
+ case 7:
+ iLog->Put(_L("Part8"));
+ // Set to Only CAP_RECOGNIZER_DLL
+ capability.Append(_L("100"));
+ break;
+
+ case 8:
+ iLog->Put(_L("Part9"));
+ // Set to Only CAP_RECOGNIZER_DLL and ReadUserData
+ capability.Append(_L("8100"));
+ break;
+
+ case 9:
+ iLog->Put(_L("Part10"));
+ // Set to All capabilities but CAP_SERVER_DLL and TCB
+ capability.Append(_L("ECE"));
+ break;
+
+ case 10:
+ iLog->Put(_L("Part11"));
+ // Set to CAP_SERVER_DLL
+ capability.Append(_L("3F130"));
+ break;
+
+ case 11:
+ iLog->Put(_L("Part12"));
+ // Set to CAP_SERVER_DLL and CommDD
+ capability.Append(_L("3F132"));
+ break;
+
+ default:
+ iLog->Put(_L("Default"));
+ LogErrorAndLeave(_L("We should never come here"));
+ break;
+}
+ // Only for target, on winscw use bat-script
+ RProcess execlient;
+ RFile file;
+ RFs fileSession;
+ User::LeaveIfError(fileSession.Connect());
+ CleanupClosePushL(fileSession);
+ CleanupClosePushL(file);
+ CFileMan* fileMan = CFileMan::NewL(fileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<100> buf;
+
+ buf.Append(_L("CapabilityTests.exe "));
+ buf.Append(capability);
+ buf.Append(_L(" CapabilityTests_tmp.exe"));
+
+ // Make call to SetCap
+ TInt result = execlient.Create(KSetCapPath,
+ buf,
+ TUidType(KNullUid, KNullUid, KNullUid));
+ User::LeaveIfError(result);
+ execlient.Resume(); //make the execlient visible
+ User::After(800000); //Wait 0.8 s
+
+ execlient.Close(); //Close handle to exe-client
+
+ // now move file CapabilityTests_tmp.exe to CapabilityTests.exe
+ TInt err = fileMan->Move(_L("c:\\sys\\bin\\CapabilityTests_tmp.exe"), _L("c:\\sys\\bin\\CapabilityTests.exe"), CFileMan::EOverWrite);
+ if (err != KErrNone)
+ {
+ iLog->Put(_L("Move problem"));
+ LogErrorAndLeave(_L("Move problem"), err);
+ }
+
+ CleanupStack::PopAndDestroy(fileMan); //fileMan
+ CleanupStack::PopAndDestroy(&file); //file
+ CleanupStack::PopAndDestroy(&fileSession); //fileSession
+
+ // Prepare test conditions
+ SetupTestEnvironmentL();
+
+ buf.Zero();
+ buf.Format(_L("SetCap done, Now Execute CapabilityTest TP107, part %d"), aIndex+1);
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(buf, EUtfwDialogTypeOk, EFalse);
+ //if(answer == EUtfwUserAnswerNo)
+ }
+
+// ---------------------------------------------------------
+// CPosTp668::SetupTestEnvironmentL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp668::SetupTestEnvironmentL()
+ {
+ iLog->Put(_L("SetupTestEnvironmentL"));
+
+ // Setup start conditions for compatibility test
+ _LIT(KDefaultDb, "file://c:eposlm.ldb");
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // Remove all landmark databases
+ CDesCArray* uris = dbManager->ListDatabasesL();
+ CleanupStack::PushL(uris);
+ for (TInt i = 0; i < uris->Count(); i++)
+ {
+ dbManager->DeleteDatabaseL((*uris)[i]);
+ }
+ CleanupStack::PopAndDestroy(uris);
+
+ // Create and initialize a default database
+ dbManager->CreateDatabaseL(KDefaultDb);
+ dbManager->SetDefaultDatabaseL(KDefaultDb);
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+ ExecuteAndDeleteLD(database->InitializeL());
+
+ // Add 5 landmarks - will generate ids 1 - 5
+ const TInt KFive = 5;
+ for (TInt j = 0; j < KFive; j++)
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("Landmark"));
+ database->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ // Add 5 categories
+ CPosLmCategoryManager* catManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(catManager);
+ for (TInt k = 0; k < KFive; k++)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ TBuf<15> name;
+ name = _L("Category ");
+ name.AppendNum(k);
+ category->SetCategoryNameL(name);
+ catManager->AddCategoryL(*category);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ CleanupStack::PopAndDestroy(3, dbManager);
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp11.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,435 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp11.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_TPosLMSortPref.h>
+
+//CONSTANTS
+const TInt KNoCategoriesTp11 = 100;
+const TInt KNoLandmarksTp11 = 100;
+
+_LIT(KCategoryIteratorNumOfItemsErr, "The iterator returns incorrect number of items");
+_LIT(KCategoryIteratorIdErr, "A category id not in the database returned from the iterator");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp11::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::StartL()
+ {
+ iLog->Log(_L("***** Testing CPosCategoryManager::CategoryIteratorL() and CPosCategoryManager::ReferencedCategoryIteratorL()***** "));
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ iLog->Log(_L("ExecuteAndDeleteLD(iDatabase->InitializeL())"));
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L("Default database opened and initialized "));
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ MakeEmptyLmDatabaseL( *iDatabase, *iCategoryManager);
+
+ iLog->Log(_L("Deleting all landmarks and categories to create empty database Done"));
+
+ AddCategoriesL();
+ AddLandmarksL();
+
+ iLog->Log(_L("** 1: Testing CPosCategoryManager::CategoryIteratorL() (Iteration of categories)"));
+ IterateCategoriesL();
+
+ iLog->Log(_L("** 2: Testing CPosCategoryManager::ReferencedCategoryIteratorL() (Iteration of referenced categories)"));
+
+ IterateReferencedCategoriesL();
+
+ iLog->Log(_L("** 3: Testing CPosCategoryManager::CategoryIteratorL() (Iteration of categories)"));
+ IterateSetOfCategoriesL();
+
+ iLog->Log(_L("** 4: Testing CPosCategoryManager::CategoryIteratorL() (Iteration of Sorted categories)"));
+ IterateSortedCategoriesL();
+
+ iLog->Log(_L("** 5: Testing CPosCategoryManager::ReferencedCategoryIteratorL() (Iteration of Sorted referenced categories)"));
+ IterateReferencedSortedCategoriesL();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ // Remove lm db
+ RemoveDefaultDbL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iCategories.ResetAndDestroy();
+ iCategories.Close();
+
+ iReferencedCategories.Close();
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp11::AddCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::AddCategoriesL()
+ {
+ _LIT(KName, "CategoryTP11 - %d");
+ TInt err=KErrLocked;
+ for (TInt i=0; i<KNoCategoriesTp11; i++)
+ {
+ TBuf<100> categoryName;
+ categoryName.Format(KName,i);
+
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(categoryName);
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iCategoryManager->AddCategoryL(*lmc));
+ }
+
+ iCategories.Append(lmc);
+ CleanupStack::Pop(lmc);
+ }
+ iLog->Log(_L("Adding categories to database done "));
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::AddLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::AddLandmarksL()
+ {
+ _LIT(KLmName, "LmTP11 - %d");
+ TInt err = KErrLocked;
+ for (TInt i=0; i<KNoLandmarksTp11; i++)
+ {
+ TBuf<100> lmName;
+ lmName.Format(KLmName,i);
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+
+ if (i % 2)
+ {
+ landmark->AddCategoryL(iCategories[i]->CategoryId());
+ iReferencedCategories.Append(*iCategories[i]);
+ }
+
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iDatabase->AddLandmarkL(*landmark));
+ }
+ iLandmarks.Append(landmark);
+ CleanupStack::Pop(landmark);
+ }
+ iLog->Log(_L("Adding categories to landmarks and adding landmarks to database done "));
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp11::IterateCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::IterateCategoriesL()
+ {
+ CPosLmItemIterator* iter = iCategoryManager->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)iCategories.Count(), KCategoryIteratorNumOfItemsErr);
+
+ CheckIteratorItemsL(*iter);
+
+ iter->Reset();
+
+ CheckIteratorItemsL(*iter);
+
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::IterateReferencedCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::IterateReferencedCategoriesL()
+ {
+ CPosLmItemIterator* iter = iCategoryManager->ReferencedCategoryIteratorL();
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)(iCategories.Count()/2), KCategoryIteratorNumOfItemsErr);
+
+ CheckIteratorItemsL(*iter);
+
+ iter->Reset();
+
+ CheckIteratorItemsL(*iter);
+
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::CheckIteratorItemsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::CheckIteratorItemsL(CPosLmItemIterator& iter)
+ {
+ TPosLmItemId id = iter.NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmarkCategory* source = InternalGet(id);
+ AssertTrueSecL(source != NULL, KCategoryIteratorIdErr);
+ CPosLandmarkCategory* target = iCategoryManager->ReadCategoryLC(id);
+ CompareCategoriesL(*source, *target);
+ CleanupStack::PopAndDestroy(target);
+ id = iter.NextL();
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::IterateSetOfCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::IterateSetOfCategoriesL()
+ {
+ CPosLmItemIterator* iter = iCategoryManager->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+
+ const TInt startIndex=11;
+ const TInt numOfItems=34;
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ iter->GetItemIdsL(ids, startIndex, numOfItems);
+
+ AssertTrueSecL(ids.Count() == numOfItems, KCategoryIteratorNumOfItemsErr);
+
+ for (TInt i=0; i<numOfItems; i++)
+ {
+ CPosLandmarkCategory* source = InternalGet(ids[i]);
+ AssertTrueSecL(source != NULL, KCategoryIteratorIdErr);
+
+ CPosLandmarkCategory* target = iCategoryManager->ReadCategoryLC(ids[i]);
+ CompareCategoriesL(*source, *target);
+ CleanupStack::PopAndDestroy(target);
+ }
+
+ CleanupStack::PopAndDestroy(2, iter);
+
+ }
+
+// ---------------------------------------------------------
+// InternalSort
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt InternalSortL(const CPosLandmarkCategory& aSource, const CPosLandmarkCategory& aTarget)
+ {
+ TPtrC sourceName, targetName;
+
+ User::LeaveIfError(aSource.GetCategoryName(sourceName));
+ User::LeaveIfError(aTarget.GetCategoryName(targetName));
+
+ return sourceName.Compare(targetName);
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::IterateSortedCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::IterateSortedCategoriesL()
+ {
+
+ TLinearOrder<CPosLandmarkCategory> order(InternalSortL);
+ iCategories.Sort(order);
+
+ CPosLmItemIterator* iter = iCategoryManager->CategoryIteratorL(
+ CPosLmCategoryManager::ECategorySortOrderNameDescending);
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)iCategories.Count(), KCategoryIteratorNumOfItemsErr);
+
+ TInt lastIndex=iCategories.Count()-1;
+ for (TInt i=lastIndex; i>=0; i--)
+ {
+ CPosLandmarkCategory* target = iCategoryManager->ReadCategoryLC(iter->NextL());
+
+ CompareCategoriesL(*iCategories[i], *target);
+ CleanupStack::PopAndDestroy(target);
+ }
+ CleanupStack::PopAndDestroy(iter);
+
+ iter = iCategoryManager->CategoryIteratorL(
+ CPosLmCategoryManager::ECategorySortOrderNameAscending);
+ CleanupStack::PushL(iter);
+
+ for (TInt j=0; j < iCategories.Count(); j++)
+ {
+ CPosLandmarkCategory* target = iCategoryManager->ReadCategoryLC(iter->NextL());
+
+ CompareCategoriesL(*iCategories[j], *target);
+ CleanupStack::PopAndDestroy(target);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::IterateReferencedSortedCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp11::IterateReferencedSortedCategoriesL()
+ {
+ TLinearOrder<CPosLandmarkCategory> order(InternalSortL);
+
+ iReferencedCategories.Sort(order);
+
+ CPosLmItemIterator* iter = iCategoryManager->ReferencedCategoryIteratorL(
+ CPosLmCategoryManager::ECategorySortOrderNameDescending);
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)(iCategories.Count()/2), KCategoryIteratorNumOfItemsErr);
+
+ TInt lastIndex=iReferencedCategories.Count()-1;
+ for (TInt i=lastIndex; i>=0; i--)
+ {
+ CPosLandmarkCategory* target = iCategoryManager->ReadCategoryLC(iter->NextL());
+
+ CompareCategoriesL(iReferencedCategories[i], *target);
+ CleanupStack::PopAndDestroy(target);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ iter = iCategoryManager->ReferencedCategoryIteratorL(
+ CPosLmCategoryManager::ECategorySortOrderNameAscending);
+ CleanupStack::PushL(iter);
+
+ for (TInt j=0; j < iReferencedCategories.Count(); j++)
+ {
+ CPosLandmarkCategory* target = iCategoryManager->ReadCategoryLC(iter->NextL());
+
+ CompareCategoriesL(iReferencedCategories[j], *target);
+ CleanupStack::PopAndDestroy(target);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+// ---------------------------------------------------------
+// CPosT11::InternalGet
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkCategory* CPosTp11::InternalGet(TPosLmItemId id)
+ {
+ for (TInt i=0; i<iCategories.Count(); i++)
+ {
+ if (iCategories[i]->CategoryId() == id)
+ {
+ return iCategories[i];
+ }
+ }
+
+ return NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosT11::CreateEmptyLmDatabaseL()
+// ---------------------------------------------------------
+//
+void CPosTp11::MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr )
+ {
+
+ CPosLmOperation* operation1 = aLdb.RemoveAllLandmarksL();
+ //Remove all landmarks from default db : Sync call
+ ExecuteAndDeleteLD( operation1 );
+
+ RArray<TPosLmItemId> catArray;
+ CleanupClosePushL( catArray );
+
+ // Get all the categories from the database and delete them if necessary
+ CPosLmItemIterator* iter = aCatMgr.CategoryIteratorL();
+ CleanupStack::PushL( iter );
+
+ TUint count = iter->NumOfItemsL();
+ if ( count > 0 )
+ { // can only be called if there are some items
+ iter->GetItemIdsL( catArray, 0, count );
+ }
+
+ // Remove all the categories here Sync call
+ ExecuteAndDeleteLD(aCatMgr.RemoveCategoriesL( catArray ));
+ CleanupStack::PopAndDestroy( 2 ); // catArray, iter
+ }
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp111.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,462 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp111.h"
+#include <f32file.h>
+#include <CentralRepository.h>
+#include <EPos_CPosLmDatabaseManager.h>
+
+// CONSTANTS
+const TUid KCRUidLandmarks = {0x101FE99B};
+const TUint32 KLandmarkDefaultUri = 0x00000001;
+_LIT(KFactoryDbUri, "file://c:eposlm.ldb");
+//_LIT(KRepositoryFile, "c:\\private\\10202BE9\\[101FE99B].txt"); // 10202BE9 = SID for Central repository
+_LIT(KRepositoryFile, "c:\\private\\10202BE9\\101FE99B.txt"); // 10202BE9 = SID for Central repository
+
+// Resource files
+//_LIT(KDefaultDbNameRsc, "eposlmdefaultdbname.rsc");
+//_LIT(KDefaultDbRsc, "eposlmdefaultdb.rsc");
+_LIT(KCompactDbLevelRsc, "eposlmcompactdblevel.rsc");
+//_LIT(KInternalServicesRsc, "eposlmintservices.rsc");
+_LIT(KGlobalCategoriesRsc, "eposlmglobalcategories.r01");
+_LIT(KAsynchOperationsRsc, "eposlmasyncops.rsc");
+
+// Resource files owned by process
+_LIT(KLmServerRsc, "eposlmserver.rsc");
+
+// ECom plugins
+//_LIT(KConverterRsc, "101FDF85.rsc");
+//_LIT(KLocalAccessProvRsc, "101FDF89.rsc");
+//_LIT(KLocalDbManagerProvRsc, "101FE977.rsc");
+//_LIT(KLocalSearchProvRsc, "101FDF86.rsc");
+
+// Libraries
+_LIT(KLandmarksDll, "eposlandmarks.dll");
+_LIT(KLocalSearchDll, "eposlmsearchlib.dll");
+_LIT(KXmlConverterDll, "eposlmconverter.dll");
+_LIT(KDbManagerDll, "eposlmdbmanlib.dll");
+_LIT(KIntServicesDll, "eposlmintservices.dll");
+_LIT(KLocalAccessDll, "eposlmlocalaccess.dll");
+_LIT(KLocalAccessProvDll, "eposlmlocalaccessprovider.dll");
+_LIT(KLocalDbManProvDll, "eposlmlocaldbmanprovider.dll");
+_LIT(KLocalSearchProvDll, "eposlmlocalsearchprovider.dll");
+_LIT(KMultiDbSearchDll, "eposlmmultidbsearch.dll");
+_LIT(KRecognizer, "eposlmrecognizer.dll");
+_LIT(KLmServer, "eposlmserver.exe");
+// KDummyDll should not be found! Only used to generate language sensitive
+// resource file for global categories. Removed during build process.
+// _LIT(KDummyDll, "eposlandmarks_dummy.dll");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp111::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp111::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP111 - Data caging and central repository");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp111::StartL()
+ {
+#ifdef __WINS__
+ LogErrorAndLeave(_L("This is a target test! Emulator execution is not supported."), KErrNotSupported);
+#endif
+
+ // TC step 1
+ iLog->Put(_L("TC step 1"));
+ TBool testSuccessful = FindResourceFilesL();
+
+ // TC step 2
+ iLog->Put(_L("TC step 2"));
+ TBool subTestSuccessful = FindServerResourceFilesL();
+ if (testSuccessful)
+ {
+ testSuccessful = subTestSuccessful;
+ }
+
+ // TC step 3
+ /*
+ iLog->Put(_L("TC step 3"));
+ subTestSuccessful = FindEcomPluginsL();
+ if (testSuccessful)
+ {
+ testSuccessful = subTestSuccessful;
+ }
+ */
+
+ // TC step 4
+ iLog->Put(_L("TC step 4"));
+ subTestSuccessful = FindLibrariesL();
+ if (testSuccessful)
+ {
+ testSuccessful = subTestSuccessful;
+ }
+
+ // TC steps 5-13
+ iLog->Put(_L("TC step 5-13"));
+ TestCentralRepositoryL();
+
+ // Summarize
+ if (!testSuccessful)
+ {
+ LogErrorAndLeave(_L("Test failed with errors"));
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::FindResourceFilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp111::FindResourceFilesL()
+ {
+ iLog->Put(_L("FindResourceFilesL"));
+ CDesCArray* rscFiles = new (ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(rscFiles);
+ //rscFiles->AppendL(KDefaultDbNameRsc);
+ //rscFiles->AppendL(KDefaultDbRsc);
+ rscFiles->AppendL(KCompactDbLevelRsc);
+ //rscFiles->AppendL(KInternalServicesRsc);
+ rscFiles->AppendL(KGlobalCategoriesRsc);
+ rscFiles->AppendL(KAsynchOperationsRsc);
+
+ _LIT(KExpectedPath, "\\resource\\");
+
+ TBool result = FindFilesAndVerifyPathL(*rscFiles, KExpectedPath);
+
+ CleanupStack::PopAndDestroy(rscFiles);
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::FindServerResourceFilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp111::FindServerResourceFilesL()
+ {
+ iLog->Put(_L("FindServerResourceFilesL"));
+ CDesCArray* rscFiles = new (ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(rscFiles);
+ rscFiles->AppendL(KLmServerRsc);
+
+ // To be updated when SID is known
+ _LIT(KExpectedPath, "\\private\\101FDF81\\");
+
+ TBool result = FindFilesAndVerifyPathL(*rscFiles, KExpectedPath);
+
+ CleanupStack::PopAndDestroy(rscFiles);
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::FindEcomPluginsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp111::FindEcomPluginsL()
+ {
+ iLog->Put(_L("FindEcomPluginsL"));
+ CDesCArray* ecomPlugins = new (ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(ecomPlugins);
+ //ecomPlugins->AppendL(KConverterRsc);
+ //ecomPlugins->AppendL(KLocalAccessProvRsc);
+ //ecomPlugins->AppendL(KLocalDbManagerProvRsc);
+ //ecomPlugins->AppendL(KLocalSearchProvRsc);
+
+ // To be updated with correct SID
+ _LIT(KExpectedPath, "\\private\\101FDF81\\import\\"); // 101FDF81 = SID for LM srv
+
+ TBool result = FindFilesAndVerifyPathL(*ecomPlugins, KExpectedPath);
+
+ CleanupStack::PopAndDestroy(ecomPlugins);
+ return result;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp111::FindLibrariesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp111::FindLibrariesL()
+ {
+ iLog->Put(_L("FindLibrariesL"));
+ CDesCArray* libraries = new (ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(libraries);
+ libraries->AppendL(KLandmarksDll);
+ libraries->AppendL(KLocalSearchDll);
+ libraries->AppendL(KXmlConverterDll);
+ libraries->AppendL(KDbManagerDll);
+ libraries->AppendL(KIntServicesDll);
+ libraries->AppendL(KLocalAccessDll);
+ libraries->AppendL(KLocalAccessProvDll);
+ libraries->AppendL(KLocalDbManProvDll);
+ libraries->AppendL(KLocalSearchProvDll);
+ libraries->AppendL(KMultiDbSearchDll);
+ libraries->AppendL(KRecognizer);
+ libraries->AppendL(KLmServer);
+
+ _LIT(KExpectedPath, "\\sys\\bin\\");
+
+ TBool result = FindFilesAndVerifyPathL(*libraries, KExpectedPath);
+
+ CleanupStack::PopAndDestroy(libraries);
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::TestCentralRepositoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp111::TestCentralRepositoryL()
+ {
+ iLog->Put(_L("TestCentralRepositoryL"));
+ _LIT(KDbUri, "file://c:landmarks.ldb");
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+
+ // 5. Set default database
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KDbUri);
+ TRAPD(err, dbMan->CreateDatabaseL(*dbInfo));
+ CleanupStack::PopAndDestroy(dbInfo);
+ if (err != KErrNone && err != KErrAlreadyExists)
+ {
+ LogErrorAndLeave(_L("Creating db failed"), err);
+ }
+ dbMan->SetDefaultDatabaseUriL(KDbUri);
+
+ // 6. Retrieve default db using LMFW
+ VerifyDefaultDbUriL(KDbUri, dbMan);
+
+ // 7. Retrieve default db using central repository
+ CRepository* repository = CRepository::NewLC(KCRUidLandmarks);
+ VerifyDefaultDbUriL(KDbUri, repository);
+
+ // 8. Reset central repository
+ User::LeaveIfError(repository->Reset(KLandmarkDefaultUri));
+
+ // 9. Retrieve default db using LMFW
+ VerifyDefaultDbUriL(KFactoryDbUri, dbMan);
+
+ // 10. Retrieve default db using central repository
+ VerifyDefaultDbUriL(KFactoryDbUri, repository);
+
+ // 11. Remove central repository file on c:
+ RFs fileServer;
+ User::LeaveIfError(fileServer.Connect());
+ CleanupClosePushL(fileServer);
+ CFileMan* fileMan = CFileMan::NewL(fileServer);
+ CleanupStack::PushL(fileMan);
+ err = fileMan->Delete(KRepositoryFile);
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ LogErrorAndLeave(_L("Unable to delete repository file"), err);
+ }
+ CleanupStack::PopAndDestroy(2, &fileServer);
+
+ // 12. Retrieve default db using LMFW
+ VerifyDefaultDbUriL(KFactoryDbUri, dbMan);
+
+ // 13. Retrieve default db using central repository
+ VerifyDefaultDbUriL(KFactoryDbUri, repository);
+
+ CleanupStack::PopAndDestroy(2, dbMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::FindFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp111::FindFileL(const TDesC& aFile, TInt& aNrOfMatches, TDes& aPath)
+ {
+ iLog->Put(_L("FindFileL"));
+ TBuf<200> msg;
+ RFs fileServer;
+ User::LeaveIfError(fileServer.Connect());
+ CleanupClosePushL(fileServer);
+ TDriveList driveList;
+ fileServer.DriveList(driveList);
+ CDirScan* scanner = CDirScan::NewLC(fileServer);
+
+ // Search all drives for the file.
+ aNrOfMatches = 0;
+ aPath = KNullDesC;
+ for (TInt i = EDriveA; i <= EDriveZ; i++)
+ {
+ // Investigate if drive exists on this terminal.
+ if (driveList[i])
+ {
+ TChar driveLetter;
+ RFs::DriveToChar(i, driveLetter);
+ TBuf<4> root;
+ root.Append(driveLetter);
+ root.Append(_L(":\\"));
+ scanner->SetScanDataL(root, KEntryAttNormal, ESortByName|EAscending);
+
+ // List all files in each folder on the drive
+ CFileList* files = NULL;
+ scanner->NextL(files);
+ while (files)
+ {
+ CleanupStack::PushL(files);
+ TPtrC currentFolder = scanner->FullPath();
+ _LIT(KSearching, "Searching for file %S in folder %S");
+ msg.Format(KSearching, &aFile, ¤tFolder);
+ iLog->Put(msg);
+
+ // Search the currentFolder for the specified file
+ TFindFile fileSearcher(fileServer);
+ TInt res = fileSearcher.FindByDir(aFile, currentFolder);
+ if (res == KErrNone)
+ {
+ _LIT(KFileFound, "Found file %S in %S");
+ msg.Format(KFileFound, &aFile, ¤tFolder);
+ iLog->Put(msg);
+
+ aNrOfMatches++;
+ aPath = currentFolder;
+ }
+
+ CleanupStack::PopAndDestroy(files);
+ files = NULL;
+ scanner->NextL(files);
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(2, &fileServer);
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::FindFilesAndVerifyPathL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp111::FindFilesAndVerifyPathL(
+ const CDesCArray& aFileNames,
+ const TDesC& aExpectedPath)
+ {
+ iLog->Put(_L("FindFileL"));
+ TBool successful = ETrue;
+ TBuf<100> msg;
+ TBool nrOfMatches = 0;
+ TBuf<200> path;
+
+ for (TInt i = 0; i < aFileNames.Count(); i++)
+ {
+ TPtrC fileName = aFileNames[i];
+ FindFileL(fileName, nrOfMatches, path);
+ if (path.Length() == 0)
+ {
+ _LIT(KFormat, "File %S not found.");
+ msg.Format(KFormat, &fileName);
+ iLog->PutError(msg);
+ successful = EFalse;
+ }
+ else
+ {
+ if (nrOfMatches > 1)
+ {
+ _LIT(KFormat, "Found %d copies of file %S.");
+ msg.Format(KFormat, nrOfMatches, &fileName);
+ iLog->PutError(msg);
+ successful = EFalse;
+ }
+ else
+ {
+ if (aExpectedPath != path)
+ {
+ _LIT(KFormat, "Found file %S at the wrong place, %S");
+ msg.Format(KFormat, &fileName, &path);
+ iLog->PutError(msg);
+ successful = EFalse;
+ }
+ }
+ }
+ }
+
+ return successful;
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::VerifyDefaultDbUriL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp111::VerifyDefaultDbUriL(
+ const TDesC& aExpectedUri,
+ CPosLmDatabaseManager* aDbMan)
+ {
+ HBufC* dbUriFromLMFW = aDbMan->DefaultDatabaseUriLC();
+ if (*dbUriFromLMFW != aExpectedUri)
+ {
+ TBuf<100> msg;
+ _LIT(KFormat, "Unexpected db uri from LMFW, %S != %S");
+ msg.Format(KFormat, dbUriFromLMFW, &aExpectedUri);
+ LogErrorAndLeave(msg);
+ }
+ CleanupStack::PopAndDestroy(dbUriFromLMFW);
+ }
+
+// ---------------------------------------------------------
+// CPosTp111::VerifyDefaultDbUriL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp111::VerifyDefaultDbUriL(
+ const TDesC& aExpectedUri,
+ CRepository* aRepository)
+ {
+ TBuf16<NCentralRepositoryConstants::KMaxUnicodeStringLength> dbUriFromRep;
+ User::LeaveIfError(aRepository->Get(KLandmarkDefaultUri, dbUriFromRep));
+ if (dbUriFromRep != aExpectedUri)
+ {
+ TBuf<100> msg;
+ _LIT(KFormat, "Unexpected db uri from repository, %S != %S");
+ msg.Format(KFormat, dbUriFromRep, &aExpectedUri);
+ LogErrorAndLeave(msg);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp114.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,544 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp114.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <connect/sbdefs.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp114::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp114::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp114 - Landmark database backup/restore");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp114::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp114::CloseTest()
+ {
+ iLog->Put(_L("CloseTest"));
+ }
+
+/**
+* Performes the test by connecting to the landmarks server
+
+Test LMREQ152: Landmarks DB backup
+Backup and restore of all Landmarks databases using the system backup shall be possible.
+The clients are responsible for release of databases during backup/restore.
+A database directly accessed by a client will not be possible to backup/restore.
+
+*/
+// ---------------------------------------------------------
+// CPosTp114::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp114::StartL()
+ {
+ TBool backupTest = FileExistL();
+
+ iLog->Put(_L("DoTestL"));
+
+ CPosTp114BackupListener* backupListener = CPosTp114BackupListener::NewL(iLog);
+ CleanupStack::PushL(backupListener);
+
+ if (backupTest)
+ {
+ iLog->Put(_L("Backup Test"));
+ // Backup part
+ InitBackupTestL();
+ }
+ else
+ {
+ iLog->Put(_L("Restore Test"));
+ iLog->Put(_L("Connnect to eposlmserver"));
+ // Restore part
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ //TInt count = dbArray->Count();
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+ }
+
+ // Check landmark server
+ _LIT(KPosLandmarksServerName, "*eposlmserver*");
+
+ User::After(5000000); // XXX Add some time here
+ TBool result = ETrue;
+ TBool alive = ServerAlive(KPosLandmarksServerName);
+ if(alive) iLog->Put(_L("ERROR: Server is stil alive"));
+
+
+ if (backupTest)
+ {
+ _LIT(KStartBackup, "Now start backup but first press OK");
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(KStartBackup, EUtfwDialogTypeOk, EFalse);
+
+ if(answer == EUtfwUserAnswerOk)
+ {
+ backupListener->StartCheckingL();
+ User::After(10000000); // Wait some time here so that backup is really finished
+ }
+ }
+ else
+ {
+ _LIT(KStartRestore, "Now start restore, but first press OK");
+ TUtfwUserAnswer answer = iUserInfo->ShowDialog(KStartRestore, EUtfwDialogTypeOk, EFalse);
+
+ if(answer == EUtfwUserAnswerOk)
+ {
+ backupListener->StartCheckingL();
+ User::After(10000000); // Wait some time here so that restore is really finished
+ }
+ }
+
+ if (backupTest)
+ {
+ // Prepare dbs for restore part
+ PrepareForRestoreTestL();
+ }
+ else
+ {
+ // Check correct dbs and landmarks restored
+ result = CheckDbAfterRestoreL();
+ }
+
+ backupListener->Cancel();
+ CleanupStack::PopAndDestroy(backupListener);
+
+ if (!result) LogErrorAndLeave(_L("Errors found when restoring"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp114::CheckDbAfterRestoreL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp114::CheckDbAfterRestoreL()
+ {
+ // Check that three landmark dbs exist
+ // Check that all dbs contain three landmarks
+ _LIT(DB1, "file://C:backupDb1.ldb");
+ _LIT(DB2, "file://C:backupDb2.ldb");
+ _LIT(DB3, "file://C:backupDb3.ldb");
+
+ iLog->Put(_L("CheckDbAfterRestoreL"));
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ TBool result = ETrue;
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt count = dbArray->Count();
+ //AssertTrueL(count == 3, _L("Wrong nr of dbs after restore"));
+ if (count != 3)
+ {
+ iLog->Put(_L("ERROR: Wrong nr of dbs after restore"));
+ result = EFalse;
+ }
+
+ TInt pos;
+
+ if (dbArray->Find(DB1, pos) != 0 ||
+ dbArray->Find(DB2, pos) != 0 ||
+ dbArray->Find(DB3, pos) != 0)
+ {
+ iLog->Put(_L("Could not find db"));
+ result = EFalse;
+ }
+
+ CleanupStack::PopAndDestroy(dbArray);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(DB1);
+ CleanupStack::PushL(db);
+
+ CPosLmItemIterator* iter = db->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ if (numberOfElements != 3)
+ {
+ iLog->Put(_L("Wrong number of landmarks in DB1 "));
+ result = EFalse;
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(db);
+
+ return result;
+ }
+
+// ---------------------------------------------------------
+// CPosTp114::InitBackupTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp114::InitBackupTestL()
+ {
+ iLog->Put(_L("InitBackupTestL"));
+ // Use this part to create three landmark dbs with some landmarks
+ _LIT(DB1, "backupDb1.ldb");
+ _LIT(DB2, "backupDb2.ldb");
+ _LIT(DB3, "backupDb3.ldb");
+
+ // Firts remove all landmark dbs
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ CDesCArray* dbArray = dbManager->ListDatabasesLC();
+ TInt count = dbArray->Count();
+
+ for (TInt i=0;i<count;i++)
+ {
+ dbManager->DeleteDatabaseL((*dbArray)[i]);
+ }
+
+ CleanupStack::PopAndDestroy(dbArray);
+
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(DB1);
+ dbManager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+
+ dbInfo = HPosLmDatabaseInfo::NewLC(DB2);
+ dbManager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+
+ dbInfo = HPosLmDatabaseInfo::NewLC(DB3);
+ dbManager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+
+ // Add landmarks to db1
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(DB1);
+ CleanupStack::PushL(db);
+ if (db->IsInitializingNeeded()) ExecuteAndDeleteLD(db->InitializeL());
+
+ CPosLandmark* lm1 = CPosLandmark::NewLC();
+ lm1->SetLandmarkNameL(_L("TP114_Db1_Lm1"));
+ db->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+ CPosLandmark* lm2 = CPosLandmark::NewLC();
+ lm2->SetLandmarkNameL(_L("TP114_Db1_Lm2"));
+ db->AddLandmarkL(*lm2);
+ CleanupStack::PopAndDestroy(lm2);
+ CPosLandmark* lm3 = CPosLandmark::NewLC();
+ lm3->SetLandmarkNameL(_L("TP114_Db1_Lm3"));
+ db->AddLandmarkL(*lm3);
+ CleanupStack::PopAndDestroy(lm3);
+ ExecuteAndDeleteLD(db->CompactL());
+ CleanupStack::PopAndDestroy(db);
+
+ // Add landmarks to db2
+ db = CPosLandmarkDatabase::OpenL(DB2);
+ CleanupStack::PushL(db);
+ if (db->IsInitializingNeeded()) ExecuteAndDeleteLD(db->InitializeL());
+
+ lm1 = CPosLandmark::NewLC();
+ lm1->SetLandmarkNameL(_L("TP114_Db2_Lm1"));
+ db->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+ lm2 = CPosLandmark::NewLC();
+ lm2->SetLandmarkNameL(_L("TP114_Db2_Lm2"));
+ db->AddLandmarkL(*lm2);
+ CleanupStack::PopAndDestroy(lm2);
+ lm3 = CPosLandmark::NewLC();
+ lm3->SetLandmarkNameL(_L("TP114_Db2_Lm3"));
+ db->AddLandmarkL(*lm3);
+ CleanupStack::PopAndDestroy(lm3);
+ ExecuteAndDeleteLD(db->CompactL());
+ CleanupStack::PopAndDestroy(db);
+
+ // Add landmarks to db3
+ db = CPosLandmarkDatabase::OpenL(DB3);
+ CleanupStack::PushL(db);
+ if (db->IsInitializingNeeded()) ExecuteAndDeleteLD(db->InitializeL());
+
+ lm1 = CPosLandmark::NewLC();
+ lm1->SetLandmarkNameL(_L("TP114_Db3_Lm1"));
+ db->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+ lm2 = CPosLandmark::NewLC();
+ lm2->SetLandmarkNameL(_L("TP114_Db3_Lm2"));
+ db->AddLandmarkL(*lm2);
+ CleanupStack::PopAndDestroy(lm2);
+ lm3 = CPosLandmark::NewLC();
+ lm3->SetLandmarkNameL(_L("TP114_Db3_Lm3"));
+ db->AddLandmarkL(*lm3);
+ CleanupStack::PopAndDestroy(lm3);
+ ExecuteAndDeleteLD(db->CompactL());
+ CleanupStack::PopAndDestroy(db);
+
+ CleanupStack::PopAndDestroy(dbManager);
+ iLog->Put(_L("InitBackupTestL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp114::PrepareForRestoreTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp114::PrepareForRestoreTestL()
+ {
+ _LIT(DB1, "backupDb1.ldb");
+ _LIT(DB2, "backupDb2.ldb");
+
+ iLog->Put(_L("PrepareForRestoreTestL"));
+
+ // Remove db2 and remove some landmarks from db1
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ //dbManager->DeleteDatabaseL(DB2);
+ DeleteFileL(_L("c:\\private\\100012a5\\DBS_101FE978_backupDb2.ldb"));
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(DB1);
+ CleanupStack::PushL(db);
+
+ CPosLmItemIterator* iter = db->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements-1));
+
+ ExecuteAndDeleteLD(db->RemoveLandmarksL(arrayOfIds));
+ TBuf<100> buf;
+ buf.Format(_L("Removing %d nr of landmarks from db1"), arrayOfIds.Count());
+ iLog->Put(buf);
+
+ CleanupStack::PopAndDestroy(&arrayOfIds);
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(db);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ iLog->Put(_L("PrepareForRestoreTestL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp114::FileExistL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp114::FileExistL()
+ {
+ _LIT(KIniFile, "c:\\TP114backupTest.ini");
+
+ RFs fileserver;
+ RFile file;
+ TBool exist = EFalse;
+
+ User::LeaveIfError(fileserver.Connect());
+ TInt err = file.Open(fileserver, KIniFile, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ TInt err = file.Create(fileserver, KIniFile, EFileWrite);
+ exist = ETrue;
+ file.Close();
+ iLog->Put(_L("File has been created"));
+ }
+ else
+ {
+ file.Close();
+ TInt err = fileserver.Delete(KIniFile);
+ if (err != KErrNone)
+ {
+ TBuf<50> buf;
+ buf.Format(_L("Could not delete c:\\TP114backupTest.ini, err %d"), err);
+ iLog->Put(buf);
+ }
+ else
+ {
+ iLog->Put(_L("File has been deleted"));
+ }
+
+ exist = EFalse;
+ }
+
+ fileserver.Close();
+ return exist;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPosTp114BackupListener
+//
+// -----------------------------------------------------------------------------
+//
+CPosTp114BackupListener::CPosTp114BackupListener()
+ : CActive(EPriorityLow)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CPosTp114BackupListener::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CPosTp114BackupListener::ConstructL(MUtfwLog* aLog)
+ {
+ TUid categoryUid;
+ categoryUid.iUid = KUidSystemCategoryValue;
+ User::LeaveIfError(iProperty.Attach(categoryUid,
+ conn::KUidBackupRestoreKey));
+ CActiveScheduler::Add(this);
+ iLog = aLog;
+ iBackupIsRunning = EFalse;
+
+ // initial subscription and process current property value
+ RunL();
+ }
+
+// Two-phased constructor
+CPosTp114BackupListener* CPosTp114BackupListener::NewL(MUtfwLog* aLog)
+ {
+ CPosTp114BackupListener* self =
+ new (ELeave) CPosTp114BackupListener;
+ CleanupStack::PushL(self);
+ self->ConstructL(aLog);
+
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+CPosTp114BackupListener::~CPosTp114BackupListener()
+ {
+ Cancel();
+ iProperty.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CPosTp114BackupListener::RunL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPosTp114BackupListener::RunL()
+ {
+ iLog->Put(_L("RunL"));
+ // resubscribe before processing new value to prevent missing updates.
+ iProperty.Subscribe(iStatus);
+ SetActive();
+
+ if (IsBackupRunning())
+ {
+ iLog->Put(_L("Backup (Restore) is Running...."));
+ iBackupIsRunning = ETrue;
+ }
+
+ //Check if back to normal (after backup/restore)
+ if (!IsBackupRunning() && iBackupIsRunning)
+ {
+ iLog->Put(_L("After backup/restore"));
+ iBackupIsRunning = EFalse;
+ CActiveScheduler::Stop();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPosTp114BackupListener::StartCheckingL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPosTp114BackupListener::StartCheckingL()
+ {
+ CActiveScheduler::Start();
+ }
+
+// -----------------------------------------------------------------------------
+// CPosTp114BackupListener::IsBackupRunning
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CPosTp114BackupListener::IsBackupRunning()
+ {
+ TBool backupIsRunning = EFalse;
+ TInt value = 0;
+ TInt err = iProperty.Get(value);
+
+ if (err == KErrNone)
+ {
+ // Use mask to get rid of unwanted info
+ TInt partType = conn::KBURPartTypeMask & value;
+
+ // The values EBURUnset or EBURNormal mean
+ // that no backup/restore is ongoing.
+ if (partType == conn::EBURUnset || partType == conn::EBURNormal)
+ {
+ backupIsRunning = EFalse;
+ }
+ else
+ {
+ backupIsRunning = ETrue;
+ }
+ }
+ else if (err == KErrNotFound)
+ {
+ // If property is not found, assume that no backup is in progress
+ backupIsRunning = EFalse;
+ }
+ else
+ {
+ // Some other error occured. In this case,
+ // assume that backup is running.
+ backupIsRunning = ETrue;
+ }
+
+ return backupIsRunning;
+ }
+
+// -----------------------------------------------------------------------------
+// CPosTp114BackupListener::DoCancel
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CPosTp114BackupListener::DoCancel()
+ {
+ iLog->Put(_L("DoCancel"));
+ iProperty.Cancel();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp116.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,546 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp116.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <d32dbms.h>
+#include <StifLogger.h>
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp116::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp116::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp116::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp116::StartL()
+ {
+ // First remove all landmark databases
+ RemoveAllLmDatabasesL();
+
+ // Start test
+ LandmarkEventTestL();
+
+ // Remove all landmark databases
+ RemoveAllLmDatabasesL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp116::LandmarkEventTestL()
+ {
+ iLog->Log(_L("LandmarkEventTestL"));
+
+ // _LIT(KDatabase, "file://c:eposlm.ldb");
+ _LIT(KDatabase, "file://c:Tp116Test.ldb");
+ _LIT(KDatabase1, "file://c:Tp116LmDb_1.ldb");
+
+#ifdef __WINS__
+ // For WINS use C drive
+ _LIT(KDatabase1_OnMedia, "file://c:Tp116LmDb_1_OnMedia.ldb");
+ _LIT(KDatabase2_OnMedia, "file://c:Tp116LmDb_2_OnMedia.ldb");
+#else
+ //Media card must therefore be inserted
+ _LIT(KDatabase1_OnMedia, "file://F:Tp116LmDb_1_OnMedia.ldb");
+ _LIT(KDatabase2_OnMedia, "file://F:Tp116LmDb_2_OnMedia.ldb");
+#endif
+
+ _LIT(KDatabase2, "file://c:Tp116LmDb_2.ldb");
+ _LIT(KDatabase3, "file://c:Tp116LmDb_3.ldb");
+ _LIT(KDatabase4, "file://c:Tp116LmDb_4.ldb");
+
+ _LIT(KDatabase5, "file://c:Tp116DummyLmDb_5.ldb");
+ _LIT(KDatabase6, "file://c:Tp116DummyLmDb_6.ldb");
+ _LIT(KDatabase7, "file://c:Tp116DummyLmDb_7.ldb");
+ _LIT(KDatabase8, "file://c:Tp116DummyLmDb_8.ldb");
+ _LIT(KDatabase9, "file://c:Tp116DummyLmDb_9.ldb");
+ _LIT(KDatabase10, "file://c:Tp116DummyLmDb_10.ldb");
+ _LIT(KDatabase11, "file://c:Tp116DummyLmDb_11.ldb");
+ _LIT(KDatabase12, "file://c:Tp116DummyLmDb_12.ldb");
+ _LIT(KDatabase13, "file://c:Tp116LmDb_13.ldb");
+ _LIT(KDatabase14, "file://c:Tp116LmDb_14.ldb");
+
+ _LIT(KRemoteDb1, "test://RemoteDb1.ldb");
+ _LIT(KRemoteDbName1, "RemoteDb1New");
+ _LIT(KNonExistingDb, "ANonExistingDb.ldb");
+
+ TInt err = KErrNone;
+ iLog->Log(_L("Warning: this test case requires E: drive"));
+
+ iActiveLmEvent = CTP116ActiveLmEvent::NewL(iLog);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KDatabase);
+ manager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+
+ // This db must exist, set here so that when setting default db next it is different from before
+ // otherwise no event
+ manager->SetDefaultDatabaseUriL(KDatabase);
+
+ // 1) iActiveLmEvent will listen for multiple database events
+ iActiveLmEvent->Start();
+
+ iLog->Log(_L("2) EDatabaseCreated "));
+ // 2) Create a landmark database, db1 on the c: drive
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ manager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+
+ //iActiveLmEvent->iExpectedEvent = CPosLmDatabaseManager::EDatabaseCreated;
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+
+ iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("3) ENewDefaultDbLocation "));
+ // 3) Set the defaultdb to point at the newly created db
+ manager->SetDefaultDatabaseUriL(KDatabase1);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbNewDefaultDbLocation;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+ CActiveScheduler::Start();
+
+
+ iLog->Log(_L("5) EDatabaseCreated "));
+ // 5) Copy db1 to media drive
+ manager->CopyDatabaseL(KDatabase1, KDatabase1_OnMedia);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase1_OnMedia);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("6) EDatabaseDeleted "));
+ // 6) Delete copied db from media card
+ manager->DeleteDatabaseL(KDatabase1_OnMedia);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase1_OnMedia);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("7) EDatabaseCreated - EDatabaseDeleted"));
+ // 7) Move db1 to media drive as db1_2-> First copy it and then delete (in same operation phase)
+ manager->CopyDatabaseL(KDatabase1, KDatabase2_OnMedia);
+ manager->DeleteDatabaseL(KDatabase1);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2_OnMedia);
+ CActiveScheduler::Start();
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("8) EDatabaseCreated"));
+ //8) Create a db, db2, on media card
+
+ HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
+ manager->CreateDatabaseL(*dbInfo2);
+ CleanupStack::PopAndDestroy(dbInfo2);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("9) ENewDefaultDbLocation"));
+ // 9) Set the defaultdb to point at the newly created db
+ manager->SetDefaultDatabaseUriL(KDatabase2);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbNewDefaultDbLocation;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("9b) EPosLmDbSettingsModified"));
+ // 9b) Set the defaultdb to point at the newly created db
+ HPosLmDatabaseInfo* dbInfoChange = HPosLmDatabaseInfo::NewLC(KDatabase2);
+ TPosLmDatabaseSettings settings = dbInfo2->Settings();
+ _LIT(KNewDbName, "TP116 Disp Name");
+ TPosLmDatabaseName bufName(KNewDbName);
+ settings.SetDatabaseName(bufName);
+ manager->ModifyDatabaseSettingsL(KDatabase2, settings);
+ CleanupStack::PopAndDestroy(dbInfoChange);
+
+ iActiveLmEvent->iExpectedEvent = EPosLmDbSettingsModified;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("10) EDatabaseDeleted"));
+ // 10) Delete db2 from media card
+ manager->DeleteDatabaseL(KDatabase2);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("11) EDatabaseCreated"));
+ // 11) Copy db1_2 to C:\ as db1_3
+ manager->CopyDatabaseL(KDatabase2_OnMedia, KDatabase3);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase3);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("12) EDatabaseDeleted"));
+ // 12) Move db1_2 from media to C:\ drive as db1_4 -> First
+ // copy it and then delete (in same operation phase)
+ manager->CopyDatabaseL(KDatabase2_OnMedia, KDatabase4);
+ manager->DeleteDatabaseL(KDatabase2_OnMedia);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+ CActiveScheduler::Start();
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2_OnMedia);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("13) ENewDefaultDbLocation"));
+ // 13) Set the defaultdb to point at db1_4
+ manager->SetDefaultDatabaseUriL(KDatabase4);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbNewDefaultDbLocation;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("14) EDatabaseDeleted"));
+ // 14) Delete db1_4
+ manager->DeleteDatabaseL(KDatabase4);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("15) --------- "));
+ // Try to create a queue of events that is bigger than the internal queue buffer
+ // should causes unknown event to happen and no databaseUri
+ HPosLmDatabaseInfo* dbInfo13 = HPosLmDatabaseInfo::NewLC(KDatabase13);
+ manager->CreateDatabaseL(*dbInfo13);
+ CleanupStack::PopAndDestroy(dbInfo13);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase13);
+ iActiveLmEvent->iQueueTest = ETrue;
+ CActiveScheduler::Start();
+
+ HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+ HPosLmDatabaseInfo* dbInfo5 = HPosLmDatabaseInfo::NewLC(KDatabase5);
+ HPosLmDatabaseInfo* dbInfo6 = HPosLmDatabaseInfo::NewLC(KDatabase6);
+ HPosLmDatabaseInfo* dbInfo7 = HPosLmDatabaseInfo::NewLC(KDatabase7);
+ HPosLmDatabaseInfo* dbInfo8 = HPosLmDatabaseInfo::NewLC(KDatabase8);
+ HPosLmDatabaseInfo* dbInfo9 = HPosLmDatabaseInfo::NewLC(KDatabase9);
+
+ manager->CreateDatabaseL(*dbInfo4);
+ manager->CreateDatabaseL(*dbInfo5);
+ manager->DeleteDatabaseL(KDatabase4);
+ manager->CopyDatabaseL(KDatabase5, KDatabase10);
+ manager->CreateDatabaseL(*dbInfo6);
+ manager->DeleteDatabaseL(KDatabase5);
+ manager->CreateDatabaseL(*dbInfo7);
+ manager->DeleteDatabaseL(KDatabase6);
+ manager->CopyDatabaseL(KDatabase10, KDatabase11);
+ manager->CreateDatabaseL(*dbInfo8);
+ manager->DeleteDatabaseL(KDatabase7);
+ manager->CreateDatabaseL(*dbInfo9);
+ manager->CopyDatabaseL(KDatabase10, KDatabase12);
+ manager->DeleteDatabaseL(KDatabase9);
+ manager->DeleteDatabaseL(KDatabase8);
+
+ CleanupStack::PopAndDestroy(dbInfo9);
+ CleanupStack::PopAndDestroy(dbInfo8);
+ CleanupStack::PopAndDestroy(dbInfo7);
+ CleanupStack::PopAndDestroy(dbInfo6);
+ CleanupStack::PopAndDestroy(dbInfo5);
+ CleanupStack::PopAndDestroy(dbInfo4);
+
+ // Check for unknown
+ iActiveLmEvent->iExpectedEvent = EPosLmDbUnknownEvent;
+ iActiveLmEvent->SetExpectedDatabase(KNullDesC);
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ iActiveLmEvent->iQueueTest = EFalse;
+
+ TInt errorsFound = iActiveLmEvent->GetErrors();
+
+ iActiveLmEvent->DoCancel();
+
+ iActiveLmEvent->Start();
+
+ iLog->Log(_L("16) EDatabaseCreated "));
+ // 16) Check correct event after unknown event
+ // Note: This does not work, new events are added to the queue after unknown event, so instead we
+ // cancel the event handling
+ HPosLmDatabaseInfo* dbInfo14 = HPosLmDatabaseInfo::NewLC(KDatabase14);
+ manager->CreateDatabaseL(*dbInfo14);
+ CleanupStack::PopAndDestroy(dbInfo14);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase14);
+ CActiveScheduler::Start();
+
+ errorsFound = iActiveLmEvent->GetErrors();
+
+ iActiveLmEvent->DoCancel();
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+ iActiveLmEvent = CTP116ActiveLmEvent::NewL(iLog);
+
+ // Start listening
+ iActiveLmEvent->Start();
+
+ iLog->Log(_L("17) --------- "));
+ // 17) Test that event handling is working for "remote" provider (use the test provider)
+ // as well
+ HPosLmDatabaseInfo* db1 = HPosLmDatabaseInfo::NewLC(KRemoteDb1);
+ manager->CreateDatabaseL(*db1);
+ // Register remote db
+ manager->RegisterDatabaseL(*db1);
+
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KRemoteDb1);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("18) --------- "));
+ // 18) Test that event handling is working for "remote" provider (use the test provider)
+ // as well
+ // Modify Settings
+ TPosLmDatabaseSettings remoteSettings = db1->Settings();
+ TPosLmDatabaseName remoteName(KRemoteDbName1);
+ remoteSettings.SetDatabaseName(remoteName);
+ manager->ModifyDatabaseSettingsL(KRemoteDb1, remoteSettings);
+
+ iActiveLmEvent->iExpectedEvent = EPosLmDbSettingsModified;
+ iActiveLmEvent->SetExpectedDatabase(KRemoteDb1);
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(db1);
+
+ iLog->Log(_L("19) --------- "));
+ // 19) Test that event handling is working for "remote" provider (use the test provider)
+ // as well
+ // Unregister remote db
+ manager->UnregisterDatabaseL(KRemoteDb1);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ iActiveLmEvent->SetExpectedDatabase(KRemoteDb1);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("20) --------- "));
+ // 20) Set the defaultdb to point at a non-existing db
+ TRAP(err, manager->SetDefaultDatabaseUriL(KNonExistingDb));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("SetDefaultDatabaseL(KNonExistingDb) should leave with KErrNotFound"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("20 Done"));
+
+ CleanupStack::PopAndDestroy(manager);
+
+ errorsFound += iActiveLmEvent->GetErrors();
+
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+
+ if (errorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors were found in TP116"));
+ User::Leave(-1);
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CTP116ActiveLmEvent::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CTP116ActiveLmEvent* CTP116ActiveLmEvent::NewL(CStifLogger* aLog)
+ {
+ CTP116ActiveLmEvent* self = new(ELeave) CTP116ActiveLmEvent(aLog);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CTP116ActiveLmEvent::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTP116ActiveLmEvent::ConstructL()
+ {
+ iManager = CPosLmDatabaseManager::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CTP116ActiveLmEvent::CTP116ActiveLmEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CTP116ActiveLmEvent::CTP116ActiveLmEvent(CStifLogger* aLog) :
+ CActive(EPriorityNormal),
+ iLog(aLog)
+ {
+ CActiveScheduler::Add(this);
+ iGlobalErr=KErrNone;
+ iQueueTest = EFalse;
+ }
+
+// Destructor
+CTP116ActiveLmEvent::~CTP116ActiveLmEvent()
+ {
+ Cancel();
+ delete iManager;
+ iManager = NULL;
+ }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::SetExpectedDatabase
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::SetExpectedDatabase(const TDesC& aDatabaseUri)
+ {
+ iExpectedDatabase.Zero();
+
+ iExpectedDatabase.Append(aDatabaseUri);
+ }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::Start()
+ {
+ // Get ready for event
+ iManager->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::RunL()
+ {
+ iLog->Log(_L("CTP116ActiveLmEvent::RunL"));
+
+ TPosLmDatabaseEvent event = iEvent;
+ VerifyEvent(event);
+ if (!iQueueTest)
+ {
+ // Get ready for next event
+ iManager->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::DoCancel()
+ {
+ iLog->Log(_L("CTP116ActiveLmEvent::DoCancel"));
+ iManager->CancelNotifyDatabaseEvent();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::GetErrors
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CTP116ActiveLmEvent::GetErrors()
+ {
+ return iGlobalErr;
+ }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::VerifyEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::VerifyEvent(TPosLmDatabaseEvent event)
+ {
+ iLog->Log(_L("CTP116ActiveLmEvent::VerifyEvent"));
+ TBuf<150> buffe;
+
+ buffe.Format(_L("VerifyEvent Event: %d "), event.iEventType);
+ iLog->Log(buffe);
+
+ // Verify event here
+ if (event.iEventType != iExpectedEvent)
+ {
+ buffe.Zero();
+ buffe.Format(_L("ERROR: Wrong event: exp %d got %d"),iExpectedEvent, event.iEventType);
+ iLog->Log(buffe);
+ iGlobalErr++;
+ }
+
+ if (event.iEventType != EPosLmDbUnknownEvent)
+ {
+
+ HBufC16* dbUri = iManager->DatabaseUriFromLastEventLC();
+ buffe.Zero();
+ buffe.Format(_L("Event: %d URI %S"), event.iEventType, dbUri);
+ iLog->Log(buffe);
+
+ if (iExpectedDatabase.CompareC(*dbUri) != 0)
+ {
+ iLog->Log(_L("ERROR: Wrong db name"));
+ buffe.Zero();
+ buffe.Append(_L("Should be "));
+ buffe.Append(iExpectedDatabase);
+ iLog->Log(buffe);
+ iGlobalErr++;
+ }
+ CleanupStack::PopAndDestroy(dbUri);
+ }
+ else
+ {
+ buffe.Format(_L("EUnknownEvent Event: %d "), event.iEventType);
+ iLog->Log(buffe);
+ }
+
+ CActiveScheduler::Stop();
+
+ iLog->Log(_L("VerifyEvent Done"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp117.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,724 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp117.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <d32dbms.h>
+#include <StifLogger.h>
+
+//#include <ss_std.h>
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp117::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+
+ iThread.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp117::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::StartL()
+ {
+
+ // Remove all landmark databases
+ RemoveAllLmDatabasesL();
+ LandmarkQueuedEvenTestL();
+
+ // Remove all landmark databases
+ RemoveAllLmDatabasesL();
+ LandmarkQueuedEvenTest2L();
+
+ // Remove all landmark databases
+ RemoveAllLmDatabasesL();
+ // Start test
+ LandmarkEventTestL();
+
+ // Remove all landmark databases
+ RemoveAllLmDatabasesL();
+
+ // Pancic test
+ iActiveLmEvent = CTP117ActiveLmEvent::NewL(iLog);
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 1"));
+ iTestCase = 1;
+ /* EPosEventNotifierAlreadyHasOutstandingRequest defined in EPos_LandmarksServerPanics.h */
+ iExpectedErrorCode = 2;
+ ResumeThreadAndVerifyExit();
+
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+
+
+ if (iErrorsFound != KErrNone)
+ {
+
+ iLog->Log(_L("Errors found in TP117"));
+ User::Leave(-1);
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkQueuedEvenTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::LandmarkQueuedEvenTestL()
+ {
+ iLog->Log(_L(">>>>>>>>>>LandmarkQueuedEvenTestL<<<<<<<<<"));
+
+ _LIT(KDatabase1, "c:Tp117DummyLmDb_1.ldb");
+ _LIT(KDatabase2, "c:Tp117DummyLmDb_2.ldb");
+ _LIT(KDatabase3, "c:Tp117DummyLmDb_3.ldb");
+ _LIT(KDatabase4, "c:Tp117DummyLmDb_4.ldb");
+
+ CTP117ActiveLmEvent* client1 = CTP117ActiveLmEvent::NewL(iLog);
+ CleanupStack::PushL(client1);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // Creates db2, which should exist (deleted below)
+ client1->Start();
+ HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
+ manager->CreateDatabaseL(*dbInfo2);
+ CleanupStack::PopAndDestroy(dbInfo2);
+ client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ client1->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ // *********Start test*************
+ iLog->Log(_L("*********Start test*************"));
+ // 1) Enable client1
+ client1->Start();
+ client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ client1->SetExpectedDatabase(KDatabase1);
+
+ // 2) Client2 creates a database, db1
+ iLog->Log(_L("Client2 creates a database, db1"));
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ manager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+
+ // 3) Client1 NotifyDatabaseEvent, should be event from create operation in step2
+ iLog->Log(_L("Client1 will get EDatabaseCreated event"));
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("Delete, Copy, Create db"));
+ //4) Client2 deletes db2
+ manager->DeleteDatabaseL(KDatabase2);
+
+ //5) Client2 copies db1 to db3
+ manager->CopyDatabaseL(KDatabase1, KDatabase3);
+
+ //6) Client2 creates db4
+ HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+ manager->CreateDatabaseL(*dbInfo4);
+ CleanupStack::PopAndDestroy(dbInfo4);
+
+ // 7) Client1 NotifyDatabaseEvent, should be event from delete operation in step4
+ iLog->Log(_L("7) Client1 NotifyDatabaseEvent"));
+ client1->Start();
+ // Dont check URI here
+ client1->iCheckUri = EFalse;
+ client1->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ client1->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ // 8) Client1 NotifyDatabaseEvent, should be event from copy operation in step5
+ iLog->Log(_L("8) Client1 NotifyDatabaseEvent"));
+ client1->Start();
+ // Dont check URI here
+ client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ client1->SetExpectedDatabase(KDatabase3);
+ CActiveScheduler::Start();
+
+ // 9) Client1 NotifyDatabaseEvent, should be event from create operation in step6
+ iLog->Log(_L("9) Client1 NotifyDatabaseEvent"));
+ // Check URI here
+ client1->iCheckUri = ETrue;
+ client1->Start();
+ client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ client1->SetExpectedDatabase(KDatabase4);
+ CActiveScheduler::Start();
+
+ iErrorsFound+=client1->GetErrors();
+
+ CleanupStack::PopAndDestroy(manager);
+ CleanupStack::PopAndDestroy(client1);
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkQueuedEvenTest2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::LandmarkQueuedEvenTest2L()
+ {
+ iLog->Log(_L(">>>>>>>>>>LandmarkQueuedEvenTest2L>>>>>>>>>>"));
+
+ _LIT(KDatabase1, "c:Tp117DummyLmDb_1.ldb");
+ _LIT(KDatabase2, "c:Tp117DummyLmDb_2.ldb");
+ _LIT(KDatabase3, "c:Tp117DummyLmDb_3.ldb");
+ _LIT(KDatabase4, "c:Tp117DummyLmDb_4.ldb");
+ _LIT(KDatabase5, "c:Tp117DummyLmDb_5.ldb");
+
+ CTP117ActiveLmEvent* client1 = CTP117ActiveLmEvent::NewL(iLog);
+ CleanupStack::PushL(client1);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // Creates db2, which should exist (deleted below)
+ client1->Start();
+ HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
+ manager->CreateDatabaseL(*dbInfo2);
+ CleanupStack::PopAndDestroy(dbInfo2);
+ client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ client1->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ // *********Start test*************
+ iLog->Log(_L("*********Start test*************"));
+ // 1) Enable client1
+ client1->Start();
+ client1->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ client1->SetExpectedDatabase(KDatabase1);
+
+ // 2) Client2 creates a database, db1
+ iLog->Log(_L("Client2 creates a database, db1"));
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ manager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+
+ // 3) Client1 NotifyDatabaseEvent, should be event from create operation in step2
+ iLog->Log(_L("Client1 will get EDatabaseCreated event"));
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("Delete, Copy, Create, Delete, Copy, Delete"));
+ //4) Client2 deletes db2
+ manager->DeleteDatabaseL(KDatabase2);
+
+ //5) Client2 copies db1 to db3
+ manager->CopyDatabaseL(KDatabase1, KDatabase3);
+
+ //6) Client2 creates db4
+ HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+ manager->CreateDatabaseL(*dbInfo4);
+ CleanupStack::PopAndDestroy(dbInfo4);
+
+ //7) Client2 deletes db3
+ manager->DeleteDatabaseL(KDatabase3);
+
+ //8) Client2 copies db2 to db5
+ manager->CopyDatabaseL(KDatabase1, KDatabase5);
+
+ //7) Client2 deletes db2
+ manager->DeleteDatabaseL(KDatabase5);
+
+ // 9) Client1 NotifyDatabaseEvent, should be unknown event since too many events in queue
+ // After unknown event the queue should be empty again, verified in step10
+ iLog->Log(_L("9) Client1 NotifyDatabaseEvent"));
+ client1->Start();
+ client1->iExpectedEvent = EPosLmDbUnknownEvent;
+ client1->SetExpectedDatabase(KNullDesC);
+ CActiveScheduler::Start();
+
+ //10) Client1 deletes db4
+ client1->Start();
+ iLog->Log(_L("10) Client1 NotifyDatabaseEvent"));
+ manager->DeleteDatabaseL(KDatabase4);
+ client1->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+ client1->SetExpectedDatabase(KDatabase4);
+ CActiveScheduler::Start();
+
+ iErrorsFound+=client1->GetErrors();
+
+ CleanupStack::PopAndDestroy(manager);
+ CleanupStack::PopAndDestroy(client1);
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::LandmarkEventTestL()
+ {
+ iLog->Log(_L(">>>>>>>>>>LandmarkEventTestL<<<<<<<<<<<<<<"));
+
+ _LIT(KDatabase1, "c:Tp117DummyLmDb_1.ldb");
+ _LIT(KDatabase2, "c:Tp117DummyLmDb_2.ldb");
+ _LIT(KDatabase3, "c:Tp117DummyLmDb_3.ldb");
+ _LIT(KDatabase4, "c:Tp117DummyLmDb_4.ldb");
+
+ _LIT(KDatabase5, "c:Tp117DummyLmDb_5.ldb");
+ _LIT(KDatabase6, "c:Tp117DummyLmDb_6.ldb");
+
+ iActiveLmEvent = CTP117ActiveLmEvent::NewL(iLog);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // 1) Just do something to cause an event
+ iActiveLmEvent->Start();
+ HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+ manager->CreateDatabaseL(*dbInfo1);
+ CleanupStack::PopAndDestroy(dbInfo1);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("Test 1_1"));
+ iActiveLmEvent->Start();
+ HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
+ manager->CreateDatabaseL(*dbInfo2);
+ CleanupStack::PopAndDestroy(dbInfo2);
+
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("Cancel NotifyDatabaseEvent 1"));
+ // Cancel NotifyDatabaseEvent
+ iActiveLmEvent->Start();
+ iActiveLmEvent->Cancel();
+ iActiveLmEvent->Start();
+ iActiveLmEvent->Cancel();
+
+ iActiveLmEvent->Start();
+ HPosLmDatabaseInfo* dbInfo3 = HPosLmDatabaseInfo::NewLC(KDatabase3);
+ manager->CreateDatabaseL(*dbInfo3);
+ CleanupStack::PopAndDestroy(dbInfo3);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase3);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("Cancel NotifyDatabaseEvent 2"));
+ // Cancel NotifyDatabaseEvent
+ iActiveLmEvent->Start();
+ iActiveLmEvent->Cancel();
+ iActiveLmEvent->Cancel();
+
+ iLog->Log(_L("Test event after cancel"));
+ iActiveLmEvent->Start();
+ HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+ manager->CreateDatabaseL(*dbInfo4);
+ CleanupStack::PopAndDestroy(dbInfo4);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+ CActiveScheduler::Start();
+
+ iLog->Log(_L("Test to call DatabaseUriFromLastEventLC before events occurr"));
+ iActiveLmEvent->Start();
+ HPosLmDatabaseInfo* dbInfo5 = HPosLmDatabaseInfo::NewLC(KDatabase5);
+ manager->CreateDatabaseL(*dbInfo5);
+ CleanupStack::PopAndDestroy(dbInfo5);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase5);
+ iActiveLmEvent->CallDatabaseUriFromLastEventLC();
+ // Need to cancel this notifyDatabaseEvent call
+ iActiveLmEvent->Cancel();
+
+ iLog->Log(_L("Test event3 after DatabaseUriFromLastEventLC"));
+ iActiveLmEvent->Start();
+ HPosLmDatabaseInfo* dbInfo6 = HPosLmDatabaseInfo::NewLC(KDatabase6);
+ manager->CreateDatabaseL(*dbInfo6);
+ CleanupStack::PopAndDestroy(dbInfo6);
+ iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+ iActiveLmEvent->SetExpectedDatabase(KDatabase6);
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(manager);
+
+ iErrorsFound+=iActiveLmEvent->GetErrors();
+
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp117::ResumeThreadAndVerifyExit
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::ResumeThreadAndVerifyExit()
+ {
+ iLog->Log(_L("ResumeThreadAndVerifyExit"));
+ _LIT(KPanicErr, "Method didn't Panic when expected");
+ _LIT(KPanicCodeErr, "Paniced with unexpected panic code");
+ _LIT(KLeaveErr, "Method didn't end correctly");
+ _LIT(KLeaveCodeErr, "Unexpected leave error");
+
+ CreateThreadL();
+ TRequestStatus status;
+ iThread.Logon(status);
+ iThread.Resume();
+
+ User::WaitForRequest(status);
+
+ // Used for debugging
+ TBuf<100> buf;
+ buf.Format(_L("ExitType %d Exit reason %d"), iThread.ExitType(), iThread.ExitReason());
+ iLog->Log(buf);
+
+ if (iExpectedExitType == ExitPanic)
+ {
+ AssertTrueSecL(iThread.ExitType() == EExitPanic, KPanicErr);
+ AssertTrueSecL(iThread.ExitReason() == iExpectedErrorCode, KPanicCodeErr);
+ }
+ else if (iExpectedExitType == ExitLeave)
+ {
+ AssertTrueSecL(iThread.ExitType() == EExitKill, KLeaveErr);
+ AssertTrueSecL(iThread.ExitReason() == iExpectedErrorCode, KLeaveCodeErr);
+ }
+ iThread.Close();
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp117::RunPanicTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp117::RunPanicTestL(TAny* /*aData*/)
+ {
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ TPosLmDatabaseEvent event;
+ TRequestStatus status;
+ manager->NotifyDatabaseEvent(event, status);
+
+ // TBD There might be timing problems on target
+ User::After(100000);
+ // The second call causes Panic EPosEventNotifierAlreadyHasOutstandingRequest
+ manager->NotifyDatabaseEvent(event, status);
+ User::After(100000);
+
+ CleanupStack::PopAndDestroy(manager);
+
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp117::RunPanicTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp117::CreateThreadL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp117::CreateThreadL()
+ {
+ _LIT(KThreadName, "Tp117 test thread");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ TInt err=0;
+ err = iThread.Create(KThreadName, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ }
+
+// -----------------------------------------------------------------------------
+// CTP117ActiveLmEvent::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CTP117ActiveLmEvent* CTP117ActiveLmEvent::NewL(CStifLogger* aLog)
+ {
+ CTP117ActiveLmEvent* self = new(ELeave) CTP117ActiveLmEvent(aLog);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CTP117ActiveLmEvent::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTP117ActiveLmEvent::ConstructL()
+ {
+ iManager = CPosLmDatabaseManager::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CTP117ActiveLmEvent::CTP117ActiveLmEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CTP117ActiveLmEvent::CTP117ActiveLmEvent(CStifLogger* aLog) :
+ CActive(EPriorityNormal),
+ iLog(aLog)
+ {
+ CActiveScheduler::Add(this);
+ iGlobalErr=KErrNone;
+ iCheckUri = ETrue;
+ }
+
+// Destructor
+CTP117ActiveLmEvent::~CTP117ActiveLmEvent()
+ {
+ Cancel();
+ delete iManager;
+ iManager = NULL;
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::SetExpectedDatabase
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::SetExpectedDatabase(const TDesC& aDatabaseUri)
+ {
+ iExpectedDatabase.Zero();
+ iExpectedDatabase.Append(_L("file://"));
+ iExpectedDatabase.Append(aDatabaseUri);
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::CallNotifyDatabaseEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::CallNotifyDatabaseEvent()
+ {
+ iLog->Log(_L("CallNotifyDatabaseEvent"));
+ iManager->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::CallDatabaseUriFromLastEventLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::CallDatabaseUriFromLastEventLC()
+ {
+ iLog->Log(_L("CallDatabaseUriFromLastEventLC"));
+ TRAPD(err,
+ CleanupStack::PopAndDestroy(iManager->DatabaseUriFromLastEventLC()));
+ if (err !=KErrNone)
+ {
+ if (err == KErrNotFound)
+ {
+ iLog->Log(_L("DatabaseUriFromLastEventLC leaved with KErrNotFound"));
+ }
+ else
+ {
+ iLog->Log(_L("DatabaseUriFromLastEventLC leaved with error"));
+ }
+ }
+ else
+ {
+ // No error from second call to DatabaseUriFromLastEventLC
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::Start
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::Start()
+ {
+ iLog->Log(_L("CTP117ActiveLmEvent::Start"));
+ // Get ready for event
+ iManager->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::RunL()
+ {
+ iLog->Log(_L("CTP117ActiveLmEvent::RunL"));
+ VerifyEventL();
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::RunError
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CTP117ActiveLmEvent::RunError(TInt aError)
+ {
+ iLog->Log(_L("CTP117ActiveLmEvent::RunError"));
+ TBuf<100> buf;
+ buf.Format(_L("Errorcode in RunError: %d"), aError);
+ iLog->Log(buf);
+ iGlobalErr++;
+ //Error in RunL
+ Cancel();
+ CActiveScheduler::Stop();
+ return aError;
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::DoCancel()
+ {
+ iLog->Log(_L("CTP117ActiveLmEvent::DoCancel"));
+ iManager->CancelNotifyDatabaseEvent();
+ iLog->Log(_L("CTP117ActiveLmEvent::DoCancel Done"));
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::GetErrors
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CTP117ActiveLmEvent::GetErrors()
+ {
+ return iGlobalErr;
+ }
+
+// ---------------------------------------------------------
+// CTP117ActiveLmEvent::VerifyEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP117ActiveLmEvent::VerifyEventL()
+ {
+ iLog->Log(_L("CTP117ActiveLmEvent::VerifyEvent"));
+
+ TBuf<150> buffe;
+
+ buffe.Format(_L("VerifyEvent Event: %d "), iEvent.iEventType);
+ iLog->Log(buffe);
+
+ // Verify event here
+ if (iEvent.iEventType != iExpectedEvent)
+ {
+ buffe.Zero();
+ buffe.Format(_L("ERROR: Wrong event: exp %d got %d"),iExpectedEvent, iEvent.iEventType);
+ iLog->Log(buffe);
+ iGlobalErr++;
+ }
+
+ // Only do check of DatabaseUriFromLastEventLC when event is differet from unknown
+ // because when this event occurs the uri is not set
+ if (iCheckUri && iEvent.iEventType != EPosLmDbUnknownEvent)
+ {
+ HBufC16* dbUri = iManager->DatabaseUriFromLastEventLC();
+ buffe.Zero();
+ buffe.Format(_L("Event: %d URI %S"), iEvent.iEventType, dbUri);
+ iLog->Log(buffe);
+
+ if (iExpectedDatabase.CompareC(*dbUri) != 0)
+ {
+ iLog->Log(_L("ERROR: Wrong db name"));
+ buffe.Zero();
+ buffe.Append(_L("Should be "));
+ buffe.Append(iExpectedDatabase);
+ iLog->Log(buffe);
+ iGlobalErr++;
+ }
+ CleanupStack::PopAndDestroy(dbUri);
+
+ // Call DatabaseUriFromLastEventLC again
+ TRAPD(err,
+ CleanupStack::PopAndDestroy(iManager->DatabaseUriFromLastEventLC()));
+ if (err !=KErrNone)
+ {
+ if (err == KErrNotFound)
+ {
+ iLog->Log(_L("Second call to DatabaseUriFromLastEventLC leaved with KErrNotFound"));
+ }
+ else
+ {
+ iLog->Log(_L("Second call to DatabaseUriFromLastEventLC leaved with error"));
+ }
+ }
+ else
+ {
+ // No error from second call to DatabaseUriFromLastEventLC
+
+ }
+ }
+ else
+ {
+ iLog->Log(_L("URI was not checked"));
+ }
+
+ CActiveScheduler::Stop();
+
+ iLog->Log(_L("VerifyEvent Done"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp118.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,751 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp118.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <d32dbms.h>
+#include "FT_DatabaseUtility.h"
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp118::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
+
+ TRAP(err, DeleteTp118FilesL());
+ if (err != KErrNone) iLog->Log(_L("DeleteTp118FilesL() leaved"));
+
+ delete iDatabases;
+ iDatabases=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::StartL()
+ {
+ TInt err = KErrNone;
+ // Remove all databases
+ RemoveAllLmDatabasesL();
+
+ DeleteTp118FilesL();
+ TBuf<100> buf;
+
+ CPosLandmarkDatabase* lmd = NULL;
+
+ iLog->Log(_L("1) Create a valid landmark db"));
+ // 1) Create a valid landmark db, it should be listed
+ FTDatabaseUtility::CreateDatabaseL(_L("c:TP118.ldb"));
+
+ // 2) List an verify that db created in step 1 is listed
+ iLog->Log(_L("2) Verify that db created in step1 is listed:"));
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+
+ TInt res = VerifyList(iDatabases, _L("file://C:TP118.ldb"));
+ AssertTrueSecL(res, _L("file://C:TP118.LDB was not found"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 3) Create a valid landmark db, but without correct file extension
+ iLog->Log(_L("3) Create a valid landmark db, but without correct file extension"));
+ FTDatabaseUtility::CreateDatabaseL(_L("c:TP118_NoExtension"), EFalse);
+ dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // 4) List all databases and verify that db created in step 3 is not listed
+ iLog->Log(_L("List all databases and verify that db created in step 3 is not listed"));
+ delete iDatabases; iDatabases=NULL;
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+
+ res = VerifyList(iDatabases, _L("file://c:TP118_NoExtension"));
+ AssertTrueSecL(!res, _L("file://c:TP118_NoExtension should not have been found"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 5) Create lm db without correct secure id
+ iLog->Log(_L("5) Create lm db without correct secure id"));
+ FTDatabaseUtility::CreateDatabaseL(_L("c:TP118_WrongId.ldb"), ETrue, ETrue);
+ dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // 6) List all databases and verify that db created in step 5 is not listed
+ iLog->Log(_L("6) List all databases and verify that db created in step 5 is not listed"));
+ delete iDatabases; iDatabases=NULL;
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+
+ res = VerifyList(iDatabases, _L("c:TP118_WrongId.ldb"));
+ AssertTrueSecL(!res, _L("file://c:TP118_WrongId.ldb should not have been found"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 7 Create lm db with invalid landmarks tables
+ iLog->Log(_L("7) Create lm db with invalid landmarks tables"));
+ FTDatabaseUtility::CreateDatabaseL(_L("C:TP118_INVALIDTABLES.ldb"), ETrue, EFalse, ETrue);
+ dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // 8) List all databases and verify that db created in step 7 is listed
+ iLog->Log(_L("8) List all databases and verify that db created in step 7 is listed"));
+ delete iDatabases; iDatabases=NULL;
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ res = VerifyList(iDatabases, _L("file://C:TP118_INVALIDTABLES.ldb"));
+ AssertTrueSecL(res, _L("file://C:TP118_INVALIDTABLES.ldb should have been found"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // CleanupStack::PopAndDestroy(dbManager);
+ // This causes DBMS to panic UTFW (this TestProgram)
+ // Adds landmarks but needed tables are already removed
+ // CreateLandmarksInDbL(_L("C:TP118_INVALIDTABLES.LDB"));
+
+ /*
+ /////////////////////////////////////////////
+ // Add extra test here, set this db to default
+ iLog->Log(_L("SetDefaultDatabaseL"));
+ dbManager->SetDefaultDatabaseL(_L("C:TP118_INVALIDTABLES.LDB"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // Try to open defaultdb which is the db created in step18
+ // Check that the default db is re-created when it is corrupt
+ CPosLandmarkDatabase* lmdb = NULL;
+ TRAP(err, lmdb = CPosLandmarkDatabase::OpenL());
+ if (err == KErrNone)
+ {
+ CleanupStack::PushL(lmdb);
+ CheckLandmarkDbL(lmdb);
+ CleanupStack::PopAndDestroy(lmdb);
+ //This causes DBMS to panic UTFW (this TestProgram)
+ // Adds landmarks but needed tables are already removed
+ CreateLandmarksInDbL(_L("C:TP118_INVALIDTABLES.LDB"));
+ }
+ else
+ {
+ LogErrorAndLeave(_L("OpenL should not leave with err"), err);
+ }
+ */
+ /////////////////////////////////////////////
+
+ // 9) Try to open db created in step7
+ iLog->Log(_L("9) Open db created in step 7"));
+ lmd = CPosLandmarkDatabase::OpenL(_L("file://C:TP118_INVALIDTABLES.ldb"));
+ CleanupStack::PushL(lmd);
+ CheckLandmarkDbL(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ // 10) Drop table in db
+ iLog->Log(_L("10) Create db and then drop tables in db"));
+ dbManager=CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ _LIT(KDropTableLmDb, "C:TP118_DROPTABLELMDB.ldb");
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KDropTableLmDb);
+ dbManager->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+
+ CreateLandmarksInDbL(KDropTableLmDb);
+ DropTableL(KDropTableLmDb, KPosLmLandmarkTable);
+
+ delete iDatabases; iDatabases=NULL;
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ res = VerifyList(iDatabases, _L("file://C:TP118_DROPTABLELMDB.ldb"));
+ AssertTrueSecL(res, _L("C:TP118_DropTableLmDb.ldb was not found"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 11) Try to open db created in step10
+ iLog->Log(_L("11) Open db created in step 10"));
+ lmd = CPosLandmarkDatabase::OpenL(_L("file://C:TP118_DROPTABLELMDB.ldb"));
+
+ // Error when opening db
+ CleanupStack::PushL(lmd);
+ TRAP(err, CheckLandmarkDbL(lmd));
+ AssertTrueSecL(err == KErrNotFound, _L("11) CheckLandmarkDbL did not leave with KErrNotFound"));
+
+ CleanupStack::PopAndDestroy(lmd);
+ // Try to add landmarks to this db
+ // Leaves with KErrNotFound
+ //CreateLandmarksInDbL(_L("C:TP118_DROPTABLELMDB.LDB"),1);
+
+ // 12) DropIndexL
+ iLog->Log(_L("Step12: DropIndexL"));
+ dbManager=CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ _LIT(KTP118_DROPINDEXLMDB_LDB, "C:TP118_DROPINDEXLMDB.ldb");
+ HPosLmDatabaseInfo* dbInfoDrop = HPosLmDatabaseInfo::NewLC(KTP118_DROPINDEXLMDB_LDB);
+ dbManager->CreateDatabaseL(*dbInfoDrop);
+ CleanupStack::PopAndDestroy(dbInfoDrop);
+
+ CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB.ldb"));
+ iLog->Log(_L("12) DropIndex"));
+ DropIndexL(_L("C:TP118_DROPINDEXLMDB.LDB"), KPosLmCategoryTable, KPosLmGlobalCategoryIdIndex);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 13) Try to open db created in step12
+ iLog->Log(_L("13) Open db created in step 12"));
+ lmd = CPosLandmarkDatabase::OpenL(_L("C:TP118_DROPINDEXLMDB.ldb"));
+
+ CleanupStack::PushL(lmd);
+ CheckLandmarkDbL(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+ // Try to add landmarks to this db
+ CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB.LDB"), 1);
+
+ // 14)
+ iLog->Log(_L("14) DropIndex"));
+ dbManager=CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ _LIT(KTP118_DROPINDEXLMDB2_LDB, "C:TP118_DROPINDEXLMDB2.ldb");
+ HPosLmDatabaseInfo* dbInfoDrop2 = HPosLmDatabaseInfo::NewLC(KTP118_DROPINDEXLMDB2_LDB);
+ dbManager->CreateDatabaseL(*dbInfoDrop2);
+ CleanupStack::PopAndDestroy(dbInfoDrop2);
+
+ CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB2.ldb"));
+ DropIndexL(_L("C:TP118_DROPINDEXLMDB2.LDB"), KPosLmLandmarkTable, KPosLmLandmarkIdIndex);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 15) Try to open db created in step13
+ iLog->Log(_L("15) Open db created in step 14"));
+ lmd = CPosLandmarkDatabase::OpenL(_L("C:TP118_DROPINDEXLMDB2.ldb"));
+
+ CleanupStack::PushL(lmd);
+ CheckLandmarkDbL(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+ // Try to add landmarks to this db
+ CreateLandmarksInDbL(_L("C:TP118_DROPINDEXLMDB2.ldb"), 1);
+
+ ////////////
+ // 16) Create an ordinary database with some landmarks and then remove some parts of the binary file
+ // Create db by manually removing some parts with notepad
+ /*
+ //Use this part to create db "TP118HalfLmDb.ldb" containing some landmarks, then use notepad to remove
+ // some parts from physical file
+ dbManager=CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ dbManager->CreateDatabaseL(_L("TP118HalfLmDb.ldb"));
+ CreateLandmarksInDbL(_L("TP118HalfLmDb.ldb"));
+ CleanupStack::PopAndDestroy(dbManager);
+ */
+ // Use corrupted file
+ iLog->Log(_L("16) Use corrupted file"));
+ CopyTestDbFileL(_L("TP118HALFLMDB_2.ldb"));
+
+ dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ delete iDatabases; iDatabases = NULL;
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+
+ res = VerifyList(iDatabases, _L("file://C:TP118HALFLMDB_2.ldb"));
+ AssertTrueSecL(res, _L("file://C:TP118HALFLMDB_2.LDB should have been found"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 17) Try to open db created in step16m it should not be possible
+ // Before it returned KErrCorrupt(?) but now with Mars wk21 SDK it returns KErrNotSupported
+ CPosLandmarkDatabase* someLmDb = NULL;
+ TRAP(err, someLmDb = CPosLandmarkDatabase::OpenL(_L("TP118HalfLmDb_2.ldb")));
+ if (err == KErrNone)
+ {
+ CleanupStack::PushL(someLmDb);
+ ExecuteAndDeleteLD(someLmDb->InitializeL());
+ CleanupStack::PopAndDestroy(someLmDb);
+ AssertTrueSecL(EFalse,_L("OpenL should leave with error"));
+ }
+ else
+ {
+ buf.Format(_L("OpenL leaved with %d"), err);
+ iLog->Log(buf);
+ }
+
+ // 18) Use same file as in 16 and set this file to default db
+ iLog->Log(_L("Use same file as in 16 and set this file to default db"));
+ CopyTestDbFileL(_L("TP118HALFLMDB_2.LDB"));
+ dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ iLog->Log(_L("SetDefaultDatabaseL"));
+ dbManager->SetDefaultDatabaseUriL(_L("Tp118HALFLMDB_2.ldb"));
+ CleanupStack::PopAndDestroy(dbManager);
+
+ // 19) Try to open defaultdb which is the db created in step18
+ // Before Mars wk21 SDK the default db is re-created when it is corrupt
+ // but now instead KErrNotSUpported is returned
+ iLog->Log(_L("Try to open defaultdb which is the db created in step18"));
+ TRAP(err, someLmDb = CPosLandmarkDatabase::OpenL());
+
+ if (err == KErrNone)
+ {
+ CleanupStack::PushL(someLmDb);
+ CheckLandmarkDbL(someLmDb);
+ CleanupStack::PopAndDestroy(someLmDb);
+ // Try to add landmarks to this db
+ CreateLandmarksInDbL(_L("Tp118HALFLMDB_2.ldb"));
+ }
+ else
+ {
+ //LogErrorAndLeave(_L("OpenL should not leave with err"), err);
+ buf.Format(_L("open defaultdb leaved with %d"), err);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::CheckLandmarkDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::CheckLandmarkDbL(CPosLandmarkDatabase* aDb)
+ {
+ iLog->Log(_L("CheckLandmarkDbL"));
+
+ if (aDb->IsInitializingNeeded()) ExecuteAndDeleteLD(aDb->InitializeL());
+
+ CPosLmItemIterator* iter = aDb->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt size = iter->NumOfItemsL();
+ TBuf<100> buf;
+ buf.Format(_L("DB contains %d nr of landmarks"), size);
+ iLog->Log(buf);
+
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = aDb->ReadLandmarkLC(id);
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ // Debugging iLog->Log(name);
+ id = iter->NextL();
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ // Try to get an non existing landmark
+ CPosLandmark* lm = NULL;
+ TRAPD(err, lm = aDb->ReadLandmarkLC(123456));
+ if (err != KErrNotFound)
+ {
+ CleanupStack::PopAndDestroy(lm);
+ CleanupStack::PopAndDestroy(iter);
+ AssertTrueSecL(EFalse,_L("ReadLandmarkLC should leave with KErrNotFound"));
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ // Check categories
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*aDb);
+ CleanupStack::PushL(categoryManager);
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+
+ TInt catCount = catIter->NumOfItemsL();
+
+ buf.Format(_L("Found %d nr of categories items in db"), catCount);
+ iLog->Log(buf);
+
+ id = catIter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(id);
+ TPtrC name;
+ cat->GetCategoryName(name);
+ // Debugging iLog->Log(name);
+ CleanupStack::PopAndDestroy(cat);
+ id = catIter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(catIter);
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::DeleteTp118FilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::DeleteTp118FilesL()
+ {
+ iLog->Log(_L("DeleteTp118FilesL"));
+ RFs fs;
+ TInt err = fs.Connect();
+ AssertTrueSecL(err == KErrNone, _L("fs.Connect returned with error"), err);
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ // delete all TP118 files
+ err = fileMan->Delete(_L("c:\\private\\100012a5\\*TP118*.*"));
+ AssertTrueSecL(err == KErrNone || err == KErrNotFound, _L("CFileMan could not delete files1"), err);
+
+ err = fileMan->Delete(_L("c:\\private\\100012a5\\*TP118*"));
+ AssertTrueSecL(err == KErrNone || err == KErrNotFound, _L("CFileMan could not delete files2"), err);
+
+ CleanupStack::PopAndDestroy(1); //fileMan
+ CleanupStack::PopAndDestroy(1); //fs
+ iLog->Log(_L("DeleteTp118FilesL Done"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::CreateLandmarksInDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::CreateLandmarksInDbL(const TDesC& aDbName, TInt aIndex)
+ {
+ iLog->Log(_L("CreateLandmarksInDbL"));
+ const TInt KNrOfLandmarks = 50;
+ const TInt KNrOfCategories = 10;
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(aDbName);
+ CleanupStack::PushL(lmd);
+
+ ExecuteAndDeleteLD(lmd->InitializeL());
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ TInt i=0;
+ TBuf<150> buf;
+
+ // Create categories
+ for (i=0; i<KNrOfCategories; i++)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ buf.Zero();
+ buf.Format(_L("VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongCategoryName%d_%d"), i, aIndex);
+
+ category->SetCategoryNameL(buf);
+ TPosLmItemId id=0;
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, id = cm->AddCategoryL(*category));
+ }
+ arr.Append(id);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ // Create landmarks and attach every category to every landmark
+ for (i=0;i<KNrOfLandmarks;i++)
+ {
+ buf.Zero();
+ buf.Format(_L("VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongLandmarkName%d_%d"), i, aIndex);
+ CPosLandmark* lm1 = CPosLandmark::NewLC();
+ lm1->SetLandmarkNameL(buf);
+ lm1->SetLandmarkDescriptionL(_L("SomeVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongDescription"));
+ for (TInt j=0;j<arr.Count();j++)
+ {
+ lm1->AddCategoryL(arr[j]);
+ }
+ TInt err = KErrLocked;
+ while (err==KErrLocked)
+ {
+ TRAP(err, lmd->AddLandmarkL(*lm1));
+ }
+
+ CleanupStack::PopAndDestroy(lm1);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+
+ CleanupStack::PopAndDestroy(cm);
+
+ ExecuteAndDeleteLD(lmd->CompactL());
+ CleanupStack::PopAndDestroy(lmd);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::VerifyList
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp118::VerifyList(CDesCArray* aList, const TDesC& aDbName)
+ {
+ TBool found = EFalse;
+ TInt count = aList->Count();
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of dbs"), count);
+ iLog->Log(buf);
+ for (TInt i=0;i<count;i++)
+ {
+ iLog->Log((*aList)[i]);
+ if ((*aList)[i].Compare(aDbName) == KErrNone)
+ {
+ found = ETrue;
+ }
+ }
+ return found;
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::DropTableL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::DropTableL(const TDesC& aDbName, const TDesC& aTable)
+ {
+ /*
+ // Incremental
+ iLog->Log(_L("DropTableL"));
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+ User::LeaveIfError(dbSession.Connect());
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+ TBuf<100> buf;
+
+ TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+ if (err != KErrNone) LogErrorAndLeave(_L("Database could not be opened"), err);
+
+ RDbIncremental dbInc;
+ CleanupClosePushL(dbInc);
+
+ TInt step = 100;
+ err = dbInc.DropTable(db, aTable, step);
+ if (err != KErrNone) LogErrorAndLeave(_L("DropTable could not be performed"), err);
+
+ while (step > 50)
+ {
+ buf.Format(_L("ProgressStep %d "), step);
+ iLog->Log(buf);
+ dbInc.Next(step);
+ }
+
+ dbInc.Close();
+ db.Close();
+
+ CleanupStack::PopAndDestroy(&dbInc);
+ CleanupStack::PopAndDestroy(&db);
+ CleanupStack::PopAndDestroy(&dbSession);
+ */
+
+ iLog->Log(_L("DropTableL"));
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+ User::LeaveIfError(dbSession.Connect());
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+ TBuf<100> buf;
+
+ TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+ AssertTrueSecL(err == KErrNone, _L("Database could not be opened"), err);
+ err = db.DropTable(aTable);
+ AssertTrueSecL(err == KErrNone, _L("DropTable could not be performed"), err);
+ db.Close();
+
+ CleanupStack::PopAndDestroy(&db);
+ CleanupStack::PopAndDestroy(&dbSession);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp118::AlterTableL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::AlterTableL(const TDesC& aDbName)
+ {
+ iLog->Log(_L("AlterTableL"));
+ // Incremental
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+ User::LeaveIfError(dbSession.Connect());
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+
+ TBuf<100> buf;
+
+ TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+ AssertTrueSecL(err == KErrNone, _L("Database could not be opened"), err);
+
+ RDbIncremental dbInc;
+ CleanupClosePushL(dbInc);
+
+
+ CDbColSet* newColumns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmIconIdCol, EDbColUint32);
+ col.iAttributes = col.EAutoIncrement;
+ newColumns->AddL(col);
+
+ newColumns->AddL(TDbCol(KPosLmIconPathCol, EDbColLongText, KMaxFileName));
+ //User::LeaveIfError(aDb.CreateTable(KPosLmIconTable, *columns));
+
+ TInt step = 100;
+ err = dbInc.AlterTable(db, KPosLmIconTable, *newColumns, step);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("AlterTable could not be performed, err %d"), err);
+ iLog->Log(buf);
+ }
+ else
+ {
+
+ while (step > 1)
+ {
+ buf.Format(_L("ProgressStep %d "), step);
+ iLog->Log(buf);
+ dbInc.Next(step);
+ }
+ }
+ dbInc.Close();
+ db.Close();
+
+ CleanupStack::PopAndDestroy(newColumns);
+ CleanupStack::PopAndDestroy(&dbInc);
+ CleanupStack::PopAndDestroy(&db);
+ CleanupStack::PopAndDestroy(&dbSession);
+ /*
+
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+ User::LeaveIfError(dbSession.Connect());
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+
+ TBuf<100> buf;
+
+ TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+ if (err != KErrNone) LogErrorAndLeave(_L("Database could not be opened"), err);
+
+
+ CDbColSet* newColumns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmIconIdCol, EDbColUint32);
+ col.iAttributes = col.EAutoIncrement;
+ newColumns->AddL(col);
+
+ newColumns->AddL(TDbCol(KPosLmIconPathCol, EDbColLongText, KMaxFileName));
+ //User::LeaveIfError(aDb.CreateTable(KPosLmIconTable, *columns));
+
+ TInt step = 100;
+ err = db.AlterTable(KPosLmIconTable, *newColumns);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("AlterTable could not be performed, err %d"), err);
+ iLog->Log(buf);
+ }
+
+ db.Close();
+
+ CleanupStack::PopAndDestroy(newColumns);
+ CleanupStack::PopAndDestroy(&db);
+ CleanupStack::PopAndDestroy(&dbSession);
+ */
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp118::DropIndexL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp118::DropIndexL(const TDesC& aDbName, const TDesC& aTable, const TDesC& aIndex)
+ {
+ iLog->Log(_L("DropIndexL()"));
+
+ //Incremental
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+ User::LeaveIfError(dbSession.Connect());
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+ TBuf<100> buf;
+
+ TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+ AssertTrueSecL(err == KErrNone, _L("Database could not be opened"), err);
+
+ RDbIncremental dbInc;
+ CleanupClosePushL(dbInc);
+
+ TInt step = 100;
+ err = dbInc.DropIndex(db, aIndex, aTable, step);
+ AssertTrueSecL(err == KErrNone, _L("DropIndex could not be performed"), err);
+
+ while (step > 1)
+ {
+ buf.Format(_L("ProgressStep %d "), step);
+ iLog->Log(buf);
+ dbInc.Next(step);
+ }
+
+ CleanupStack::PopAndDestroy(&dbInc);
+ CleanupStack::PopAndDestroy(&db);
+ CleanupStack::PopAndDestroy(&dbSession);
+
+ /*
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+ User::LeaveIfError(dbSession.Connect());
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+ TBuf<100> buf;
+
+ TInt err = db.Open(dbSession, aDbName ,KPosLmDbSecureFormat);
+ if (err != KErrNone) LogErrorAndLeave(_L("Database could not be opened"), err);
+
+ TInt step = 100;
+ err = db.DropIndex(aIndex, aTable);
+ if (err != KErrNone) LogErrorAndLeave(_L("DropIndex could not be performed"), err);
+
+ CleanupStack::PopAndDestroy(&db);
+ CleanupStack::PopAndDestroy(&dbSession);
+ */
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp119.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,622 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp119.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_TPosLmSortPref.h>
+#include "badesca.h"
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp119::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::StartL()
+ {
+ // PrepareDatabases
+ const TInt KNrOfDatabases = 5;
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+
+ // List databases
+ // TBool searchRefined = ETrue;
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbUris = dbMan->ListDatabasesLC();
+ CleanupStack::Pop(dbUris);
+ AssertTrueSecL(dbUris->Count() == KNrOfDatabases, _L("Wrong number of test databases!"));
+ CleanupStack::PopAndDestroy(dbMan);
+ CleanupStack::PushL(dbUris);
+
+ // 1-2. Search in all databases
+ SearchAllDbsL(dbUris, ENoSort);
+
+ // 3-4. Remove one of the databases and re-search
+ RemoveDatabaseL(_L("c:\\private\\100012a5\\DBS_101FE978_EPOSLM_080.LDB"));
+ SearchAllButOneL(dbUris);
+
+ // 5-6. Restore all ofthe databases but one and re-search
+ RemoveDatabaseL(_L("c:\\private\\100012a5\\DBS_101FE978_EPOSLM_105.LDB"));
+ RemoveDatabaseL(_L("c:\\private\\100012a5\\DBS_101FE978_EPOSLM_040.LDB"));
+ RemoveDatabaseL(_L("c:\\private\\100012a5\\DBS_101FE978_EPOSLM_020.LDB"));
+ SearchOneDbL(dbUris);
+
+ // 7-8. Restore all ofthe databases and re-search
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+ SearchAllDbsL(dbUris, EAsc);
+
+ // 9. Test SetMaxNumOfMatches
+ TestMaxNrOfMatchesL(dbUris);
+
+ // 10. Test MatchIteratorL
+ TestMatchIteratorL(dbUris);
+
+ // 11-12. Search all + one non-existing
+ SearchNonExistingDbL(dbUris);
+
+ // 13. Search database multiple times
+ SearchDbMultipleTimesL(dbUris);
+
+ // 14-15. Search all + one non-existing + one with invalid URI
+ SearchInvalidURIDbL(dbUris);
+
+ CleanupStack::PopAndDestroy(dbUris);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchAllDbsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchAllDbsL(CDesCArray* aDbUris, TTp119SortOrder aSortOrder)
+ {
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ TBool searchRefined = ETrue;
+ SearchForLandmarksL(multiSearcher, aSortOrder, !searchRefined);
+
+ // Verify Result - no errors should have occurred and all databases should return matches
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, aSortOrder);
+ AssertTrueSecL(searchErrors == 0, _L("Found %d search errors"), searchErrors);
+ for (TInt i = 0; i < aDbUris->Count(); i++)
+ {
+ AssertTrueSecL(multiSearcher->NumOfMatches(i) > 0, _L("Found no matches"));
+ }
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchAllButOneL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchAllButOneL(CDesCArray* aDbUris)
+ {
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ TBool searchRefined = ETrue;
+ SearchForLandmarksL(multiSearcher, EAsc, !searchRefined);
+
+ // Verify Result - KErrNotFound for the removed database (eposlm_80.ldb) - Matches from all but this.
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, EAsc);
+ AssertTrueSecL(searchErrors == 1, _L("Found %d search errors"), searchErrors);
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ multiSearcher->GetSearchError(0, searchErr);
+ AssertTrueSecL(searchErr.iErrorCode == KErrNotFound, _L("Expected KErrNotFound but got %d"), searchErr.iErrorCode);
+ TBuf<64> uriWithError((*aDbUris)[searchErr.iDatabaseIndex]);
+ uriWithError.LowerCase();
+ AssertTrueSecL(uriWithError == _L("file://c:eposlm_080.ldb"), _L("Error from wrong database"));
+ for (TInt i = 0; i < aDbUris->Count(); i++)
+ {
+ if (i != searchErr.iDatabaseIndex)
+ {
+ AssertTrueSecL(multiSearcher->NumOfMatches(i) > 0, _L("Found no matches"));
+ }
+ }
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchOneDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchOneDbL(CDesCArray* aDbUris)
+ {
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ TBool searchRefined = ETrue;
+ SearchForLandmarksL(multiSearcher, EAsc, !searchRefined);
+
+ // Verify Result - Only matches from the one (eposlm_60.ldb) remaining. KErrNotFound from the others
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, EAsc);
+ AssertTrueSecL(searchErrors == 4, _L("Found %d search errors"), searchErrors);
+ for (TInt i = 0; i < searchErrors; i++)
+ {
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ multiSearcher->GetSearchError(i, searchErr);
+ AssertTrueSecL(searchErr.iErrorCode == KErrNotFound, _L("Expected KErrNotFound but got %d"), searchErr.iErrorCode);
+ TBuf<64> uriWithError((*aDbUris)[searchErr.iDatabaseIndex]);
+ uriWithError.LowerCase();
+ AssertTrueSecL(uriWithError != _L("file://c:eposlm_60.ldb"), _L("Eror from wong database"));
+ }
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchNonExistingDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchNonExistingDbL(CDesCArray* aDbUris)
+ {
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ _LIT(KNonExistingDb, "file://pellefant.ldb");
+ aDbUris->AppendL(KNonExistingDb);
+ multiSearcher->SetDatabasesToSearchL(*aDbUris);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ TBool searchRefined = ETrue;
+ SearchForLandmarksL(multiSearcher, EAsc, !searchRefined);
+
+ // Verify Result - one error from the non-existing should have been returned.
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, EAsc);
+ AssertTrueSecL(searchErrors == 1, _L("Found %d search errors"), searchErrors);
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ multiSearcher->GetSearchError(0, searchErr);
+ AssertTrueSecL(searchErr.iErrorCode == KErrNotFound, _L("Expected KErrNotFound but got %d"), searchErr.iErrorCode);
+ TBuf<64> uriWithError = (*aDbUris)[searchErr.iDatabaseIndex];
+ uriWithError.LowerCase();
+ AssertTrueSecL(uriWithError == KNonExistingDb, _L("Error from wrong database"));
+ for (TInt i = 0; i < aDbUris->Count(); i++)
+ {
+ if (i != searchErr.iDatabaseIndex)
+ {
+ AssertTrueSecL(multiSearcher->NumOfMatches(i) > 0, _L("Found no matches"));
+ }
+ }
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchInvalidURIDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchInvalidURIDbL(CDesCArray* aDbUris)
+ {
+ iLog->Log(_L("SearchInvalidURIDbL"));
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ _LIT(KNonExistingDb, "file://pellefant.ldb");
+ aDbUris->AppendL(KNonExistingDb);
+ _LIT(KRemoteURI, "http://kallekanin.ldb");
+ aDbUris->AppendL(KRemoteURI);
+ _LIT(KInvalidDrive, "file://r:nonexistingdrive.ldb");
+ aDbUris->AppendL(KInvalidDrive);
+
+ multiSearcher->SetDatabasesToSearchL(*aDbUris);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ TBool searchRefined = ETrue;
+ SearchForLandmarksL(multiSearcher, EAsc, !searchRefined);
+
+ // Verify Result - three errors should be returned
+ iLog->Log(_L("Verify Result - three errors should be returned"));
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, EAsc);
+ AssertTrueSecL(searchErrors == 3, _L("Found %d search errors"), searchErrors);
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ TInt id1;
+ TInt id2;
+ TInt id3;
+
+ multiSearcher->GetSearchError(0, searchErr);
+ AssertTrueSecL(searchErr.iErrorCode == KErrNotFound, _L("Expected KErrNotFound but got %d"), searchErr.iErrorCode);
+
+ TBuf<64> uriWithError = (*aDbUris)[searchErr.iDatabaseIndex];
+ uriWithError.LowerCase();
+ AssertTrueSecL(uriWithError == KNonExistingDb, _L("Error from wrong database1"));
+ id1 = searchErr.iDatabaseIndex;
+
+ multiSearcher->GetSearchError(1, searchErr);
+ AssertTrueSecL(searchErr.iErrorCode == KErrNotSupported, _L("Expected KErrNotSupported but got %d"), searchErr.iErrorCode);
+ uriWithError.Zero();
+ uriWithError = (*aDbUris)[searchErr.iDatabaseIndex];
+ uriWithError.LowerCase();
+ AssertTrueSecL(uriWithError == KRemoteURI, _L("Error from wrong database2"));
+ id2 = searchErr.iDatabaseIndex;
+
+ // KErrNotReady from dbs on non existing drives
+ multiSearcher->GetSearchError(2, searchErr);
+ AssertTrueSecL(searchErr.iErrorCode == KErrNotReady, _L("Expected KErrNotReady but got %d"), searchErr.iErrorCode);
+ uriWithError.Zero();
+ uriWithError = (*aDbUris)[searchErr.iDatabaseIndex];
+ uriWithError.LowerCase();
+ AssertTrueSecL(uriWithError == KInvalidDrive, _L("Error from wrong database3"));
+ id3 = searchErr.iDatabaseIndex;
+
+ for (TInt i=0; i < aDbUris->Count(); i++)
+ {
+ if (i != id1 && i != id2 && i != id3)
+ {
+ AssertTrueSecL(multiSearcher->NumOfMatches(i) > 0, _L("Found no matches"));
+ }
+ }
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchDbMultipleTimesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchDbMultipleTimesL(CDesCArray* aDbUris)
+ {
+ // Remove all dbs but the first
+ aDbUris->Delete(1, aDbUris->Count() - 1);
+
+ // 13. Repeat the same database multiple times (3 in this case)
+ aDbUris->AppendL((*aDbUris)[0]);
+ aDbUris->AppendL((*aDbUris)[0]);
+
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ VerifyDbsToSearchL(multiSearcher, aDbUris);
+
+ TBool searchRefined = ETrue;
+ SearchForLandmarksL(multiSearcher, EAsc, !searchRefined);
+
+ // Verify Result - doubles should have been found
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, EAsc);
+ AssertTrueSecL(searchErrors == 0, _L("Found %d search errors"), searchErrors);
+ for (TInt i = 0; i < aDbUris->Count(); i++)
+ {
+ AssertTrueSecL(multiSearcher->NumOfMatches(i) > 0, _L("Found no matches"));
+ }
+ for (TInt i = 0; i < aDbUris->Count(); i++)
+ {
+ // Log landmark names to identify doublets
+ CPosLmItemIterator* iter = multiSearcher->MatchIteratorL(i);
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ _LIT(KFormat, "Printing landmark names from db %S");
+ TBuf<100> buf;
+ TPtrC dbName = (*aDbUris)[i];
+ buf.Format(KFormat, &dbName);
+ iLog->Log(buf);
+ TPosLmItemId id = iter->NextL();
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*aDbUris)[i]);
+ CleanupStack::PushL(db);
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = db->ReadLandmarkLC(id);
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ iLog->Log(name);
+ CleanupStack::PopAndDestroy(lm);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(2, iter);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::TestMaxNrOfMatchesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::TestMaxNrOfMatchesL(CDesCArray* aDbUris)
+ {
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*aDbUris);
+ CleanupStack::PushL(multiSearcher);
+ TInt nrOfDbs = aDbUris->Count();
+ TInt maxNrOfMatches = 4;
+ TBool searchRefined = ETrue;
+ TInt fetchedMaxNrOfMatches = multiSearcher->MaxNumOfMatches();
+ AssertTrueSecL(fetchedMaxNrOfMatches == KPosLmMaxNumOfMatchesUnlimited, _L("Not unlimited number of matches by default."));
+ multiSearcher->SetMaxNumOfMatches(maxNrOfMatches);
+ fetchedMaxNrOfMatches = multiSearcher->MaxNumOfMatches();
+ AssertTrueSecL(fetchedMaxNrOfMatches == maxNrOfMatches, _L("Unexpected maxNrOfMatches"));
+
+ // Test normal flow
+ SearchForLandmarksL(multiSearcher, ENoSort, !searchRefined);
+ TUint searchErrors = VerifyResultL(multiSearcher, *aDbUris, ENoSort);
+ AssertTrueSecL(searchErrors == 0, _L("Found %d search errors"), searchErrors);
+ for (TInt i = 0; i < nrOfDbs; i++)
+ {
+ CPosLmItemIterator* iter = multiSearcher->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == maxNrOfMatches, _L("Wrong number of matches"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(multiSearcher->TotalNumOfMatches() == nrOfDbs * maxNrOfMatches, _L("Wrong number of total matches"));
+
+ // Test resetting of max nr of matches during search - should not affect ongoing search
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*e*"));
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, searchRefined);
+ CleanupStack::PushL(operation);
+
+ // Update maxNrOfMatches twice
+ TInt oldMaxNrOfMatches = maxNrOfMatches;
+ maxNrOfMatches--;
+ multiSearcher->SetMaxNumOfMatches(maxNrOfMatches);
+ maxNrOfMatches--;
+ multiSearcher->SetMaxNumOfMatches(maxNrOfMatches);
+ fetchedMaxNrOfMatches = multiSearcher->MaxNumOfMatches();
+ AssertTrueSecL(fetchedMaxNrOfMatches == maxNrOfMatches, _L("Unexpected maxNrOfMatches"));
+
+ operation->ExecuteL();
+ CleanupStack::PopAndDestroy(operation);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ searchErrors = VerifyResultL(multiSearcher, *aDbUris, ENoSort);
+ AssertTrueSecL(searchErrors == 0, _L("Found %d search errors"), searchErrors);
+ for (TInt i = 0; i < nrOfDbs; i++)
+ {
+ CPosLmItemIterator* iter = multiSearcher->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == oldMaxNrOfMatches, _L("Wrong number of matches"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(multiSearcher->TotalNumOfMatches() == nrOfDbs * oldMaxNrOfMatches, _L("Wrong number of total matches"));
+
+ // Test new search - the new maxNrOfMatches should have effect
+ SearchForLandmarksL(multiSearcher, ENoSort, !searchRefined);
+ searchErrors = VerifyResultL(multiSearcher, *aDbUris, ENoSort);
+ AssertTrueSecL(searchErrors == 0, _L("Found %d search errors"), searchErrors);
+ fetchedMaxNrOfMatches = multiSearcher->MaxNumOfMatches();
+ AssertTrueSecL(fetchedMaxNrOfMatches == maxNrOfMatches, _L("Unexpected maxNrOfMatches"));
+ for (TInt i = 0; i < nrOfDbs; i++)
+ {
+ CPosLmItemIterator* iter = multiSearcher->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == maxNrOfMatches, _L("Wrong number of matches"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(multiSearcher->TotalNumOfMatches() == nrOfDbs * maxNrOfMatches, _L("Wrong number of total matches"));
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::TestMatchIteratorL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::TestMatchIteratorL(CDesCArray* /*aDbUris*/)
+ {
+ // Moved to TP130
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::SearchForLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::SearchForLandmarksL(
+ CPosLmMultiDbSearch* aSearcher,
+ TTp119SortOrder aSortOrder,
+ TBool aRefined)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*e*"));
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+
+ CPosLmOperation* operation = NULL;
+ if (aSortOrder == ENoSort)
+ {
+ operation = aSearcher->StartLandmarkSearchL(*textCriteria, aRefined);
+ }
+ else
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ if (aSortOrder == EDesc)
+ {
+ sortPref = TPosLmSortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ }
+ operation = aSearcher->StartLandmarkSearchL(*textCriteria, sortPref, aRefined);
+ }
+
+ CleanupStack::PushL(operation);
+ operation->ExecuteL();
+ CleanupStack::PopAndDestroy(operation);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::VerifyResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TUint CPosTp119::VerifyResultL(
+ CPosLmMultiDbSearch* aSearcher,
+ CDesCArray& aDbUris,
+ TTp119SortOrder aSortOrder)
+ {
+ TUint searchErrors = aSearcher->NumOfSearchErrors();
+ for (TUint j = 0; j < searchErrors; j++)
+ {
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ aSearcher->GetSearchError(j, searchErr);
+ TBuf<100> buf;
+ _LIT(KFormat, "Got error code %d from database nr%d : %S");
+ TPtrC uri = aDbUris[searchErr.iDatabaseIndex];
+ buf.Format(KFormat, searchErr.iErrorCode,searchErr.iDatabaseIndex, &uri);
+ iLog->Log(buf);
+ }
+
+ // Verify sort order
+ if (aSortOrder != ENoSort)
+ {
+ for (TInt i = 0; i < aDbUris.Count(); i++)
+ {
+ CPosLmItemIterator* iterator = aSearcher->MatchIteratorL(i);
+ CleanupStack::PushL(iterator);
+ if (iterator && iterator->NumOfItemsL() > 0)
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(aDbUris[i]);
+ CleanupStack::PushL(db);
+ TPosLmItemId currentId = iterator->NextL();
+ while (currentId != KPosLmNullItemId)
+ {
+ TPosLmItemId nextId = iterator->NextL();
+ if (nextId != KPosLmNullItemId)
+ {
+ CPosLandmark* currentLM = db->ReadLandmarkLC(currentId);
+ CPosLandmark* nextLM = db->ReadLandmarkLC(nextId);
+ TPtrC currentName, nextName;
+ currentLM->GetLandmarkName(currentName);
+ nextLM->GetLandmarkName(nextName);
+ TInt order = nextName.CompareC(currentName);
+ if (aSortOrder == EAsc)
+ {
+ AssertTrueSecL(order >= 0, _L("Wrong sort order (not ascending)"));
+ }
+ else // aSortOrder == EDesc
+ {
+ AssertTrueSecL(order <= 0, _L("Wrong sort order (not descending)"));
+ }
+ CleanupStack::PopAndDestroy(2, currentLM);
+ }
+ currentId = nextId;
+ }
+ CleanupStack::PopAndDestroy(db);
+ }
+ CleanupStack::PopAndDestroy(iterator);
+ }
+ }
+
+ return searchErrors;
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::RemoveDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::RemoveDatabaseL(const TDesC& aFile)
+ {
+ RFs fileServer;
+ User::LeaveIfError(fileServer.Connect());
+ CleanupClosePushL(fileServer);
+ CFileMan* fileMan = CFileMan::NewL(fileServer);
+ CleanupStack::PushL(fileMan);
+ User::LeaveIfError(fileMan->Delete(aFile));
+ CleanupStack::PopAndDestroy(2, &fileServer);
+ }
+
+// ---------------------------------------------------------
+// CPosTp119::VerifyDbsToSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp119::VerifyDbsToSearchL(
+ CPosLmMultiDbSearch* aMultiSearcher,
+ CDesCArray* aDbUris)
+ {
+ CDesCArray* dbToSearch = aMultiSearcher->DatabasesToSearchL();
+ CleanupStack::PushL(dbToSearch);
+
+ // Verify that lengths of specified array and retrived array match
+ AssertTrueSecL(aDbUris->Count() == dbToSearch->Count(), _L("aDbUris->Count() != dbToSearch->Count()"));
+
+ // Verify that length of specified array equals retrived length
+ AssertTrueSecL(aDbUris->Count() == aMultiSearcher->NumOfDatabasesToSearch(), _L("aDbUris->Count() != aMultiSearcher->NumOfDatabasesToSearch()"));
+
+ for (TInt i = 0; i < aDbUris->Count(); i++)
+ {
+ TInt pos, pos2;
+
+ // Verify that specified db can be found in retrieved list.
+ TInt err = dbToSearch->Find((*aDbUris)[i], pos);
+
+ // Verify that retrieved db URI can be found in specified list
+ TInt err2 = aDbUris->Find(aMultiSearcher->DatabaseUriPtr(i), pos2);
+
+ // Error handling
+ if (err != KErrNone || err2 != KErrNone)
+ {
+ // No match found
+ iLog->Log(_L("Didn't find expected db in db list"));
+ User::Leave(err);
+ }
+ else
+ {
+ dbToSearch->Delete(pos);
+ }
+ }
+
+ // Verify that no more db exist in search list
+ AssertTrueSecL(dbToSearch->Count() == 0, _L("More dbs to search than expected"));
+
+ CleanupStack::PopAndDestroy(dbToSearch);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp12.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,946 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp12.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_TPosLMSortPref.h>
+#include <EPos_CPosLMPartialReadParameters.h>
+#include <LbsPosition.h>
+#include <e32std.h>
+//#include <ss_std.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+
+// CONSTANTS
+
+const TInt KNoLandmarksPanicCodes = 11;
+const TInt KTestCaseCategoryIterator = 0;
+const TInt KTestCaseLandmarkIterator = 1;
+
+const TInt KTestCasePartialAttributes1 = 2;
+const TInt KTestCasePartialAttributes2 = 3;
+
+const TInt KTestCaseSortPrefNoAttribute = 4;
+const TInt KTestCaseSortPrefSeveralAttribute = 5;
+
+const TInt KTestCaseNegativeMatches = 6;
+const TInt KTestCaseNegativeDistance = 7;
+const TInt KTestCaseNegativeRadius = 8;
+
+const TInt KTestCaseCompositeSearch1 = 9;
+const TInt KTestCaseCompositeSearch2 = 10;
+const TInt KTestCaseCompositeSearch3 = 11;
+const TInt KTestCaseCompositeSearch4 = 12;
+
+const TInt KTestCaseDuplicateNotifyDatabaseEvent = 13;
+
+const TInt KTestCaseIncorrectCompositeType1 = 14;
+const TInt KTestCaseIncorrectCompositeType2 = 15;
+const TInt KTestCaseIncorrectCompositeType3 = 16;
+const TInt KTestCaseIncorrectCompositeType4 = 17;
+
+const TInt KTestCaseInvalidOperationMode1 = 18;
+const TInt KTestCaseInvalidOperationMode2 = 19;
+const TInt KTestCaseInvalidOperationMode3 = 20;
+const TInt KTestCaseInvalidOperationMode4 = 21;
+
+const TInt KTestCaseInvalidAttributes1 = 22;
+const TInt KTestCaseInvalidAttributes2 = 23;
+
+const TInt KTestCaseCompositeSearch5 = 24;
+const TInt KTestCaseCompositeSearch6 = 25;
+const TInt KTestCaseCompositeSearch7 = 26;
+const TInt KTestCaseCompositeSearch8 = 26;
+
+const TInt KTestCaseCategoryIteratorSortPref = 27;
+const TInt KTestCaseReferencedCategoryIteratorSortPref = 28;
+
+const TInt KTestCaseCategorySearchSortPref = 29;
+const TInt KTestCaseLandmarkSortPref = 30;
+const TInt KTestCaseLandmarkSortPref2 = 31;
+const TInt KTestCaseLandmarkSearchinvalidAttribute = 32;
+const TInt KTestCaseLandmarkSearchinvalidAttribute2 = 33;
+
+const TInt KTestCaseInvalidRequestedPositionFields1 = 34;
+const TInt KTestCaseInvalidRequestedPositionFields2 = 35;
+
+const TInt KTestCaseZeroMatches = 36;
+
+const TInt KTestLandmarkSetIconTest1 = 37;
+const TInt KTestLandmarkSetIconTest2 = 38;
+const TInt KTestCategorySetIconTest1 = 41;
+const TInt KTestCategorySetIconTest2 = 42;
+
+_LIT(KResourceFilePath, "c:\\resource\\");
+_LIT(KResourceFile, "c:\\resource\\EPOSLMASYNCOPS.RSC");
+_LIT(KTempResourceFile, "c:\\resource\\TEMP_EPOSLMASYNCOPS.RSC");
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp12::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp12::StartL()
+ {
+ MakeSurePanicDebugFileExistsL();
+ RemoveDefaultDbL();
+ TBuf<100> buf;
+
+
+ for (TInt i=0; i<KNoLandmarksPanicCodes; i++)
+ {
+ iExpectedPanicCode = static_cast<TPositionLandmarksClientPanic>(i);
+ buf.Format(_L("Expected Panic code %d"), iExpectedPanicCode);
+ iLog->Log(buf);
+
+ if (iExpectedPanicCode == EPosSpecifiedIntervalLiesOutsideIteratedSet)
+ {
+ iTestCase=KTestCaseCategoryIterator;
+ ResumeThreadAndVerifyExit();
+ iTestCase=KTestCaseLandmarkIterator;
+ }
+ else if (iExpectedPanicCode == EPosInvalidPartialReadParameters)
+ {
+ iTestCase=KTestCasePartialAttributes1;
+ ResumeThreadAndVerifyExit();
+ iTestCase=KTestCasePartialAttributes2;
+ }
+ else if (iExpectedPanicCode == EPosInvalidRequestedPositionFields)
+ {
+ iTestCase=KTestCaseInvalidRequestedPositionFields1;
+ ResumeThreadAndVerifyExit();
+ iTestCase=KTestCaseInvalidRequestedPositionFields2;
+ }
+ else if (iExpectedPanicCode == EPosNoneOrMultipleLandmarkAttributeSet)
+ {
+ iTestCase=KTestCaseSortPrefNoAttribute;
+ ResumeThreadAndVerifyExit();
+ iTestCase=KTestCaseSortPrefSeveralAttribute;
+ }
+ else if (iExpectedPanicCode == EPosNegativeValue)
+ {
+ iTestCase=KTestCaseNegativeDistance;
+ ResumeThreadAndVerifyExit();
+ iTestCase=KTestCaseNegativeRadius;
+ }
+ else if (iExpectedPanicCode == EPosInvalidEnumValue)
+ {
+ iTestCase = KTestCaseIncorrectCompositeType1;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseIncorrectCompositeType2;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseIncorrectCompositeType3;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseIncorrectCompositeType4;
+ }
+ else if (iExpectedPanicCode == EPosInvalidOperationMode)
+ {
+ // Excerpt from EPos_LandmarksErrors.h:
+ // "Invalid operation mode. Caused by mixed calls to NextStep and ExecuteL
+ // for an CPosLmOperation object or subsequent calls to NextStep"
+ iTestCase = KTestCaseInvalidOperationMode1;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseInvalidOperationMode2;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseInvalidOperationMode3;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseInvalidOperationMode4;
+ }
+ else if (iExpectedPanicCode == EPosInvalidLandmarkAttribute)
+ {
+ iTestCase = KTestCaseInvalidAttributes1;
+ ResumeThreadAndVerifyExit();
+ iTestCase = KTestCaseInvalidAttributes2;
+ }
+
+ else //added for testing
+ {
+ continue;
+ }
+
+ ResumeThreadAndVerifyExit();
+ }
+
+ iLog->Log(_L("Tests below causes a USER-130 panic to be raised"));
+ // Tests below causes a USER-130 panic to be raised
+ iExpectedPanicCode = static_cast<TPositionLandmarksClientPanic>(130);
+
+ iTestCase = KTestCaseCompositeSearch1;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch2;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch3;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch4;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch5;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch6;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch7;
+ ResumeThreadAndVerifyExit();
+
+ iTestCase = KTestCaseCompositeSearch8;
+ ResumeThreadAndVerifyExit();
+
+ // Test below should raise a EPosEventNotifierAlreadyHasOutstandingRequest (2) panic
+ // defined in EPos_LandmarksServerPanics.h
+ // Since other testparts check for the same panic number change it to something else
+ // and then change it to the correct number (2) in the thread function
+ iLog->Log(_L("Test below should raise a EPosEventNotifierAlreadyHasOutstandingRequest (2) panic"));
+ iExpectedPanicCode = static_cast<TPositionLandmarksClientPanic>(222);
+ iTestCase = KTestCaseDuplicateNotifyDatabaseEvent;
+ ResumeThreadAndVerifyExit();
+
+ // Test that when using invalid CPosLmCategoryManager::TCategorySortPref in CategoryIteratorL
+ // causes a panic
+ iLog->Log(_L("Test that when using invalid CPosLmCategoryManager::TCategorySortPref causes a panic"));
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ iTestCase = KTestCaseCategoryIteratorSortPref;
+ ResumeThreadAndVerifyExit();
+
+ // Test that when using invalid CPosLmCategoryManager::TCategorySortPref in ReferencedCategoryIteratorL
+ // causes a panic
+ iLog->Log(_L("Test that when using invalid CPosLmCategoryManager::TCategorySortPref causes a panic"));
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ iTestCase = KTestCaseReferencedCategoryIteratorSortPref;
+ ResumeThreadAndVerifyExit();
+
+ // Test that setting SetMaxNumOfMatches to a negative value causes a panic
+ iLog->Log(_L("Test that setting SetMaxNumOfMatches to a negative value causes a panic"));
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ iTestCase = KTestCaseNegativeMatches;
+ ResumeThreadAndVerifyExit();
+
+ // Test that setting SetMaxNumOfMatches to 0 causes a panic
+ iLog->Log(_L("Test that setting SetMaxNumOfMatches to 0 causes a panic"));
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ iTestCase = KTestCaseZeroMatches;
+ ResumeThreadAndVerifyExit();
+
+ // Test starting a landmark category search with invalid SortPref panics
+ iLog->Log(_L("Test starting a landmark category search with invalid SortPref panics"));
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ iTestCase = KTestCaseCategorySearchSortPref;
+ ResumeThreadAndVerifyExit();
+
+ // Test that it is not possible to create an invalid SortPref
+ iLog->Log(_L("Test that it is not possible to create an invalid SortPref"));
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ iTestCase = KTestCaseLandmarkSortPref;
+ ResumeThreadAndVerifyExit();
+
+ // Test that it is not possible to set a SortPref to invalid values
+ iLog->Log(_L("Test that it is not possible to set a SortPref to invalid values"));
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ iTestCase = KTestCaseLandmarkSortPref2;
+ ResumeThreadAndVerifyExit();
+
+ // Test that searching with an invalid attribute panics
+ iLog->Log(_L("Test that it is not possible to set a SortPref with incorrect attributes"));
+ iExpectedPanicCode = EPosNoneOrMultipleLandmarkAttributeSet;
+ iTestCase = KTestCaseLandmarkSearchinvalidAttribute;
+ ResumeThreadAndVerifyExit();
+
+ // Test that it is not possible to set a SortPref with incorrect
+ // attributes
+ iLog->Log(_L("Test that searching with an invalid attribute panics"));
+ iExpectedPanicCode = EPosNoneOrMultipleLandmarkAttributeSet;
+ iTestCase = KTestCaseLandmarkSearchinvalidAttribute2;
+ ResumeThreadAndVerifyExit();
+
+ // Test that Landmark->SetIcon with invalid index panics
+ iLog->Log(_L("Test that Landmark->SetIcon with invalid index panics"));
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ iTestCase = KTestLandmarkSetIconTest1;
+ ResumeThreadAndVerifyExit();
+
+ // Test that Landmark->SetIcon with invalid maskindex panics
+ iLog->Log(_L("Test that Landmark->SetIcon with invalid maskindex panics"));
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ iTestCase = KTestLandmarkSetIconTest2;
+ ResumeThreadAndVerifyExit();
+
+ // Test that Category->SetIcon with invalid index panics
+ iLog->Log(_L("Test that Category->SetIcon with invalid index panics"));
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ iTestCase = KTestCategorySetIconTest1;
+ ResumeThreadAndVerifyExit();
+
+ // Test that Category->SetIcon with invalid maskindex panics
+ iLog->Log(_L("Test that Category->SetIcon with invalid maskindex panics"));
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ iTestCase = KTestCategorySetIconTest2;
+ ResumeThreadAndVerifyExit();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::ResumeThreadAndVerifyExit
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp12::ResumeThreadAndVerifyExit()
+ {
+ iLog->Log(_L("ResumeThreadAndVerifyExit"));
+ _LIT(KPanicErr, "Method didn't Panic when expected");
+ _LIT(KPanicCodeErr, "Paniced with unexpected panic code");
+
+ CreateThreadL();
+ TRequestStatus status;
+ iThread.Logon(status);
+ iThread.Resume();
+
+ User::WaitForRequest(status);
+
+ // Used for debugging
+ TBuf<100> buf;
+ buf.Format(_L("ExitType %d Exit reason %d"), iThread.ExitType(), iThread.ExitReason());
+ iLog->Log(buf);
+
+ AssertTrueSecL(iThread.ExitType() == EExitPanic, KPanicErr);
+ AssertTrueSecL(iThread.ExitReason() == iExpectedPanicCode, KPanicCodeErr);
+
+ iThread.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp12::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iThread.Close();
+ TRAPD(err, RestoreResourceFileL());
+ if (err != KErrNone) iLog->Log(_L("Error in CloseTest"));
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::RunPanicTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp12::RunPanicTestL(TAny* aData)
+ {
+ CPosTp12* self = reinterpret_cast<CPosTp12*>(aData);
+
+
+ if(self->iExpectedPanicCode == EPosInvalidValueSpecifiedInResourceFile)
+ {
+ self->ResourceFilePanicTestL();
+ }
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ CPosLandmarkDatabase* lmd = self->OpenDatabaseLC();
+ CPosLandmark* lm = CPosLandmark::NewLC();
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ if (self->iExpectedPanicCode == EPosInvalidPositionFieldId)
+ {
+ lm->NextPositionFieldId(TUint16(222));
+ }
+ else if (self->iExpectedPanicCode == EPosSpecifiedIntervalLiesOutsideIteratedSet) // CategoryIterator
+ {
+ if (self->iTestCase == KTestCaseCategoryIterator)
+ {
+ CPosLmItemIterator* iter = cm->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+ const TInt KCategories=20;
+ _LIT(KName, "CategoryTP12 - %d");
+ for (TInt i=0; i<KCategories; i++)
+ {
+ TBuf<100> categoryName;
+ categoryName.Format(KName,i);
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(categoryName);
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, cm->AddCategoryL(*lmc));
+ }
+ CleanupStack::Pop(lmc);
+ }
+
+ const TInt KStartIndex=5;
+ const TInt KNumOfItems=16;
+ iter->GetItemIdsL(ids, KStartIndex, KNumOfItems);
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else if (self->iTestCase == KTestCaseLandmarkIterator)
+ {
+ CPosLmItemIterator* iterLm = lmd->LandmarkIteratorL();
+ CleanupStack::PushL(iterLm);
+ const TInt KLmStartIndex=0;
+ const TInt KLmNumOfItems=1;
+ iterLm->GetItemIdsL(ids, KLmStartIndex, KLmNumOfItems);
+ CleanupStack::PopAndDestroy(iterLm);
+ }
+ }
+ else if (self->iExpectedPanicCode == EPosNoneOrMultipleLandmarkAttributeSet)
+ {
+ if (self->iTestCase == KTestCaseSortPrefNoAttribute)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ENoAttribute);
+ sortPref.SortOrder();
+ }
+ else if (self->iTestCase == KTestCaseSortPrefSeveralAttribute)
+ {
+ TUint32 attr = CPosLandmark::ELandmarkName | CPosLandmark::EPosition;
+ TPosLmSortPref sortPref(attr);
+ sortPref.SortOrder();
+ }
+ //Test that searching for landmarks with invalid attributes panics
+ else if (self->iTestCase == KTestCaseLandmarkSearchinvalidAttribute)
+ {
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(landmarkSearch);
+ // Invalid attribute, (correct ascended sorted)
+ TPosLmSortPref sortPref((TUint32)5);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Library*"));
+ CPosLmOperation* operation = landmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref);
+ CleanupStack::PushL(operation);
+ ExecuteAndDeleteLD(operation);
+ CleanupStack::PopAndDestroy(operation);
+ }
+ //Test that it is not possible to set a TPosLmSortPref with invalid attributes
+ else if (self->iTestCase == KTestCaseLandmarkSearchinvalidAttribute2)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ sortPref.SetSortByLandmarkAttribute((TUint32)5, TPosLmSortPref::EAscending);
+ }
+ }
+ else if (self->iExpectedPanicCode == EPosNaNCoordinate)
+ {
+ TCoordinate coord;
+ CPosLmNearestCriteria* lmnc = CPosLmNearestCriteria::NewLC(coord);
+
+ CleanupStack::PopAndDestroy(lmnc);
+ }
+ else if (self->iExpectedPanicCode == EPosInvalidLandmarkAttribute)
+ {
+ if (self->iTestCase == KTestCaseInvalidAttributes1)
+ {
+ // Test with incorrect attributes
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetAttributesToSearch(CPosLandmark::EIcon);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+ else if (self->iTestCase == KTestCaseInvalidAttributes2)
+ {
+ // Test with invalid attributes
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetAttributesToSearch(5);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+ }
+ else if (self->iExpectedPanicCode == EPosInvalidPartialReadParameters)
+ {
+ CPosLmPartialReadParameters* partialParam = lmd->PartialReadParametersLC();
+ if (self->iTestCase == KTestCasePartialAttributes1)
+ {
+ TUint attr = 348764;
+ partialParam->SetRequestedAttributes(attr);
+ }
+ else if (self->iTestCase == KTestCasePartialAttributes2)
+ {
+ TUint attr = CPosLandmark::ELandmarkName|
+ CPosLandmark::EPosition|
+ CPosLandmark::ECoverageRadius|
+ CPosLandmark::ECategoryInfo|
+ CPosLandmark::EIcon|
+ CPosLandmark::EDescription;
+ // attr equals 63 (see EPos_CPosLmPartialReadParameters.cpp)
+ partialParam->SetRequestedAttributes(attr+1);
+ }
+ CleanupStack::PopAndDestroy(partialParam);
+ }
+ else if (self->iExpectedPanicCode == EPosInvalidRequestedPositionFields)
+ {
+ CPosLmPartialReadParameters* partialParam = lmd->PartialReadParametersLC();
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+
+ if (self->iTestCase == KTestCaseInvalidRequestedPositionFields1)
+ {
+ // Test with index outside allowed interval
+ TInt outside = EPositionFieldIdLast;
+ reqFields.Append(++outside);
+ partialParam->SetRequestedPositionFields(reqFields);
+ }
+ else if (self->iTestCase == KTestCaseInvalidRequestedPositionFields2)
+ {
+ // Test with index outside allowed interval
+ TInt outside = EPositionFieldIdLast;
+
+ reqFields.Append(EPositionFieldCountry);
+ reqFields.Append(EPositionFieldCity);
+ reqFields.Append(++outside);
+
+ partialParam->SetRequestedPositionFields(reqFields);
+ }
+ CleanupStack::PopAndDestroy(&reqFields);
+ CleanupStack::PopAndDestroy(partialParam);
+ }
+ else if (self -> iExpectedPanicCode == EPosNegativeValue)
+ {
+ if (self->iTestCase == KTestCaseNegativeDistance)
+ {
+ TCoordinate corr(19,20,10);
+ CPosLmNearestCriteria* criteria = CPosLmNearestCriteria::NewLC(corr, ETrue);
+ criteria -> SetMaxDistance (-1); //should panic
+ CleanupStack::PopAndDestroy(criteria);
+ }
+ else if (self ->iTestCase == KTestCaseNegativeRadius)
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm -> SetCoverageRadius(-1); // should panic
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ else if (self->iExpectedPanicCode == 130)
+ {
+ // The index supplied to method CPosLmCompositeCriteria::Argument must be in the
+ // interval [0, NumOfArguments - 1] otherwise cause a USER-130 Panic to be raised
+ if (self->iTestCase == KTestCaseCompositeSearch1)
+ {
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ // Panic test 1, invalid position, should raise USER-130 panic
+ /*CPosLmSearchCriteria& comp1 = */ composite->Argument(0);
+ }
+ else if (self->iTestCase == KTestCaseCompositeSearch2 || self->iTestCase == KTestCaseCompositeSearch3)
+ {
+ CPosLandmarkSearch* search = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(search);
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ //CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ //nameCriteria->SetSearchPatternL(_L("*"));
+
+ CPosLmTextCriteria* textCriteria1 = CPosLmTextCriteria::NewLC();
+ textCriteria1->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria1);
+ if (err != KErrNone) User::Leave(666);
+ CleanupStack::Pop(textCriteria1);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ textCriteria->SetAttributesToSearch(attr);
+
+ err = composite->AddArgument(textCriteria);
+ if (err != KErrNone) User::Leave(667);
+ CleanupStack::Pop(textCriteria);
+
+ TInt nr = composite->NumOfArguments();
+
+ if (self->iTestCase == KTestCaseCompositeSearch2)
+ {
+ // Should raise a USER-130 panic
+ /*CPosLmSearchCriteria& comp3 = */composite->Argument(nr);
+ }
+ else
+ {
+ // Should raise a USER-130 panic
+ /*CPosLmSearchCriteria& comp3 = */composite->Argument(nr+1);
+ }
+ CleanupStack::PopAndDestroy(search);
+ }
+ else if (self->iTestCase == KTestCaseCompositeSearch4)
+ {
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ // Panic test 1, invalid position, should raise USER-130 panic, unfortunately raises a compiler warning
+ // about signed/unsigned
+
+ TInt dummy = -1;
+ composite->Argument(dummy);
+ }
+ else if (self->iTestCase == KTestCaseCompositeSearch5)
+ {
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ // Removing invalid position, should raise USER-130 panic, unfortunately raises a compiler warning
+ // about signed/unsigned
+
+ TInt dummy = -1;
+ composite->RemoveArgument(dummy);
+ }
+ else if (self->iTestCase == KTestCaseCompositeSearch6)
+ {
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ // Removing invalid position, should raise USER-130 panic, unfortunately raises a compiler warning
+ // about signed/unsigned
+
+ TInt dummy = 0;
+ composite->RemoveArgument(dummy);
+ }
+ else if (self->iTestCase == KTestCaseCompositeSearch7)
+ {
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ // Removing invalid position, should raise USER-130 panic, unfortunately raises a compiler warning
+ // about signed/unsigned
+
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ composite->AddArgument(textCriteria);
+ CleanupStack::Pop(textCriteria);
+
+ TInt dummy = 1;
+ composite->RemoveArgument(dummy);
+ }
+ else if (self->iTestCase == KTestCaseCompositeSearch8)
+ {
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ // Removing invalid position, should raise USER-130 panic, unfortunately raises a compiler warning
+ // about signed/unsigned
+
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ composite->AddArgument(textCriteria);
+ CleanupStack::Pop(textCriteria);
+
+ TInt dummy = 2;
+ composite->RemoveArgument(dummy);
+ }
+ }
+ else if (self->iTestCase == KTestCaseDuplicateNotifyDatabaseEvent)
+ {
+ self->iExpectedPanicCode = static_cast<TPositionLandmarksClientPanic>(2);
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+ TRequestStatus status1;
+ TPosLmEvent event1;
+ TRequestStatus status2;
+ TPosLmEvent event2;
+ lmd->NotifyDatabaseEvent(event1, status1);
+ // Just in case
+ User::After(1000000);
+ // Should raise a EPosEventNotifierAlreadyHasOutstandingRequest Panic
+ lmd->NotifyDatabaseEvent(event2, status2);
+ // Just in case
+ User::After(1000000);
+ CleanupStack::PopAndDestroy(lmd);
+ }
+ else if (self->iExpectedPanicCode == EPosInvalidEnumValue)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ if (self->iTestCase == KTestCaseIncorrectCompositeType1)
+ {
+ composite->SetCompositionType((CPosLmCompositeCriteria::TCompositionType)10);
+ }
+ else if (self->iTestCase == KTestCaseIncorrectCompositeType2)
+ {
+ composite->SetCompositionType((CPosLmCompositeCriteria::TCompositionType)-1);
+ }
+ else if (self->iTestCase == KTestCaseIncorrectCompositeType3)
+ {
+ CPosLmCompositeCriteria* composite2 = CPosLmCompositeCriteria::NewLC((CPosLmCompositeCriteria::TCompositionType)5);
+ CleanupStack::PopAndDestroy(composite2);
+ }
+ else if (self->iTestCase == KTestCaseIncorrectCompositeType4)
+ {
+ CPosLmCompositeCriteria* composite2 = CPosLmCompositeCriteria::NewLC((CPosLmCompositeCriteria::TCompositionType)-5);
+ CleanupStack::PopAndDestroy(composite2);
+ }
+ CleanupStack::PopAndDestroy(composite);
+
+ // Test that using invalid sortpref panics
+ if (self->iTestCase == KTestCaseCategoryIteratorSortPref)
+ {
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*lmd);
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL((CPosLmCategoryManager::TCategorySortPref)3);
+ CleanupStack::PushL(catIter);
+ CleanupStack::PopAndDestroy(catIter);
+ }
+ // Test that using invalid sortpref panics
+ else if (self->iTestCase == KTestCaseReferencedCategoryIteratorSortPref)
+ {
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*lmd);
+ CPosLmItemIterator* catIter = categoryManager->ReferencedCategoryIteratorL((CPosLmCategoryManager::TCategorySortPref)4);
+ CleanupStack::PushL(catIter);
+ CleanupStack::PopAndDestroy(catIter);
+ }
+ //Test that using invalid sortpref panics
+ else if (self->iTestCase == KTestCaseCategorySearchSortPref)
+ {
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ // Use wildcard * as search pattern
+ nameCriteria->SetSearchPatternL(_L("Pub"));
+ ExecuteAndDeleteLD(landmarkSearch->StartCategorySearchL(*nameCriteria, (CPosLmCategoryManager::TCategorySortPref)5));
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ }
+ //Test that it is not possible to create a TPosLmSortPref with invalid value
+ else if (self->iTestCase == KTestCaseLandmarkSortPref)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName,
+ (TPosLmSortPref::TSortOrder)4321);
+ }
+ //Test that it is not possible to set a TPosLmSortPref to invalid values
+ else if (self->iTestCase == KTestCaseLandmarkSortPref2)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, (TPosLmSortPref::TSortOrder)25);
+ }
+ CleanupStack::PopAndDestroy(lmd);
+ }
+ else if (self->iExpectedPanicCode == EPosInvalidOperationMode)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Library*"));
+ CPosLmOperation* operation = landmarkSearch->StartLandmarkSearchL(*textCriteria);
+ CleanupStack::PushL(operation);
+
+ if (self->iTestCase == KTestCaseInvalidOperationMode1)
+ {
+ // Two subsequent ExecuteL calls should Panic
+ operation->ExecuteL();
+ operation->ExecuteL();
+ }
+ else if (self->iTestCase == KTestCaseInvalidOperationMode2)
+ {
+ operation->ExecuteL();
+ TRequestStatus status;
+ TReal32 progress;
+ operation->NextStep(status, progress);
+ }
+ else if (self->iTestCase == KTestCaseInvalidOperationMode3)
+ {
+ TRequestStatus status;
+ TReal32 progress;
+ operation->NextStep(status, progress);
+ operation->ExecuteL();
+ }
+ else if (self->iTestCase == KTestCaseInvalidOperationMode4)
+ {
+ TRequestStatus status;
+ TReal32 progress;
+ operation->NextStep(status, progress);
+ operation->NextStep(status, progress);
+ }
+ CleanupStack::PopAndDestroy(operation);
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ CleanupStack::PopAndDestroy(lmd);
+ }
+ else if (self->iExpectedPanicCode == EPosLmInvalidArgument)
+ {
+ if (self->iTestCase == KTestCaseNegativeMatches)
+ {
+ CPosLandmarkSearch* search = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(search);
+ search->SetMaxNumOfMatches(-10);
+ CleanupStack::PopAndDestroy(search);
+ }
+ else if (self->iTestCase == KTestCaseZeroMatches)
+ {
+ CPosLandmarkSearch* search = CPosLandmarkSearch::NewL(*lmd);
+ CleanupStack::PushL(search);
+ search->SetMaxNumOfMatches(0);
+ CleanupStack::PopAndDestroy(search);
+ }
+ else if (self->iTestCase == KTestLandmarkSetIconTest1)
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ // Panics here
+ lm->SetIconL(_L("IconFileName"), -2, KPosLmIconMaskNotUsed);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else if (self->iTestCase == KTestLandmarkSetIconTest2)
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ // Panics here
+ lm->SetIconL(_L("IconFileName"), 1, -2);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else if (self->iTestCase == KTestCategorySetIconTest1)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("NewCategory1"));
+ // Panics here
+ category->SetIconL(_L("IconFileName"), -5, KPosLmIconMaskNotUsed);
+ CleanupStack::PopAndDestroy(category);
+ }
+ else if (self->iTestCase == KTestCategorySetIconTest2)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("NewCategory2"));
+ // Panics here
+ category->SetIconL(_L("IconFileName"), 5, -2);
+ CleanupStack::PopAndDestroy(category);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(4,&ids);
+ }
+
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp12::RunPanicTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::CreateThreadL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp12::CreateThreadL()
+ {
+ _LIT(KThreadName, "TP12testthread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ TBuf<100> buf;
+ buf.Format(KThreadName, iTreadCounter++);
+ TInt err=0;
+ err = iThread.Create(buf, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::ResourceFilePanicTestLL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp12::ResourceFilePanicTestL()
+ {
+ RemoveDefaultDbL();
+ CPosLandmarkDatabase* lmd=UseInvalidResourceFileL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(categoryManager);
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ ids.Append(1);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoriesL(ids));
+
+ CleanupStack::PopAndDestroy(3, lmd);
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::UseInvalidGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+CPosLandmarkDatabase* CPosTp12::UseInvalidResourceFileL()
+ {
+ _LIT(KInvalidResourceFile, "c:\\system\\test\\testdata\\EPOSLMASYNCOPS.RSC");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TInt err = fileMan->Rename(KResourceFile, KTempResourceFile, CFileMan::EOverWrite);
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ iLog->Log(_L("Unexpected error when trying to rename EPOSLMASYNCOPS.RSC"));
+ User::Leave(err);
+ }
+
+ User::LeaveIfError(fileMan->Copy(KInvalidResourceFile, KResourceFilePath, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp12::RestoreResourceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp12::RestoreResourceFileL()
+ {
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ User::LeaveIfError(fileMan->Delete(KResourceFile));
+
+ TInt err = fileMan->Rename(KTempResourceFile, KResourceFile, CFileMan::EOverWrite);
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ iLog->Log(_L("Unexpected error when trying to rename TEMP_EPOSLMASYNCOPS.RSC"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp120.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1225 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp120.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryManager.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_TPosLMSortPref.h>
+
+// CONSTANTS
+const TInt KNrOfDbs = 5;
+const TInt KLmPerDb = 20;
+const TInt KTotLms = 105;
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp120::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iDbArray;
+
+ delete iLmMultiSearch;
+ iLmMultiSearch = NULL;
+
+ iAreaSearchResults.ResetAndDestroy();
+
+ REComSession::FinalClose();
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::StartL()
+ {
+ // Split databases, NrOfDBs db, LmPerDb lm in each, TotLms is last lm id from original db.
+ // Last param is to enable/disable debug
+ iDbArray = CreateDatabasesL(KNrOfDbs, KLmPerDb, KTotLms); //, ETrue);
+
+ // Constructing a lm multi search
+ iLmMultiSearch = CPosLmMultiDbSearch::NewL(*iDbArray);
+
+ AppendAreaSearchResultsL();
+
+ iLog->Log(_L("Testing search with criterias read from LmDbAreaSearchResult.txt syncronously"));
+ SearchL(iAreaSearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbAreaSearchResult.txt asyncronously"));
+ SearchL(iAreaSearchResults, EAsynchronous);
+
+
+ iLog->Log(_L("Testing search with a defined sortorder"));
+ SearchWithSortOrderL(iAreaSearchResults);
+
+ iLog->Log(_L("Testing search and cancel"));
+ SearchAndCancelL();
+
+
+ iLog->Log(_L("Testing maximum number of matches"));
+ SearchWithMaximumL();
+
+ iLog->Log(_L("Testing searching on the fly"));
+ OnTheFlySearchL();
+
+ iLog->Log(_L("Testing a redefined search after landmarks have been renamed"));
+ SearchAndRenameL();
+
+ iLog->Log(_L("Testing a redefined search after a landmark has been removed"));
+ SearchAndDeleteL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::AreaCriteriaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLmAreaCriteria* CPosTp120::AreaCriteriaL(const TReal64 &aSouthLat,
+ const TReal64 &aNorthLat,
+ const TReal64 &aWestLong,
+ const TReal64 &aEastLong)
+ {
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(aSouthLat,
+ aNorthLat,
+ aWestLong,
+ aEastLong);
+ CleanupStack::Pop();
+ return areaCriteria;
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::CheckDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::CheckDatabasesL(
+ CDesCArray* aExpectedLmUris,
+ TUint aExpectedMaxMatches)
+ {
+ CDesCArray* dbToSearch = iLmMultiSearch->DatabasesToSearchL();
+ CleanupStack::PushL(dbToSearch);
+
+ _LIT(KWrongNrDatabases, "Wrong number of databases to search!");
+ AssertTrueSecL(aExpectedLmUris != dbToSearch, KWrongNrDatabases);
+ AssertTrueSecL(aExpectedLmUris->Count() == dbToSearch->Count(), KWrongNrDatabases);
+ CleanupStack::PopAndDestroy(dbToSearch);
+
+ AssertTrueSecL(aExpectedLmUris->Count() == iLmMultiSearch->NumOfDatabasesToSearch(),
+ KWrongNrDatabases);
+ for (TInt i=0; i<aExpectedLmUris->Count(); i++)
+ {
+ AssertTrueSecL(aExpectedLmUris->MdcaPoint(i) == iLmMultiSearch->DatabaseUriPtr(i),
+ KWrongNrDatabases);
+ }
+
+ _LIT(KWrongNrMatches, "Wrong number of max matches!");
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == aExpectedMaxMatches,
+ KWrongNrMatches);
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::GetLmIdsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::GetLmIdsL(
+ TInt aDbId,
+ RArray<TPosLmItemId> aSearchResults,
+ RArray<TPosLmItemId>& aLmIdForADb)
+ {
+ TInt startId = aDbId * KLmPerDb + 1;
+ TInt stopId = 0;
+
+ if (aDbId == KNrOfDbs - 1)
+ {
+ stopId = KTotLms;
+ }
+ else
+ {
+ stopId = (aDbId+1) * KLmPerDb;
+ }
+
+ for (TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ if (aSearchResults[i] >= startId && aSearchResults[i] <= stopId)
+ {
+ User::LeaveIfError(aLmIdForADb.Append(aSearchResults[i]));
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::CheckEqualsLmsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::CheckEqualsLmsL(
+ TPosLmItemId aSource,
+ TPosLmItemId aTarget)
+ {
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+
+ if (aSource != aTarget)
+ {
+ // Check if same name then don't Leave
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(aSource);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(aTarget);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+
+ if (EFalse)
+ {
+ // For debugging purposes
+ TBuf<100> buf;
+ buf.Append(_L("Name:"));
+ buf.Append(sourceName);
+ buf.Append(targetName);
+ iLog->Log(buf);
+ }
+
+ AssertTrueSecL(!sourceName.CompareC(targetName), KSortorderErr, aSource);
+ CleanupStack::PopAndDestroy(2, source); // target, source
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::SearchL(
+ const RPointerArray<CAreaSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+ TBuf<255> info;
+
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmAreaCriteria* areaCriteria = NULL;
+ TRAPD(err, areaCriteria = CPosTp120::AreaCriteriaL(aSearchResults[i]->SouthLat(),
+ aSearchResults[i]->NorthLat(),
+ aSearchResults[i]->WestLong(),
+ aSearchResults[i]->EastLong()));
+ CleanupStack::PushL(areaCriteria);
+
+ if (err != aSearchResults[i]->ErrorCode())
+ {
+ iLog->Log(_L("Unexpected error code returned"));
+ iLog->Log(_L("Area Search result read from file:"));
+
+ aSearchResults[i]->Print(info);
+ iLog->Log(info);
+
+ _LIT(KReturned, "Search returned errorCode = %d");
+ info.Format(KReturned, err);
+ iLog->Log(info);
+ User::Leave(KErrGeneral);
+ }
+
+ if (!err)
+ {
+ CPosLmOperation* operation =
+ iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, aSearchResults[i]->Redefined());
+ CleanupStack::PushL(operation);
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(operation);
+ CleanupStack::Pop(operation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(operation);
+ CleanupStack::Pop(operation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(operation);
+ CleanupStack::PopAndDestroy(operation);
+ break;
+ }
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ // Check total number of matches
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() !=
+ iLmMultiSearch->TotalNumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLmMultiSearch->TotalNumOfMatches());
+ iLog->Log(info);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr);
+ User::LeaveIfError(lmids.Append(id));
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+ }
+
+ AssertTrueSecL(aSearchResults[i]->SearchResult().Count() == lmids.Count(),
+ _L("Expected number of hits and found hits don't match"));
+
+ for (TInt k=0; k<lmids.Count(); k++)
+ {
+ // Check that found id is expected from all ids
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(lmids[k]), KNotFoundErr);
+ }
+
+ CleanupStack::PopAndDestroy(&lmids); // lmids
+ }
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+
+ _LIT(KSearchNr, "Multi search test index #%d executed ok.");
+ TBuf<100> buf;
+ buf.Format(KSearchNr, i);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::SearchWithSortOrderL(const RPointerArray<CAreaSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed syncronously");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ for (TInt j=0; j<aSearchResults.Count(); j++)
+ {
+ CPosLmAreaCriteria* areaCriteria = NULL;
+ TRAPD(err, areaCriteria = AreaCriteriaL(
+ iAreaSearchResults[j]->SouthLat(),
+ iAreaSearchResults[j]->NorthLat(),
+ iAreaSearchResults[j]->WestLong(),
+ iAreaSearchResults[j]->EastLong()));
+
+ CleanupStack::PushL(areaCriteria);
+
+ if (err != KErrNone)
+ {
+ CleanupStack::PopAndDestroy(areaCriteria);
+ continue;
+ }
+
+
+ // 5 and 6 is using WaitForRequest
+ for (TInt i=0; i<4; i++)
+ {
+ switch (i)
+ {
+ //**** sync
+ case 0:
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 1:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 2:
+ //**** async
+ RunAsyncOperationLD(iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 3:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ RunAsyncOperationLD(iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ //**** asych with User::WaitForRequest()
+ case 4:
+ {
+ CPosLmOperation* op = iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ case 5:
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmOperation* op = iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ }
+ }
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ // Check total number of matches
+ if ((TUint)(aSearchResults[j]->SearchResult()).Count() !=
+ iLmMultiSearch->TotalNumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[j]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLmMultiSearch->TotalNumOfMatches());
+ iLog->Log(info);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[j]->SearchResult();
+ for (TInt n=0; n<iLmMultiSearch->NumOfDatabasesToSearch(); n++)
+ {
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+ GetLmIdsL(n, *searchResults, lmids);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(n));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ LandmarksSortL(lmids, sortPref);
+
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(n);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TInt lmid = 0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ CheckEqualsLmsL(id, lmids[lmid]);
+
+ id = iter->NextL();
+ ++lmid;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ CleanupStack::PopAndDestroy(&lmids);
+ }
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+
+ _LIT(KSearchNr, "Multi search test index #%d executed ok.");
+ TBuf<100> buf;
+ buf.Format(KSearchNr, j);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::OnTheFlySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::OnTheFlySearchL()
+ {
+ const TInt KTestIndex = 4;
+
+ _LIT(KTestNr, "Multi search test, using test index %d.");
+ TBuf<100> buf;
+ buf.Format(KTestNr, KTestIndex);
+ iLog->Log(buf);
+
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[KTestIndex]->SouthLat(),
+ iAreaSearchResults[KTestIndex]->NorthLat(),
+ iAreaSearchResults[KTestIndex]->WestLong(),
+ iAreaSearchResults[KTestIndex]->EastLong());
+
+ COnTheFlyTester* onTheFlyTester = COnTheFlyTester::NewLC();
+ onTheFlyTester->StartSearchCampaignL(iLmMultiSearch,
+ iAreaSearchResults[KTestIndex]->SearchResult(),
+ areaCriteria);
+
+ TInt result = onTheFlyTester->Err();
+ if (result != KErrNone)
+ {
+ TPtrC msg;
+ onTheFlyTester->GetErrMsg(msg);
+ iLog->Log(msg);
+ User::Leave(result);
+ }
+
+ CleanupStack::PopAndDestroy(2, areaCriteria);
+
+ iLmMultiSearch->UnsetDisplayData();
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::SearchAndDeleteL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::SearchAndDeleteL()
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a redefined search is performed");
+ const TInt KTestIndex = 4;
+
+ _LIT(KTestNr, "Multi search test, using test index %d.");
+ TBuf<100> buf;
+ buf.Format(KTestNr, KTestIndex);
+ iLog->Log(buf);
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmAreaCriteria* areaCriteria=CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[KTestIndex]->SouthLat(),
+ iAreaSearchResults[KTestIndex]->NorthLat(),
+ iAreaSearchResults[KTestIndex]->WestLong(),
+ iAreaSearchResults[KTestIndex]->EastLong());
+
+ // Search #1
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, sortPref));
+
+ RArray<TPosLmItemId>* searchResults = &iAreaSearchResults[KTestIndex]->SearchResult();
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL((TUint)searchResults->Count() == iLmMultiSearch->TotalNumOfMatches(),
+ KNumOfMatchesErr);
+
+ TPosLmItemId lmid = (*searchResults)[0];
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iDatabase->RemoveLandmarkL(lmid);
+ searchResults->Remove(0);
+ searchResults->Compress();
+ delete iDatabase;
+ iDatabase = NULL;
+
+ // Search #2
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, sortPref, ETrue));
+
+ // Check result
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL((TUint)searchResults->Count() == iLmMultiSearch->TotalNumOfMatches(),
+ KNumOfMatchesErr);
+
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results");
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(iAreaSearchResults[KTestIndex]->FindSearchResult(id), KNotFoundErr);
+ User::LeaveIfError(lmids.Append(id));
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+ }
+
+ AssertTrueSecL(iAreaSearchResults[KTestIndex]->SearchResult().Count() == lmids.Count(),
+ _L("Expected number of hits and found hits don't match"));
+
+ for (TInt k=0; k<lmids.Count(); k++)
+ {
+ // Check that found id is expected from all ids
+ AssertTrueSecL(iAreaSearchResults[KTestIndex]->FindSearchResult(lmids[k]), KNotFoundErr);
+ }
+
+ CleanupStack::PopAndDestroy(&lmids); // lmids
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+
+ // Prepare for another search with different criteria
+ TInt otherTestIndex = KTestIndex + 1;
+
+ buf.Format(KTestNr, otherTestIndex);
+ iLog->Log(buf);
+
+ areaCriteria = CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[otherTestIndex]->SouthLat(),
+ iAreaSearchResults[otherTestIndex]->NorthLat(),
+ iAreaSearchResults[otherTestIndex]->WestLong(),
+ iAreaSearchResults[otherTestIndex]->EastLong());
+
+ // Search #3
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, sortPref, ETrue));
+
+ // Check result
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL(iLmMultiSearch->TotalNumOfMatches() != searchResults->Count(),
+ KNumOfMatchesErr);
+
+ AssertTrueSecL(iLmMultiSearch->TotalNumOfMatches() == 0, KNumOfMatchesErr);
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::SearchAndRenameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::SearchAndRenameL()
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a redefined search is performed");
+ const TInt KTestIndex = 4;
+
+ _LIT(KTestNr, "Multi search test, using test index %d.");
+ TBuf<100> buf;
+ buf.Format(KTestNr, KTestIndex);
+ iLog->Log(buf);
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[KTestIndex]->SouthLat(),
+ iAreaSearchResults[KTestIndex]->NorthLat(),
+ iAreaSearchResults[KTestIndex]->WestLong(),
+ iAreaSearchResults[KTestIndex]->EastLong());
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, sortPref));
+
+ RArray<TPosLmItemId>* searchResults = &iAreaSearchResults[KTestIndex]->SearchResult();
+
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results");
+ _LIT(KLmName, "LmTP120");
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+ iDatabase =
+ CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(j));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(iAreaSearchResults[KTestIndex]->FindSearchResult(id),
+ KNotFoundErr);
+
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id);
+
+ TBuf<30> lmName;
+ lmName = KLmName;
+ lm->SetLandmarkNameL(lmName);
+ iDatabase->UpdateLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, sortPref, ETrue));
+
+ // Check database array
+ CheckDatabasesL(iDbArray);
+
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+
+ AssertTrueSecL((TUint) searchResults->Count() ==
+ iLmMultiSearch->TotalNumOfMatches(), KNumOfMatchesErr);
+
+ for (TInt j=0; j<iLmMultiSearch->NumOfDatabasesToSearch(); j++)
+ {
+ iDatabase =
+ CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(j));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(j);
+
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Check that found id is expected
+ AssertTrueSecL(iAreaSearchResults[KTestIndex]->FindSearchResult(id),
+ KNotFoundErr);
+
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id);
+
+ TPtrC16 lmName;
+ lm->GetLandmarkName(lmName);
+ AssertTrueSecL(!lmName.CompareC(KLmName), _L("Wrong landmark name"));
+
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::SearchAndCancelL(const TBool& aInCallback)
+ {
+ // Test search with one criteria
+ const TInt KTestIndex = 0;
+
+ _LIT(KTestNr, "Multi search test, using test index %d.");
+ TBuf<100> buf;
+ buf.Format(KTestNr, KTestIndex);
+ iLog->Log(buf);
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[KTestIndex]->SouthLat(),
+ iAreaSearchResults[KTestIndex]->NorthLat(),
+ iAreaSearchResults[KTestIndex]->WestLong(),
+ iAreaSearchResults[KTestIndex]->EastLong());
+
+ if (aInCallback)
+ {
+ TReal threshold = 3;
+ for (TReal i=0; i<100; i+=10)
+ {
+ threshold = i/100;
+ RunAsyncOperationAndCancelInCallbackLD(iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria, iAreaSearchResults[KTestIndex]->Redefined()), threshold);
+
+ _LIT(KCancelNr, "Multi search test, cancel after progress %f, canceled ok.");
+ TBuf<100> buf;
+ buf.Format(KCancelNr, threshold);
+ iLog->Log(buf);
+ }
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLmMultiSearch->StartLandmarkSearchL(
+ *areaCriteria, iAreaSearchResults[KTestIndex]->Redefined()));
+ }
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::SearchWithMaximumL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp120::SearchWithMaximumL()
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchWithMaximumL is performed");
+
+ // Test search with one criteria
+ const TInt KTestIndex = 8;
+
+ _LIT(KTestNr, "Multi search test, using test index %d.");
+ TBuf<100> buf;
+ buf.Format(KTestNr, KTestIndex);
+ iLog->Log(buf);
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[KTestIndex]->SouthLat(),
+ iAreaSearchResults[KTestIndex]->NorthLat(),
+ iAreaSearchResults[KTestIndex]->WestLong(),
+ iAreaSearchResults[KTestIndex]->EastLong());
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+
+ // First get the maximum number of matches
+ TInt maxMatches = KNrOfDbs;
+ iLmMultiSearch->SetMaxNumOfMatches(maxMatches);
+ _LIT(KErrNrOfMatches, "Number of matches is incorrect");
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria, sortPref));
+
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+ RArray<TPosLmItemId>* searchResults = &iAreaSearchResults[KTestIndex]->SearchResult();
+ TInt totalMatches = iLmMultiSearch->TotalNumOfMatches();
+
+ // Check database array
+ CheckDatabasesL(iDbArray, maxMatches);
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+ // Check that nr is not expected number of results
+ AssertTrueSecL((TUint) searchResults->Count() !=
+ totalMatches, KNumOfMatchesErr);
+
+ for (TInt n=0; n<iLmMultiSearch->NumOfDatabasesToSearch(); n++)
+ {
+ RArray<TPosLmItemId> lmids;
+ CleanupClosePushL(lmids);
+ GetLmIdsL(n, *searchResults, lmids);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(iLmMultiSearch->DatabaseUriPtr(n));
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ LandmarksSortL(lmids, sortPref);
+
+ CPosLmItemIterator* iter = iLmMultiSearch->MatchIteratorL(n);
+ // Check if there are any matches = iteration exists.
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == iLmMultiSearch->NumOfMatches(n),
+ KNumOfMatchesErr);
+
+ TInt lmid = 0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ CheckEqualsLmsL(id, lmids[lmid]);
+
+ id = iter->NextL();
+ ++lmid;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+ _LIT(KIterNull, "MatchIterator returned null for a db");
+ iLog->Log(KIterNull);
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ CleanupStack::PopAndDestroy(&lmids);
+ }
+
+ // Test max matches again
+ TInt incMatches = 2;
+ maxMatches = maxMatches + incMatches;
+ iLmMultiSearch->SetMaxNumOfMatches(maxMatches);
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+
+ ExecuteAndDeleteLD(iLmMultiSearch->StartLandmarkSearchL(*areaCriteria));
+
+ AssertTrueSecL(iLmMultiSearch->MaxNumOfMatches() == maxMatches, KErrNrOfMatches);
+ TInt reTotalMatches = iLmMultiSearch->TotalNumOfMatches();
+
+ AssertTrueSecL(reTotalMatches != totalMatches,
+ _L("Total number of matches should not be that same."));
+
+ // Check database array
+ CheckDatabasesL(iDbArray, maxMatches);
+ // Check for errors
+ AssertTrueSecL(iLmMultiSearch->NumOfSearchErrors() == 0,
+ _L("Error(s) found during multi search."));
+ // Check that nr is not expected number of results
+ AssertTrueSecL((TUint) searchResults->Count() !=
+ reTotalMatches, KNumOfMatchesErr);
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+
+ // Unset max number of matches to normal/unlimited again
+ iLmMultiSearch->SetMaxNumOfMatches();
+ }
+
+// ---------------------------------------------------------
+// CPosTp120::CreateDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CDesCArray* CPosTp120::CreateDatabasesL(TInt aNrOfLmDbs, TInt aLmPerDb,
+ TInt aLastId, TBool aDebug)
+ {
+
+ CDesCArray* iDbArray = new (ELeave) CDesCArrayFlat(aNrOfLmDbs);
+ CleanupStack::PushL(iDbArray);
+
+ RemoveDefaultDbL();
+
+ // Populate default db
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ delete iDatabase;
+ iDatabase = NULL;
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ // Create databases
+ TInt i=0;
+ for (i=1; i < aNrOfLmDbs; i++)
+ {
+ TBuf<100> db;
+ db.Format(KDbNamePath, i * aLmPerDb);
+
+ iFileSession.Delete(db);
+ User::LeaveIfError(fileMan->Copy(KLmFullDefaultDbPath, db, CFileMan::EOverWrite));
+ }
+ CleanupStack::PopAndDestroy(fileMan);
+
+ for (TInt db=0; db < aNrOfLmDbs; db++)
+ {
+ TInt dbform = db;
+ if (db == aNrOfLmDbs)
+ {
+ dbform = aNrOfLmDbs - 1;
+ }
+
+ CPosLandmarkDatabase* lmd = NULL;
+ TBuf<100> name;
+ if (db == 0)
+ {
+ _LIT(KDefLmDb, "eposlm.ldb");
+ name = KDefLmDb;
+ lmd = CPosLandmarkDatabase::OpenL();
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ }
+ else
+ {
+ name.Format(KDbName, dbform * aLmPerDb);
+ lmd = CPosLandmarkDatabase::OpenL(name);
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ }
+ CleanupStack::PushL(lmd);
+ // Append db name to array
+ iDbArray->AppendL(name);
+
+ if (aDebug)
+ {
+ iLog->Log(name);
+ }
+
+ TInt startItemid = dbform * aLmPerDb + 1;
+ TInt stopItemid = dbform * aLmPerDb + aLmPerDb;
+ if (dbform == aNrOfLmDbs - 1)
+ {
+ stopItemid = aLastId;
+ }
+
+ for (TInt lmid=1; lmid <= aLastId; lmid++)
+ {
+ TBuf<100> lmidbuf;
+
+ if (aDebug)
+ {
+ _LIT(KLmId, "Landmark with LmId: %d");
+ lmidbuf.Format(KLmId, lmid);
+ iLog->Log(lmidbuf);
+ }
+
+ if (lmid < startItemid || lmid > stopItemid)
+ {
+ if (aDebug)
+ {
+ _LIT(KDelLmId, "Removing LmId: %d");
+ lmidbuf.Format(KDelLmId, lmid);
+ iLog->Log(lmidbuf);
+ }
+
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, lmd->RemoveLandmarkL(lmid));
+ }
+ }
+ }
+
+ // Compact database
+ ExecuteAndDeleteLD(lmd->CompactL());
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+ // Log/print landmark databases.
+ if (aDebug)
+ {
+ // DEBUG
+ for (i=0; i < aNrOfLmDbs; i++)
+ {
+ TBuf<100> dbNo;
+ dbNo.Format(_L(" -------- Printing Db %d --------------"), i);
+ iLog->Log(dbNo);
+
+ CPosLandmarkDatabase* lmd = NULL;
+ if (i == 0)
+ {
+ _LIT(KDbDefName, "Default Lm DB");
+ iLog->Log(KDbDefName);
+ lmd = CPosLandmarkDatabase::OpenL();
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ }
+ else
+ {
+ TInt dbform = i;
+ if (i == 5)
+ {
+ dbform = 4;
+ }
+
+ TBuf<100> db;
+ db.Format(KDbName, dbform * aLmPerDb);
+ iLog->Log(db);
+
+ lmd = CPosLandmarkDatabase::OpenL(db);
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ }
+ CleanupStack::PushL(lmd);
+ CPosLmCategoryManager* lmcat = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(lmcat);
+
+ CPosLmItemIterator* iter = lmd->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ _LIT(KNrLms, "Nr of Lms: %d");
+ TBuf<20> lms;
+ lms.Format(KNrLms, iter->NumOfItemsL());
+ iLog->Log(lms);
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = lmd->ReadLandmarkLC(id);
+
+ TBuf<255> info;
+ PrintLandmark(*lm, info);
+ iLog->Log(info);
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ CPosLmItemIterator* catiter = lmcat->CategoryIteratorL();
+ CleanupStack::PushL(catiter);
+
+ _LIT(KNrLmCats, "Nr of Lm Cats: %d");
+ TBuf<20> lmcats;
+ lmcats.Format(KNrLmCats, catiter->NumOfItemsL());
+ iLog->Log(lmcats);
+
+ id = catiter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmarkCategory* cat = lmcat->ReadCategoryLC(id);
+
+ TBuf<255> info;
+ // PrintLandmark(*lm, info);
+ _LIT(KCatId, "Category id: %d");
+ _LIT(KCatGlobalId, "Global Category id: %d");
+ _LIT(KCatName, "Category name: %S");
+
+ info.Format(KCatId, cat->CategoryId());
+ iLog->Log(info);
+
+ info.Format(KCatGlobalId, cat->GlobalCategory());
+ iLog->Log(info);
+
+ TPtrC catname;
+ TInt err = cat->GetCategoryName(catname);
+ info.Format(KCatName, &catname);
+ iLog->Log(info);
+
+ CleanupStack::PopAndDestroy(cat);
+
+ id = catiter->NextL();
+ }
+
+
+ CleanupStack::PopAndDestroy(3, lmd); // catiter, lmcat
+ }
+ }
+
+ CleanupStack::Pop(iDbArray);
+ return iDbArray;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp121.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1272 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_CPosTp121.h"
+#include "FT_LandmarkConstants.h"
+#include "FT_CCategoryLandmarkSearchResult.h"
+
+// CONSTANTS
+// Used when searching for global categories (Global categories are dynamically appended in the test.
+// There are originally 26 local categories in the databases)
+//const TPosLmItemId KRestaurant = 27;
+const TPosLmItemId KBar = 28;
+//const TPosLmItemId KGas_Station = 29;
+const TPosLmItemId KHotel = 30;
+//const TPosLmItemId KShop = 31;
+const TPosLmItemId KSports_Ground = 33;
+const TPosLmItemId KGarage = 34;
+const TPosLmItemId KBus_Stop = 36;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp121::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::CloseTest()
+ {
+ delete iDatabases;
+ delete iMultiDbSearch;
+ iCategoryLandmarkSearchResults.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::InitTestL()
+ {
+ CLandmarkTestProcedureBase::InitTestL();
+
+ // PrepareDatabases
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+ iNrOfDatabases = 5;
+
+ iLog->Log(_L("Test Dbs Copied"));
+
+ // Initialize data members
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ iDatabases->Sort();
+ AssertTrueSecL((iDatabases->Count() == iNrOfDatabases), _L("Wrong number of databases"));
+ iMultiDbSearch = CPosLmMultiDbSearch::NewL(*iDatabases);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ iLog->Log(_L("Members ready"));
+
+ TInt err = KErrNone;
+ CPosLandmarkDatabase* database = NULL;
+ // Reset Global categories for all databases but EPOSLM_105.LDB and add the global category
+ // "Hotel" to the 5 first landmarks in the databases.
+ for (TInt i = 0; i < iNrOfDatabases - 1; i++) // Do not use global categories in the last db
+ {
+ database = CPosLandmarkDatabase::OpenL((*iDatabases)[i]);
+ CleanupStack::PushL(database);
+ if ( database->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( database->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(catMan);
+ TRAP( err, ExecuteAndDeleteLD( catMan->ResetGlobalCategoriesL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Reset cats failed"));
+ CleanupStack::PopAndDestroy(2, database);
+ }
+
+ iLog->Log(_L("Cats reset"));
+
+ // Initiallize iCategoryLandmarkSearchResults
+ AppendCategoryLandmarkSearchResultsL();
+
+ iLog->Log(_L("AppendCategoryLandmarkSearchResultsL done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::StartL()
+ {
+// 1. Search in various ways
+ iLog->Log(_L("Testing search with criteria read from LmDbSearchResult.txt synchronously, using CategoryName. Sort order: ascending"));
+ TestSearchL(iCategoryLandmarkSearchResults, ESynchronous, ESortAscending);
+
+ iLog->Log(_L("Testing search with criteria read from LmDbSearchResult.txt synchronously, using CategoryName. Sort order: descending"));
+ TestSearchL(iCategoryLandmarkSearchResults, ESynchronous, ESortDescending);
+
+ iLog->Log(_L("Testing search with criteria read from LmDbSearchResult.txt synchronously, using CategoryName. Sort order: none"));
+ TestSearchL(iCategoryLandmarkSearchResults, ESynchronous, ESortNone);
+
+ iLog->Log(_L("Testing search with criteria read from LmDbSearchResult.txt asynchronously, using CategoryName. Sort order: ascending"));
+ TestSearchL(iCategoryLandmarkSearchResults, EAsynchronous, ESortAscending);
+
+ iLog->Log(_L("Testing search with criteria read from LmDbSearchResult.txt asynchronously, using CategoryName. Sort order: descending"));
+ TestSearchL(iCategoryLandmarkSearchResults, EAsynchronous, ESortDescending);
+
+ iLog->Log(_L("Testing search with criteria read from LmDbSearchResult.txt asynchronously, using CategoryName. Sort order: none"));
+ TestSearchL(iCategoryLandmarkSearchResults, EAsynchronous, ESortNone);
+
+// 2. Search non-existing category
+ iLog->Log(_L("Searching fon nonexisting entries synchronously"));
+ SearchNonExistingL(ESynchronous);
+
+ iLog->Log(_L("Searching for nonexisting entries asynchronously"));
+ SearchNonExistingL(EAsynchronous);
+
+// 3. Test maximum number of matches
+ iLog->Log(_L("Searching with maximum number of results synchronously"));
+ TestMaximumNrOfMatchesL(iCategoryLandmarkSearchResults, ESynchronous);
+
+ iLog->Log(_L("Searching with maximum number of results asynchronously"));
+ TestMaximumNrOfMatchesL(iCategoryLandmarkSearchResults, EAsynchronous);
+
+// 4. Test cancel
+ iLog->Log(_L("Search and cancel the search"));
+ SearchAndCancelL();
+
+// 5. Search in global categories
+ // Add some more landmarks associated with global categories
+ AddLandmarksToGlobalCategoriesL();
+
+ iLog->Log(_L("SearchForLandmarksInGlobalCategoriesL asynchronously"));
+ SearchForLandmarksInGlobalCategoriesL(EAsynchronous);
+
+ iLog->Log(_L("SearchForLandmarksInGlobalCategoriesL synchronously"));
+ SearchForLandmarksInGlobalCategoriesL(ESynchronous);
+
+// 6. Test some leave codes
+ iLog->Log(_L("Check that StartLandmarkSearchL leaves with correct codes"));
+ TestLeaveCodesL();
+
+// 7. Test automatically reset of search attributes
+ iLog->Log(_L("Check that CPosLmCategoryCriteria resets other criteria when setting a new one"));
+ TestResetSearchAttributesL();
+
+// 8. Test searching by name is case insensitive
+ iLog->Log(_L("Testing case insensitive"));
+ TestCaseInsensitiveL();
+
+// 9. Test search for categories containing wildcards
+ iLog->Log(_L("Testing wild cards"));
+ TestWildCardsL();
+
+// 10. Test various combinations of refined search
+ // Modify database2
+ iLog->Log(_L("Testing refined search"));
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ idArray.Append(51);
+ idArray.Append(52);
+ idArray.Append(53);
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[2]);
+ CleanupStack::PushL(db);
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(14, idArray)); // 14 = TietoEnator kontor
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(17, idArray)); // 17 = BurgerKing
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(catMan->GetGlobalCategoryL(15000), idArray)); // 15000 = Entertainment
+ CleanupStack::PopAndDestroy(3, &idArray);
+
+ TestRefinedSearchL(ESynchronous);
+ TestRefinedSearchL(EAsynchronous);
+
+// 11. Test modify list of databases
+ iLog->Log(_L("Testing modifying list of databases"));
+ RIdArray expectedMatches;
+ CleanupClosePushL(expectedMatches);
+ expectedMatches.AppendL(iGasStationId1);
+ expectedMatches.AppendL(iGasStationId2);
+ expectedMatches.AppendL(51);
+ expectedMatches.AppendL(52);
+ expectedMatches.AppendL(53);
+
+ TestDatabaseListL(expectedMatches);
+
+// 12. Test on-the-fly
+ iLog->Log(_L("Testing searching on the fly"));
+ TestOnTheFlySearchL(expectedMatches);
+
+ CleanupStack::PopAndDestroy(&expectedMatches);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestSearchL(
+ const RPointerArray<CCategoryLandmarkSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode,
+ TTp121SortOrder aSortOrder)
+ {
+ // Test SetMaxNumOfMatches, first set to one and then back to unlimited
+ iMultiDbSearch->SetMaxNumOfMatches(1);
+ iMultiDbSearch->SetMaxNumOfMatches();
+
+ for(TInt i = 0; i < aSearchResults.Count(); i++)
+ {
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // Perform search by name
+ catSearchCriteria->SetCategoryNameL(aSearchResults[i]->CategoryName());
+ iLog->Log(aSearchResults[i]->CategoryName());
+
+ SearchL(catSearchCriteria, aExecutionMode, aSearchResults[i]->Redefined(), aSortOrder);
+
+ if (i != 28)
+ {
+ // Row 28 in xls-file contains an error. If fixed, TP21 starts to fail.
+ ValidateSearchResultsL(aSearchResults[i], iMultiDbSearch, aSortOrder);
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ (TUint)(aSearchResults[i]->SearchResult()).Count(),
+ catSearchCriteria->CategoryName());
+ }
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::SearchForLandmarksInGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::SearchForLandmarksInGlobalCategoriesL(
+ TExecutionMode aExecutionMode)
+ {
+ iLog->Log(_L("SearchForGlobalCategoriesL"));
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ RIdArray expectedIds;
+ CleanupClosePushL(expectedIds);
+
+ // Search for "Accommodation", should result in two matches
+ catSearchCriteria->SetGlobalCategory( KAccommodation );
+ SearchL(catSearchCriteria, aExecutionMode);
+ expectedIds.AppendL(iRestaurantId1);
+ expectedIds.AppendL(iRestaurantId2);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ expectedIds.Reset();
+
+ // Search for "Entertainment" id using the global category id should result in two matches
+
+ catSearchCriteria->SetGlobalCategory(KBusiness);
+ SearchL(catSearchCriteria, aExecutionMode);
+ expectedIds.AppendL(iGasStationId1);
+ expectedIds.AppendL(iGasStationId2);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ expectedIds.Reset();
+
+ // Search for "Accommodation" in the result from previous search
+ catSearchCriteria->SetGlobalCategory(KAccommodation);
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ expectedIds.AppendL(iGasStationId2);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ expectedIds.Reset();
+
+ // Search for a non existing global category in the result from previous search
+ // Nothing should be found
+ catSearchCriteria->SetCategoryNameL(_L("NonExistingGLobalCategory"));
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ expectedIds.Reset();
+
+ // Search for "Accommodation" using the globalcategory id
+ catSearchCriteria->SetGlobalCategory(3000);
+ SearchL(catSearchCriteria, aExecutionMode);
+ expectedIds.AppendL(iRestaurantId1);
+ expectedIds.AppendL(iRestaurantId2);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ expectedIds.Reset();
+
+ // Search for "Entertainment" using the globalcategory id from the result
+ // from previous search
+ catSearchCriteria->SetGlobalCategory(15000);
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ expectedIds.AppendL(iGasStationId2);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ expectedIds.Reset();
+
+
+ CleanupStack::PopAndDestroy(2, catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::AddLandmarksToGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::AddLandmarksToGlobalCategoriesL()
+ {
+ iLog->Log(_L("AddLandmarksToGlobalCategoriesL"));
+
+ // Add some new landmarks to the dbs, associate some with global categories
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[0]);
+ CleanupStack::PushL(db);
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("LandmarkName1"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription"));
+
+ /*************************************************************/
+ // Search for id maintained by database for the global category
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL( *db );
+ CleanupStack::PushL(catMan);
+ TPosLmItemId globCatId1 = catMan->GetGlobalCategoryL( KAccommodation );
+ TPosLmItemId globCatId2 = catMan->GetGlobalCategoryL( KEntertainment );
+
+ CPosLandmarkCategory* cat = catMan->ReadCategoryLC( globCatId1 );
+
+ CleanupStack::PopAndDestroy( 2 );
+ /*************************************************************/
+ lm->AddCategoryL( globCatId1 );
+ TPosLmItemId id = db->AddLandmarkL(*lm);
+ iRestaurantId1 = id;
+
+ CleanupStack::PopAndDestroy(2, db);
+
+ db = CPosLandmarkDatabase::OpenL((*iDatabases)[1]);
+ CleanupStack::PushL(db);
+ lm = CPosLandmark::NewLC();
+ db->AddLandmarkL(*lm); // Add one uncategorized to increase id in order to avoid equal ids between dbs.
+ lm->SetLandmarkNameL(_L("LandmarkName2"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription2"));
+ lm->AddCategoryL(KBus_Stop);
+ id = db->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(2, db);
+
+ db = CPosLandmarkDatabase::OpenL((*iDatabases)[2]);
+ CleanupStack::PushL(db);
+ lm = CPosLandmark::NewLC();
+ db->AddLandmarkL(*lm); // Add two uncategorized to increase id in order to avoid equal ids between dbs.
+ db->AddLandmarkL(*lm);
+ lm->SetLandmarkNameL(_L("LandmarkName3"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription3"));
+ lm->AddCategoryL( globCatId2 );
+ lm->AddCategoryL(KHotel);
+ //lm->AddCategoryL(KShop);
+ lm->AddCategoryL(KBar);
+ lm->AddCategoryL(KSports_Ground);
+ lm->AddCategoryL(KGarage);
+ id = db->AddLandmarkL(*lm);
+ iGarageId1 = id;
+ iGasStationId1 = id;
+ CleanupStack::PopAndDestroy(2, db);
+
+ db = CPosLandmarkDatabase::OpenL((*iDatabases)[3]);
+ CleanupStack::PushL(db);
+ lm = CPosLandmark::NewLC();
+ db->AddLandmarkL(*lm); // Add three uncategorized to increase id in order to avoid equal ids between dbs.
+ db->AddLandmarkL(*lm);
+ db->AddLandmarkL(*lm);
+ lm->SetLandmarkNameL(_L("LandmarkName4"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription4"));
+ lm->AddCategoryL(KBar);
+ lm->AddCategoryL( globCatId1 );
+ lm->AddCategoryL( globCatId2 );
+ lm->AddCategoryL(KHotel);
+ // lm->AddCategoryL(KShop);
+ lm->AddCategoryL(KBar);
+ lm->AddCategoryL(1);
+ lm->AddCategoryL(2);
+ lm->AddCategoryL(3);
+ id = db->AddLandmarkL(*lm);
+ iRestaurantId2 = id;
+ iGasStationId2 = id;
+ CleanupStack::PopAndDestroy(lm);
+
+ lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("LandmarkName5"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription5"));
+ lm->AddCategoryL(KBus_Stop);
+ db->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(2, db);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::SearchNonExistingL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::SearchNonExistingL(TExecutionMode aExecutionMode)
+ {
+ iLog->Log(_L("SearchNonExistingL"));
+
+ _LIT(KCategoryName, "NonExistingLandmark");
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ catSearchCriteria->SetCategoryNameL(KCategoryName);
+
+ SearchL(catSearchCriteria, aExecutionMode);
+ ValidateTotalNrOfMatchesL(iMultiDbSearch->TotalNumOfMatches(), 0, KCategoryName);
+ ValidateSearchResultsL(NULL, iMultiDbSearch);
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+
+ catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ TPosLmGlobalCategory nonExistingId = 56789;
+ catSearchCriteria->SetGlobalCategory(nonExistingId);
+
+ SearchL(catSearchCriteria, aExecutionMode);
+ ValidateTotalNrOfMatchesL(iMultiDbSearch->TotalNumOfMatches(), 0, KCategoryName);
+ ValidateSearchResultsL(NULL, iMultiDbSearch);
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestMaximumNrOfMatchesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestMaximumNrOfMatchesL(
+ const RPointerArray<CCategoryLandmarkSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ TInt idFromXls = 25; // Use 25 "Läkarna"
+ catSearchCriteria->SetCategoryNameL(aSearchResults[idFromXls]->CategoryName());
+ iLog->Log(aSearchResults[idFromXls]->CategoryName());
+
+ SearchL(catSearchCriteria, aExecutionMode, aSearchResults[idFromXls]->Redefined());
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ (TUint)(aSearchResults[idFromXls]->SearchResult()).Count(),
+ aSearchResults[idFromXls]->CategoryName());
+ ValidateSearchResultsL(aSearchResults[idFromXls], iMultiDbSearch);
+
+ // Set maximum number, first set to more than should be found here 13 in each db must be enough
+ iLog->Log(_L("Set to 13 * iNrOfDatabases = 65 matches"));
+ TUint maxMatches = 13;
+ iMultiDbSearch->SetMaxNumOfMatches(13);
+
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ (TUint)(aSearchResults[idFromXls]->SearchResult()).Count(),
+ aSearchResults[idFromXls]->CategoryName());
+ ValidateSearchResultsL(aSearchResults[idFromXls], iMultiDbSearch);
+
+ // Set maximum number here to 3 in each db
+ iLog->Log(_L("Set to 3 * iNrOfDatabases = 10 matches"));
+ maxMatches = 3;
+ const TInt KNrOfDbsWithMatches = 3;
+ iMultiDbSearch->SetMaxNumOfMatches(maxMatches);
+
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ maxMatches * KNrOfDbsWithMatches, // only three of the databases contain matches
+ aSearchResults[idFromXls]->CategoryName());
+ ValidateSearchResultsL(aSearchResults[idFromXls], iMultiDbSearch);
+
+ // Set maximum number here to 1 in each db
+ maxMatches = 1;
+ iLog->Log(_L("Set to 1 * iNrOfDatabases = 5 matches"));
+ iMultiDbSearch->SetMaxNumOfMatches(maxMatches);
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ maxMatches * KNrOfDbsWithMatches,
+ aSearchResults[idFromXls]->CategoryName());
+ ValidateSearchResultsL(aSearchResults[idFromXls], iMultiDbSearch);
+
+ // Set maximum number here to 2 in each db, however since search is refined only 3 matches should be returned
+ maxMatches = 2;
+ iLog->Log(_L("Set to 2 * iNrOfDatabases = 10 matches"));
+ iMultiDbSearch->SetMaxNumOfMatches(maxMatches);
+ SearchL(catSearchCriteria, aExecutionMode, ETrue);
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ 1 * KNrOfDbsWithMatches,
+ aSearchResults[idFromXls]->CategoryName());
+ ValidateSearchResultsL(aSearchResults[idFromXls], iMultiDbSearch);
+
+ // Same as above but no refined search is made. Should get 2 * 3 matches
+ iLog->Log(_L("Set to 2 * iNrOfDatabases = 10 matches"));
+ iMultiDbSearch->SetMaxNumOfMatches(maxMatches);
+ SearchL(catSearchCriteria, aExecutionMode);
+ ValidateTotalNrOfMatchesL(
+ iMultiDbSearch->TotalNumOfMatches(),
+ maxMatches * KNrOfDbsWithMatches,
+ aSearchResults[idFromXls]->CategoryName());
+ ValidateSearchResultsL(aSearchResults[idFromXls], iMultiDbSearch);
+
+ // Set back to unlimited
+ iMultiDbSearch->SetMaxNumOfMatches();
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestLeaveCodesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestLeaveCodesL()
+ {
+ iLog->Log(_L("TestLeaveCodesL"));
+
+ TPosLmSortPref sortPref(CPosLandmark::ECategoryInfo, TPosLmSortPref::EAscending);
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // Only ECategoryName is supported,all other leave with KErrNotSupported
+ TRAPD(err, iMultiDbSearch->StartLandmarkSearchL(*catSearchCriteria, sortPref));
+ AssertTrueSecL(err == KErrNotSupported, _L("Should have left with KErrNotSupported"));
+
+ // Only ECategoryName is supported,all other leave with KErrNotSupported
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::EDescription, TPosLmSortPref::EDescending);
+ TRAP(err, iMultiDbSearch->StartLandmarkSearchL(*catSearchCriteria, sortPref));
+ AssertTrueSecL(err == KErrNotSupported, _L("Should have left with KErrNotSupported"));
+
+ // Test search by local category id
+ catSearchCriteria->SetCategoryItemId(7);
+ TRAP(err, iMultiDbSearch->StartLandmarkSearchL(*catSearchCriteria));
+ AssertTrueSecL(err == KErrArgument, _L("Should have left with KErrArgument"));
+
+ // Test search by too long category name > 124 = KPosLmMaxCategoryNameLength
+ TBuf<KPosLmMaxCategoryNameLength + 4> name = _L("12345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678123456781234567812345678");
+ TRAP(err, catSearchCriteria->SetCategoryNameL(name));
+ AssertTrueSecL(err == KErrArgument, _L("Should have left with KErrArgument"));
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::SearchAndCancelL()
+ {
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ catSearchCriteria->SetCategoryNameL(iCategoryLandmarkSearchResults[KIndex]->CategoryName());
+
+ TReal32 progress(0);
+ while (progress < 1.0)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(
+ iMultiDbSearch->StartLandmarkSearchL(
+ *catSearchCriteria,
+ iCategoryLandmarkSearchResults[KIndex]->Redefined()),
+ progress);
+
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+ nrOfMatches += iter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(nrOfMatches == iMultiDbSearch->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators when cancelling"));
+
+ progress = progress + 0.09;
+ }
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp121::ValidateIdL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::ValidateIdL(TPosLmItemId aId, TInt aDbIndex)
+ {
+ TBool condition = EFalse;
+ switch (aDbIndex)
+ {
+ case 0:
+ // Db 0 contains landmarks with id = 1-20
+ condition = aId >= 1 && aId <= 20;
+ break;
+ case 1:
+ // Db 1 contains landmarks with id = 21-40
+ condition = aId >= 21 && aId <= 40;
+ break;
+ case 2:
+ // Db 2 contains landmarks with id = 41-60
+ condition = aId >= 41 && aId <= 60;
+ break;
+ case 3:
+ // Db 3 contains landmarks with id = 61-80
+ condition = aId >= 61 && aId <= 80;
+ break;
+ case 4:
+ // Db 4 contains landmarks with id = 81-105
+ condition = aId >= 81 && aId <= 105;
+ break;
+ }
+
+ AssertTrueSecL(condition, _L("Invalid match from database reported"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::ValidateTotalNrOfMatchesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::ValidateTotalNrOfMatchesL(
+ TUint aRetrievedNrOfMatches,
+ TUint aExpectedNrOfMatches,
+ const TDesC& aCategoryName)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+
+ if (aRetrievedNrOfMatches != aExpectedNrOfMatches)
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, aExpectedNrOfMatches);
+ iLog->Log(info);
+ info.Format(KReturned, aRetrievedNrOfMatches);
+ iLog->Log(info);
+ _LIT(KFormat, "Search criteria: %S");
+ info.Format(KFormat, &aCategoryName);
+ iLog->Log(info);
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::ValidateSearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::ValidateSearchResultsL(
+ CCategoryLandmarkSearchResult* aExpectedSearchResult,
+ CPosLmMultiDbSearch* aMultiDbSearcher,
+ TTp121SortOrder aSortOrder)
+ {
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results");
+
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[j]);
+ CleanupStack::PushL(db);
+ CPosLmItemIterator* iter = aMultiDbSearcher->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+
+ nrOfMatches += iter->NumOfItemsL();
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ ValidateIdL(id, j);
+ AssertTrueSecL(aExpectedSearchResult->FindSearchResult(id), KNotFoundErr, id);
+ CPosLandmark* lm1 = db->ReadLandmarkLC(id);
+ id = iter->NextL();
+ if (aSortOrder != ESortNone && id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm2 = db->ReadLandmarkLC(id);
+ TPtrC name1, name2;
+ lm1->GetLandmarkName(name1);
+ lm2->GetLandmarkName(name2);
+ if (aSortOrder == ESortAscending)
+ {
+ AssertTrueSecL(name1.CompareC(name2) <= 0, _L("Not sorted ascending as expected"));
+ }
+ else // aSortOrder == ESortDescending
+ {
+ AssertTrueSecL(name1.CompareC(name2) >= 0, _L("Not sorted descending as expected"));
+ }
+ CleanupStack::PopAndDestroy(lm2);
+ }
+ CleanupStack::PopAndDestroy(lm1);
+ }
+ CleanupStack::PopAndDestroy(2, db);
+ }
+ AssertTrueSecL(nrOfMatches == aMultiDbSearcher->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators"));
+ AssertTrueSecL(NrOfSearchErrors(aMultiDbSearcher) == 0, _L("Found search errors!"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::ValidateSearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::ValidateSearchResultsL(
+ const RIdArray& aExpectedIds,
+ CPosLmMultiDbSearch* aMultiDbSearcher,
+ TInt aNrOfExpectedErrors)
+ {
+ _LIT(KNotFoundErr, "Id %d not found in expected Lm search results");
+
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLmItemIterator* iter = aMultiDbSearcher->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+ nrOfMatches += iter->NumOfItemsL();
+
+ TUint nrOfSearchMatches = aMultiDbSearcher->NumOfMatches( j );
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(aExpectedIds.Find(id) != KErrNotFound, KNotFoundErr, id);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(nrOfMatches == aMultiDbSearcher->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators"));
+ AssertTrueSecL(nrOfMatches == aExpectedIds.Count(), _L("Total nr of matches doesn't match expected"));
+ AssertTrueSecL(NrOfSearchErrors(aMultiDbSearcher) == aNrOfExpectedErrors, _L("Found search errors!"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::SearchL(
+ CPosLmCategoryCriteria* aCatSearchCriteria,
+ TExecutionMode aExecutionMode,
+ TBool aRefinedSearch,
+ TTp121SortOrder aSortOrder)
+ {
+ TPosLmSortPref ascending(CPosLandmark::ELandmarkName);
+ TPosLmSortPref descending(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+
+ switch (aSortOrder)
+ {
+ case ESortNone:
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCatSearchCriteria, aRefinedSearch);
+ break;
+ case ESortAscending:
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCatSearchCriteria, ascending, aRefinedSearch);
+ break;
+ case ESortDescending:
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCatSearchCriteria, descending, aRefinedSearch);
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestResetSearchAttributesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestResetSearchAttributesL()
+ {
+ CPosLmCategoryCriteria* crit = CPosLmCategoryCriteria::NewLC();
+
+ // Verify default values
+ TPosLmItemId id = crit->CategoryItemId();
+ AssertTrueSecL(id == KPosLmNullItemId, _L("id != KPosLmNullItemId"));
+ TPosLmGlobalCategory globalId = crit->GlobalCategory();
+ AssertTrueSecL(globalId == KPosLmNullItemId, _L("globalId != KPosLmNullItemId"));
+ TPtrC name = crit->CategoryName();
+ AssertTrueSecL(name.Length() == 0, _L("name.Length() != 0"));
+
+ // Set id - other values should be default
+ const TPosLmItemId KId = 10;
+ crit->SetCategoryItemId(KId);
+ AssertTrueSecL(crit->CategoryItemId() == KId, _L("id != KId"));
+ AssertTrueSecL(crit->GlobalCategory()== KPosLmNullItemId, _L("globalId != KPosLmNullItemId"));
+ AssertTrueSecL(crit->CategoryName().Length() == 0, _L("name.Length() != 0"));
+
+ // Set name - other values should be default
+ _LIT(KName, "Category Name");
+ crit->SetCategoryNameL(KName);
+ AssertTrueSecL(crit->CategoryItemId() == KPosLmNullItemId, _L("id != KPosLmNullItemId"));
+ AssertTrueSecL(crit->GlobalCategory()== KPosLmNullItemId, _L("globalId != KPosLmNullItemId"));
+ AssertTrueSecL(crit->CategoryName() == KName, _L("name != KName"));
+
+ // Set global id - other values should be default
+ const TPosLmGlobalCategory KGlobalCategoryId = 20;
+ crit->SetGlobalCategory(KGlobalCategoryId);
+ AssertTrueSecL(crit->CategoryItemId() == KPosLmNullItemId, _L("id != KPosLmNullItemId"));
+ AssertTrueSecL(crit->GlobalCategory()== KGlobalCategoryId, _L("globalId != KGlobalCategoryId"));
+ AssertTrueSecL(crit->CategoryName().Length() == 0, _L("name.Length() != 0"));
+
+ // Set id - other values should be default
+ crit->SetCategoryItemId(KId);
+ AssertTrueSecL(crit->CategoryItemId() == KId, _L("id != KId"));
+ AssertTrueSecL(crit->GlobalCategory()== KPosLmNullItemId, _L("globalId != KPosLmNullItemId"));
+ AssertTrueSecL(crit->CategoryName().Length() == 0, _L("name.Length() != 0"));
+
+ CleanupStack::PopAndDestroy(crit);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestCaseInsensitiveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestCaseInsensitiveL()
+ {
+ CPosLmCategoryCriteria* crit = CPosLmCategoryCriteria::NewLC();
+ RIdArray expectedIds;
+ CleanupClosePushL(expectedIds);
+
+ // Search for "rEStaUrANt", should result in no match
+ TBuf<25> rest = _L("rEStaUrANt");
+ crit->SetCategoryNameL(rest);
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+
+ // Search for "RESTAURANT", should result in no match
+ rest.UpperCase();
+ crit->SetCategoryNameL(rest);
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+
+ // Search for "Restaurant", should result in two matches
+ HBufC* restaurant = GetGlobalCategoryFromResourceLC( KAccommodation );
+ crit->SetCategoryNameL(*restaurant);
+ SearchL(crit, ESynchronous);
+ expectedIds.AppendL(iRestaurantId1);
+ expectedIds.AppendL(iRestaurantId2);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ CleanupStack::PopAndDestroy( restaurant );
+
+ // Search for "mCDoNAldS", should result in no match
+ rest = _L("mCDoNAldS");
+ crit->SetCategoryNameL(rest);
+ SearchL(crit, EAsynchronous);
+ expectedIds.Reset();
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+
+ // Search for "MCDONALDS", should result in no match
+ rest.UpperCase();
+ crit->SetCategoryNameL(rest);
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+
+ // Search for "McDonalds", should result in two matches
+ rest = _L("McDonalds");
+ crit->SetCategoryNameL(rest);
+ SearchL(crit, EAsynchronous);
+ expectedIds.AppendL(7);
+ expectedIds.AppendL(27);
+ ValidateSearchResultsL(expectedIds, iMultiDbSearch);
+ CleanupStack::PopAndDestroy(2, crit);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestWildCardsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestWildCardsL()
+ {
+ CPosLmCategoryCriteria* crit = CPosLmCategoryCriteria::NewLC();
+ const TInt KNrOfArrays = 5;
+ RIdArray* idArrays[KNrOfArrays];
+ for (TInt i = 0; i < KNrOfArrays; i++)
+ {
+ RIdArray* array = new (ELeave) RIdArray;
+ CleanupStack::PushL(array);
+ CleanupClosePushL(*array);
+ idArrays[i] = array;
+ }
+ RIdArray empty;
+ CleanupClosePushL(empty);
+
+ // Search for "*", should result in no matches
+ crit->SetCategoryNameL(_L("*"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+ // Search for "?", should result in no matches
+ crit->SetCategoryNameL(_L("?"));
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// -------------- Setup databases --------------
+
+// Add a category to db0
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[0]);
+ CleanupStack::PushL(db);
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+
+ // Add category "*wild card"
+ _LIT(KCategory0, "*wild card");
+ category->SetCategoryNameL(KCategory0);
+ TPosLmItemId id0 = catMan->AddCategoryL(*category);
+ idArrays[0]->AppendL(1);
+ idArrays[0]->AppendL(2);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(id0, *idArrays[0]));
+ CleanupStack::PopAndDestroy(3, db);
+
+// Add categories to db2
+ db = CPosLandmarkDatabase::OpenL((*iDatabases)[2]);
+ CleanupStack::PushL(db);
+ catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+ category = CPosLandmarkCategory::NewLC();
+
+ // Add category "wi?d c?rd"
+ _LIT(KCategory1, "wi?d c?rd");
+ category->SetCategoryNameL(KCategory1);
+ TPosLmItemId id1 = catMan->AddCategoryL(*category);
+ idArrays[1]->AppendL(44);
+ idArrays[1]->AppendL(45);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(id1, *idArrays[1]));
+
+ // Add category "***"
+ _LIT(KCategory2, "***");
+ category->SetCategoryNameL(KCategory2);
+ TPosLmItemId id2 = catMan->AddCategoryL(*category);
+ idArrays[2]->AppendL(44);
+ idArrays[2]->AppendL(47);
+ idArrays[2]->AppendL(55);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(id2, *idArrays[2]));
+ CleanupStack::PopAndDestroy(3, db);
+
+// Add categories to db4
+ db = CPosLandmarkDatabase::OpenL((*iDatabases)[4]);
+ CleanupStack::PushL(db);
+ catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+ category = CPosLandmarkCategory::NewLC();
+
+ // Add category "?"
+ _LIT(KCategory3, "?");
+ category->SetCategoryNameL(KCategory3);
+ TPosLmItemId id3 = catMan->AddCategoryL(*category);
+ idArrays[3]->AppendL(86);
+ idArrays[3]->AppendL(81);
+ idArrays[3]->AppendL(104);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(id3, *idArrays[3]));
+
+ // Add category "wi?d ca*"
+ _LIT(KCategory4, "wi?d ca*");
+ category->SetCategoryNameL(KCategory4);
+ TPosLmItemId id4 = catMan->AddCategoryL(*category);
+ idArrays[4]->AppendL(101);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(id4, *idArrays[4]));
+ CleanupStack::PopAndDestroy(3, db);
+
+// -------------- Search and verify --------------
+
+// Search for "*" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("*"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// Search for "*wild*" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("*wild*"));
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// Search for "w?ld ca?d" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("w?ld ca?d"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// Search for "wi?d c?rd" and verify results - two matches expected
+ crit->SetCategoryNameL(KCategory1);
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(*idArrays[1], iMultiDbSearch);
+
+// Search for "****" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("****"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// Search for "***" and verify results - three matches expected
+ crit->SetCategoryNameL(KCategory2);
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(*idArrays[2], iMultiDbSearch);
+
+// Search for "**" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("**"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// Search for "?" and verify results - two matches expected
+ crit->SetCategoryNameL(KCategory3);
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(*idArrays[3], iMultiDbSearch);
+
+// Search for "?*" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("?*"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+// Search for "wi?d ca*" and verify results - one match expected
+ crit->SetCategoryNameL(KCategory4);
+ SearchL(crit, EAsynchronous);
+ ValidateSearchResultsL(*idArrays[4], iMultiDbSearch);
+
+// Search for "wi?d card" and verify results - no matches expected
+ crit->SetCategoryNameL(_L("wi?d card"));
+ SearchL(crit, ESynchronous);
+ ValidateSearchResultsL(empty, iMultiDbSearch);
+
+ CleanupStack::PopAndDestroy(&empty);
+ CleanupStack::PopAndDestroy(2 * KNrOfArrays);
+ CleanupStack::PopAndDestroy(crit);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestRefinedSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestRefinedSearchL(TExecutionMode aExecutionMode)
+ {
+ CPosLmCategoryCriteria* crit = CPosLmCategoryCriteria::NewLC();
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+
+ // Make a search for local category name
+ crit->SetCategoryNameL(_L("TietoEnator kontor")); // lm 7,27,51-61 will be found according to xls-sheet and code above
+ idArray.AppendL(7);
+ idArray.AppendL(27);
+ for (TInt i = 51; i <= 61; i++)
+ {
+ idArray.AppendL(i);
+ }
+ SearchL(crit, aExecutionMode);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ // Refine the previous search by specifying another local category name
+ crit->SetCategoryNameL(_L("BurgerKing")); // lm 7,27,51-54 will be found according to xls-sheet and the code above
+ for (TInt i = idArray.Count() - 1; i >= 5; i--)
+ {
+ idArray.Remove(i);
+ }
+ SearchL(crit, aExecutionMode, ETrue);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ // Repeat previous step but set max nr of matches to 1 - only 7,27,51 will be found
+ iMultiDbSearch->SetMaxNumOfMatches(1);
+ for (TInt i = idArray.Count() - 1; i >= 3; i--)
+ {
+ idArray.Remove(i);
+ }
+ SearchL(crit, aExecutionMode, ETrue);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ // Increase max nr of matches to 10 => all qualified lms will be found
+ crit->SetCategoryNameL(_L("TietoEnator kontor"));
+ iMultiDbSearch->SetMaxNumOfMatches(10);
+ for (TInt i = 52; i <= 61; i++)
+ {
+ idArray.AppendL(i);
+ }
+ SearchL(crit, aExecutionMode);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ // Refine search with the global category gas station by searching by id
+ crit->SetGlobalCategory(15000); // Entertainment
+ idArray.Reset();
+ for (TInt i = 51; i <= 53; i++)
+ {
+ idArray.AppendL(i);
+ }
+ SearchL(crit, aExecutionMode, ETrue);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ // Refine search with the local category Pizzeria by searching by name
+ crit->SetCategoryNameL(_L("Pizzeria")); // only lm 51 should be found
+ idArray.Remove(1);
+ idArray.Remove(1);
+ SearchL(crit, aExecutionMode, ETrue);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ // Refine search with a global id that does not exist
+ crit->SetGlobalCategory(10000); // no lms should be found
+ idArray.Remove(0);
+ SearchL(crit, aExecutionMode, ETrue);
+ ValidateSearchResultsL(idArray, iMultiDbSearch);
+
+ iMultiDbSearch->SetMaxNumOfMatches();
+ CleanupStack::PopAndDestroy(2, crit);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestDatabaseListL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestDatabaseListL(const RIdArray& aExpectedMatches)
+ {
+ iLog->Log(_L("TestDatabaseListL"));
+ _LIT(KNonExistingDb, "Jimmi.ldb");
+ // Append an invalid(missing extension) database and search
+
+ iDatabases->AppendL(_L("Jimmi"));
+ iNrOfDatabases++;
+ iMultiDbSearch->SetDatabasesToSearchL(*iDatabases);
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ catSearchCriteria->SetGlobalCategory(15000); // Entertainment
+ SearchL(catSearchCriteria, ESynchronous);
+
+ ValidateSearchResultsL(aExpectedMatches, iMultiDbSearch, 1); // one error expected
+ CPosLmMultiDbSearch::TSearchError searchError;
+ iMultiDbSearch->GetSearchError(0, searchError);
+ AssertTrueSecL(searchError.iDatabaseIndex == 5, _L("Error in wrong database"));
+ AssertTrueSecL(searchError.iErrorCode == KErrArgument, _L("Wrong error in database, %d"), searchError.iErrorCode);
+
+ // Remove non-existing database + another one and search - no errors should occur
+ TPtrC dbName = (*iDatabases)[iDatabases->Count() - 2];
+ iDatabases->Delete(iDatabases->Count() - 2, 2);
+ iNrOfDatabases = iNrOfDatabases - 2;
+ iMultiDbSearch->SetDatabasesToSearchL(*iDatabases);
+
+ SearchL(catSearchCriteria, EAsynchronous);
+
+ ValidateSearchResultsL(aExpectedMatches, iMultiDbSearch);
+
+ iDatabases->AppendL(KDb105);
+ iNrOfDatabases++;
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+
+ // Verify that NewL for CPosLmMultiDbSearch is correct
+ iDatabases->AppendL(KNonExistingDb);
+ iNrOfDatabases++;
+ CPosLmMultiDbSearch* multiDb = CPosLmMultiDbSearch::NewL(*iDatabases);
+ CleanupStack::PushL(multiDb);
+
+ catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ catSearchCriteria->SetGlobalCategory(15000); // Entertainment
+
+ iOperation = multiDb->StartLandmarkSearchL(*catSearchCriteria, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ ValidateSearchResultsL(aExpectedMatches, multiDb, 1); // one error expected
+ multiDb->GetSearchError(0, searchError);
+ AssertTrueSecL(searchError.iDatabaseIndex == 5, _L("Error in wrong database"));
+ AssertTrueSecL(searchError.iErrorCode == KErrNotFound, _L("Wrong error in database, %d"), searchError.iErrorCode);
+
+ // Remove added db from list
+ TInt pos = 0;
+
+ TInt res = iDatabases->Find(KNonExistingDb, pos);
+ if (res == KErrNone) iDatabases->Delete(pos);
+ iNrOfDatabases--;
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ CleanupStack::PopAndDestroy(multiDb);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::TestOnTheFlySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp121::TestOnTheFlySearchL(const RIdArray& aExpectedMatches)
+ {
+ iMultiDbSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ catSearchCriteria->SetGlobalCategory(15000); // Entertainment
+ COnTheFlyTester* onTheFlyTester = COnTheFlyTester::NewLC();
+ onTheFlyTester->StartSearchCampaignL(iMultiDbSearch, aExpectedMatches, catSearchCriteria);
+ TInt result = onTheFlyTester->Err();
+ if (result != KErrNone)
+ {
+ TPtrC msg;
+ onTheFlyTester->GetErrMsg(msg);
+ iLog->Log(msg);
+ User::Leave(result);
+ }
+ CleanupStack::PopAndDestroy(2, catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp121::NrOfSearchErrors
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp121::NrOfSearchErrors(CPosLmMultiDbSearch* aMultiDbSearcher)
+ {
+ TInt nrOfSearchErrors = aMultiDbSearcher->NumOfSearchErrors();
+ if (nrOfSearchErrors != 0)
+ {
+ for (TInt i = 0; i < nrOfSearchErrors; i++)
+ {
+ CPosLmMultiDbSearch::TSearchError error;
+ aMultiDbSearcher->GetSearchError(i, error);
+ TBuf<100> msg;
+ msg.Format(_L("Found error %d in database %d"), error.iErrorCode, error.iDatabaseIndex);
+ iLog->Log(msg);
+ }
+ }
+ return nrOfSearchErrors;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp122.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1620 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_CPosTp122.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+
+#include <e32math.h>
+
+// CONSTANTS
+const TInt KMaxFieldLength = 80;
+const TInt KDistanceFieldLength = 24;
+const TInt KMaxNearestLineLength = 1024;
+
+//const TInt KNrOfDatabases = 5;
+
+_LIT(KLMDB1, "NEARESTLMDB_1.LDB");
+_LIT(KLMDB2, "NEARESTLMDB_2.LDB");
+_LIT(KLMDB3, "NEARESTLMDB_3.LDB");
+_LIT(KLMDB4, "NEARESTLMDB_4.LDB");
+_LIT(KLMDB5, "NEARESTLMDB_5.LDB");
+
+_LIT(KNEARESTLMDB, "eposlmnearestsearch.ldb");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp122::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iDatabases;
+
+ if (iMultiDbSearch) iMultiDbSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+
+ delete iMultiDbSearch;
+ iNearestSearchResults.ResetAndDestroy();
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("Error when RemoveAllLmDatabasesL"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::InitTestL()
+ {
+ CLandmarkTestProcedureBase::InitTestL();
+
+ iLog->Log(_L("InitTestL"));
+ RemoveAllLmDatabasesL();
+
+ // PrepareDatabases
+ PrepareDatabasesL();
+
+ SetupLimits();
+
+ iNrOfDatabases = 5;
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ iDatabases->Sort(); // Not really necessary...
+ AssertTrueSecL((iDatabases->Count() == iNrOfDatabases), _L("Wrong number of databases"));
+
+ iLog->Log( _L("List sorted"));
+
+ iMultiDbSearch = CPosLmMultiDbSearch::NewL(*iDatabases);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ iLog->Log( _L("multi search"));
+
+ // Copy db file, used by CNearestSearchResult
+ CopyTestDbFileL(KNEARESTLMDB);
+
+ iLog->Log( _L("copied"));
+
+ // Initiallize iNearestSearchResults
+ AppendNearestSearchResultsL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::SetupLimits()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp122::SetupLimits()
+ {
+ iIdDb1Min = 1;
+ iIdDb1Max = 50;
+
+ iIdDb2Min = 51;
+ iIdDb2Max = 100;
+
+ iIdDb3Min = 101;
+ iIdDb3Max = 150;
+
+ iIdDb4Min = 151;
+ iIdDb4Max = 200;
+
+ iIdDb5Min = 201;
+ iIdDb5Max = 254;
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::AppendNearestSearchResultsL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp122::AppendNearestSearchResultsL()
+ {
+ iNearestSearchResults.ResetAndDestroy();
+
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\lmDbNearestSearchResult.txt");
+
+ RFile file;
+ CleanupClosePushL(file);
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+
+ TInt row=0;
+ TBuf<KMaxNearestLineLength> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ ++row;
+
+ //iLog->Log(_L("Nearest search result in progress"));
+ CNearestSearchResult* searchResult = CNearestSearchResult::NewL(line, row, iFileSession);
+ CleanupStack::PushL(searchResult);
+
+ User::LeaveIfError(iNearestSearchResults.Append(searchResult));
+ CleanupStack::Pop(searchResult);
+ //iLog->Log(_L("Nearest search result added"));
+ }
+ }
+ CleanupStack::PopAndDestroy(&file);
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::PrepareDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::PrepareDatabasesL()
+ {
+ iLog->Log(_L("PrepareDatabasesL"));
+ // Copy eposlmnearestsearch.ldb into five dbs
+ _LIT(KDbFile, "c:\\system\\test\\testdata\\eposlmnearestsearch.ldb");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<100> path;
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB1);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB2);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB3);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB4);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB5);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ // Now adjust dbs according to following:
+ // First db-> Keep landmarks 1-50
+ // Second db-> Keep landmarks 51-100
+ // Third db-> Keep landmarks 101-150
+ // Fourth db-> Keep landmarks 151-200
+ // Fifth db-> Keep landmarks 201-254
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KLMDB1);
+ CleanupStack::PushL(lmd);
+
+ TBool debug = EFalse;
+ TInt index=0;
+ TInt max=254;
+ for (index=50;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB2);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<50;index++) array.Append(index+1);
+ for (index=100;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB3);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<100;index++) array.Append(index+1);
+ for (index=150;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB4);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<150;index++) array.Append(index+1);
+ for (index=200;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB5);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<200;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ array.Reset();
+ if (debug) PrintLm(lmd);
+
+ CleanupStack::PopAndDestroy(lmd);
+
+ CleanupStack::PopAndDestroy(&array);
+ iLog->Log(_L("PrepareDatabasesL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::PrintLm
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::PrintLm(CPosLandmarkDatabase* db)
+ {
+ CPosLmItemIterator* iter = db->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+ iLog->Log(_L("PrintLm"));
+ //for (TInt i=0;i< iter->Count();i++)
+ TPosLmItemId id = iter->NextL();
+ TBuf<100> buf;
+
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = db->ReadLandmarkLC(id);
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ iLog->Log(_L("Found LM '%S' "), &name);
+ TInt idde = lm->LandmarkId();
+
+ id = iter->NextL();
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ iLog->Log(_L("PrintLm Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::StartL()
+ {
+ TInt KNrOfSearch = 0;
+ iErrorsFound= KErrNone;
+
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiDbSearch->SetDisplayData(*iDisplayData);
+
+ iLog->Log(_L(">>>>>Search Synchronous with ascending sort order"));
+ StartSearchOperationL(iNearestSearchResults, ESynchronous, ESortAscending, KNrOfSearch);
+
+ iLog->Log(_L(">>>>>Search Synchronous with descending sort order"));
+ StartSearchOperationL(iNearestSearchResults, ESynchronous, ESortDescending, KNrOfSearch);
+
+ iLog->Log(_L(">>>>>Search Asynchronous with ascending sort order"));
+ StartSearchOperationL(iNearestSearchResults, EAsynchronous, ESortAscending, KNrOfSearch);
+
+ iLog->Log(_L(">>>>>Search Asynchronous with descending sort order"));
+ StartSearchOperationL(iNearestSearchResults, EAsynchronous, ESortDescending, KNrOfSearch);
+
+ iLog->Log(_L(">>>>>Search Synchronous with no sort order (therefore sorted by distance)"));
+ StartSearchOperationL(iNearestSearchResults, ESynchronous, ESortNone);
+
+ iLog->Log(_L(">>>>>Search Asynchronous with no sort order (therefore sorted by distance)"));
+ StartSearchOperationL(iNearestSearchResults, EAsynchronous, ESortNone);
+
+ iLog->Log(_L(">>>>>Search Synchronous with no sort order, partial (therefore sorted by distance)"));
+ iPartial = ETrue;
+ StartSearchOperationL(iNearestSearchResults, ESynchronous, ESortNone);
+ iPartial = EFalse;
+ iDisplayData->UnsetPartialReadParameters();
+
+ iLog->Log(_L("Test with maximum searches"));
+ TestMaximumNrOfMatchesL(iNearestSearchResults, EAsynchronous, ESortNone);
+ TestMaximumNrOfMatchesL(iNearestSearchResults, ESynchronous, ESortNone);
+ TestMaximumNrOfMatchesL(iNearestSearchResults, EAsynchronous, ESortDescending);
+ TestMaximumNrOfMatchesL(iNearestSearchResults, EAsynchronous, ESortAscending);
+
+ iLog->Log(_L("TestOnTheFlySearchL"));
+ TestOnTheFlySearchL(iNearestSearchResults);
+
+ // Since TestOnTheFlySearchL is changing displadata
+ iMultiDbSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiDbSearch->SetDisplayData(*iDisplayData);
+
+ iLog->Log(_L("Test Leave codes for nearest search"));
+ TestLeaveCodesL();
+
+ // TC Step 6 "A new array of databases is set to be searched"
+ iLog->Log(_L("Test refined search, test different search dbs"));
+ DoLastTestPartL(iNearestSearchResults);
+
+ iLog->Log(_L("Testing cancel immediately"));
+ CancelTestL(iNearestSearchResults, EFalse);
+
+ // XXX Hangs client
+ iLog->Log(_L("Testing cancel in callback"));
+ CancelTestL(iNearestSearchResults, ETrue);
+
+ if (iErrorsFound != KErrNone)
+ {
+
+ iLog->Log(_L("Errors found in TP122"));
+ User::Leave(-1);
+ }
+ else iLog->Log(_L("TP122 successfully completed"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::StartSearchOperationL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::StartSearchOperationL(
+ const RPointerArray<CNearestSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode,
+ TTp122SortOrder aSortOrder,
+ TInt aNrOfSearches)
+ {
+
+ // Test SetMaxNumOfMatches, first set to one and then back to unlimited
+ iMultiDbSearch->SetMaxNumOfMatches(1);
+ iMultiDbSearch->SetMaxNumOfMatches();
+
+ TBuf<100> buf;
+ TInt maxSearches = 0;
+ if (aNrOfSearches == 0) maxSearches = aSearchResults.Count();
+ else maxSearches = aNrOfSearches;
+
+ for(TInt i=0; i<maxSearches; i++)
+ {
+ TCoordinate coord(aSearchResults[i]->iLatitude, aSearchResults[i]->iLongitude);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, aSearchResults[i]->iUseCoverageRadius);
+ nearestCriteria->SetMaxDistance(aSearchResults[i]->iMaxDistance);
+ buf.Format(_L("StartSearchOperationL: Searching for Lat %f Long %f"), aSearchResults[i]->iLatitude, aSearchResults[i]->iLongitude);
+ //iLog->Log(buf);
+
+ if (aSearchResults[i]->iMaxSearchResult > 0)
+ {
+ // Does not work anymore
+ //iMultiDbSearch->SetMaxNumOfMatches(aSearchResults[i]->iMaxSearchResult);
+ }
+ else
+ {
+ iMultiDbSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+ }
+
+ if (iNearestSearchResults[i]->Redefined() && i > 0)
+ {
+ // Remove distances that are not present in the previous
+
+ for (TInt j=0; j<iNearestSearchResults[i]->iDistances.Count(); j++)
+ {
+ TBool found = EFalse;
+ TInt id = 0;
+ TPosLmItemId idde;
+
+ id = j;
+ idde = iNearestSearchResults[i]->iDistances[j].Id();
+
+ TBuf<100> debug;
+ debug.Format(_L("Looking for id %d or id: %d "), idde, id);
+ //iLog->Log(debug);
+
+ for (TInt p=0;p<iNearestSearchResults[i-1]->iDistances.Count();p++)
+ {
+
+ if (iNearestSearchResults[i]->iDistances[j].Id() == iNearestSearchResults[i-1]->iDistances[p].Id())
+ {
+ found = ETrue;
+ TBuf<100> buf;
+ buf.Format(_L("Found id %d or id: %d "), idde, id);
+ //iLog->Log(buf);
+ }
+ }
+ if (!found)
+ {
+ // Remove since not found, only keep ids that was found in previous search
+ TBuf<100> buf;
+ buf.Format(_L("Removing lm Id %d from index %d"), idde, id);
+ //iLog->Log(buf);
+ iNearestSearchResults[i]->iDistances.Remove(id);
+ //iLog->Log(_L("Removing Done"));
+ j--;
+ }
+ //iLog->Log(_L("***********"));
+ }
+ }
+
+ TTime iStart;
+ TTime iStop;
+
+ iStart.UniversalTime();
+ SearchL(nearestCriteria, aExecutionMode, aSearchResults[i]->Redefined(), aSortOrder);
+ iStop.UniversalTime();
+
+ TInt64 msec = (iStop.Int64() - iStart.Int64())/1000;
+ buf.Format(_L("Search op nr %d took %d msec"), i, msec);
+ iLog->Log(buf);
+
+ AssertTrueSecL(NrOfSearchErrors(iMultiDbSearch) == 0, _L("Found search errors!"));
+
+ // Add check of result here
+ CheckSearchResultL(*aSearchResults[i], aSortOrder);
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ iDisplayData->Reset();
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::SearchL(
+ CPosLmNearestCriteria* aNearestSearchCriteria,
+ TExecutionMode aExecutionMode,
+ TBool aRefinedSearch,
+ TTp122SortOrder aSortOrder)
+ {
+ if (iPartial)
+ {
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+ reqFields.Append(EPositionFieldStreet);
+ reqFields.Append(EPositionFieldBuildingFloor);
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+ partialParam->SetRequestedPositionFields(reqFields);
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+ CleanupStack::PopAndDestroy(2);
+ }
+
+ switch (aSortOrder)
+ {
+ case ESortNone:
+ {
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aNearestSearchCriteria, aRefinedSearch);
+ break;
+ }
+ case ESortAscending:
+ {
+ TPosLmSortPref ascending(CPosLandmark::ELandmarkName);
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aNearestSearchCriteria, ascending, aRefinedSearch);
+ break;
+ }
+ case ESortDescending:
+ {
+ TPosLmSortPref descending(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aNearestSearchCriteria, descending, aRefinedSearch);
+ break;
+ }
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::TestMaximumNrOfMatchesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::TestMaximumNrOfMatchesL(
+ const RPointerArray<CNearestSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode, TTp122SortOrder aSortOrder)
+ {
+ iLog->Log(_L("TestMaximumNrOfMatchesL"));
+ for (TInt j=0;j<aSearchResults.Count();j++)
+ {
+ TInt KIndex = j;
+ TCoordinate coord(aSearchResults[KIndex]->iLatitude, aSearchResults[KIndex]->iLongitude);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, aSearchResults[KIndex]->iUseCoverageRadius);
+ nearestCriteria->SetMaxDistance(aSearchResults[KIndex]->iMaxDistance);
+
+ for (TInt i=1;i<10;i++)
+ {
+ // Test with different maximum nr of matches
+ iMultiDbSearch->SetMaxNumOfMatches(i*2);
+
+ TBuf<100> buf;
+ SearchL(nearestCriteria, aExecutionMode, aSearchResults[KIndex]->Redefined(), aSortOrder);
+
+
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+ nrOfMatches += iter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ AssertTrueSecL(nrOfMatches <= i*2 * iNrOfDatabases, _L("Total nr of matches are bigger than the set value of maximum nr of matches"));
+ AssertTrueSecL(nrOfMatches == iMultiDbSearch->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators"));
+ AssertTrueSecL(nrOfMatches == iDisplayData->Count(), _L("Total nr of matches doesn't match sum of matches in displaydata"));
+ }
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::TestLeaveCodesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::TestLeaveCodesL()
+ {
+ iLog->Log(_L("TestLeaveCodesL"));
+
+ TPosLmSortPref sortPref(CPosLandmark::ECategoryInfo, TPosLmSortPref::EAscending);
+ TCoordinate coord(25, 45);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord);
+
+ // Only ECategoryName is supported,all other leave with KErrNotSupported
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::EDescription, TPosLmSortPref::EDescending);
+ TRAPD(err, iMultiDbSearch->StartLandmarkSearchL(*nearestCriteria, sortPref));
+ AssertTrueSecL(err == KErrNotSupported, _L("Should have left with KErrNotSupported"));
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::CancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::CancelTestL(const RPointerArray<CNearestSearchResult>& aSearchResults, TBool aCancelInCallback)
+ {
+ //Test search with one criteria
+ const TInt KIndex=0;
+
+ TCoordinate coord(aSearchResults[KIndex]->iLatitude, aSearchResults[KIndex]->iLongitude);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, aSearchResults[KIndex]->iUseCoverageRadius);
+ nearestCriteria->SetMaxDistance(aSearchResults[KIndex]->iMaxDistance);
+
+ // Cancel in callback, cancel in every progress step phase
+ // when progress has increased with 0.09
+ if (aCancelInCallback)
+ {
+ TReal32 progress(0);
+ while (progress < 1.0)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(
+ iMultiDbSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ aSearchResults[KIndex]->Redefined()),
+ progress);
+
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+ nrOfMatches += iter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(nrOfMatches == iMultiDbSearch->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators when cancelling"));
+ //AssertTrueSecL(iMultiDbSearch->TotalNumOfMatches() == iDisplayData->Count(),_L("Wrong number of matches after cancel"));
+
+ progress = progress + 0.09;
+ }
+ }
+ else
+ {
+ // Cancel immediately
+ RunAsyncOperationAndCancelLD(
+ iMultiDbSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ aSearchResults[KIndex]->Redefined()));
+
+ AssertTrueSecL(iMultiDbSearch->TotalNumOfMatches() == iDisplayData->Count(),_L("Wrong number of matches after cancel"));
+ }
+
+ if (iMultiDbSearch->NumOfSearchErrors() != 0) iLog->Log(_L("Errors after search"));
+ for (TInt i=0;i<iMultiDbSearch->NumOfSearchErrors(); i++)
+ {
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ iMultiDbSearch->GetSearchError(i, searchErr);
+ TBuf<150> buf;
+ buf.Format(_L("ErrorCode %d returned from db nr %d"),searchErr.iErrorCode, searchErr.iDatabaseIndex);
+ iLog->Log(buf);
+ }
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::DoLastTestPartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::DoLastTestPartL(const RPointerArray<CNearestSearchResult>& aSearchResults)
+ {
+ TInt KIndex = 0;
+ TCoordinate coord(aSearchResults[KIndex]->iLatitude, aSearchResults[KIndex]->iLongitude);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, aSearchResults[KIndex]->iUseCoverageRadius);
+ nearestCriteria->SetMaxDistance(aSearchResults[KIndex]->iMaxDistance);
+
+ TBuf<100> buf;
+ iLog->Log(_L("Search in all dbs"));
+ SearchL(nearestCriteria, ESynchronous, aSearchResults[KIndex]->Redefined(), ESortNone);
+
+ // Check displaydata/iterator here
+ CheckDbL();
+
+ HBufC16* db4 = (*iDatabases)[4].AllocL();
+ HBufC16* db2 = (*iDatabases)[2].AllocL();
+
+ // Remove two dbs from uri list
+ iDatabases->Delete(4);
+ iDatabases->Delete(2);
+ iNrOfDatabases-=2;
+
+ iMultiDbSearch->SetDatabasesToSearchL(*iDatabases);
+
+ iIdDb3Min = 151;
+ iIdDb3Max = 200;
+
+ iLog->Log(_L("Search in all dbs but db2 and db4"));
+ SearchL(nearestCriteria, ESynchronous, aSearchResults[KIndex]->Redefined(), ESortNone);
+ CheckDbL();
+
+ // Now search in all dbs but db nr 2
+ buf.Zero();
+ buf.Format(_L("%S"), db4);
+ iDatabases->AppendL(buf);
+ iNrOfDatabases++;
+ iDatabases->Sort();
+
+ iMultiDbSearch->SetDatabasesToSearchL(*iDatabases);
+
+ // Add a new landmark to db nr 4, nr 2 in the list
+ buf.Zero();
+ buf.Format(_L("Open Database: %S"), db4);
+ iLog->Log(buf);
+
+ buf.Zero();
+ buf.Format(_L("%S"), db4);
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(buf);
+ if (db->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(db->InitializeL());
+ }
+
+ CleanupStack::PushL(db);
+ CPosLandmark* lm1 = CPosLandmark::NewLC();
+ lm1->SetLandmarkNameL(_L("TP122_Landmark"));
+ lm1->SetLandmarkDescriptionL(_L("Some Description"));
+ TCoordinate newCoord(aSearchResults[KIndex]->iLatitude-5, aSearchResults[KIndex]->iLongitude+1);
+
+ TLocality loc(newCoord, 0.5);
+ lm1->SetPositionL(loc);
+ iLog->Log(_L("Add new Landmark to db nr 4"));
+ TPosLmItemId newLmId = db->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+ CleanupStack::PopAndDestroy(db);
+
+ iLog->Log(_L("Search in all dbs but db2"));
+ //Refine search. new landmark should not be included
+ SearchL(nearestCriteria, ESynchronous, ETrue, ESortNone);
+
+ SetupLimits();
+ iIdDb3Min = 151;
+ iIdDb3Max = 200;
+ iIdDb4Min = 201;
+ iIdDb4Max = 254;
+
+ CheckDbL();
+
+ TInt itemId = iDisplayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(itemId);
+ TInt lmId = item.Landmark().LandmarkId();
+ TPtrC name;
+ item.Landmark().GetLandmarkName(name);
+ // Verify that the landmark is not found
+ if (name.CompareC(_L("TP122_Landmark")) == 0) {
+ iLog->Log(_L("Added landmarks should not be found in refined search"));
+ User::Leave(-1);
+
+ }
+ itemId = iDisplayData->NewItemIndex();
+ }
+
+ // Add all dbs to the search list
+ SetupLimits();
+
+ // Add the last db to the search list
+ buf.Zero();
+ buf.Format(_L("%S"), db2);
+ iDatabases->AppendL(buf);
+ iNrOfDatabases++;
+ iDatabases->Sort();
+
+ iMultiDbSearch->SetDatabasesToSearchL(*iDatabases);
+ iLog->Log(_L("Search in all dbs"));
+ //Refine search. new landmark should not be included
+ SearchL(nearestCriteria, ESynchronous, ETrue, ESortNone);
+ CheckDbL();
+ itemId = iDisplayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(itemId);
+ TInt lmId = item.Landmark().LandmarkId();
+ TPtrC name;
+ item.Landmark().GetLandmarkName(name);
+ // Verify that the landmark is not found
+ if (name.CompareC(_L("TP122_Landmark")) == 0) {
+
+ iLog->Log(_L("Added landmarks should not be found in refined search"));
+ User::Leave(-1);
+
+ }
+
+ itemId = iDisplayData->NewItemIndex();
+ }
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+
+ // Correct limits if more testing after this part
+ SetupLimits();
+ delete db4;
+ delete db2;
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::CheckDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::CheckDbL()
+ {
+ iLog->Log(_L("CheckDbL"));
+ CDesCArray* dbToSearch = iMultiDbSearch->DatabasesToSearchL();
+ CleanupStack::PushL(dbToSearch);
+ TBuf<100> buf;
+
+ for (TInt i=0;i<dbToSearch->Count();i++)
+ {
+ buf.Zero();
+ buf.Format(_L("DB nr %d "), i);
+
+ buf.Append((*dbToSearch)[i]);
+ iLog->Log(buf);
+ }
+
+ if (iMultiDbSearch->NumOfDatabasesToSearch() != dbToSearch->Count()) iLog->Log(_L("Differ..."));
+
+ CleanupStack::PopAndDestroy(dbToSearch);
+
+ for (TInt j = 0; j <iMultiDbSearch->NumOfDatabasesToSearch(); j++)
+ {
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ ValidateIdL(id, j);
+ id = iter->NextL();
+ }
+ //GetSearchError
+ //NumOfSearchErrors
+ CleanupStack::PopAndDestroy(iter);
+ }
+ iLog->Log(_L("CheckDbL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::CheckSearchResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::CheckSearchResultL(CNearestSearchResult& aSearchResult, TTp122SortOrder aSortOrder)
+ {
+ TBuf<150> buf;
+ TUint expectedNoMatches = aSearchResult.iDistances.Count();
+ if (aSearchResult.iMaxSearchResult != 0 && aSearchResult.iMaxSearchResult < aSearchResult.iDistances.Count())
+ {
+
+ }
+
+ ValidateTotalNrOfMatchesL(expectedNoMatches, iMultiDbSearch->TotalNumOfMatches());
+
+ //iLog->Log(_L("Adding..."));
+
+ // First check that result comes from correct db
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[j]);
+ if (db->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(db->InitializeL());
+ }
+
+ CleanupStack::PushL(db);
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+
+ nrOfMatches += iter->NumOfItemsL();
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ ValidateIdL(id, j);
+ id = iter->NextL();
+ }
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of matches from db nr %d"), iter->NumOfItemsL(), j);
+ //iLog->Log(buf);
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(db);
+ }
+
+ //iLog->Log(_L("Done adding..."));
+
+ if (nrOfMatches != iDisplayData->Count())
+ {
+ iLog->Log(_L("Wrong number of items"));
+ User::Leave(-1);
+
+ }
+
+ // Sorted on distance
+ if (aSortOrder == ESortNone)
+ {
+ TInt index=0;
+ TInt itemId = iDisplayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(itemId);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ TReal32 distance =0;
+ TInt dist = item.GetDistance(distance);
+ if(dist == KErrNone)
+ {
+ //iLog->Log(_L("CPosLmDisplayItem::GetDistanced returns KErrNone"));
+ }
+
+ else if(dist == KErrNotFound)
+ {
+ //iLog->Log(_L("CPosLmDisplayItem::GetDistanced returns KErrNotFound"));
+ }
+
+ // Validate lm from correct db
+ TInt dbIndex = item.DatabaseIndex();
+
+ ValidateIdL(lmId, dbIndex);
+
+ TBuf<100> buf;
+ buf.Format(_L("Found exp id %d returned id %d"),aSearchResult.iDistances[index].iId, lmId);
+ //iLog->Log(buf);
+
+ if (aSearchResult.iDistances[index].iId != lmId)
+ {
+ // if the distance is equal to the distance to the landmark
+ // before or after then no error.
+ // This to be able to use a database with landmarks with the same position.
+
+ TBool noError=EFalse;
+ if (index > 0)
+ {
+ noError = (aSearchResult.iDistances[index-1].iDistance == aSearchResult.iDistances[index].iDistance);
+ }
+ if (index < aSearchResult.iDistances.Count() && !noError)
+ {
+ noError = (aSearchResult.iDistances[index+1].iDistance == aSearchResult.iDistances[index].iDistance);
+ }
+ if (!noError)
+ {
+ _LIT(KUnexpectedItemId, "ERROR: Unexpected item id");
+
+ iErrorsFound++;
+ iLog->Log(KUnexpectedItemId);
+ }
+ }
+ itemId = iDisplayData->NewItemIndex();
+ index++;
+ }
+ }
+ // Ascended and descended
+ else
+ {
+ ///////////
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ // Check for all but first and last
+ if (i>0 && i<iDisplayData->Count()-1)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+ TReal32 distance =0;
+ TInt dist = item.GetDistance(distance);
+ if(dist == KErrNone)
+ {
+ //iLog->Log(_L("CPosLmDisplayItem::GetDistanced returns KErrNone"));
+ }
+
+ else if(dist == KErrNotFound)
+ {
+ //iLog->Log(_L("CPosLmDisplayItem::GetDistanced returns KErrNotFound"));
+ }
+
+ CPosLmDisplayItem& nextItem = iDisplayData->DisplayItem(i+1);
+ TInt nextLmId = nextItem.Landmark().LandmarkId();
+
+ TPtrC name, nextLmName;
+ item.Landmark().GetLandmarkName(name);
+ nextItem.Landmark().GetLandmarkName(nextLmName);
+
+ // Validate lm from correct db
+ TInt dbIndex = item.DatabaseIndex();
+ ValidateIdL(lmId, dbIndex);
+ TInt nextDbIndex = nextItem.DatabaseIndex();
+ // Validate next lm from correct db
+ ValidateIdL(nextLmId, nextDbIndex);
+
+ //debugging purposes
+
+
+ TInt order = nextLmName.CompareC(name);
+ if (aSortOrder == ESortAscending)
+ { // sorted ascended
+ if (order < 0)
+ {
+ iLog->Log(_L("ERROR: Wrong sortorder when ascended"));
+ iErrorsFound++;
+ }
+ }
+ else // sorted descended
+ {
+ if (order > 0)
+ {
+ iLog->Log(_L("ERROR: Wrong sortorder when descended"));
+ iErrorsFound++;
+ }
+
+ }
+ }
+ }
+
+ }
+ iLog->Log(_L("CheckSearchResultL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::ValidateTotalNrOfMatchesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::ValidateTotalNrOfMatchesL (
+ TUint aRetrievedNrOfMatches,
+ TUint aExpectedNrOfMatches)
+ {
+ _LIT(KNumOfMatchesErr, "ERROR: No. of matches is incorrect when the search is performed");
+
+ if (aRetrievedNrOfMatches != aExpectedNrOfMatches)
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, aExpectedNrOfMatches);
+ iLog->Log(info);
+ info.Format(KReturned, aRetrievedNrOfMatches);
+ iLog->Log(info);
+
+ iLog->Log(KNumOfMatchesErr);
+ iErrorsFound++;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::ValidateIdL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::ValidateIdL(TPosLmItemId aId, TInt aDbIndex)
+ {
+ TBool condition = EFalse;
+ switch (aDbIndex)
+ {
+ case 0:
+ // Db 1 contains landmarks with id = 1-50
+ condition = aId >= iIdDb1Min && aId <= iIdDb1Max;
+ break;
+ case 1:
+ // Db 2 contains landmarks with id = 51-100
+ condition = aId >= iIdDb2Min && aId <= iIdDb2Max;
+ break;
+ case 2:
+ // Db 3 contains landmarks with id = 101-150
+ condition = aId >= iIdDb3Min && aId <= iIdDb3Max;
+ break;
+ case 3:
+ // Db 4 contains landmarks with id = 151-200
+ condition = aId >= iIdDb4Min && aId <= iIdDb4Max;
+ break;
+ case 4:
+ // Db 5 contains landmarks with id = 201-254
+ condition = aId >= iIdDb5Min && aId <= iIdDb5Max;
+ break;
+ }
+
+ if (!condition)
+ {
+ iErrorsFound++;
+ TBuf<150> buf;
+ buf.Format(_L("ERROR: Invalid match from database reported, index %d in db %d"), aId, aDbIndex);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::TestOnTheFlySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp122::TestOnTheFlySearchL(const RPointerArray<CNearestSearchResult>& aSearchResults)
+ {
+ iMultiDbSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+ iMultiDbSearch->SetMaxNumOfMatches();
+
+ TInt KIndex = 0;
+ TCoordinate coord(aSearchResults[KIndex]->iLatitude, aSearchResults[KIndex]->iLongitude);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, aSearchResults[KIndex]->iUseCoverageRadius);
+ nearestCriteria->SetMaxDistance(aSearchResults[KIndex]->iMaxDistance);
+
+ RIdArray expectedMatches;
+ CleanupClosePushL(expectedMatches);
+
+ TBuf<150> buf;
+ COnTheFlyTester* onTheFlyTester = COnTheFlyTester::NewLC();
+
+ // Remove lm with index 48,49,50, they have no location (see lmDbNearestSearch in landmarksdb.xls)
+ TInt pos = aSearchResults[KIndex]->iSearchResult.Find(48);
+ aSearchResults[KIndex]->iSearchResult.Remove(pos);
+ pos = aSearchResults[KIndex]->iSearchResult.Find(49);
+ aSearchResults[KIndex]->iSearchResult.Remove(pos);
+ pos = aSearchResults[KIndex]->iSearchResult.Find(50);
+ aSearchResults[KIndex]->iSearchResult.Remove(pos);
+
+ onTheFlyTester->StartSearchCampaignL(iMultiDbSearch, aSearchResults[KIndex]->iSearchResult, nearestCriteria);
+
+ TInt result = onTheFlyTester->Err();
+ if (result != KErrNone)
+ {
+ TPtrC msg;
+ onTheFlyTester->GetErrMsg(msg);
+
+ iLog->Log(msg);
+ User::Leave(result);
+ }
+ CleanupStack::PopAndDestroy(onTheFlyTester);
+ CleanupStack::PopAndDestroy(&expectedMatches);
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ iLog->Log(_L("TestOnTheFlySearchL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp122::NrOfSearchErrors
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp122::NrOfSearchErrors(CPosLmMultiDbSearch* aMultiDbSearcher)
+ {
+ TInt nrOfSearchErrors = aMultiDbSearcher->NumOfSearchErrors();
+ if (nrOfSearchErrors != 0)
+ {
+ for (TInt i = 0; i < nrOfSearchErrors; i++)
+ {
+ CPosLmMultiDbSearch::TSearchError error;
+ aMultiDbSearcher->GetSearchError(i, error);
+ TBuf<100> msg;
+ msg.Format(_L("Found error %d in database %d"), error.iErrorCode, error.iDatabaseIndex);
+ iLog->Log(msg);
+ }
+ }
+ return nrOfSearchErrors;
+ }
+
+
+// ---------------------------------------------------------
+// CNearestSearchResult::NewL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+CNearestSearchResult* CNearestSearchResult::NewL(
+ const TDesC& aDes,
+ const TInt& aIndex,
+ RFs& aFileSession)
+ {
+ CNearestSearchResult* self = new(ELeave) CNearestSearchResult(aFileSession);
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes, aIndex);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CNearestSearchResult::CNearestSearchResult(RFs& aFileSession)
+: iFileSession( aFileSession )
+ {
+ TRealX nan;
+ nan.SetNaN();
+ iMaxDistance = nan;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::CounstructL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CNearestSearchResult::ConstructL(const TDesC& aDes, const TInt& aIndex)
+ {
+ // Use KNEARESTLMDB as correct template
+ iDatabase = CPosLandmarkDatabase::OpenL(KNEARESTLMDB);
+
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAPD( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ }
+
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0, useCoverageRadius;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ELatitude:
+ val.Val(iLatitude, TChar(','));
+ break;
+ case ELongitude:
+ val.Val(iLongitude, TChar(','));
+ break;
+ case EUseCoverageRadius:
+ val.Val(useCoverageRadius);
+ if (useCoverageRadius == 1)
+ {
+ iUseCoverageRadius = ETrue;
+ }
+ break;
+ case EMaxDistance:
+ val.Val(iMaxDistance);
+ break;
+ case EErrorCode:
+ val.Val(iErrorCode);
+ break;
+ case ESearchResult:
+ ParseSearchResult(token);
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iRedefined = ETrue;
+ }
+ break;
+ case EMaxSearchResult:
+ val.Val(iMaxSearchResult);
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ AppendDistancesL(aIndex);
+
+ }
+ }
+
+
+// Destructor
+CNearestSearchResult::~CNearestSearchResult()
+ {
+ iDistances.Close();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::AppendDistancesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CNearestSearchResult::AppendDistancesL(const TInt& aIndex)
+ {
+ iDistances.Reset();
+
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\lmDbNearestSearch.txt");
+
+ RFile file;
+ CleanupClosePushL(file);
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+
+ TInt row=0;
+ TBuf<KMaxNearestLineLength> line;
+ while (CLandmarkTestProcedureBase::ReadLn(file, line) != KErrEof)
+ {
+ ParseDistanceL(line, aIndex, row);
+ ++row;
+ }
+
+ SortDistances();
+
+ CleanupStack::PopAndDestroy(&file);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::ParseDistancesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CNearestSearchResult::ParseDistanceL(const TDesC& aDes,
+ const TInt& aIndex,
+ const TPosLmItemId& aId)
+ {
+
+ const TInt KStartIndex = 5;
+
+ TLex line(aDes);
+ line.Mark();
+ TInt index = 0;
+ TReal64 dist=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t' || line.Peek() == '\n' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+
+ if (index == (KStartIndex + aIndex))
+ {
+ TLex val(token);
+ val.Val(dist, TChar(','));
+
+ if (iUseCoverageRadius)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aId);
+
+ TReal32 aCoverageRadius;
+ if (lm->GetCoverageRadius(aCoverageRadius) == KErrNone)
+ {
+ dist -= aCoverageRadius;
+ if (dist < 0)
+ {
+ dist = 0;
+ }
+ }
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ if (Math::IsNaN(iMaxDistance) || dist <= iMaxDistance)
+ {
+ if (dist != -1)
+ {
+ TSearchResult searchResult(aId, TReal32(dist));
+ iDistances.Append(searchResult);
+ }
+ }
+
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+// ---------------------------------------------------------
+// CNearestSearchResult::Latitude
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 CNearestSearchResult::Latitude() const
+ {
+ return iLatitude;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::Latitude
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 CNearestSearchResult::Longitude() const
+ {
+ return iLongitude;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::UseCoverageRadius
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CNearestSearchResult::UseCoverageRadius() const
+ {
+ return iUseCoverageRadius;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::MaxDistance
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal32 CNearestSearchResult::MaxDistance() const
+ {
+ return iMaxDistance;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::ErrorCode
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CNearestSearchResult::ErrorCode() const
+ {
+ return iErrorCode;
+ }
+
+// ---------------------------------------------------------
+// InternalLandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt InternalSort(const TSearchResult& aSource, const TSearchResult& aTarget)
+ {
+ // zero, if the two objects are equal
+ // a negative value, if the first object is less than the second.
+ // a positive value, if the first object is greater than the second.
+
+ if ( aSource.Distance() == aTarget.Distance())
+ {
+ return 0;
+ }
+ else if (aSource.Distance() < aTarget.Distance())
+ {
+ return -1;
+ }
+
+ return 1;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::ErrorCode
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CNearestSearchResult::SortDistances()
+ {
+ TLinearOrder<TSearchResult> order(InternalSort);
+ iDistances.Sort(order);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::Print
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CNearestSearchResult::Print(TDes& aPrint)
+ {
+ _LIT(KPosInfo, "Latitude=%g, Longitude=%g");
+ TChar del(',');
+
+ TBuf<KMaxFieldLength> info;
+ info.Format(KPosInfo, iLatitude, iLongitude);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KUseCoverageRadius, "UseCoverageRadius=%d");
+ info.Format(KUseCoverageRadius, iUseCoverageRadius);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ if (!Math::IsNaN(iMaxDistance))
+ {
+ _LIT(KMaxDistance, "MaxDistance=%g");
+ info.Format(KMaxDistance, iMaxDistance);
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+
+ _LIT(KErrorCode, "ErrorCode = %d");
+ info.Format(KErrorCode, iErrorCode);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KRedefined, "Redefined=%d");
+ info.Format(KRedefined, iRedefined);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KMaxSearchResult, "MaxSearchResult=%d");
+ info.Format(KMaxSearchResult, iMaxSearchResult);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+
+ PrintDistances(aPrint);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::PrintDistances
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CNearestSearchResult::PrintDistances(TDes& aPrint)
+ {
+ TBuf<KDistanceFieldLength> info2;
+ TChar del(':');
+ aPrint.Append(_L("Distances: "));
+
+ for (TInt j=0; j<iDistances.Count(); j++)
+ {
+ _LIT(KDistance, "%g,%d");
+ info2.Format(KDistance, iDistances[j].Distance(), iDistances[j].Id());
+ aPrint.Append(info2);
+ aPrint.Append(del);
+ }
+ }
+
+// ---------------------------------------------------------
+// TSearchResult::TSearchResult
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TSearchResult::TSearchResult()
+ {
+ TRealX nan;
+ nan.SetNaN();
+ iDistance=nan;
+ iId=0;
+ }
+
+TSearchResult::TSearchResult(const TPosLmItemId& aId, const TReal32& aDistance) :
+ iDistance(aDistance),
+ iId(aId)
+ {
+ }
+
+// ---------------------------------------------------------
+// TSearchResult::Distance
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 TSearchResult::Distance() const
+ {
+ return iDistance;
+ }
+
+// ---------------------------------------------------------
+// TSearchResult::Id
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPosLmItemId TSearchResult::Id() const
+ {
+ return iId;
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp123.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,570 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp123.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp123::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+/*void CPosTp123::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp123 - Uncategorized LM MultiDb Search");
+ aName = KTestName;
+ }
+*/
+// ---------------------------------------------------------
+// CPosTp123::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::CloseTest()
+ {
+ delete iDatabases;
+ delete iLandmarkSearch;
+ for (TInt i = 0; i < iIdArrays.Count(); i++)
+ {
+ iIdArrays[i].Close();
+ }
+ iIdArrays.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::InitTestL()
+ {
+ CLandmarkTestProcedureBase::InitTestL();
+
+ // PrepareDatabases
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+ iNrOfDatabases = 5;
+
+ // Initialize data members
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ iDatabases->Sort();
+ AssertTrueSecL((iDatabases->Count() == iNrOfDatabases), _L("Wrong number of databases"));
+ iLandmarkSearch = CPosLmMultiDbSearch::NewL(*iDatabases);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ iLog->Log( _L("Multi db search created"));
+
+ // Enable use of global categories
+ // CPosLandmarkDatabase* database = UseGlobalCategoriesL();
+ // delete database;
+ CPosLandmarkDatabase* database = NULL;
+ // Reset Global categories for all databases but EPOSLM_105.LDB and add the global category
+ // "Hotel" to the 5 first landmarks in the databases.
+ for (TInt i = 0; i < iNrOfDatabases - 1; i++) // Do not use global categories in
+ {
+ database = CPosLandmarkDatabase::OpenL((*iDatabases)[i]);
+ CleanupStack::PushL(database);
+ if ( database->IsInitializingNeeded() )
+ {
+ TRAPD( err, ExecuteAndDeleteLD( database->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(catMan);
+ ExecuteAndDeleteLD(catMan->ResetGlobalCategoriesL());
+ CPosLmItemIterator* lmIter = database->LandmarkIteratorL();
+ CleanupStack::PushL(lmIter);
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ lmIter->GetItemIdsL(idArray, 0, 5);
+
+ // Remove all existing categories from the 5 first landmarks
+ for (TInt i = 0; i < idArray.Count(); i++)
+ {
+ CPosLandmark* lm = database->ReadLandmarkLC(idArray[i]);
+ lm->RemoveLandmarkAttributes(CPosLandmark::ECategoryInfo);
+ TInt err = KErrLocked;
+ while (err==KErrLocked)
+ {
+ TRAP(err, database->UpdateLandmarkL(*lm));
+ }
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ // Add global category hotel to 5 first LMs
+ TPosLmGlobalCategory accommodation(3000); // 27 == Global category id for accommodation according to .the global ids added for BC testing
+ User::After(200000);
+ ExecuteAndDeleteLD(catMan->AddCategoryToLandmarksL(catMan->GetGlobalCategoryL(accommodation), idArray));
+
+ CleanupStack::PopAndDestroy(4, database);
+ }
+
+ // Initialize arrays that will contain expected search results
+ RIdArray array20;
+ User::LeaveIfError(iIdArrays.Append(array20));
+ RIdArray array40;
+ User::LeaveIfError(iIdArrays.Append(array40));
+ RIdArray array60;
+ User::LeaveIfError(iIdArrays.Append(array60));
+ RIdArray array80;
+ User::LeaveIfError(iIdArrays.Append(array80));
+ RIdArray array105;
+ User::LeaveIfError(iIdArrays.Append(array105));
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::StartL()
+ {
+// 1. Verify KErrArgument is returned from API
+ iLog->Log(_L("<<< 1. Verify KErrArgument is returned from API >>>"));
+ for (TBool runSynch = EFalse; runSynch <= ETrue; runSynch++)
+ {
+ iLog->Log(_L("Should leave with KErrArgument..."));
+ TRAPD(err, TestSearchCategoriesL(runSynch));
+ AssertTrueSecL(err == KErrArgument, _L("Should have left with KErrArgument but failed with %d"), err);
+ iLog->Log(_L("Function left correctly with KErrArgument"));
+ }
+
+// 2. We should not find any uncategorized landmarks since every landmark in the db
+// belongs to a category
+ iLog->Log(_L("<<< 2. Search uncategorized LMs (none exist) >>>"));
+ SearchForUncategorizedLMsL(0);
+
+// 3. Remove all categories from M landmarks in each database
+ iLog->Log(_L("<<< 3. Remove all categories from M landmarks in each database >>>"));
+ const TInt M = 2;
+ RemoveCategoriesFromLandmarksL(M);
+ // Check that correct number of uncategorized landmarks are found
+ SearchForUncategorizedLMsL(M * iNrOfDatabases);
+
+// 4. Remove a local category that Q LMs belong to and add an uncategorized lm
+ iLog->Log(_L("<<< 4. Remove a local category that Q LMs belong to and add an uncategorized lm >>>"));
+ const TInt Q = 6;
+ TInt dbIndex = 3;
+ TPosLmItemId localCatId = 26; // Läkare
+ RemoveCategoryFromDbL(localCatId, (*iDatabases)[dbIndex]);
+ // Landmark 72-77 should now be uncategorized.
+ for (TInt i = 72; i <= 77; i++)
+ {
+ iIdArrays[dbIndex].Append(i);
+ }
+
+ // Add a lm
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("Guru"));
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL((*iDatabases)[dbIndex]);
+ CleanupStack::PushL(database);
+ TPosLmItemId id = database->AddLandmarkL(*lm);
+ iIdArrays[dbIndex].Append(id);
+ CleanupStack::PopAndDestroy(2, lm);
+
+ // Check that correct number of uncategorized landmarks are found
+ SearchForUncategorizedLMsL(Q + 1 + M*iNrOfDatabases);
+
+// 5. Associate an uncategorized landmark with a category, e.g. lm with id 76
+ iLog->Log(_L("<<< 5. Associate an uncategorized landmark with a category >>>"));
+ id = 76;
+ database = CPosLandmarkDatabase::OpenL((*iDatabases)[dbIndex]);
+ CleanupStack::PushL(database);
+ lm = database->ReadLandmarkLC(id);
+ lm->AddCategoryL(localCatId - 1); // Sjukhus
+ database->UpdateLandmarkL(*lm);
+ TInt index = iIdArrays[dbIndex].Find(id);
+ AssertTrueSecL(index > 0, _L("Unable to find landmark in array"));
+ iIdArrays[dbIndex].Remove(index);
+ CleanupStack::PopAndDestroy(2, database);
+
+ // Check that correct number of uncategorized landmarks are found
+ SearchForUncategorizedLMsL(Q + M*iNrOfDatabases);
+
+// 6. Remove the global category Hotel, that K LMs belong to, from 2 databases
+ iLog->Log(_L("<<< 6. Remove the global category Hotel, that K LMs belong to, from 2 databases >>>"));
+ //const TPosLmGlobalCategory KHotel = 4;
+ const TPosLmGlobalCategory KAccommodation = 3000;
+ const TInt K = 2*3; // 2 dbs and three in each have hotel as category
+ for (TInt dbIndex = 0; dbIndex <= 1; dbIndex++)
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[dbIndex]);
+ CleanupStack::PushL(db);
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+ TPosLmItemId itemId = catMan->GetGlobalCategoryL(KAccommodation);
+ RemoveCategoryFromDbL(itemId, (*iDatabases)[dbIndex]);
+ CleanupStack::PopAndDestroy(2, db);
+ }
+
+ // Landmarks 3-5 and 23-25 should now be uncategorized.
+ dbIndex = 0;
+ for (TInt i = 3; i <= 5; i++)
+ {
+ iIdArrays[dbIndex].Append(i);
+ }
+ for (TInt i = 23; i <= 25; i++)
+ {
+ iIdArrays[dbIndex + 1].Append(i);
+ }
+
+ // Check that correct number of uncategorized landmarks are found
+ SearchForUncategorizedLMsL(K + Q + M*iNrOfDatabases);
+
+// 7. Exclude one database (the last)
+ iLog->Log(_L("<<< 7. Exclude one database >>>"));
+ iDatabases->Delete(4);
+ iNrOfDatabases--;
+ iLandmarkSearch->SetDatabasesToSearchL(*iDatabases);
+ SearchForUncategorizedLMsL(K + Q + M*iNrOfDatabases);
+
+// 8. Test maximum nr of matches
+ iLog->Log(_L("<<< 8. Test maximum nr of matches >>>"));
+ const TInt P = 1;
+ iLandmarkSearch->SetMaxNumOfMatches(P);
+ SearchForUncategorizedLMsL(P * iNrOfDatabases);
+
+// 9. Test maximum nr of matches and sort
+ iLog->Log(_L("<<< 9. Test maximum nr of matches and sort >>>"));
+ iLandmarkSearch->SetMaxNumOfMatches(2);
+ SearchForUncategorizedLMsL(2 * iNrOfDatabases, ETrue);
+
+// 10. Test on-the-fly sorting
+ iLog->Log(_L("<<< 10. Test on-the-fly sorting >>>"));
+ iLandmarkSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+
+ // Create one big array with all expected matches
+ RIdArray expectedMatches;
+ CleanupClosePushL(expectedMatches);
+ for (TInt i = 0; i < iNrOfDatabases; i++)
+ {
+ for (TInt j = 0; j < iIdArrays[i].Count(); j++)
+ {
+ User::LeaveIfError(expectedMatches.Append(iIdArrays[i][j]));
+ }
+ }
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ COnTheFlyTester* onTheFlyTester = COnTheFlyTester::NewLC();
+ onTheFlyTester->StartSearchCampaignL(iLandmarkSearch, expectedMatches, catSearchCriteria);
+ TInt result = onTheFlyTester->Err();
+ if (result != KErrNone)
+ {
+ TPtrC msg;
+ onTheFlyTester->GetErrMsg(msg);
+ iLog->Log(msg);
+ User::Leave(result);
+ }
+ CleanupStack::PopAndDestroy(3, &expectedMatches);
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::TestSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::TestSearchL(
+ TBool aExecuteSync,
+ TSearchCriterion aCriterion,
+ TInt aNrOfHits,
+ TBool aSorted)
+ {
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // Specified in header file EPos_CPosLmCategoryCriteria.h says that
+ // specifying no criteria should return uncategorized landmarks
+ // SetCategoryItemId(KPosLmNullItemId) should return uncategorized landmarks and that
+ // SetGlobalCategory(KPosLmNullGlobalCategory) should return uncategorized landmarks and that
+ // SetCategoryNameL(KNullDesC) should return uncategorized landmarks
+ switch (aCriterion)
+ {
+ case ENoCriterion:
+ // Do nothing. Default initialized CPosLmCategoryCriteria is fine.
+ break;
+ case ELocalCategoryId:
+ catSearchCriteria->SetCategoryItemId(KPosLmNullItemId);
+ break;
+ case EGlobalCategoryId:
+ catSearchCriteria->SetGlobalCategory(KPosLmNullGlobalCategory);
+ break;
+ case ECategoryName:
+ catSearchCriteria->SetCategoryNameL(KNullDesC);
+ break;
+ }
+
+ if (aSorted)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria, sortPref);
+ }
+ else
+ {
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria);
+ }
+
+ if (aExecuteSync)
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+
+ VerifySearchResultL(aNrOfHits, aSorted);
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::TestSearchCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::TestSearchCategoriesL(TBool aExecuteSync)
+ {
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // This method should leave according to EPos_CPosLmCategoryCriteria.h
+ iOperation = iLandmarkSearch->StartCategorySearchL(
+ *catSearchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ if (aExecuteSync)
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::RemoveCategoriesFromLandmarksL
+// Use this method to remove the category from a specified number of landmarks
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::RemoveCategoriesFromLandmarksL(TInt aNrOfLandmarks)
+ {
+ for (TInt i = 0; i < iNrOfDatabases; i++)
+ {
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL((*iDatabases)[i]);
+ CleanupStack::PushL(database);
+ ExecuteAndDeleteLD(database->CompactL());
+ CPosLmItemIterator* iter = database->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter=0;
+
+ // Remove the categories from aNrOfLandmarks nr of landmarks
+ while ((id != KPosLmNullItemId) && (counter < aNrOfLandmarks))
+ {
+ CPosLandmark* landmark = database->ReadLandmarkLC(id);
+ landmark->RemoveLandmarkAttributes(CPosLandmark::ECategoryInfo);
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, database->UpdateLandmarkL(*landmark));
+ }
+ CleanupStack::PopAndDestroy(landmark);
+ User::LeaveIfError(iIdArrays[i].Append(id));
+
+ id = iter->NextL();
+ if (id == KPosLmNullItemId)
+ {
+ iLog->Log(_L("KPosLmNullItemId"));
+ }
+ counter++;
+ }
+
+ CleanupStack::PopAndDestroy(2, database);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::SearchForUncategorizedLMsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::SearchForUncategorizedLMsL(TInt aNrOfHits, TBool aSorted)
+ {
+ for (TBool runSynch = EFalse; runSynch < 2; runSynch++)
+ {
+ for (TSearchCriterion searchCriterion = ENoCriterion;
+ searchCriterion <= ECategoryName;
+ searchCriterion = (TSearchCriterion)((TInt)searchCriterion + 1))
+ {
+ TestSearchL(runSynch, searchCriterion, aNrOfHits, aSorted);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::RemoveCategoryFromDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::RemoveCategoryFromDbL(
+ TPosLmItemId aCategoryId,
+ const TDesC& aDbUri)
+ {
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL(aDbUri);
+ CleanupStack::PushL(database);
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(catMan);
+
+ ExecuteAndDeleteLD(catMan->RemoveCategoryL(aCategoryId));
+
+ CleanupStack::PopAndDestroy(2, database);
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::VerifySearchResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::VerifySearchResultL(
+ TInt aNrOfHits,
+ TBool aSorted)
+ {
+ AssertTrueSecL(iLandmarkSearch->NumOfSearchErrors() == 0, _L("Found search errors!"));
+
+ // Verify total number of matches is correct
+ TInt totNrOfMatches = iLandmarkSearch->TotalNumOfMatches();
+ if (totNrOfMatches != aNrOfHits)
+ {
+ iBuf.Format(_L("Wrong number of landmarks returned when searching for uncategorized landmarks, found: %d expected %d"), totNrOfMatches, aNrOfHits);
+ iLog->Log(iBuf);
+ User::Leave(-1);
+ }
+
+
+ for (TUint i = 0; i < iNrOfDatabases; i++)
+ {
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL((*iDatabases)[i]);
+ CleanupStack::PushL(database);
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+
+ // Verify number of matches in each database is correct
+ TInt nrInIter = iter->NumOfItemsL();
+ AssertTrueSecL(nrInIter == iLandmarkSearch->NumOfMatches(i), _L("wrong number of items returned in a specific iterator!"));
+
+ // Verify that correct landmarks were found
+ TPosLmItemId id = iter->NextL();
+ TInt index = 0;
+ while (id != KPosLmNullItemId)
+ {
+ TInt found = iIdArrays[i].Find(id);
+ if (found == KErrNotFound)
+ {
+ iLog->Log(_L("Not found"));
+ User::Leave(KErrNotFound);
+ }
+ else
+ {
+ index++;
+ CPosLandmark* landmark = database->ReadLandmarkLC(id);
+ CPosLandmark* landmark2 = database->ReadLandmarkLC(iIdArrays[i][found]);
+
+ CompareLandmarksL(*landmark, *landmark2);
+
+ CleanupStack::PopAndDestroy(landmark2);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+ id = iter->NextL();
+ }
+
+ if (index != nrInIter)
+ {
+ iLog->Log(_L("The correct landmark was never found"));
+ User::Leave(-1);
+
+ }
+ if (aSorted)
+ {
+ VerifySortOrderL(iter, database);
+ }
+ CleanupStack::PopAndDestroy(2, database);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp123::VerifySortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp123::VerifySortOrderL(
+ CPosLmItemIterator* aIter,
+ CPosLandmarkDatabase* aDb)
+ {
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ TInt nrOfItems = aIter->NumOfItemsL();
+ aIter->GetItemIdsL(idArray, 0, nrOfItems);
+
+ for (TInt i = 0; i < nrOfItems; i++)
+ {
+ if (i < nrOfItems - 1)
+ {
+ CPosLandmark* lm1 = aDb->ReadLandmarkLC(idArray[i]);
+ CPosLandmark* lm2 = aDb->ReadLandmarkLC(idArray[i + 1]);
+ TPtrC name1, name2;
+ lm1->GetLandmarkName(name1);
+ lm2->GetLandmarkName(name2);
+ AssertTrueSecL(name1.CompareC(name2) <= 0, _L("lm1 is greater than lm2 - should not be the case since ascending order is used."));
+ CleanupStack::PopAndDestroy(2, lm1);
+ }
+ }
+ CleanupStack::PopAndDestroy(&idArray);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp124.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1701 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp124.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+#include "FT_LandmarkConstants.h"
+
+#include "FT_CCompositeSearchResult.h"
+
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmDatabaseManager.h>
+
+#include <e32math.h>
+
+// CONSTANTS
+_LIT(KLMDB1, "COMPOSITELMDB_1.LDB");
+_LIT(KLMDB2, "COMPOSITELMDB_2.LDB");
+_LIT(KLMDB3, "COMPOSITELMDB_3.LDB");
+_LIT(KLMDB4, "COMPOSITELMDB_4.LDB");
+_LIT(KLMDB5, "COMPOSITELMDB_5.LDB");
+_LIT(KLMDB1Path,"file://C:COMPOSITELMDB_1.LDB");
+_LIT(KLMDB2Path,"file://C:COMPOSITELMDB_2.LDB");
+_LIT(KLMDB3Path,"file://C:COMPOSITELMDB_3.LDB");
+_LIT(KLMDB4Path,"file://C:COMPOSITELMDB_4.LDB");
+_LIT(KLMDB5Path,"file://C:COMPOSITELMDB_5.LDB");
+
+//_LIT(KCOMPOSITELMDB, "compositeeposlm.ldb");
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp124::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iDatabases;
+
+ if (iMultiDbSearch) iMultiDbSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+
+ delete iMultiDbSearch;
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("Error when RemoveAllLmDatabasesL"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::InitTestL()
+ {
+ CLandmarkTestProcedureBase::InitTestL();
+
+ iLog->Log(_L("InitTestL"));
+ RemoveAllLmDatabasesL();
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ // check the count of databases that could not be delted since they were in use
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ iDbCount = iDatabases->Count();
+
+
+ // PrepareDatabases
+ PrepareDatabasesL();
+
+ SetupLimits();
+
+
+
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ iDatabases->Sort(); // Not really necessary...
+ // database count is equal to ones added plus ones not been able to delte since they were in use
+ TInt dbCount = iDatabases->Count();
+ iNrOfDatabases = iDbCount + 5;
+
+ iMultiDbSearch = CPosLmMultiDbSearch::NewL(*iDatabases);
+ CleanupStack::PopAndDestroy(dbManager);
+
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiDbSearch->SetDisplayData(*iDisplayData);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::StartL()
+ {
+ TTime startTime;
+ TTime stopTime;
+ startTime.UniversalTime();
+
+ MakeSurePanicDebugFileExistsL();
+
+ iDatabase = UseCompositeLandmarksDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // TC_Part 1
+ // ASynchronous, Sort ascending
+ StartLandmarksCompositeTestL(EAsynchronous, ESortAscending);
+ // Synchronous, Sort descending
+ StartLandmarksCompositeTestL(EAsynchronous, ESortDescending);
+ // ASynchronous, Sort ascending
+ TestWithSortOrderLandmarksL(EAsynchronous, ESortAscending);
+
+ TestWithSortOrderNearestL(EAsynchronous, ESortAscending);
+ TestWithSortOrderNearestL(ESynchronous, ESortNone);
+ TestWithSortOrderNearestL(EAsynchronous, ESortDescending);
+ TestWithSortOrderNearestL(EAsynchronous, ESortDistance);
+
+ // TC Part 2_3 Test with several text criterias
+ TestSeveralTextArgumentsL();
+
+ // TC Part 4-5 Test add and remove from composite object
+ TestAddAndRemoveL();
+
+ // TC Part 6
+ // Cancel immediately
+ CancelTestL(EFalse);
+
+ // Cancel in callback
+ CancelTestL(ETrue);
+
+ // TC Part 7
+ TestOnTheFlySearchL();
+
+ // Since TestOnTheFlySearchL is changing displadata
+ iMultiDbSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiDbSearch->SetDisplayData(*iDisplayData);
+
+ // TC Part 8-11
+ // TestLessDbsToSearchL();
+
+ // TC Part 12
+ // It is not possible to use Composite in a composite object in multi search
+ TestCompositeInCompositeL();
+
+ // TC Part 13
+ // It is not possible to use IdList in a composite object in multi search
+ TestWithIdListAndCompositeL();
+
+ // TC Part 14
+ // It is not possible to use CPosLmCatNameCriteria in a composite object in multi search
+ TestCategoryCompositeSearchL();
+
+ // TC Part 15
+ // Test with no previous result but try to refine search anyway
+ TestWithNoPreviousResultL();
+
+ TInt KNrOfObjectsInComposite = 100;
+ TInt KStartIndex = 90;
+ CompositeStressTestL(KStartIndex, KNrOfObjectsInComposite);
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ TBuf<100> buf;
+ buf.Format(_L("TP124 took %d seconds"), resse);
+ iLog->Log(buf);
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP124"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::SetupLimits()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp124::SetupLimits()
+ {
+ // First db-> Keep landmarks 1-20
+ // Second db-> Keep landmarks 21-40
+ // Third db-> Keep landmarks 41-60
+ // Fourth db-> Keep landmarks 61-80
+ // Fifth db-> Keep landmarks 81-105
+
+ iIdDb1Min = 1;
+ iIdDb1Max = 20;
+
+ iIdDb2Min = 21;
+ iIdDb2Max = 40;
+
+ iIdDb3Min = 41;
+ iIdDb3Max = 60;
+
+ iIdDb4Min = 61;
+ iIdDb4Max = 80;
+
+ iIdDb5Min = 81;
+ iIdDb5Max = 105;
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::ValidateIdL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::ValidateIdL(TPosLmItemId aId, TInt aDbIndex)
+ {
+ TBool condition = EFalse;
+ switch (aDbIndex)
+ {
+ case 0:
+ // Db 1 contains landmarks with id = 1-20
+ condition = aId >= iIdDb1Min && aId <= iIdDb1Max;
+ break;
+ case 1:
+ // Db 2 contains landmarks with id = 21-40
+ condition = aId >= iIdDb2Min && aId <= iIdDb2Max;
+ break;
+ case 2:
+ // Db 3 contains landmarks with id = 41-60
+ condition = aId >= iIdDb3Min && aId <= iIdDb3Max;
+ break;
+ case 3:
+ // Db 4 contains landmarks with id = 61-80
+ condition = aId >= iIdDb4Min && aId <= iIdDb4Max;
+ break;
+ case 4:
+ // Db 5 contains landmarks with id = 81-105
+ condition = aId >= iIdDb5Min && aId <= iIdDb5Max;
+ break;
+ }
+
+ if (!condition)
+ {
+ iErrorsFound++;
+ TBuf<150> buf;
+ buf.Format(_L("ERROR: Invalid match from database reported, index %d in db %d"), aId, aDbIndex);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::PrepareDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::PrepareDatabasesL()
+ {
+ iLog->Log(_L("PrepareDatabasesL"));
+ // Copy eposlmnearestsearch.ldb into five dbs
+ _LIT(KDbFile, "c:\\system\\test\\testdata\\compositeeposlm.ldb");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ // Create five copies of testdata\\compositeeposlm.ldb
+ TBuf<100> path;
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB1);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB2);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB3);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB4);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ path.Zero();
+ path.Append(KLmDbPath);
+ path.Append(KLMDB5);
+ User::LeaveIfError(fileMan->Copy(KDbFile, path, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ // Now adjust dbs according to following:
+ // First db-> Keep landmarks 1-20
+ // Second db-> Keep landmarks 21-40
+ // Third db-> Keep landmarks 41-60
+ // Fourth db-> Keep landmarks 61-80
+ // Fifth db-> Keep landmarks 81-105
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KLMDB1);
+ CleanupStack::PushL(lmd);
+
+ TBool debug = EFalse;
+ TInt index=0;
+ TInt max=105;
+ for (index=20;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ User::After(200000);
+ ExecuteAndDeleteLD(lmd->CompactL());
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB2);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<20;index++) array.Append(index+1);
+ for (index=40;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ User::After(200000);
+ ExecuteAndDeleteLD(lmd->CompactL());
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB3);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<40;index++) array.Append(index+1);
+ for (index=60;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ User::After(200000);
+ ExecuteAndDeleteLD(lmd->CompactL());
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB4);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<60;index++) array.Append(index+1);
+ for (index=80;index<max;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ User::After(200000);
+ ExecuteAndDeleteLD(lmd->CompactL());
+ array.Reset();
+ if (debug) PrintLm(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+
+ lmd = CPosLandmarkDatabase::OpenL(KLMDB5);
+ CleanupStack::PushL(lmd);
+
+ for (index=0;index<80;index++) array.Append(index+1);
+ if (lmd->IsInitializingNeeded()) ExecuteAndDeleteLD(lmd->InitializeL());
+ ExecuteAndDeleteLD(lmd->RemoveLandmarksL(array));
+ User::After(200000);
+ ExecuteAndDeleteLD(lmd->CompactL());
+ array.Reset();
+ if (debug) PrintLm(lmd);
+
+ CleanupStack::PopAndDestroy(lmd);
+
+ CleanupStack::PopAndDestroy(&array);
+ iLog->Log(_L("PrepareDatabasesL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::PrintLm
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::PrintLm(CPosLandmarkDatabase* db)
+ {
+ CPosLmItemIterator* iter = db->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+ iLog->Log(_L("PrintLm"));
+
+ TPosLmItemId id = iter->NextL();
+ TBuf<100> buf;
+
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = db->ReadLandmarkLC(id);
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ iLog->Log(_L("Found LM: "));
+ iLog->Log(name);
+ TInt idde = lm->LandmarkId();
+
+ id = iter->NextL();
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ iLog->Log(_L("PrintLm Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestOnTheFlySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestOnTheFlySearchL()
+ {
+ iLog->Log(_L("TestOnTheFlySearchL"));
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CCompositeSearchResult* res = CCompositeSearchResult::NewL(iLog);
+ CleanupStack::PushL(res);
+
+ while (!res->GetCompositeSearchResultsL(*composite))
+ {
+ // Check if IdList is included in composite, if so dont
+ // use this search since IdList is not possible to use in multiple db seach
+ if (!CheckCompositeForIdListL(composite))
+ {
+ PrintCompositeInfo(composite);
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ TBuf<150> buf;
+ COnTheFlyTester* onTheFlyTester = COnTheFlyTester::NewLC();
+ onTheFlyTester->StartSearchCampaignL(iMultiDbSearch, res->iResultIds, composite);
+
+ TInt result = onTheFlyTester->Err();
+ if (result != KErrNone)
+ {
+ TPtrC msg;
+ onTheFlyTester->GetErrMsg(msg);
+ iLog->Log(msg);
+ User::Leave(result);
+ }
+ CleanupStack::PopAndDestroy(onTheFlyTester);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(res);
+ CleanupStack::PopAndDestroy(composite);
+ iLog->Log(_L("TestOnTheFlySearchL Done"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestLessDbsToSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestLessDbsToSearchL()
+ {
+ iLog->Log(_L("TestLessDbsToSearchL"));
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ TBuf<100> buf;
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("LO*"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // Create search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+
+ // Will find:
+ searchResults.Append(1);
+ searchResults.Append(2);
+ searchResults.Append(20);
+ searchResults.Append(21);
+ searchResults.Append(22);
+ searchResults.Append(23);
+ searchResults.Append(24);
+ searchResults.Append(26);
+ searchResults.Append(27);
+ searchResults.Append(28);
+
+ iLog->Log(_L("Search in all dbs"));
+
+ SearchL(composite, ESynchronous, EFalse, ESortNone);
+ ValidateSearchResultsL(searchResults, ESortNone);
+
+ // delete the COMPOSITELMDB_1 & COMPOSITELMDB_3
+ TInt count = iDatabases->Count();
+ for(TInt i =0;i<count;i++)
+ {
+ TPtrC16 dbName((*iDatabases)[i]);
+ if(dbName.Compare(KLMDB1Path) == KErrNone || dbName.Compare(KLMDB4Path) == KErrNone )
+ {
+ iDatabases->Delete(i);
+ }
+ }
+ // iDatabases->Delete(0);
+ // iDatabases->Delete(3);
+
+ iNrOfDatabases-=2;
+
+ iIdDb1Min = 21;
+ iIdDb1Max = 40;
+
+ iIdDb2Min = 41;
+ iIdDb2Max = 60;
+
+ iIdDb3Min = 81;
+ iIdDb3Max = 105;
+
+ iMultiDbSearch->SetDatabasesToSearchL(*iDatabases);
+
+ iLog->Log(_L("Search in all dbs but db0 and db3"));
+ // Remove three first items, found in db0
+ searchResults.Remove(0); // id 1
+ searchResults.Remove(0); // id 2
+ searchResults.Remove(0); // id 20
+ SearchL(composite, ESynchronous, EFalse, ESortNone);
+ ValidateSearchResultsL(searchResults, ESortNone);
+
+ // Open DB last in list and add a new landmark
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(KLMDB3);
+ CleanupStack::PushL(db);
+ CPosLandmark* lm1 = CPosLandmark::NewLC();
+ lm1->SetLandmarkNameL(_L("LOOOPIA Landmark"));
+ lm1->SetLandmarkDescriptionL(_L("Some Description"));
+
+ iLog->Log(_L("Add new Landmark to db nr 0"));
+ TPosLmItemId newLmId = db->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+
+ iLog->Log(_L("Search in all dbs but db0 and db3"));
+ //Refine search. new landmark should not be included
+ SearchL(composite, ESynchronous, ETrue, ESortNone);
+ ValidateSearchResultsL(searchResults, ESortNone);
+
+ CPosLmCategoryCriteria* catSearchCriteria1 = CPosLmCategoryCriteria::NewLC();
+ CPosLmCategoryCriteria* catSearchCriteria2 = CPosLmCategoryCriteria::NewLC();
+
+ catSearchCriteria1->SetCategoryNameL(_L("Stadsbibliotek"));
+ catSearchCriteria2->SetCategoryNameL(_L("Systembolag"));
+
+ User::LeaveIfError(composite->AddArgument(catSearchCriteria1));
+ User::LeaveIfError(composite->AddArgument(catSearchCriteria2));
+ CleanupStack::Pop(catSearchCriteria2);
+ CleanupStack::Pop(catSearchCriteria1);
+
+ iLog->Log(_L("Search in all dbs but db0 and db3"));
+ //Refine search with more specific composite search object
+ // new landmark should not be included
+
+ searchResults.Reset();
+ searchResults.Append(27);
+
+ SearchL(composite, ESynchronous, ETrue, ESortNone);
+ ValidateSearchResultsL(searchResults, ESortNone);
+
+ // Remove some criterias from composite and do a new search,
+ iLog->Log(_L("Search in all dbs but db0 and db3, remove last argument from composite"));
+ // Remove last added argument
+ CPosLmSearchCriteria* obj1 = composite->RemoveArgument(composite->NumOfArguments()-1);
+ delete obj1;
+ obj1 = NULL;
+
+ //Refine search. new landmark should not be included
+ SearchL(composite, ESynchronous, ETrue, ESortNone);
+ ValidateSearchResultsL(searchResults, ESortNone);
+
+ // Remove last added argument
+ obj1 = composite->RemoveArgument(composite->NumOfArguments()-1);
+ delete obj1;
+ obj1 = NULL;
+
+ //Do a new search (not more refined). new landmark should be included
+ searchResults.Append(newLmId);
+ iIdDb3Max = newLmId;
+ searchResults.Reset();
+ searchResults.Append(21);
+ searchResults.Append(22);
+ searchResults.Append(23);
+ searchResults.Append(24);
+ searchResults.Append(26);
+ searchResults.Append(27);
+ searchResults.Append(28);
+ searchResults.Append(newLmId);
+ iLog->Log(_L("Search in all dbs but db0 and db3, without refined"));
+ SearchL(composite, ESynchronous, EFalse, ESortNone);
+ ValidateSearchResultsL(searchResults, ESortNone);
+
+ // Remove the added landmark
+ db->RemoveLandmarkL(newLmId);
+ CleanupStack::PopAndDestroy(db);
+
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+ // Correct limits if more testing after this part
+ SetupLimits();
+
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+ delete iDatabases;
+ iDatabases = NULL;
+ iDatabases = dbManager->ListDatabasesLC();
+ CleanupStack::Pop(iDatabases);
+ iDatabases->Sort(); // Not really necessary...
+ // Remove compositeeposlm.ldb that should not be searched
+ iNrOfDatabases = iDbCount + 5;
+ iDatabases->Delete(0);
+ AssertTrueSecL((iDatabases->Count() == iNrOfDatabases), _L("Wrong number of databases"));
+
+ iMultiDbSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+
+ delete iMultiDbSearch;
+ iMultiDbSearch = NULL;
+
+ iMultiDbSearch = CPosLmMultiDbSearch::NewL(*iDatabases);
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiDbSearch->SetDisplayData(*iDisplayData);
+
+ CleanupStack::PopAndDestroy(dbManager);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestWithSortOrderNearestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestWithSortOrderNearestL(TExecutionMode aExecutionMode,
+ TTp124SortOrder aSortOrder)
+ {
+ iLog->Log(_L("TestWithSortOrderNearestL"));
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // Then create a nearest criteria same coordinate as landmark itemid=31 Text1
+ TCoordinate coord(45.5, 0.5);
+ iCoord = coord;
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, ETrue);
+ nearestCriteria->SetMaxDistance(80000);
+
+
+ User::LeaveIfError(composite->AddArgument(nearestCriteria));
+ CleanupStack::Pop(nearestCriteria);
+
+ // Create search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+
+ // Will find Unique, Text'1 and Text1
+ searchResults.Append(29);
+ searchResults.Append(31);
+ searchResults.Append(30);
+
+ iLog->Log(_L("Innan search"));
+ SearchL(composite, aExecutionMode, EFalse, aSortOrder);
+ iLog->Log(_L("Innan validate"));
+ ValidateSearchResultsL(searchResults, aSortOrder);
+
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::CheckCompositeForIdListL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp124::CheckCompositeForIdListL(CPosLmCompositeCriteria* aComposite)
+ {
+ iLog->Log(_L("CheckCompositeForIdListL"));
+ TBool res = EFalse;
+ for (TUint i=0;i<aComposite->NumOfArguments();i++)
+ {
+ CPosLmSearchCriteria& comp = aComposite->Argument(i);
+ TInt type = comp.CriteriaType();
+ if (type == CPosLmSearchCriteria::ECriteriaIdList)
+ {
+ res = ETrue;
+ }
+ }
+ return res;
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::StartLandmarksCompositeTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::StartLandmarksCompositeTestL(TExecutionMode aExecutionMode,
+ TTp124SortOrder aSortOrder)
+ {
+ iLog->Log(_L("StartLandmarksCompositeTestL"));
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CCompositeSearchResult* res = CCompositeSearchResult::NewL(iLog);
+ CleanupStack::PushL(res);
+
+
+
+ while (!res->GetCompositeSearchResultsL(*composite))
+ {
+ // Check if IdList is included in composite, if so dont
+ // use this search since IdList is not possible to use in multiple db seach
+ if (!CheckCompositeForIdListL(composite))
+ {
+ PrintCompositeInfo(composite);
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ SearchL(composite, aExecutionMode, res->Redefined(), aSortOrder);
+ ValidateSearchResultsL(res->iResultIds, aSortOrder);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(res);
+ CleanupStack::PopAndDestroy(composite);
+ iLog->Log(_L("StartLandmarksCompositeTestL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestWithSortOrderLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestWithSortOrderLandmarksL(TExecutionMode aExecutionMode,
+ TTp124SortOrder aSortOrder)
+ {
+ iLog->Log(_L("TestWithSortOrderLandmarksL"));
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ TInt i=0;
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // Then create a nearest criteria
+ TCoordinate coord(12.123, -20,123);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ User::LeaveIfError(composite->AddArgument(nearestCriteria));
+ CleanupStack::Pop(nearestCriteria);
+
+ // Create search result of all landmark ids: 1-105
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+ for (i=1;i<106;i++) {searchResults.Append(i);}
+
+ SearchL(composite, aExecutionMode, EFalse, aSortOrder);
+ ValidateSearchResultsL(searchResults, aSortOrder);
+
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::SearchL(
+ CPosLmCompositeCriteria* aCompositeSearchCriteria,
+ TExecutionMode aExecutionMode,
+ TBool aRefinedSearch,
+ TTp124SortOrder aSortOrder)
+ {
+ switch (aSortOrder)
+ {
+ case ESortNone:
+ {
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCompositeSearchCriteria, aRefinedSearch);
+ break;
+ }
+ case ESortAscending:
+ {
+ TPosLmSortPref ascending(CPosLandmark::ELandmarkName);
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCompositeSearchCriteria, ascending, aRefinedSearch);
+ break;
+ }
+ case ESortDescending:
+ {
+ TPosLmSortPref descending(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCompositeSearchCriteria, descending, aRefinedSearch);
+ break;
+ }
+ case ESortDistance:
+ {
+ iOperation = iMultiDbSearch->StartLandmarkSearchL(*aCompositeSearchCriteria, aRefinedSearch);
+ break;
+ }
+ default:
+ {
+ User::Leave(KErrArgument);
+ break;
+ }
+ }
+
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestSeveralTextArgumentsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestSeveralTextArgumentsL()
+ {
+ iLog->Log(_L("TestSeveralTextArgumentsL"));
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // >>>>>>> Test different text criterias <<<<<<<<<<
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Stockholm"));
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Should find landmark id: 63 name: "Nokia, Stockholm"
+ iLog->Log(_L("iMultiDbSearch->StartLandmarkSearchL"));
+ RIdArray expectedIds;
+ CleanupClosePushL(expectedIds);
+ User::LeaveIfError(expectedIds.Append(63));
+
+ SearchL(composite, EAsynchronous, EFalse, ESortAscending);
+ ValidateSearchResultsL(expectedIds, ESortAscending);
+ composite->ClearArguments();
+
+ // >>>>>>> Test same text as criterias in composite <<<<<<<
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Text9"));
+ err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("Text9"));
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+ expectedIds.Reset();
+ // Should find landmark id: 39 name: Text9
+ iLog->Log(_L("iMultiDbSearch->StartLandmarkSearchL"));
+ User::LeaveIfError(expectedIds.Append(39));
+
+ SearchL(composite, EAsynchronous, EFalse, ESortDescending);
+ ValidateSearchResultsL(expectedIds, ESortDescending);
+
+ CleanupStack::PopAndDestroy(&expectedIds);
+ CleanupStack::PopAndDestroy(composite);
+ iDisplayData->Reset();
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestAddAndRemoveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestAddAndRemoveL()
+ {
+ iLog->Log(_L("TestAddAndRemoveL"));
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // Add a text criteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("PELLE"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // Test that ClearArguments is correct
+ composite->ClearArguments();
+
+ if (composite->NumOfArguments() != 0)
+ {
+ iLog->Log(_L("Wrong number of arguments"));
+ User::Leave(-1);
+ }
+
+ // 1) Add a text criteria
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // 2) Add a text criteria
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Natur*"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // 3) Add an area criteria
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-12.23, 34.4, -2.05, 45.5);
+ User::LeaveIfError(composite->AddArgument(areaCriteria));
+ CleanupStack::Pop(areaCriteria);
+
+ // 4) Add a category criteria
+ CPosLmCategoryCriteria* catCriteria = CPosLmCategoryCriteria::NewLC();
+ catCriteria->SetCategoryNameL(_L("Museum"));
+ User::LeaveIfError(composite->AddArgument(catCriteria));
+ CleanupStack::Pop(catCriteria);
+
+ // 5) Add a nearest criteria
+ TCoordinate cord(12.23, 12);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(cord, ETrue);
+ User::LeaveIfError(composite->AddArgument(nearestCriteria));
+ CleanupStack::Pop(nearestCriteria);
+
+ if (composite->NumOfArguments() != 5)
+ {
+ iLog->Log(_L("Wrong number of arguments"));
+ User::Leave(-1);
+ }
+
+ // Remove (3) area criteria
+ CPosLmSearchCriteria* obj1 = composite->RemoveArgument(2);
+ delete obj1;obj1 = NULL;
+
+ // Remove (5) nearest criteria (after 3 removed it has id 4)
+ CPosLmSearchCriteria* obj2 = composite->RemoveArgument(3);
+ delete obj2;obj2 = NULL;
+
+ RIdArray expectedIds;
+ CleanupClosePushL(expectedIds);
+
+ // Should find landmark with id: 87 name: "Naturhistoriska"
+ User::LeaveIfError(expectedIds.Append(87));
+ SearchL(composite, EAsynchronous, EFalse, ESortAscending);
+ ValidateSearchResultsL(expectedIds, ESortAscending);
+
+ // Remove (1) first text criteria
+ CPosLmSearchCriteria* obj4 = composite->RemoveArgument(0);
+ delete obj4; obj4 = NULL;
+
+ // Remove (2) the second text criteria
+ CPosLmSearchCriteria* obj3 = composite->RemoveArgument(0);
+ delete obj3; obj3 = NULL;
+
+ expectedIds.Reset();
+ // Should find six landmarks belonging to category "museum",
+ User::LeaveIfError(expectedIds.Append(22));
+ User::LeaveIfError(expectedIds.Append(84));
+ User::LeaveIfError(expectedIds.Append(85));
+ User::LeaveIfError(expectedIds.Append(86));
+ User::LeaveIfError(expectedIds.Append(87));
+ User::LeaveIfError(expectedIds.Append(89));
+
+ SearchL(composite, EAsynchronous, EFalse, ESortNone);
+ ValidateSearchResultsL(expectedIds, ESortNone);
+
+ CleanupStack::PopAndDestroy(&expectedIds);
+ CleanupStack::PopAndDestroy(composite);
+
+ iLog->Log(_L("TestAddAndRemoveL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::ValidateSearchResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::ValidateSearchResultsL(
+ RIdArray& aExpectedIds, TTp124SortOrder aSortOrder,
+ TInt aNrOfExpectedErrors)
+ {
+ iLog->Log(_L("ValidateSearchResultsL"));
+
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results");
+ _LIT(KNotFoundErr2, "Id %d not found in search result from displaydata");
+ _LIT(KNrOfMatchError, "Nr of matches from DisplayData is not correct");
+ _LIT(KNrOfMatchError2, "Expected matches is not correct");
+
+ TBuf<100> buf;
+
+ TInt nrOfMatches = 0;
+ // list of databases to search in
+ CDesCArray* dbList = new (ELeave) CDesCArrayFlat(5);
+ CleanupStack::PushL(dbList);
+ dbList->AppendL(KLMDB1);
+ dbList->AppendL(KLMDB2);
+ dbList->AppendL(KLMDB3);
+ dbList->AppendL(KLMDB4);
+ dbList->AppendL(KLMDB5);
+ TInt dbListCount = dbList->Count();
+ for (TInt j = 0; j < dbListCount; j++)
+ {
+ // CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDatabases)[j]);
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*dbList)[j]);
+ CleanupStack::PushL(db);
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+
+ nrOfMatches += iter->NumOfItemsL();
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ buf.Format(_L("Found idde %d in db %d"), id, j);
+ //iLog->Log(buf);
+ ValidateIdL(id, j);
+ AssertTrueSecL(aExpectedIds.Find(id) != KErrNotFound, KNotFoundErr, id);
+
+ CPosLandmark* lm1 = db->ReadLandmarkLC(id);
+ id = iter->NextL();
+ // Check sort order in every iterator
+ if (aSortOrder != ESortNone && aSortOrder != ESortDistance && id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm2 = db->ReadLandmarkLC(id);
+ TPtrC name1, name2;
+ lm1->GetLandmarkName(name1);
+ lm2->GetLandmarkName(name2);
+
+ if (aSortOrder == ESortAscending)
+ {
+ AssertTrueSecL(name1.CompareC(name2) <= 0, _L("Not sorted ascending as expected"));
+ }
+ else if (aSortOrder == ESortDescending)
+ {
+ AssertTrueSecL(name1.CompareC(name2) >= 0, _L("Not sorted descending as expected"));
+ }
+ CleanupStack::PopAndDestroy(lm2);
+ }
+ CleanupStack::PopAndDestroy(lm1);
+ }
+
+ // Now check that iterator is sorted on distance
+ if (aSortOrder == ESortDistance)
+ {
+ iter->Reset();
+ RArray<TPosLmItemId> result;
+ CleanupClosePushL(result);
+
+ if (iter->NumOfItemsL() > 0)
+ {
+ iter->GetItemIdsL(result,0, iter->NumOfItemsL());
+ LandmarksSortL(result, aSortOrder);
+ TPosLmItemId idde = iter->NextL();
+ TInt index=0;
+ while (idde != KPosLmNullItemId)
+ {
+ iLog->Log(_L("##### Check iterator sorted on distance"));
+ AssertTrueSecL(idde == result[index], _L("Iterator is not sorted on distance"));
+ index++;
+ idde = iter->NextL();
+ }
+ }
+ CleanupStack::PopAndDestroy(&result);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(db);
+ }
+
+ AssertTrueSecL(nrOfMatches == iMultiDbSearch->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators"));
+ AssertTrueSecL(NrOfSearchErrors(iMultiDbSearch) == aNrOfExpectedErrors, _L("Found search errors!"));
+ AssertTrueSecL(nrOfMatches == iDisplayData->Count(), KNrOfMatchError);
+ AssertTrueSecL(aExpectedIds.Count() == iDisplayData->Count(), KNrOfMatchError2);
+
+ TInt itemId = iDisplayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item1 = iDisplayData->DisplayItem(itemId);
+ TInt lmId = item1.Landmark().LandmarkId();
+ TPtrC name1;
+ item1.Landmark().GetLandmarkName(name1);
+ TInt dbIndex = item1.DatabaseIndex();
+ // Validate lm from correct db
+ ValidateIdL(lmId, dbIndex);
+
+ buf.Format(_L("LM id: %d"), lmId);
+ //iLog->Log(buf);
+ AssertTrueSecL(aExpectedIds.Find(lmId) != KErrNotFound, KNotFoundErr2, lmId);
+ itemId = iDisplayData->NewItemIndex();
+ if (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item2 = iDisplayData->DisplayItem(itemId);
+ lmId = item2.Landmark().LandmarkId();
+ TPtrC name2;
+ lmId = item2.Landmark().LandmarkId();
+ dbIndex = item2.DatabaseIndex();
+ // Validate lm from correct db
+ ValidateIdL(lmId, dbIndex);
+
+ item2.Landmark().GetLandmarkName(name2);
+ AssertTrueSecL(aExpectedIds.Find(lmId) != KErrNotFound, KNotFoundErr2, lmId);
+
+ // Check sort order for display data items
+ if (aSortOrder == ESortAscending)
+ {
+ AssertTrueSecL(name1.CompareC(name2) <= 0, _L("Not sorted ascending as expected"));
+ }
+ else if (aSortOrder == ESortDescending)
+ {
+ AssertTrueSecL(name1.CompareC(name2) >= 0, _L("Not sorted descending as expected"));
+ }
+ }
+ }
+
+ if (aSortOrder == ESortDistance)
+ {
+ iLog->Log(_L("##### Check sorted on distance"));
+ LandmarksSortL(aExpectedIds, aSortOrder);
+ for (TInt i=0;i<aExpectedIds.Count();i++)
+ {
+ CPosLmDisplayItem& item1 = iDisplayData->DisplayItem(i);
+ TInt lmId = item1.Landmark().LandmarkId();
+ if (aExpectedIds[i] != lmId)
+ {
+ buf.Format(_L("Incorrect distance sorting Id1 %d Id2 %d"),aExpectedIds[i], lmId );
+ //iLog->Log(buf);
+ iLog->Log(buf);
+ User::Leave(-1);
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(dbList);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::NrOfSearchErrors
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp124::NrOfSearchErrors(CPosLmMultiDbSearch* aMultiDbSearcher)
+ {
+ TInt nrOfSearchErrors = aMultiDbSearcher->NumOfSearchErrors();
+ if (nrOfSearchErrors != 0)
+ {
+ for (TInt i = 0; i < nrOfSearchErrors; i++)
+ {
+ CPosLmMultiDbSearch::TSearchError error;
+ aMultiDbSearcher->GetSearchError(i, error);
+ TBuf<100> msg;
+ msg.Format(_L("Found error %d in database %d"), error.iErrorCode, error.iDatabaseIndex);
+ iLog->Log(msg);
+ }
+ }
+ return nrOfSearchErrors;
+ }
+
+// ---------------------------------------------------------
+// Tp124InternalLandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt Tp124InternalLandmarksSortL(const CPosLandmark& aSource, const CPosLandmark& aTarget)
+ {
+ // NOTE: Always sorted on distance to TCoordinate iCoord(45.5, 0.5);
+ TLocality loc1;
+ TLocality loc2;
+
+ aSource.GetPosition(loc1);
+ aTarget.GetPosition(loc2);
+ TReal32 distance1, distance2;
+ // Not nice, ugly hardcoded
+ TCoordinate iCoord(45.5, 0.5);
+ loc1.Distance(iCoord, distance1);
+ loc2.Distance(iCoord, distance2);
+
+ iCoord.Distance(loc1, distance1);
+ iCoord.Distance(loc2, distance2);
+
+ TInt res = distance1-distance2;
+
+ return res;
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::LandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::LandmarksSortL(RArray<TPosLmItemId>& aArray, TTp124SortOrder aSortOrder)
+ {
+ iLog->Log(_L("LandmarksSortL"));
+
+ RPointerArray<CPosLandmark> landmarks;
+ CleanupClosePushL(landmarks);
+
+ for (TInt i=0; i<aArray.Count(); i++)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aArray[i]);
+ landmarks.Append(lm);
+ CleanupStack::Pop(lm);
+ }
+
+ // Sort on distance, possible to add a ascending and descending sort here as well
+ // if needed
+ TLinearOrder<CPosLandmark> order(Tp124InternalLandmarksSortL);
+ landmarks.Sort(order);
+ aArray.Reset();
+ if (aSortOrder == ESortDistance)
+ {
+ for (TInt j=0; j<landmarks.Count(); j++)
+ {
+ aArray.Append(landmarks[j]->LandmarkId());
+ }
+ }
+
+
+ landmarks.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&landmarks);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::CancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::CancelTestL(const TBool& aCancelInCallback)
+ {
+ iLog->Log(_L("CancelTestL"));
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CCompositeSearchResult* res = CCompositeSearchResult::NewL(iLog);
+ CleanupStack::PushL(res);
+
+ // Get first composite search from lmDbCompositeSearchResult.txt
+ res->GetCompositeSearchResultsL(*composite);
+
+ // Cancel in callback, cancel in every progress step phase
+ // when progress has increased with 0.09
+ if (aCancelInCallback)
+ {
+ iLog->Log(_L("Cancel in Callback"));
+ TReal32 progress(0);
+ while (progress < 1.0)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(
+ iMultiDbSearch->StartLandmarkSearchL(
+ *composite,
+ EFalse),
+ progress);
+
+ TInt nrOfMatches = 0;
+ for (TInt j = 0; j < iNrOfDatabases; j++)
+ {
+ CPosLmItemIterator* iter = iMultiDbSearch->MatchIteratorL(j);
+ CleanupStack::PushL(iter);
+ nrOfMatches += iter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(iter);
+ }
+ AssertTrueSecL(nrOfMatches == iMultiDbSearch->TotalNumOfMatches(), _L("Total nr of matches doesn't match sum of matches in iterators when cancelling"));
+ //AssertTrueSecL(iMultiDbSearch->TotalNumOfMatches() == iDisplayData->Count(),_L("Wrong number of matches after cancel"));
+
+ progress = progress + 0.09;
+ }
+ }
+ else
+ {
+ // Cancel immediately
+ iLog->Log(_L("Cancel immediately"));
+ RunAsyncOperationAndCancelLD(
+ iMultiDbSearch->StartLandmarkSearchL(
+ *composite,
+ EFalse));
+
+ AssertTrueSecL(iMultiDbSearch->TotalNumOfMatches() == iDisplayData->Count(),_L("Wrong number of matches after cancel"));
+ }
+
+ if (iMultiDbSearch->NumOfSearchErrors() != 0) iLog->Log(_L("Errors after search"));
+ for (TInt i=0;i<iMultiDbSearch->NumOfSearchErrors(); i++)
+ {
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ iMultiDbSearch->GetSearchError(i, searchErr);
+ TBuf<150> buf;
+ buf.Format(_L("ErrorCode %d returned from db nr %d"),searchErr.iErrorCode, searchErr.iDatabaseIndex);
+ iLog->Log(buf);
+ }
+
+ CleanupStack::PopAndDestroy(res);
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::CompositeStressTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::CompositeStressTestL(TInt aStartNr, TInt aTotalNr)
+ {
+ iLog->Log(_L("CompositeStressTestL"));
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ TInt i=0;
+
+ for (i=0;i<aTotalNr;i++)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ if (i>aStartNr)
+ {
+ SearchL(composite, EAsynchronous, EFalse, ESortAscending);
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of matches"), iDisplayData->Count());
+ iLog->Log(buf);
+ }
+ }
+
+ TInt antal = composite->NumOfArguments();
+ if (antal != aTotalNr) iLog->Log(_L("nr of composite arguments is incorrect"));
+
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of matches"), iDisplayData->Count());
+ iLog->Log(buf);
+
+ TInt itemId = iDisplayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item1 = iDisplayData->DisplayItem(itemId);
+ TInt lmId = item1.Landmark().LandmarkId();
+ TPtrC name1;
+ item1.Landmark().GetLandmarkName(name1);
+ TInt dbIndex = item1.DatabaseIndex();
+ // Validate lm from correct db
+ ValidateIdL(lmId, dbIndex);
+ buf.Format(_L("LM id: %d from DB %d"), lmId, dbIndex);
+ iLog->Log(buf);
+ itemId = iDisplayData->NewItemIndex();
+ }
+
+ // 105 is the total number of landmarks in the five dbs
+ if (iDisplayData->Count() != 105)
+ {
+ iLog->Log(_L("Wrong number of matches found"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestWithNoPreviousResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestWithNoPreviousResultL()
+ {
+ iLog->Log(_L("TestWithNoPreviousResultL"));
+
+ if (iMultiDbSearch) iMultiDbSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+ delete iMultiDbSearch;
+ iMultiDbSearch = CPosLmMultiDbSearch::NewL(*iDatabases);
+
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiDbSearch->SetDisplayData(*iDisplayData);
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // No previous result-> should leave with KErrArgument
+ TRAPD(err, SearchL(composite, EAsynchronous, ETrue, ESortAscending));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("It should not be possible to search when no previous result has been retrieved"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestWithIdListAndCompositeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestWithIdListAndCompositeL()
+ {
+ iLog->Log(_L("TestWithIdListAndCompositeL"));
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ // Then create an IdList
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ RIdArray ids;
+ CleanupClosePushL(ids);
+ User::LeaveIfError(ids.Append(63));
+ User::LeaveIfError(ids.Append(33));
+ idList->SetLandmarkIdsL(ids);
+ CleanupStack::PopAndDestroy(&ids);
+
+ User::LeaveIfError(composite->AddArgument(idList));
+ CleanupStack::Pop(idList);
+
+ // It is not possible to use IdList in combination with composite in multiple db search
+ TRAPD(err, SearchL(composite, EAsynchronous, EFalse, ESortAscending));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("It should not be possible to use CPosLmIdListCriteria in a composite search"));
+ User::Leave(err);
+
+ }
+
+ CleanupStack::PopAndDestroy(composite);
+ iDisplayData->Reset();
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestCategoryCompositeSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestCategoryCompositeSearchL()
+ {
+ iLog->Log(_L("TestCategoryCompositeSearchL"));
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // It should not be possible to add a CPosLmCatNameCriteria to composite
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("It should not be possible to use CPosLmIdListCriteria in a composite search"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(nameCriteria);
+
+ // Test once more
+ CPosLmCatNameCriteria* nameCriteria2 = CPosLmCatNameCriteria::NewLC();
+ nameCriteria2->SetSearchPatternL(_L("*kontor"));
+ err = composite->AddArgument(nameCriteria2);
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("It should not be possible to use CPosLmIdListCriteria in a composite search"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(nameCriteria2);
+
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::TestCompositeInCompositeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::TestCompositeInCompositeL()
+ {
+ iLog->Log(_L("TestCompositeInCompositeL"));
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(_L("*"));
+
+ User::LeaveIfError(composite->AddArgument(textCriteria));
+ CleanupStack::Pop(textCriteria);
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-48, 5, -5, 20);
+
+ User::LeaveIfError(composite->AddArgument(areaCriteria));
+ CleanupStack::Pop(areaCriteria);
+
+ //Create composite object that should be used as argument to the first composite object
+ CPosLmCompositeCriteria* composite2 = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("TE,*"));
+
+ User::LeaveIfError(composite2->AddArgument(textCriteria2));
+ CleanupStack::Pop(textCriteria2);
+
+ //User::LeaveIfError(composite->AddArgument(composite2));
+ TInt res = composite->AddArgument(composite2);
+ if (res != KErrNotSupported)
+ {
+ iLog->Log(_L("It should not be possible to add to a composite "));
+ User::Leave(-1);
+
+ }
+
+ CleanupStack::PopAndDestroy(composite2);
+
+
+ CleanupStack::PopAndDestroy(composite);
+
+ iLog->Log(_L("TestCompositeInCompositeL Done"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp124::PrintCompositeInfo
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp124::PrintCompositeInfo(CPosLmCompositeCriteria* aComposite)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("PrintCompositeInfo() NrOfArg %d"), aComposite->NumOfArguments());
+ iLog->Log(buf);
+
+ for (TUint i=0;i<aComposite->NumOfArguments();i++)
+ {
+
+ CPosLmSearchCriteria& comp = aComposite->Argument(i);
+ TInt type = comp.CriteriaType();
+
+ if (type == CPosLmSearchCriteria::ECriteriaArea)
+ {
+ iLog->Log(_L("Arg Area found"));
+
+ CPosLmAreaCriteria& tt = static_cast<CPosLmAreaCriteria&>(comp);
+
+ TReal64 southLat;
+ TReal64 northLat;
+ TReal64 westLong;
+ TReal64 eastLong;
+
+ tt.GetSearchArea(southLat, northLat, westLong, eastLong);
+
+ buf.Format(_L("SouthL %f NorthL: %f WestL :%f EastL: %f"), (TReal)southLat, (TReal)northLat, (TReal)westLong, (TReal)eastLong);
+ iLog->Log(buf);
+
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaText)
+ {
+ iLog->Log(_L("Arg Text found:"));
+ CPosLmTextCriteria& tt = static_cast<CPosLmTextCriteria&>(comp);
+ iLog->Log(tt.Text());
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaComposite)
+ {
+ iLog->Log(_L("Arg Composite found"));
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaCategory)
+ {
+ iLog->Log(_L("Arg Category found"));
+
+ CPosLmCategoryCriteria& tt = static_cast<CPosLmCategoryCriteria&>(comp);
+ iLog->Log(tt.CategoryName());
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaFindNearest)
+ {
+ CPosLmNearestCriteria& tt = static_cast<CPosLmNearestCriteria&>(comp);
+ TCoordinate cord;
+ tt.GetCoordinate(cord);
+ iLog->Log(_L("Arg Nearest found"));
+ buf.Format(_L("Latitude %f Longitude: %f MaxDist:%f"), (TReal)cord.Latitude(), (TReal)cord.Longitude(), (TReal)tt.MaxDistance());
+ iLog->Log(buf);
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaIdList)
+ {
+ iLog->Log(_L("Arg Idlist found"));
+ CPosLmIdListCriteria& tt = static_cast<CPosLmIdListCriteria&>(comp);
+
+ RArray<TPosLmItemId> result;
+ CleanupClosePushL(result);
+ tt.GetLandmarkIdsL(result);
+
+ buf.Format(_L("Nr of Ids: %d"), result.Count());
+ iLog->Log(buf);
+
+ for (TInt i=0;i<result.Count();i++)
+ {
+ buf.Format(_L("ID%d: %d"), i, result[i]);
+
+ }
+ CleanupStack::PopAndDestroy(&result);
+
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaCategoryByName)
+ {
+ // Should never come here, ECriteriaCategoryByName not supported in composite objects
+ iLog->Log(_L("Arg Categorybyname found"));
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp125.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1453 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp125.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+
+ _LIT(KPizzeria, "Pizzeria"); // Db 1, id 1
+ _LIT(KHambergerbar, "Hamburgerbar"); // Db 1, id 2
+ _LIT(KKinarestaurang, "Kinarestaurang"); // Db 1, id 3
+ _LIT(KGaraget, "Garaget"); // Db 1, id 4
+ _LIT(KBilverkstad, "Bilverkstad"); // Db 1, id 5
+ _LIT(KPastaRestaurang, "Pasta Restaurang"); // Db 2, id 6
+ _LIT(KBilia, "Bilia"); // Db 2, id 7
+ _LIT(KVolksWagen, "VolksWagen"); // Db 2, id 8
+ _LIT(KTaxiGoteborg, "Taxi Göteborg"); // Db 2, id 9
+ _LIT(KTaxi, "Taxi"); // Db 2, id 10
+ _LIT(KStadsbibliotek, "Stadsbibliotek"); // Db 2, id 11
+ _LIT(KSystembolag, "Systembolag"); // Db 2, id 12
+ _LIT(KNokiKontor, "Nokia Kontor"); // Db 2, id 13
+ _LIT(KTietoEnatorKontor, "TietoEnator kontor"); // Db 2, id 14
+ _LIT(KThaiRestaurang, "Thai Restaurang"); // Db 3, id 15
+ _LIT(KMcDonalds, "McDonalds"); // Db 3, id 16
+ _LIT(KBurgerKing, "BurgerKing"); // Db 3, id 17
+ _LIT(KFrisor, "Frisör"); // Db 3, id 18
+ _LIT(KHunddagis, "Hunddagis"); // Db 3, id 19
+ _LIT(KVeterinar, "Veterinär"); // Db 3, id 20
+ _LIT(KKyrkogard, "Kyrkogård"); // Db 4, id 21
+ _LIT(KMuseum, "Museum"); // Db 4, id 22
+ _LIT(KDagis, "Dagis"); // Db 4, id 23
+ _LIT(KStadspark, "StadsPark"); // Db 4, id 24
+ _LIT(KSjukhus, "Sjukhus"); // Db 5, id 25
+ _LIT(KLakare, "Läkare"); // Db 5, id 26
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp125::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iCategorySearchResults.ResetAndDestroy();
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ TBuf<50> buf;
+ if (err != KErrNone)
+ {
+ buf.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp125::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::StartL()
+ {
+
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+ SetupDbArrayL();
+
+ _LIT(KEmptyTextCriteriaErr, "An empty string as text criteria should not be allowed");
+ CDesCArray* dbList = new (ELeave) CDesCArrayFlat(8);
+
+ CleanupStack::PushL(dbList);
+
+ dbList->AppendL(KDb20);
+ dbList->AppendL(KDb40);
+ dbList->AppendL(KDb60);
+ dbList->AppendL(KDb80);
+ dbList->AppendL(KDb105);
+
+ RemoveExtraCategoriesL();
+
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+
+ TInt err = KErrNone;
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ // Start by testing some error flows, returning KErrArgument
+ TRAP(err, iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+
+ // Test empty string
+ nameCriteria->SetSearchPatternL(_L(""));
+ TRAP(err, iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+ CleanupStack::PopAndDestroy(nameCriteria);
+
+ AppendCategorySearchResultsL();
+
+// Search synchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt syncronously"));
+ SearchL(iCategorySearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing search with sort order"));
+ SearchWithSortOrderL(iCategorySearchResults, ESynchronous);
+
+
+ iLog->Log(_L("Testing search with maximum nr of matches"));
+ SearchWithMaximumL(iCategorySearchResults, ESynchronous);
+
+
+// Search asynchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asyncronously"));
+ SearchL(iCategorySearchResults, EAsynchronous);
+
+ iLog->Log(_L("Testing search with sort order asynchronously"));
+ SearchWithSortOrderL(iCategorySearchResults, EAsynchronous);
+
+ iLog->Log(_L("Testing search with maximum nr of matches asynchronously"));
+ SearchWithMaximumL(iCategorySearchResults, EAsynchronous);
+
+// Search for added categories
+ iLog->Log(_L("Testing search after category has been added"));
+ SearchAfterAddedCategoryL();
+
+// Cancel search test
+ iLog->Log(_L("Testing category search and cancel"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Testing category search and cancel in callback"));
+ SearchAndCancelL(ETrue);
+
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ dbMan->SetDefaultDatabaseUriL(KDb20);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ CleanupStack::PushL(categoryManager);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ iLog->Log(_L("Testing search with global categories included, sync"));
+ SearchGlobalL(iCategorySearchResults, ETrue);
+
+ iLog->Log(_L("Testing search with global categories included, asyncronously"));
+ SearchGlobalL(iCategorySearchResults, EFalse);
+
+ // Test to add the global categories to one more DB
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+ dbMan->SetDefaultDatabaseUriL(KDb40);
+ CleanupStack::PopAndDestroy(dbMan);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager2 = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ CleanupStack::PushL(categoryManager2);
+ CleanupStack::PopAndDestroy(categoryManager2);
+
+ iLog->Log(_L("Testing search with duplicate global categories included, sync"));
+ TestDuplicateGlobalCategoriesL(iCategorySearchResults, ETrue);
+
+ iLog->Log(_L("Testing search with duplicate global categories included, async"));
+ TestDuplicateGlobalCategoriesL(iCategorySearchResults, EFalse);
+
+ RemoveGlobalCategoriesL();
+ CleanupStack::PopAndDestroy(dbList);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp125::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ }
+
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ // Test the display data:
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+
+ }
+
+ TInt count = 0;
+ TInt dbIndex = 0;
+ TInt categoryId = 0;
+ TPtrC categoryName;
+ TBuf<100> categoryName2;
+ _LIT(KErrCatMismatch, "Category wrong in display data");
+ _LIT(KErrorWrongType, "Display data doesn't indicate ECategoryItem when it should.");
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+
+ // Check that the item indicates that it contains a category
+ AssertTrueSecL(displayItem.DisplayItemType() == CPosLmDisplayItem::ECategoryItem, KErrorWrongType);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ dbIndex = displayItem.DatabaseIndex();
+ categoryId = displayCategory.CategoryId();
+
+ // Check that the db index is correct
+ AssertThatIdIsInCorrectDbL(dbIndex, categoryId);
+
+ // Check that this match is correct
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(categoryId), KNotFoundErr, categoryId);
+ displayCategory.GetCategoryName(categoryName);
+ categoryName2 = (*iDbArray)[categoryId - 1]; // Compensate for 0-index
+
+ // Check that the category name is correct
+ AssertTrueSecL(categoryName == categoryName2, KErrCatMismatch);
+ }
+
+
+ CPosLmItemIterator* iter = NULL;
+
+ for (count = 0; count < 5; count++)
+ {
+ iter = iLandmarksMultiDbSearch->MatchIteratorL(count);
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ AssertThatIdIsInCorrectDbL(count, id);
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr, id);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iter = NULL;
+ }
+
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+// ---------------------------------------------------------
+// CPosTp125::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchWithSortOrderL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KErrorInSorting, "Error in sorting");
+
+ CPosLmCategoryManager::TCategorySortPref sortPref;
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ for (TInt j=0;j<2;j++)
+ {
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+
+ if (j==0)
+ {
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+ }
+ else
+ {
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+ }
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ }
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ // Test the display data:
+ // Create a sorted list out of the search result
+ RArray<TPosLmItemId> searchResults = aSearchResults[i]->SearchResult();
+ // To avoid User-44 create a copy of the aSearchResults[i]
+ RArray<TPosLmItemId> searchResultsSorted;
+ CleanupClosePushL(searchResultsSorted);
+
+ for (TInt kk=0;kk<searchResults.Count();kk++)
+ {
+ searchResultsSorted.Append(searchResults[kk]);
+ }
+
+ CDesCArrayFlat* sortedArray = NULL;
+
+ SortResultsL(searchResultsSorted, sortedArray);
+ CleanupStack::PopAndDestroy(); // searchResultsSorted
+ CleanupStack::PushL(sortedArray);
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameDescending)
+ {
+ InvertArrayL(sortedArray);
+ }
+
+ TInt count = 0;
+ TInt categoryId = 0;
+ TBuf<100> categoryName2;
+ TBuf<100> categoryName3;
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ categoryId = displayCategory.CategoryId();
+ categoryName2 = (*iDbArray)[categoryId - 1]; // Compensate for 0-index
+ categoryName3 = (*sortedArray)[count];
+ // Check that sort order is correct
+ AssertTrueSecL(categoryName3 == categoryName2, _L("Error in sorting"));
+ }
+
+ CleanupStack::PopAndDestroy(sortedArray);
+
+ typedef RArray<TInt> myArrayType;
+ RArray<myArrayType> resultArray;
+ myArrayType array1;
+ myArrayType array2;
+ myArrayType array3;
+ myArrayType array4;
+ myArrayType array5;
+
+ CleanupClosePushL(resultArray);
+ CleanupClosePushL(array1);
+ CleanupClosePushL(array2);
+ CleanupClosePushL(array3);
+ CleanupClosePushL(array4);
+ CleanupClosePushL(array5);
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameAscending)
+ {
+ array1.AppendL(5);
+ array1.AppendL(4);
+ array1.AppendL(2);
+ array1.AppendL(3);
+ array1.AppendL(1);
+
+ array2.AppendL(7);
+ array2.AppendL(13);
+ array2.AppendL(6);
+ array2.AppendL(11);
+ array2.AppendL(12);
+ array2.AppendL(10);
+ array2.AppendL(9);
+ array2.AppendL(14);
+ array2.AppendL(8);
+
+ array3.AppendL(17);
+ array3.AppendL(18);
+ array3.AppendL(19);
+ array3.AppendL(16);
+ array3.AppendL(15);
+ array3.AppendL(20);
+
+ array4.AppendL(23);
+ array4.AppendL(21);
+ array4.AppendL(22);
+ array4.AppendL(24);
+
+ array5.AppendL(26);
+ array5.AppendL(25);
+ }
+ else
+ {
+ array1.AppendL(1);
+ array1.AppendL(3);
+ array1.AppendL(2);
+ array1.AppendL(4);
+ array1.AppendL(5);
+
+ array2.AppendL(8);
+ array2.AppendL(14);
+ array2.AppendL(9);
+ array2.AppendL(10);
+ array2.AppendL(12);
+ array2.AppendL(11);
+ array2.AppendL(6);
+ array2.AppendL(13);
+ array2.AppendL(7);
+
+ array3.AppendL(20);
+ array3.AppendL(15);
+ array3.AppendL(16);
+ array3.AppendL(19);
+ array3.AppendL(18);
+ array3.AppendL(17);
+
+ array4.AppendL(24);
+ array4.AppendL(22);
+ array4.AppendL(21);
+ array4.AppendL(23);
+
+ array5.AppendL(25);
+ array5.AppendL(26);
+ }
+
+ resultArray.Append(array1);
+ resultArray.Append(array2);
+ resultArray.Append(array3);
+ resultArray.Append(array4);
+ resultArray.Append(array5);
+
+ CPosLmItemIterator* iter = NULL;
+
+ for (TInt dbCount = 0; dbCount < 5; dbCount++)
+ {
+ iter = iLandmarksMultiDbSearch->MatchIteratorL(dbCount);
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ TInt itemCount = 0;
+ while (id != KPosLmNullItemId)
+ {
+ AssertThatIdIsInCorrectDbL(dbCount, id);
+ // Check that sort order is correct:
+ // Some elements will be missing after the search, so skip those.
+ while (itemCount < resultArray[dbCount].Count()
+ && resultArray[dbCount][itemCount] != id)
+ {
+ itemCount++;
+ }
+ // Check that a match was found in the loop above.
+ AssertTrueSecL(itemCount < resultArray[dbCount].Count(), KErrorInSorting);
+ id = iter->NextL();
+ itemCount++;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iter = NULL;
+ }
+
+ CleanupStack::PopAndDestroy(6); // Arrays
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+ }
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp125::SearchWithMaximumL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchWithMaximumL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchWithMaximumL is performed");
+ _LIT(KNumOfDisplayMatchesErr, "No. of matches for the display data is incorrect when SearchWithMaximumL is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ // Set max nr of matches from 1 to 10 and check that correct nr of matches for each value
+ for (TInt j = 1; j <= 10; j++)
+ {
+ nameCriteria->SetSearchPatternL(_L("*"));
+ iLandmarksMultiDbSearch->SetMaxNumOfMatches(j);
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ }
+
+ TInt displayCount = displayData->Count();
+
+ switch(j)
+ {
+ case 1:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 5, KNumOfDisplayMatchesErr);
+ break;
+ case 2:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 10, KNumOfDisplayMatchesErr);
+ break;
+ case 3:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 14, KNumOfDisplayMatchesErr);
+ break;
+ case 4:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 18, KNumOfDisplayMatchesErr);
+ break;
+ case 5:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 21, KNumOfDisplayMatchesErr);
+ break;
+ case 6:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 23, KNumOfDisplayMatchesErr);
+ break;
+ case 7:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 7, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 24, KNumOfDisplayMatchesErr);
+ break;
+ case 8:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 8, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 25, KNumOfDisplayMatchesErr);
+ break;
+ case 9:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 9, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 26, KNumOfDisplayMatchesErr);
+ break;
+ case 10:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 9, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 26, KNumOfDisplayMatchesErr);
+ break;
+ default:
+ break;
+ }
+
+ // Check that the DB:s actually contains correct data:
+ CPosLmItemIterator* iter = NULL;
+
+ for (TInt count = 0; count < 5; count++)
+ {
+ iter = iLandmarksMultiDbSearch->MatchIteratorL(count);
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ AssertThatIdIsInCorrectDbL(count, id);
+ // Use search result for position 0, should always be for *
+ AssertTrueSecL(aSearchResults[0]->FindSearchResult(id), KNotFoundErr, id);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iter = NULL;
+ }
+ }
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp125::SearchAfterAddedCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchAfterAddedCategoryL()
+ {
+ // _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchAfterAddedCategoryL is performed");
+ _LIT(KCategoryNotFound, "Added category could not be found");
+ _LIT(KCategory, "StoraKoncernen");
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ //iDatabase = CP
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb40);
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ CPosLandmarkCategory* cat1 = CPosLandmarkCategory::NewLC();
+
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(_L("S*"));
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ // Then add a new category with a name starting with S
+ cat1->SetCategoryNameL(KCategory);
+ TPosLmItemId categoryId = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ // Then use do another search within the results of previous search
+ // should return Stadsbibliotek and Stadspark
+ nameCriteria->SetSearchPatternL(_L("St*"));
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone, ETrue));
+
+ _LIT(KErrorNrOfMatchesRefined, "Wrong nr matches after refined search after adding a category.");
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 1, KErrorNrOfMatchesRefined); // Stadsbibliotek
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 1, KErrorNrOfMatchesRefined); // Stadspark
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(displayData->Count() == 2, KErrorNrOfMatchesRefined);
+ // Set a maximum number of matches, should return only one of Stadsbibliotek and Stadspark
+ iLandmarksMultiDbSearch->SetMaxNumOfMatches(1);
+
+ // Do another search just to see that it is possible to find the added category
+ nameCriteria->SetSearchPatternL(KCategory);
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 1, KErrorNrOfMatchesRefined); // StoraKoncernen
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(displayData->Count() == 1, KErrorNrOfMatchesRefined);
+
+ CPosLmItemIterator* iter = iLandmarksMultiDbSearch->MatchIteratorL(1);
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ if (categoryId != id)
+ {
+ iLog->Log(KCategoryNotFound);
+ User::Leave(-1);
+ }
+
+ // Remove added category
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(categoryId));
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp125::SearchGlobalL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchGlobalL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync)
+ {
+ iLog->Log(_L("SearchGlobalL"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchGlobalL is performed");
+
+ // Nr of global categories, defined in resource file
+ //const TInt KNrOfGlobalCategories = 8;
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ CPosLmCategoryManager::TCategorySortPref sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ for (TInt l=0;l<2;l++)
+ {
+ if (l==0) sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ else if (l==1) sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+
+ // i=0 the first entry in aSearchResults should be wildcard "*"
+ TInt i = 0;
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+
+ // The asynchronous flow
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+
+ SetupDbArrayL();
+
+ iDbArray->Sort();
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameDescending)
+ {
+ InvertArrayL(iDbArray);
+ }
+
+ //TUint expNr = (aSearchResults[i]->SearchResult()).Count() + KNrOfGlobalCategories;
+ TUint expNr = (aSearchResults[i]->SearchResult()).Count();
+
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+ if (expNr != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt count = 0;
+ TBuf<100> categoryName2;
+ TPtrC categoryName;
+ RPointerArray<CCategorySearchResult> searchResults;
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ displayCategory.GetCategoryName(categoryName);
+ categoryName2 = (*iDbArray)[count];
+ // Check that sort order is correct
+ AssertTrueSecL(categoryName == categoryName2, _L("Error in sorting"));
+ }
+
+ } // end for (TInt l=0 ...)
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("SearchGlobalL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KCancelErr, "The search is canceled after progress has increased but no search result is found");
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(iCategorySearchResults[KIndex]->TextCriteria());
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarksMultiDbSearch->StartCategorySearchL(
+ *nameCriteria,
+ CPosLmCategoryManager::ECategorySortOrderNone,
+ iCategorySearchResults[KIndex]->Redefined()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarksMultiDbSearch->StartCategorySearchL(
+ *nameCriteria,
+ CPosLmCategoryManager::ECategorySortOrderNone,
+ iCategorySearchResults[KIndex]->Redefined()));
+ }
+
+
+
+ if (aInCallback)
+ {
+ CPosLmItemIterator* iter0 = iLandmarksMultiDbSearch->MatchIteratorL(0);
+ CleanupStack::PushL(iter0);
+ CPosLmItemIterator* iter1 = iLandmarksMultiDbSearch->MatchIteratorL(1);
+ CleanupStack::PushL(iter1);
+ CPosLmItemIterator* iter2 = iLandmarksMultiDbSearch->MatchIteratorL(2);
+ CleanupStack::PushL(iter2);
+ CPosLmItemIterator* iter3 = iLandmarksMultiDbSearch->MatchIteratorL(3);
+ CleanupStack::PushL(iter3);
+ CPosLmItemIterator* iter4 = iLandmarksMultiDbSearch->MatchIteratorL(4);
+ CleanupStack::PushL(iter4);
+
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == iter0->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == iter1->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == iter2->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == iter3->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == iter4->NumOfItemsL(), KNumOfMatchesErr);
+
+ AssertTrueSecL(displayData->Count() > 0, KNumOfMatchesErr);
+
+ AssertTrueSecL((iter0->NumOfItemsL() +
+ iter0->NumOfItemsL() +
+ iter0->NumOfItemsL() +
+ iter0->NumOfItemsL() +
+ iter0->NumOfItemsL()) == displayData->Count(), KCancelErr);
+
+ CleanupStack::PopAndDestroy(5);
+ }
+
+
+
+ CleanupStack::PopAndDestroy(nameCriteria);
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+void CPosTp125::TestDuplicateGlobalCategoriesL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync)
+ {
+ iLog->Log(_L("SearchGlobalL with duplicates"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchGlobalL with duplicates is performed");
+
+ // Nr of global categories, defined in resource file
+ //const TInt KNrOfGlobalCategories = 15 * 2;
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ CPosLmCategoryManager::TCategorySortPref sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ for (TInt l=0;l<2;l++)
+ {
+ if (l==0) sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ else if (l==1) sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+
+ // i=0 the first entry in aSearchResults should be wildcard "*"
+ TInt i = 0;
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+
+ // The asynchronous flow
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+ SetupDbArrayL();
+
+ iDbArray->Sort();
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameDescending)
+ {
+ InvertArrayL(iDbArray);
+ }
+
+ TUint expNr = (aSearchResults[i]->SearchResult()).Count();
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+ if (expNr != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt count = 0;
+
+ TBuf<100> categoryName2;
+ TPtrC categoryName;
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ displayCategory.GetCategoryName(categoryName);
+ categoryName2 = (*iDbArray)[count];
+ // Check that sort order is correct
+ AssertTrueSecL(categoryName == categoryName2, _L("Error in sorting"));
+ }
+
+ } // end for (TInt l=0 ...)
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("SearchGlobalL Done"));
+ }
+
+void CPosTp125::RemoveExtraCategoriesL()
+ {
+ TInt err = KErrNone;
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb20);
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L(" Default database opened and initialised "));
+
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ ExecuteAndDeleteLD(catMan->ResetGlobalCategoriesL());
+
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb40);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ // Existing categories here
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb60);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ // Existing categories here
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb80);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ // Existing categories here
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb105);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+
+ void CPosTp125::RemoveCategoryL(CPosLmCategoryManager* aCatMan,
+ const TPosLmItemId aCatId)
+ {
+ ExecuteAndDeleteLD(aCatMan->RemoveCategoryL(aCatId));
+ }
+
+void CPosTp125::AssertThatIdIsInCorrectDbL(TInt aDbIndex, TInt aId)
+ {
+ _LIT(KErrorWrongDb, "Id returned from wrong db");
+ _LIT(KIllegalIndex, "Illegal index sent to AssertThatIdIsInCorrectDbL()");
+ switch(aDbIndex)
+ {
+ case 0:
+ AssertTrueSecL(aId >= 1 && aId <= 5, KErrorWrongDb);
+ break;
+ case 1:
+ AssertTrueSecL(aId >= 6 && aId <= 14, KErrorWrongDb);
+ break;
+ case 2:
+ AssertTrueSecL(aId >= 15 && aId <= 20, KErrorWrongDb);
+ break;
+ case 3:
+ AssertTrueSecL(aId >= 21 && aId <= 24, KErrorWrongDb);
+ break;
+ case 4:
+ AssertTrueSecL(aId >= 25 && aId <= 26, KErrorWrongDb);
+ break;
+ default:
+ iLog->Log(KIllegalIndex);
+ User::Leave(-1);
+ break;
+
+ }
+ }
+
+void CPosTp125::SetupDbArrayL()
+ {
+ iDbArray = NULL;
+ // This array is used when testing display data.
+ iDbArray = new(ELeave) CDesCArrayFlat(8);
+
+ // Build the array so that the array index is equivalent with the db index, except that this array is 0-based.
+ iDbArray->AppendL(KPizzeria);
+ iDbArray->AppendL(KHambergerbar);
+ iDbArray->AppendL(KKinarestaurang);
+ iDbArray->AppendL(KGaraget);
+ iDbArray->AppendL(KBilverkstad);
+ iDbArray->AppendL(KPastaRestaurang);
+ iDbArray->AppendL(KBilia);
+ iDbArray->AppendL(KVolksWagen);
+ iDbArray->AppendL(KTaxiGoteborg);
+ iDbArray->AppendL(KTaxi);
+ iDbArray->AppendL(KStadsbibliotek);
+ iDbArray->AppendL(KSystembolag);
+ iDbArray->AppendL(KNokiKontor);
+ iDbArray->AppendL(KTietoEnatorKontor);
+ iDbArray->AppendL(KThaiRestaurang);
+ iDbArray->AppendL(KMcDonalds);
+ iDbArray->AppendL(KBurgerKing);
+ iDbArray->AppendL(KFrisor);
+ iDbArray->AppendL(KHunddagis);
+ iDbArray->AppendL(KVeterinar);
+ iDbArray->AppendL(KKyrkogard);
+ iDbArray->AppendL(KMuseum);
+ iDbArray->AppendL(KDagis);
+ iDbArray->AppendL(KStadspark);
+ iDbArray->AppendL(KSjukhus);
+ iDbArray->AppendL(KLakare);
+ }
+
+void CPosTp125::SortResultsL(RArray<TPosLmItemId>& aArray,
+ CDesCArrayFlat*& aResultArray)
+ {
+ TInt count = 0;
+ aResultArray = new(ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(aResultArray);
+ for (count = 0 ; count < aArray.Count(); count++)
+ {
+ TInt id = aArray[count];
+ aResultArray->AppendL((*iDbArray)[id - 1]); // compensate for 0-based array
+ }
+
+ aResultArray->Sort();
+ CleanupStack::Pop(aResultArray);
+ }
+
+void CPosTp125::InvertArrayL(CDesCArrayFlat*& aArray)
+ {
+ TInt maxCount = aArray->Count();
+ TInt count = 0;
+
+ CDesCArrayFlat* copyArray = new(ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(copyArray);
+
+ for (count = 0; count < maxCount; count++)
+ {
+ copyArray->AppendL((*aArray)[count]);
+ }
+
+ aArray->Reset();
+ for (count = 0; count < maxCount; count++)
+ {
+ aArray->AppendL((*copyArray)[maxCount - count - 1]);
+ }
+
+ CleanupStack::PopAndDestroy(copyArray);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp126.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,452 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp126.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <EPos_CPosLmSearchCriteria.h>
+#include <EPos_TPosLMSortPref.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLandmarkSearch.h>
+//#include <ss_std.h>
+
+
+// CONSTANTS
+_LIT(KWildcard, "*");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp126::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp126::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+
+ iThread.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp126::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp126::StartL()
+ {
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+
+ CDesCArray* dbList = new (ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(dbList);
+ dbList->AppendL(KDb20);
+ dbList->AppendL(KDb40);
+ dbList->AppendL(KDb60);
+ dbList->AppendL(KDb80);
+ dbList->AppendL(KDb105);
+
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+ TInt err = KErrNone;
+
+ // Test that a 'use previous matches' search doesn't work in the first search.
+ CPosLmTextCriteria* lmtextCriteria = CPosLmTextCriteria::NewLC();
+ lmtextCriteria->SetTextL(KWildcard);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartLandmarkSearchL(*lmtextCriteria,
+ sortPref,
+ ETrue)));
+
+ _LIT(KErrorWrongCodePreviousMatches, "Wrong error code for searching in previous matches when there are no previous matches");
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodePreviousMatches, err);
+
+ // Test that a 'use previous matches' search doesn't work in the first search. (category search)
+ CPosLmCategoryManager::TCategorySortPref sortPrefCat = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ CPosLmCatNameCriteria* nameCriteriaCat = CPosLmCatNameCriteria::NewLC();
+ nameCriteriaCat->SetSearchPatternL(KWildcard);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteriaCat,
+ sortPrefCat,
+ ETrue)));
+ _LIT(KErrorWrongCodePreviousMatchesCat, "Wrong error code for searching in previous matches when there are no previous matches (categories)");
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodePreviousMatchesCat, err);
+
+ CleanupStack::PopAndDestroy(nameCriteriaCat);
+
+ // Check that only correct criteria works with category searches:
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(5,5,5,5);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ CPosLmCompositeCriteria* compCriteria =
+ CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ CPosLmIdListCriteria* idListCriteria = CPosLmIdListCriteria::NewLC();
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(TCoordinate(10,10));
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ CPosLmCategoryCriteria* catCriteria = CPosLmCategoryCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(KWildcard);
+ RArray<TPosLmItemId> idArray;
+ CleanupClosePushL(idArray);
+ idArray.Append(3);
+ idArray.Append(4);
+ idListCriteria->SetLandmarkIdsL(idArray);
+ textCriteria->SetTextL(KWildcard);
+ catCriteria->SetCategoryNameL(KWildcard);
+ textCriteria->SetTextL(KWildcard);
+
+ _LIT(KErrorWrongCodeForUnsupportedCriteria,"Wrong error code for unsupported criteria in category search");
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*catCriteria,sortPrefCat)));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForUnsupportedCriteria, err);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*textCriteria,sortPrefCat)));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForUnsupportedCriteria, err);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*areaCriteria,sortPrefCat)));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForUnsupportedCriteria, err);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*compCriteria,sortPrefCat)));
+ // Composite is not supported in category search
+ AssertTrueSecL(err == KErrNotSupported, KErrorWrongCodeForUnsupportedCriteria, err);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*idListCriteria,sortPrefCat)));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForUnsupportedCriteria, err);
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nearestCriteria,sortPrefCat)));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForUnsupportedCriteria, err);
+
+ // This should not leave:
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria,sortPrefCat));
+
+ // Start a search and test that a new search cannot start until it is finished:
+ CPosLmOperation* op = iLandmarksMultiDbSearch->StartLandmarkSearchL(*lmtextCriteria,sortPref);
+ CleanupStack::PushL(op);
+ TRAP(err, iLandmarksMultiDbSearch->StartLandmarkSearchL(*lmtextCriteria,sortPref));
+ _LIT(KErrorWrongCodeForInUse, "Wrong error code when testing 'in use' for multi db searches.");
+ AssertTrueSecL(err == KErrInUse, KErrorWrongCodeForInUse, err);
+
+ // Check that a new db list cannot be set during a search.
+ TRAP(err,iLandmarksMultiDbSearch->SetDatabasesToSearchL(*dbList));
+ _LIT(KErrorWrongCodeForInUseSetDB, "Wrong error code when testing 'in use' for SetDatabasesToSearchL.");
+ AssertTrueSecL(err == KErrInUse, KErrorWrongCodeForInUseSetDB, err);
+ TRAP(err, iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria,sortPrefCat));
+ ExecuteAndDeleteLD(op);
+ CleanupStack::Pop(op);
+ AssertTrueSecL(err == KErrInUse, KErrorWrongCodeForInUse, err);
+
+ // Start a category search and test that a new search cannot start until it is finished:
+ op = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria,sortPrefCat);
+ CleanupStack::PushL(op);
+ TRAP(err, iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria,sortPrefCat));
+ AssertTrueSecL(err == KErrInUse, KErrorWrongCodeForInUse, err);
+ TRAP(err, iLandmarksMultiDbSearch->StartLandmarkSearchL(*lmtextCriteria,sortPref));
+ ExecuteAndDeleteLD(op);
+ CleanupStack::Pop(op);
+ AssertTrueSecL(err == KErrInUse, KErrorWrongCodeForInUse, err);
+
+ // Test that an id list criteria cannot be used.
+ TRAP(err, ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartLandmarkSearchL(*idListCriteria,
+ sortPref)));
+ _LIT(KErrorWrongCodeForIdListCriteria, "Wrong error code for id list criteria.");
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForIdListCriteria, err);
+
+ CleanupStack::PopAndDestroy(); // idArray
+ CleanupStack::PopAndDestroy(catCriteria);
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ CleanupStack::PopAndDestroy(idListCriteria);
+ CleanupStack::PopAndDestroy(compCriteria);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(areaCriteria);
+
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Panic tests ////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////////////
+
+ //Set max nr of matches to zero:
+ iStep = EStepZeroMaxMatches;
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ ResumeThreadAndVerifyExitL();
+
+ // Set max nr of matches to a negative value:
+ iStep = EStepNegativeMaxMatches;
+ iExpectedPanicCode = EPosLmInvalidArgument;
+ ResumeThreadAndVerifyExitL();
+
+ //Set max nr of matches to constant KPosLmMaxNumOfMatchesUnlimited:
+ // This is allowed so we use our own panic code to verify that method
+ // was correctly returned
+ iStep = EStepUnlimitedMaxMatches;
+ iExpectedPanicCode = (TPositionLandmarksClientPanic)567;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid index to DatabaseUriPtr method:
+ iStep = EStepOutOfBoundsDatabaseUriPtr;
+ iExpectedPanicCode = EPosInvalidIndex;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid index for GetSearchError:
+ iStep = EStepOutOfBoundsGetSearchError;
+ iExpectedPanicCode = EPosInvalidIndex;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid TPosLmSortPref
+ iStep = EStepIllegalSortPrefLMa;
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid TPosLmSortPref
+ iStep = EStepIllegalSortPrefLMb;
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid TPosLmSortPref
+ iStep = EStepIllegalSortPrefLMc;
+ iExpectedPanicCode = EPosNoneOrMultipleLandmarkAttributeSet;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid TPosLmSortPref
+ iStep = EStepIllegalSortPrefLMd;
+ iExpectedPanicCode = EPosNoneOrMultipleLandmarkAttributeSet;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid TPosLmSortPref
+ iStep = EStepIllegalSortPrefCat;
+ iExpectedPanicCode = EPosInvalidEnumValue;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid index for MatchIteratorL:
+ iStep = EStepTooBigValueMatchIteratorL;
+ iExpectedPanicCode = EPosInvalidIndex;
+ ResumeThreadAndVerifyExitL();
+
+ // Invalid index for NumOfMatches:
+ iStep = EStepTooBigValueNumOfMatches;
+ iExpectedPanicCode = EPosInvalidIndex;
+ ResumeThreadAndVerifyExitL();
+
+ // Test LandmarkSearch with NULL search criteria
+ iStep = EStepNULLSearch1;
+ iExpectedPanicCode = (TPositionLandmarksClientPanic)3; // KernExec-3
+ ResumeThreadAndVerifyExitL();
+
+ // Test LandmarkSearch with NULL search criteria
+ iStep = EStepNULLSearch2;
+ iExpectedPanicCode = (TPositionLandmarksClientPanic)3; // KernExec-3
+ ResumeThreadAndVerifyExitL();
+
+ // Test CategorySearch with NULL search criteria
+ iStep = EStepNULLSearch3;
+ iExpectedPanicCode = (TPositionLandmarksClientPanic)3; // KernExec-3
+ ResumeThreadAndVerifyExitL();
+
+ // Test LandmarkSearch with Databases to search with NULL value
+ iStep = EStepNULLSearch4;
+ iExpectedPanicCode = (TPositionLandmarksClientPanic)3; // KernExec-3
+ ResumeThreadAndVerifyExitL();
+
+ CleanupStack::PopAndDestroy(lmtextCriteria);
+ CleanupStack::PopAndDestroy(dbList);
+ }
+
+// ---------------------------------------------------------
+// CPosTp126::RunPanicTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp126::RunPanicTestL(TAny* aData)
+ {
+ CPosTp126* self = reinterpret_cast<CPosTp126*>(aData);
+
+ CDesCArray* dbList = new (ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(dbList);
+ dbList->AppendL(KDb20);
+ dbList->AppendL(KDb40);
+ dbList->AppendL(KDb60);
+ dbList->AppendL(KDb80);
+ dbList->AppendL(KDb105);
+
+ CPosLmTextCriteria* textCriteria = NULL;
+ CPosLmMultiDbSearch* multiSearch = CPosLmMultiDbSearch::NewL(*dbList);
+ switch(self->iStep)
+ {
+ case EStepZeroMaxMatches:
+ // Not allowed to set 0 number of matches
+ multiSearch->SetMaxNumOfMatches(0);
+ break;
+ case EStepUnlimitedMaxMatches:
+ multiSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+ User::Panic(_L("567"), 567);
+ break;
+ case EStepNegativeMaxMatches:
+ multiSearch->SetMaxNumOfMatches(-10);
+ break;
+ case EStepOutOfBoundsDatabaseUriPtr:
+ multiSearch->DatabaseUriPtr(6);
+ break;
+ case EStepOutOfBoundsGetSearchError:
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(KWildcard);
+ multiSearch->SetMaxNumOfMatches(3);
+ ExecuteAndDeleteLD(multiSearch->StartLandmarkSearchL(*textCriteria));
+ TInt errors = multiSearch->NumOfSearchErrors();
+ CPosLmMultiDbSearch::TSearchError searchError;
+ multiSearch->GetSearchError(errors + 2, searchError); // too large, should panic
+ CleanupStack::PopAndDestroy(textCriteria);
+ break;
+ case EStepTooBigValueMatchIteratorL:
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(KWildcard);
+ ExecuteAndDeleteLD(multiSearch->StartLandmarkSearchL(*textCriteria));
+ multiSearch->MatchIteratorL(6); // Panic here
+ CleanupStack::PopAndDestroy(textCriteria);
+ break;
+ case EStepTooBigValueNumOfMatches:
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(KWildcard);
+ ExecuteAndDeleteLD(multiSearch->StartLandmarkSearchL(*textCriteria));
+ multiSearch->NumOfMatches(6); // Panic here
+ CleanupStack::PopAndDestroy(textCriteria);
+ break;
+ case EStepIllegalSortPrefLMa:
+ TPosLmSortPref sortPrefa(CPosLandmark::ELandmarkName,
+ (TPosLmSortPref::TSortOrder)4321);
+ break;
+ case EStepIllegalSortPrefLMb:
+ TPosLmSortPref sortPrefb(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ sortPrefb.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName,
+ (TPosLmSortPref::TSortOrder)4321); // Panic here
+ break;
+ case EStepIllegalSortPrefLMc:
+ TPosLmSortPref sortPrefc(0, TPosLmSortPref::EAscending);
+ break;
+ case EStepIllegalSortPrefLMd:
+ TPosLmSortPref sortPrefd(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ sortPrefd.SetSortByLandmarkAttribute(0, TPosLmSortPref::EAscending);
+ case EStepIllegalSortPrefCat:
+ CPosLmCategoryManager::TCategorySortPref sortPrefCat =
+ (CPosLmCategoryManager::TCategorySortPref)12345;
+ CPosLmCatNameCriteria* nameCriteriaCat = CPosLmCatNameCriteria::NewLC();
+ nameCriteriaCat->SetSearchPatternL(KWildcard);
+ ExecuteAndDeleteLD(multiSearch->StartCategorySearchL(*nameCriteriaCat,
+ sortPrefCat)); // Panic here
+ CleanupStack::PopAndDestroy(nameCriteriaCat);
+ break;
+ case EStepNULLSearch1:
+ textCriteria = NULL;
+ ExecuteAndDeleteLD(multiSearch->StartLandmarkSearchL(*textCriteria));
+ break;
+ case EStepNULLSearch2:
+ textCriteria = NULL;
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ ExecuteAndDeleteLD(multiSearch->StartLandmarkSearchL(*textCriteria, sortPref));
+ break;
+ case EStepNULLSearch3:
+ CPosLmCategoryManager::TCategorySortPref sortPrefCat2 = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ CPosLmCatNameCriteria* criteria = NULL;
+ ExecuteAndDeleteLD(multiSearch->StartCategorySearchL(*criteria, sortPrefCat2));
+ break;
+ case EStepNULLSearch4:
+ CDesCArray* list = NULL;
+ CPosLmMultiDbSearch* multiSearch = CPosLmMultiDbSearch::NewL(*list);
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(KWildcard);
+ TPosLmSortPref sortPref4(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ ExecuteAndDeleteLD(multiSearch->StartLandmarkSearchL(*textCriteria, sortPref4));
+ break;
+ default:
+ break;
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp126::ResumeThreadAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp126::ResumeThreadAndVerifyExitL()
+ {
+ iLog->Log(_L("ResumeThreadAndVerifyExitL"));
+ _LIT(KPanicErr, "Method didn't Panic when expected");
+ _LIT(KPanicCodeErr, "Panicked with unexpected panic code");
+
+ CreateThreadL();
+ TRequestStatus status;
+ iThread.Logon(status);
+ iThread.Resume();
+
+ User::WaitForRequest(status);
+
+ // Used for debugging
+ TBuf<100> buf;
+ buf.Format(_L("ExitType %d Exit reason %d"), iThread.ExitType(), iThread.ExitReason());
+ iLog->Log(buf);
+
+ AssertTrueSecL(iThread.ExitType() == EExitPanic, KPanicErr);
+ AssertTrueSecL(iThread.ExitReason() == iExpectedPanicCode, KPanicCodeErr);
+
+ iThread.Close();
+ }
+
+// ---------------------------------------------------------
+// ThreadFunction
+//
+// ---------------------------------------------------------
+
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp126::RunPanicTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+void CPosTp126::CreateThreadL()
+ {
+ _LIT(KThreadName, "TP126testthread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ TBuf<100> buf;
+ buf.Format(KThreadName, (TInt)iStep);
+
+ TInt err = iThread.Create(buf, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp127.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1385 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp127.h"
+#include <Lbs.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KShortExecutionTimeInSeconds = 15;
+const TInt KLongExecutionTimeInSeconds = 5 * 60; // Five minutes. The longer the more errors seem appear...
+const TInt KNrOfDatabases = 5;
+const TInt KLockedDbIndex = 2;
+const TInt KMaxNrOfLms = 20;
+const TInt KLockThreadStartupTime = 500000;
+_LIT(KCreateThreadErr, "Creating thread failed with %d");
+_LIT(KLockThreadSearchPattern, "*TP127_LockThread*");
+_LIT(KTestDbUri, "TestDatabase.ldb");
+_LIT(KTestDbUriUC, "TESTDATABASE.LDB");
+
+// ================= LOCAL FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TThreadParam* params = reinterpret_cast<TThreadParam*> (aData);
+ TRAPD(err, (*params->iTestFunction)(params->iMessage));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C AssertTrueL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C void AssertTrueL(
+ TBool aCondition,
+ const TDesC& aBuf,
+ TDes* aMessage,
+ TInt aError = KErrGeneral)
+ {
+ if (!aCondition)
+ {
+ _LIT(KFormat, "%S, error = %d");
+ aMessage->Format(KFormat, &aBuf, aError);
+
+ aError == KErrNone ? User::Leave(KErrGeneral) : User::Leave(aError);
+ }
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadExistsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TBool ThreadExistsL(const TDesC& aSearchPattern)
+ {
+ TFindThread threadSearcher;
+ threadSearcher.Find(aSearchPattern);
+ TFullName fullName;
+ return (threadSearcher.Next(fullName) == KErrNone);
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C VerifyResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C void VerifyResultL(
+ TBool aLockThreadExists,
+ CPosLmMultiDbSearch* aMultiDbSearcher,
+ TDes* aDes)
+ {
+ TInt nrOfErrors = aMultiDbSearcher->NumOfSearchErrors();
+ if (aLockThreadExists)
+ {
+ // Reading locked db should result in KErrLocked
+ AssertTrueL(nrOfErrors == 1, _L("Not one error as expected"), aDes);
+ CPosLmMultiDbSearch::TSearchError error;
+ aMultiDbSearcher->GetSearchError(0, error);
+ AssertTrueL(error.iDatabaseIndex == KLockedDbIndex, _L("Error in wrong db"), aDes);
+ AssertTrueL(error.iErrorCode == KErrLocked, _L("Wrong error"), aDes, error.iErrorCode);
+ }
+ else
+ {
+ AssertTrueL(nrOfErrors == 0, _L("Search failed with errors"), aDes);
+ }
+
+ aDes->Zero();
+ }
+
+// ================= CThreadMonitor MEMBER FUNCTIONS =======================
+
+// Constructor
+CThreadMonitor::CThreadMonitor(RThread* aThread)
+: CActive(CActive::EPriorityStandard), iThread(aThread)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Destructor
+CThreadMonitor::~CThreadMonitor()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::NewL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CThreadMonitor* CThreadMonitor::NewL(RThread* aThread)
+ {
+ CThreadMonitor* self = new (ELeave) CThreadMonitor(aThread);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::ConstructL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CThreadMonitor::ConstructL()
+ {
+ iThread->Resume();
+ iThread->Logon(iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CThreadMonitor::DoCancel()
+ {
+ iThread->LogonCancel(iStatus);
+
+ // Kill thread
+ TRequestStatus status;
+ iThread->Logon(status);
+ iThread->Kill(KErrCancel);
+ User::WaitForRequest(status);
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CThreadMonitor::RunL()
+ {
+ CActiveScheduler::Stop();
+ }
+
+// ================= CPosTp127 MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp127::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP127 - Multiple databases, multiple clients");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::InitTestL()
+ {
+ MakeSurePanicDebugFileExistsL();
+
+ // PrepareDatabases
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+
+ // Initialize databases - is this really needed?
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+ for (TInt i = 0; i < KNrOfDatabases; i++)
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(dbList->operator[](i));
+ CleanupStack::PushL(db);
+ ExecuteAndDeleteLD(db->InitializeL());
+ CleanupStack::PopAndDestroy(db);
+ }
+
+ // Remove the last 5 lms of the the last db
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL(KDb105);
+ CleanupStack::PushL(db);
+ CPosLmItemIterator* iter = db->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ iter->GetItemIdsL(idArray, 20, iter->NumOfItemsL() - 20);
+ ExecuteAndDeleteLD(db->RemoveLandmarksL(idArray));
+ CleanupStack::PopAndDestroy(3, db);
+
+ CleanupStack::PopAndDestroy(2, dbMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::CloseTest()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::StartL()
+ {
+ // 1. Create multiple db search threads
+ iLog->Put(_L("<<<< 1. Create multiple db search threads >>>>"));
+ TBool lockDb = ETrue;
+ TBool successful = MultipleDbSearchClientsL(!lockDb);
+ //TBool successful = MultipleDbSearchClientsL(lockDb);
+
+ // Sometimes error ESLI-69LDJD DBMS - Error occurs
+ // 2. One of the databases is locked
+ iLog->Put(_L("<<<< 2. One of the databases is locked >>>>"));
+ User::After(KLockThreadStartupTime); // Let previous thread instances really die
+ if (!MultipleDbSearchClientsL(lockDb))
+ {
+ successful = EFalse;
+ }
+
+ // 3. Copy database in use
+ iLog->Put(_L("<<<< 3. Copy database in use >>>>"));
+ if (!VerifyInUseWhenCopyL())
+ {
+ successful = EFalse;
+ }
+
+ // 4. Copy databases continuously in parallel
+ iLog->Put(_L("<<<< 4. Copy databases continuously in parallel >>>>"));
+ if (!VerifyCopyStressL())
+ {
+ successful = EFalse;
+ }
+
+ // 5. Use all LM APIs
+ iLog->Put(_L("<<<< 5. Use all LM APIs simultaneously >>>>"));
+ if (!MultipleLmClientsL())
+ {
+ successful = EFalse;
+ }
+ // Leave if error
+ if (!successful)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::MultipleDbSearchClientsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp127::MultipleDbSearchClientsL(TBool aLockDb)
+ {
+ RThread searchThread1, searchThread2, searchThread3, lockThread;
+ TThreadParam params1, params2, params3, params4;
+ TBuf<200> threadMsg1, threadMsg2, threadMsg3, threadMsg4;
+ RArray<TThreadParam> threadArray;
+ CleanupClosePushL(threadArray);
+
+ // Create search thread 1
+ _LIT(KSearchThread1, "TP127 - Search thread 1");
+ TInt err = searchThread1.Create(KSearchThread1, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms1);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(searchThread1);
+ params1.iMessage = &threadMsg1;
+ params1.iTestFunction = MultipleDbCategorySearchL;
+ params1.iThread = &searchThread1;
+ threadArray.AppendL(params1);
+
+ // Create search thread 2
+ _LIT(KSearchThread2, "TP127 - Search thread 2");
+ err = searchThread2.Create(KSearchThread2, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms2);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(searchThread2);
+ params2.iMessage = &threadMsg2;
+ params2.iTestFunction = MultipleDbLandmarkSearchL;
+ params2.iThread = &searchThread2;
+ threadArray.AppendL(params2);
+
+ // Create search thread 3
+ _LIT(KSearchThread3, "TP127 - Search thread 3");
+ err = searchThread3.Create(KSearchThread3, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms3);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(searchThread3);
+ params3.iMessage = &threadMsg3;
+ params3.iTestFunction = MultipleDbLandmarkWithoutCategorySearchL;
+ params3.iThread = &searchThread3;
+ threadArray.AppendL(params3);
+
+ if (aLockDb)
+ {
+ // Create db lock thread
+ _LIT(KLockThread, "TP127 - TP127_LockThread");
+ err = lockThread.Create(KLockThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms4);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(lockThread);
+ params4.iMessage = &threadMsg4;
+ params4.iTestFunction = LockDatabaseL;
+ params4.iThread = &lockThread;
+ threadArray.AppendL(params4);
+ }
+
+ TBool successful = ResumeThreadsAndVerifyExitL(threadArray);
+
+ if (aLockDb)
+ {
+ CleanupStack::PopAndDestroy(&lockThread);
+ }
+ CleanupStack::PopAndDestroy(4, &threadArray);
+ return successful;
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::MultipleLmClientsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp127::MultipleLmClientsL()
+ {
+ // Set default db
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KTestDbUri);
+ dbMan->CreateDatabaseL(*dbInfo);
+ CleanupStack::PopAndDestroy(dbInfo);
+ dbMan->SetDefaultDatabaseUriL(KTestDbUri);
+ CleanupStack::PopAndDestroy(dbMan);
+
+ RThread dbManThread, multiSearchThread, dbThread, singleSearchThread;
+ TThreadParam params1, params2, params3, params4;
+ TBuf<200> threadMsg1, threadMsg2, threadMsg3, threadMsg4;
+ RArray<TThreadParam> threadArray;
+ CleanupClosePushL(threadArray);
+
+ // Create db management thread
+ _LIT(KDbManThread, "TP127 - Db manager thread");
+ TInt err = dbManThread.Create(KDbManThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms1);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(dbManThread);
+ params1.iMessage = &threadMsg1;
+ params1.iTestFunction = DbManagementL;
+ params1.iThread = &dbManThread;
+ threadArray.AppendL(params1);
+
+ // Create multi db search thread
+ _LIT(KMultiSearchThread, "TP127 - Multi search thread");
+ err = multiSearchThread.Create(KMultiSearchThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms2);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(multiSearchThread);
+ params2.iMessage = &threadMsg2;
+ params2.iTestFunction = MultipleDbSearchL;
+ params2.iThread = &multiSearchThread;
+ threadArray.AppendL(params2);
+
+ // Create LM API thread
+ _LIT(KDbThread, "TP127 - db thread");
+ err = dbThread.Create(KDbThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms3);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(dbThread);
+ params3.iMessage = &threadMsg3;
+ params3.iTestFunction = DbAccessL;
+ params3.iThread = &dbThread;
+ threadArray.AppendL(params3);
+
+ // Create single db search thread
+ _LIT(KSingleSearchThread, "TP127 - Single search thread");
+ err = singleSearchThread.Create(KSingleSearchThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms4);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(singleSearchThread);
+ params4.iMessage = &threadMsg4;
+ params4.iTestFunction = SingleDbSearchL;
+ params4.iThread = &singleSearchThread;
+ threadArray.AppendL(params4);
+
+ TBool successful = ResumeThreadsAndVerifyExitL(threadArray);
+
+ CleanupStack::PopAndDestroy(5, &threadArray);
+ return successful;
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::VerifyInUseWhenCopyL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp127::VerifyInUseWhenCopyL()
+ {
+ RThread copyThread, lockThread;
+ TThreadParam params1, params2;
+ TBuf<200> threadMsg1, threadMsg2;
+ RArray<TThreadParam> threadArray;
+ CleanupClosePushL(threadArray);
+
+ // Create copy thread
+ _LIT(KCopyThread, "TP127 - Copy thread");
+ TInt err = copyThread.Create(KCopyThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms1);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(copyThread);
+ params1.iMessage = &threadMsg1;
+ params1.iTestFunction = CopyLockedDatabaseL;
+ params1.iThread = ©Thread;
+ threadArray.AppendL(params1);
+
+ // Create db lock thread
+ _LIT(KLockThread, "TP127 - TP127_LockThread");
+ err = KErrAlreadyExists;
+ while (err == KErrAlreadyExists)
+ {
+ err = lockThread.Create(KLockThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms2);
+ }
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(lockThread);
+ params2.iMessage = &threadMsg2;
+ params2.iTestFunction = LockDatabaseL;
+ params2.iThread = &lockThread;
+ threadArray.AppendL(params2);
+
+ TBool successful = ResumeThreadsAndVerifyExitL(threadArray);
+
+ CleanupStack::PopAndDestroy(3, &threadArray);
+ return successful;
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::VerifyCopyStressL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp127::VerifyCopyStressL()
+ {
+ RThread copyThread1, copyThread2, copyThread3, copyThread4, copyThread5;
+ TThreadParam params1, params2, params3, params4, params5;
+ TBuf<200> threadMsg1, threadMsg2, threadMsg3, threadMsg4, threadMsg5;
+ RArray<TThreadParam> threadArray;
+ CleanupClosePushL(threadArray);
+
+ // Create copy thread1
+ _LIT(KCopyThread1, "TP127 - Copy thread1");
+ TInt err = copyThread1.Create(KCopyThread1, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms1);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(copyThread1);
+ params1.iMessage = &threadMsg1;
+ params1.iTestFunction = CopyDatabaseL;
+ params1.iThread = ©Thread1;
+ threadArray.AppendL(params1);
+
+ // Create copy thread2
+ _LIT(KCopyThread2, "TP127 - Copy thread2");
+ err = copyThread2.Create(KCopyThread2, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms2);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(copyThread2);
+ params2.iMessage = &threadMsg2;
+ params2.iTestFunction = CopyDatabaseL;
+ params2.iThread = ©Thread2;
+ threadArray.AppendL(params2);
+
+ // Create copy thread3
+ _LIT(KCopyThread3, "TP127 - Copy thread3");
+ err = copyThread3.Create(KCopyThread3, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms3);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(copyThread3);
+ params3.iMessage = &threadMsg3;
+ params3.iTestFunction = CopyDatabaseL;
+ params3.iThread = ©Thread3;
+ threadArray.AppendL(params3);
+
+ // Create copy thread4
+ _LIT(KCopyThread4, "TP127 - Copy thread4");
+ err = copyThread4.Create(KCopyThread4, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms4);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(copyThread4);
+ params4.iMessage = &threadMsg4;
+ params4.iTestFunction = CopyDatabaseL;
+ params4.iThread = ©Thread4;
+ threadArray.AppendL(params4);
+
+ // Create copy thread5
+ _LIT(KCopyThread5, "TP127 - Copy thread5");
+ err = copyThread5.Create(KCopyThread5, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, ¶ms5);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(copyThread5);
+ params5.iMessage = &threadMsg5;
+ params5.iTestFunction = CopyDatabaseL;
+ params5.iThread = ©Thread5;
+ threadArray.AppendL(params5);
+
+ TBool successful = ResumeThreadsAndVerifyExitL(threadArray);
+
+ CleanupStack::PopAndDestroy(6, &threadArray);
+ return successful;
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::ResumeThreadsAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp127::ResumeThreadsAndVerifyExitL(const RArray<TThreadParam>& aThreadParams)
+ {
+ // Start threads.
+ RPointerArray<CThreadMonitor> threadMonitors;
+ CleanupClosePushL(threadMonitors);
+ TInt nrOfThreads = aThreadParams.Count();
+ for (TInt j = 0; j < nrOfThreads; j++)
+ {
+ threadMonitors.AppendL(CThreadMonitor::NewL(aThreadParams[j].iThread));
+ }
+
+// <<<< Commented code below can be enabled for immediate interruption when any thread fails >>>>
+
+ // Wait until any of the threads exits.
+ TInt error = KErrNone;
+ TBool allThreadsTerminated = EFalse;
+ while (!allThreadsTerminated
+/* && error == KErrNone*/)
+ {
+ CActiveScheduler::Start();
+
+ // Assume all threads are terminated
+ allThreadsTerminated = ETrue;
+ for (TInt i = 0; i < nrOfThreads
+/* && error == KErrNone*/; i++)
+ {
+ if (threadMonitors[i]->IsActive())
+ {
+ // Thread is still alive
+ allThreadsTerminated = EFalse;
+ }
+ else
+ {
+/* if (aThreadParams[i].iThread->ExitType() != EExitKill)
+ {
+ error = KErrGeneral;
+ }
+ else if (aThreadParams[i].iThread->ExitReason())
+ {
+ error = aThreadParams[i].iThread->ExitReason();
+ }
+*/ }
+ }
+ }
+
+// <<<< Commented code above can be enabled for immediate interruption when any thread fails >>>>
+
+ // Terminate all remaining threads (in case of errors)
+ threadMonitors.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&threadMonitors);
+
+ // Log summary
+ for (TInt i = 0; i < nrOfThreads; i++)
+ {
+ if (*aThreadParams[i].iMessage != KNullDesC)
+ {
+ iLog->Put(*aThreadParams[i].iMessage);
+ }
+ TName threadName = aThreadParams[i].iThread->Name();
+ if (aThreadParams[i].iThread->ExitType() != EExitKill)
+ {
+ iBuf.Format(_L("%S was not killed!"), &threadName);
+ iLog->PutError(iBuf);
+ TExitCategoryName category = aThreadParams[i].iThread->ExitCategory();
+ iBuf.Format(_L("Exit Category = %S %d"), &category, aThreadParams[i].iThread->ExitReason());
+ iLog->Put(iBuf);
+ error = KErrGeneral;
+ }
+ else
+ {
+ TInt exitReason = aThreadParams[i].iThread->ExitReason();
+ if (exitReason != 0)
+ {
+ iBuf.Format(_L("%S's exit reason wasn't 0 but %d."), &threadName, exitReason);
+ iLog->PutError(iBuf);
+ error = exitReason;
+ }
+ }
+ }
+
+ return (error == KErrNone);
+ }
+
+// ================= STATIC THREAD FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp127::MultipleDbCategorySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::MultipleDbCategorySearchL(TDes* aMessage)
+ {
+ TBool lockThreadExists = ThreadExistsL(KLockThreadSearchPattern);
+ if (lockThreadExists)
+ {
+ // Let lock thread launch first
+ User::After(KLockThreadStartupTime);
+ }
+
+ // Search multiple databases for some seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+
+ while (executionTime.Int() < KShortExecutionTimeInSeconds)
+ {
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+ AssertTrueL(dbList->Count() == KNrOfDatabases, _L("MultipleDbCategorySearchL: Wrong number of databases"), aMessage);
+ CPosLmMultiDbSearch* dbSearcher = CPosLmMultiDbSearch::NewL(*dbList);
+ CleanupStack::PushL(dbSearcher);
+
+ // Search for categories containing a specific string
+ CPosLmCatNameCriteria* criteria = CPosLmCatNameCriteria::NewLC();
+ criteria->SetSearchPatternL(_L("*Log*"));
+ CPosLmOperation* operation = dbSearcher->StartCategorySearchL(*criteria, CPosLmCategoryManager::ECategorySortOrderNone);
+ ExecuteAndDeleteLD(operation);
+
+ aMessage->Copy(_L("MultipleDbCategorySearchL: "));
+ VerifyResultL(lockThreadExists, dbSearcher, aMessage);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+
+ CleanupStack::PopAndDestroy(4, dbMan);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::MultipleDbLandmarkSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::MultipleDbLandmarkSearchL(TDes* aMessage)
+ {
+ TBool lockThreadExists = ThreadExistsL(KLockThreadSearchPattern);
+ if (lockThreadExists)
+ {
+ // Let lock thread launch first
+ User::After(KLockThreadStartupTime);
+ }
+
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+
+ while (executionTime.Int() < KShortExecutionTimeInSeconds)
+ {
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+ CPosLmMultiDbSearch* dbSearcher = CPosLmMultiDbSearch::NewL(*dbList);
+ CleanupStack::PushL(dbSearcher);
+
+ // Search for landmarks containing a specific string
+ CPosLmTextCriteria* criteria = CPosLmTextCriteria::NewLC();
+ criteria->SetTextL(_L("*as*"));
+ CPosLmOperation* operation = dbSearcher->StartLandmarkSearchL(*criteria);
+ ExecuteAndDeleteLD(operation);
+
+ aMessage->Copy(_L("MultipleDbLandmarkSearchL: "));
+ VerifyResultL(lockThreadExists, dbSearcher, aMessage);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+
+ CleanupStack::PopAndDestroy(4, dbMan);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::MultipleDbLandmarkWithoutCategorySearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::MultipleDbLandmarkWithoutCategorySearchL(TDes* aMessage)
+ {
+ TBool lockThreadExists = ThreadExistsL(KLockThreadSearchPattern);
+ if (lockThreadExists)
+ {
+ // Let lock thread launch first
+ User::After(KLockThreadStartupTime);
+ }
+
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+
+ while (executionTime.Int() < KShortExecutionTimeInSeconds)
+ {
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+ AssertTrueL(dbList->Count() == KNrOfDatabases, _L("MultipleDbLandmarkWithoutCategorySearchL: Wrong number of databases"), aMessage);
+ CPosLmMultiDbSearch* dbSearcher = CPosLmMultiDbSearch::NewL(*dbList);
+ CleanupStack::PushL(dbSearcher);
+
+ // Search for uncategorized landmarks
+ CPosLmCategoryCriteria* criteria = CPosLmCategoryCriteria::NewLC();
+ CPosLmOperation* operation = dbSearcher->StartLandmarkSearchL(*criteria);
+ ExecuteAndDeleteLD(operation);
+
+ aMessage->Copy(_L("MultipleDbLandmarkWithoutCategorySearchL: "));
+ VerifyResultL(lockThreadExists, dbSearcher, aMessage);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+
+ CleanupStack::PopAndDestroy(4, dbMan);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::LockDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::LockDatabaseL(TDes* aMessage)
+ {
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+ AssertTrueL(dbList->Count() == KNrOfDatabases, _L("MultipleDbLandmarkWithoutCategorySearchL: Wrong number of databases"), aMessage);
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*dbList)[KLockedDbIndex]);
+ CleanupStack::PushL(db);
+ CPosLmOperation* operation = db->RemoveAllLandmarksL();
+ User::After((KShortExecutionTimeInSeconds + 1) * 1000000);
+ delete operation;
+
+ CleanupStack::PopAndDestroy(3, dbMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::DbManagementL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::DbManagementL(TDes* aMessage)
+ {
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ TInt i(0);
+ TBool errorsFound = EFalse;
+
+ while (executionTime.Int() < KLongExecutionTimeInSeconds)
+ {
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+
+ // List dbs
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+
+ // Create db
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KTestDbUri);
+ TRAPD(err, dbMan->CreateDatabaseL(*dbInfo));
+ CleanupStack::PopAndDestroy(dbInfo);
+ if (err != KErrAlreadyExists)
+ {
+ AssertTrueL(dbMan->DatabaseExistsL(KTestDbUri), _L("DbManagementL: Created database does not exist"), aMessage);
+ }
+
+ // Try to read default URI
+ HBufC* defaultDb = dbMan->DefaultDatabaseUriLC();
+
+ // Set default db to the created one
+ dbMan->SetDefaultDatabaseUriL(KTestDbUri);
+
+ // Remove default db
+ TRAP(err, dbMan->DeleteDatabaseL(KTestDbUri));
+ AssertTrueL(err == KErrNone || err == KErrInUse, _L("DbManagementL: Wrong error code when removing created database"), aMessage, err);
+ if (err == KErrNone)
+ {
+ AssertTrueL(!dbMan->DatabaseExistsL(KTestDbUri), _L("DbManagementL: Removed database exists"), aMessage);
+ }
+
+ // Create a copy of a db
+ if (dbList->Count() > 0)
+ {
+ TRAP(err, dbMan->CopyDatabaseL((*dbList)[0], KTestDbUri));
+// TBD: How can err == KErrLocked happen? Refer to ESLI-68HKE6
+// TBD: Sometimes KErrDied is returned from this function. Why? Write error report?
+ AssertTrueL(err == KErrNone || err == KErrAlreadyExists || err == KErrInUse || err == KErrLocked, _L("DbManagementL: Wrong error code when copying database"), aMessage, err);
+ if (err == KErrNone || err == KErrAlreadyExists)
+ {
+ AssertTrueL(dbMan->DatabaseExistsL(KTestDbUri), _L("DbManagementL: Copied database does not exist"), aMessage);
+
+ // Remove copy
+ TRAP(err, dbMan->DeleteDatabaseL(KTestDbUri));
+ AssertTrueL(err == KErrNone || err == KErrInUse, _L("DbManagementL: Wrong error code when removing copied database"), aMessage, err);
+ if (err == KErrNone)
+ {
+ AssertTrueL(!dbMan->DatabaseExistsL(KTestDbUri), _L("DbManagementL: Removed database exists"), aMessage);
+ }
+ }
+ else if (err == KErrLocked) // To be removed when ESLI-68HKE6 is solved
+ {
+ aMessage->Copy(_L("DbManagementL: CPosLmDatabaseManager::CopyDatabaseL() left with KErrLocked - check ESLI-68HKE6"));
+ errorsFound = ETrue;
+ }
+ }
+
+ // Set default db to another uri
+ dbMan->SetDefaultDatabaseUriL((*dbList)[i]);
+ if (++i == 5)
+ {
+ i = 0;
+ }
+
+ // Increase probability that (*dbList)[i] and not KTestDbUri is default db most of the time
+ User::After(10000);
+
+ CleanupStack::PopAndDestroy(3, dbMan);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ }
+
+ if (errorsFound)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::DbAccessL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::DbAccessL(TDes* aMessage)
+ {
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ TBool errorsFound = EFalse;
+
+ while (executionTime.Int() < KLongExecutionTimeInSeconds)
+ {
+ CPosLandmarkDatabase* db = NULL;
+ TRAPD(err, db = CPosLandmarkDatabase::OpenL());
+// TBD: How can KErrNotFound happen? Refer to ESLI-68HE4P
+ if (err == KErrLocked || err == KErrInUse || err == KErrNotFound)
+ {
+ if (err == KErrNotFound) // To be removed when ESLI-68HE4P is solved
+ {
+ aMessage->Copy(_L("DbAccessL: CPosLandmarkDatabase::OpenL() left with KErrNotFound - check ESLI-68HE4P"));
+ errorsFound = ETrue;
+ }
+ // Some client is writing(KErrLocked)/deleting(KErrInUse) the db. Try again.
+ continue;
+ }
+ AssertTrueL(err == KErrNone, _L("DbAccessL: Wrong error code when opening db"), aMessage, err);
+ CleanupStack::PushL(db);
+
+ // We don't want to use the empty test database
+ HBufC* dbUri = db->DatabaseUriLC();
+// TBD: Both UC and original case need to be checked here due to SDK bug! To be updated. (refer to INC053631 in teamtrack and ESLI-68HK3W in TSW)
+ if (dbUri->Find(KTestDbUriUC) != KErrNotFound || dbUri->Find(KTestDbUri) != KErrNotFound)
+ {
+ if (dbUri->Find(KTestDbUriUC) != KErrNotFound) // To be removed when ESLI-68HK3W is solved
+ {
+ aMessage->Copy(_L("DbAccessL: UPPER CASE of db URI found - check ESLI-68HK3W"));
+ errorsFound = ETrue;
+ }
+ CleanupStack::PopAndDestroy(2, db);
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ continue;
+ }
+
+ // Fetch db iterator
+ CPosLmItemIterator* iterator = NULL;
+ TRAP(err, iterator = db->LandmarkIteratorL());
+// TBD: KErrPosLmNotInitialized should not be accepted. Refer to ESLI-68JAMD
+ if (err == KErrCorrupt || err == KErrPosLmNotInitialized)
+ {
+ if (err == KErrPosLmNotInitialized) // To be removed when ESLI-68JAMD is solved
+ {
+ aMessage->Copy(_L("DbAccessL: CPosLandmarkDatabase::LandmarkIteratorL() left with KErrPosLmNotInitialized - check ESLI-68JAMD"));
+ errorsFound = ETrue;
+ }
+// TBD: Databases need to be re-initialized, because they haved been damaged. Why do they become damaged?
+ err = KErrLocked;
+ while (err == KErrLocked && db->IsInitializingNeeded())
+ {
+ TRAP(err, ExecuteAndDeleteLD(db->InitializeL()));
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("DbAccessL: Wrong error code when initializing"), aMessage, err);
+ }
+ TRAP(err, iterator = db->LandmarkIteratorL());
+ }
+ TBuf<100> buf;
+ _LIT(KFormat, "DbAccessL: Wrong error code when creating iterator for db %S");
+ buf.Format(KFormat, dbUri);
+ AssertTrueL(err == KErrNone, buf, aMessage, err);
+ CleanupStack::PopAndDestroy(dbUri);
+ CleanupStack::PushL(iterator);
+
+ // Add, read and update a landmark
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ TPosLmItemId id = KPosLmNullItemId;
+ TRAP(err, id = db->AddLandmarkL(*lm));
+ CleanupStack::PopAndDestroy(lm);
+ if (err == KErrNone)
+ {
+ TRAP(err, CleanupStack::Pop(lm = db->ReadLandmarkLC(id)));
+ CleanupStack::PushL(lm);
+ AssertTrueL(err == KErrNone, _L("DbAccessL: Wrong error code when reading created landmark"), aMessage, err);
+ lm->SetLandmarkNameL(_L("A landmark"));
+ TRAP(err, db->UpdateLandmarkL(*lm));
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("DbAccessL: Wrong error code when updating lm"), aMessage, err);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else
+ {
+ AssertTrueL(err == KErrLocked, _L("DbAccessL: Wrong error code when adding lm"), aMessage, err);
+ }
+
+ // Remove possible added landmarks
+ TInt nrOfItems = iterator->NumOfItemsL();
+ if (nrOfItems > KMaxNrOfLms)
+ {
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ iterator->GetItemIdsL(idArray, KMaxNrOfLms, nrOfItems - KMaxNrOfLms);
+ err = KErrLocked;
+ while (err != KErrNone)
+ {
+ TRAP(err, ExecuteAndDeleteLD(db->RemoveLandmarksL(idArray)));
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("DbAccessL: Wrong error code when removing lm"), aMessage, err);
+ }
+ CleanupStack::PopAndDestroy(&idArray);
+ }
+
+ CleanupStack::PopAndDestroy(2, db);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ }
+
+ if (errorsFound)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::SingleDbSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::SingleDbSearchL(TDes* aMessage)
+ {
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ TInt64 seed = startTime.Int64();
+ TBool errorsFound = EFalse;
+
+ while (executionTime.Int() < KLongExecutionTimeInSeconds)
+ {
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+
+ // Open one of the pre-defined databases
+ TInt index = (TInt) (Math::FRand(seed) * dbList->Count());
+ TPtrC uri = (*dbList)[index];
+// TBD: Both UC and original case need to be checked here due to SDK bug! To be updated. (refer to INC053631 in teamtrack and ESLI-68HK3W in TSW)
+ if (uri.Find(KTestDbUriUC) != KErrNotFound || uri.Find(KTestDbUri) != KErrNotFound)
+ {
+ if (uri.Find(KTestDbUriUC) != KErrNotFound) // To be removed when ESLI-68HK3W is solved
+ {
+ aMessage->Copy(_L("SingleDbSearchL: UPPER CASE of db URI found - check ESLI-68HK3W"));
+ errorsFound = ETrue;
+ }
+ // We don't want to search the empty test database
+ CleanupStack::PopAndDestroy(2, dbMan);
+ continue;
+ }
+ CPosLandmarkDatabase* db = NULL;
+ TRAPD(err, db = CPosLandmarkDatabase::OpenL(uri));
+ if (err == KErrLocked)
+ {
+ // Some client is writing to the db. Try again.
+ CleanupStack::PopAndDestroy(2, dbMan);
+ continue;
+ }
+ _LIT(KFormat, "SingleDbSearchL: Wrong error code when opening db %S");
+ TBuf<100> buf;
+ buf.Format(KFormat, &uri);
+ AssertTrueL(err == KErrNone, buf, aMessage, err);
+ CleanupStack::PushL(db);
+
+ CPosLandmarkSearch* dbSearcher = NULL;
+ TRAP(err, dbSearcher = CPosLandmarkSearch::NewL(*db));
+ AssertTrueL(err == KErrNone, _L("SingleDbSearchL: Wrong error code when calling CPosLandmarkSearch::NewL"), aMessage, err);
+ CleanupStack::PushL(dbSearcher);
+
+ // Search for landmarks containing a specific string
+ CPosLmTextCriteria* criteria = CPosLmTextCriteria::NewLC();
+ criteria->SetTextL(_L("*as*"));
+ CPosLmOperation* operation = NULL;
+ TRAP(err, operation = dbSearcher->StartLandmarkSearchL(*criteria));
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("SingleDbSearchL: Wrong error code when creating search op"), aMessage, err);
+ if (operation)
+ {
+ CleanupStack::PushL(operation);
+ TRAP(err, operation->ExecuteL());
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("SingleDbSearchL: Wrong error code when executing search op"), aMessage, err);
+ CleanupStack::PopAndDestroy(operation);
+ }
+
+ CleanupStack::PopAndDestroy(5, dbMan);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ }
+
+ if (errorsFound)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::MultipleDbSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::MultipleDbSearchL(TDes* aMessage)
+ {
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+/*
+ RArray<RIdArray> expectedResult; // contains expected matches when search patern is *e*
+ CleanupClosePushL(expectedResult);
+
+ RIdArray array1;
+ CleanupClosePushL(array1);
+ array1.AppendL(4); // vegetariskt
+ array1.AppendL(5); // Inte sa bra
+ array1.AppendL(8); // Medel
+ array1.AppendL(9); // Medel2
+ array1.AppendL(12); // GatesB
+ array1.AppendL(13); // Text"'1
+ array1.AppendL(14); // GatesF
+ array1.AppendL(15); // xStekt
+ array1.AppendL(18); // enat?r
+ array1.AppendL(19); // enator
+ expectedResult.AppendL(array1);
+
+ RIdArray array2;
+ CleanupClosePushL(array2);
+ for (TInt i = 29; i <= 40; i++)
+ {
+ array2.AppendL(i); // Unique - Text10
+ }
+ expectedResult.AppendL(array2);
+
+ RIdArray array3;
+ CleanupClosePushL(array3);
+ array3.AppendL(45); // Several
+ array3.AppendL(51); // PellesPizza
+ array3.AppendL(52); // Kalles Hundgård
+ for (TInt i = 54; i <= 60; i++)
+ {
+ array3.AppendL(i); // TE, Gårda - TE, Oulu
+ }
+ expectedResult.AppendL(array3);
+
+ RIdArray array4;
+ CleanupClosePushL(array4);
+ array4.AppendL(61); // TE, Tampere
+ array4.AppendL(62); // Nokia, Köpenhamn
+ array4.AppendL(65); // Tampere
+ array4.AppendL(66); // Helsinki
+ array4.AppendL(67); // Bengtfors
+ array4.AppendL(70); // Göteborg
+ array4.AppendL(71); // PallesPalör
+ array4.AppendL(72); // Läkare utan gränser
+ array4.AppendL(74); // Läkargruppen
+ array4.AppendL(75); // Läkarhuset
+ array4.AppendL(76); // Sahlgrenska
+ array4.AppendL(77); // östra sjukhuset
+ array4.AppendL(80); // GöteborgsTaxi
+ expectedResult.AppendL(array4);
+
+ RIdArray array5;
+ CleanupClosePushL(array5);
+ array5.AppendL(81); // LandvetterTaxi
+ array5.AppendL(84); // Länsmuseumet
+ array5.AppendL(85); // Sjöfartsmuseumet
+ array5.AppendL(86); // KinaMuseumet
+ array5.AppendL(88); // Etnogfrafiska
+ array5.AppendL(89); // TekniskaMuseumet
+ array5.AppendL(91); // Centrum dagiset
+ array5.AppendL(93); // Lackarbäcks daghem
+ for (TInt i = 95; i <= 100; i++)
+ {
+ array5.AppendL(i); // TE dagis - krokslätts frisörerna
+ }
+ expectedResult.AppendL(array5);
+*/
+ RArray<TInt> nrOfExpectedMatches; // contains the number of matches for each db when search pattern is *e*
+ CleanupClosePushL(nrOfExpectedMatches);
+ nrOfExpectedMatches.AppendL(10);
+ nrOfExpectedMatches.AppendL(12);
+ nrOfExpectedMatches.AppendL(10);
+ nrOfExpectedMatches.AppendL(13);
+ nrOfExpectedMatches.AppendL(14);
+
+ while (executionTime.Int() < KLongExecutionTimeInSeconds)
+ {
+ CDesCArray* dbList = new (ELeave) CDesCArrayFlat(5);
+ CleanupStack::PushL(dbList);
+ dbList->AppendL(KDb20);
+ dbList->AppendL(KDb40);
+ dbList->AppendL(KDb60);
+ dbList->AppendL(KDb80);
+ dbList->AppendL(KDb105);
+ CPosLmMultiDbSearch* dbSearcher = CPosLmMultiDbSearch::NewL(*dbList);
+ CleanupStack::PushL(dbSearcher);
+
+ // Search for landmarks containing a specific string in name
+ CPosLmTextCriteria* criteria = CPosLmTextCriteria::NewLC();
+ criteria->SetTextL(_L("*e*"));
+ criteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ CPosLmOperation* operation = NULL;
+ TRAPD(err, operation = dbSearcher->StartLandmarkSearchL(*criteria))
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("MultipleDbSearchL: Wrong error code when creating search op"), aMessage, err);
+ if (operation)
+ {
+ CleanupStack::PushL(operation);
+ TRAP(err, operation->ExecuteL());
+ AssertTrueL(err == KErrNone || err == KErrLocked, _L("MultipleDbSearchL: Wrong error code when executing search op"), aMessage, err);
+ CleanupStack::PopAndDestroy(operation);
+ }
+
+ // Check errors
+ RArray<TInt> dbsWithErrors;
+ CleanupClosePushL(dbsWithErrors);
+ TUint nrOfSearchErrors = dbSearcher->NumOfSearchErrors();
+ for (TUint i = 0; i < nrOfSearchErrors; i++)
+ {
+ CPosLmMultiDbSearch::TSearchError error;
+ dbSearcher->GetSearchError(i, error);
+ AssertTrueL(error.iErrorCode == KErrLocked, _L("MultipleDbSearchL: Wrong error code when searching"), aMessage, error.iErrorCode);
+ dbsWithErrors.AppendL(error.iDatabaseIndex);
+ }
+
+ // Check number of matches
+ for (TInt i = 0; i < dbList->Count(); i++)
+ {
+ if (dbsWithErrors.Find(i) == KErrNotFound)
+ {
+ TInt nrOfMatches = dbSearcher->NumOfMatches(i);
+ TInt expectedResult = nrOfExpectedMatches[i];
+ AssertTrueL(nrOfMatches == expectedResult, _L("MultipleDbSearchL: Wrong number of matches"), aMessage);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(4, dbList);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ }
+
+ CleanupStack::PopAndDestroy(&nrOfExpectedMatches);
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::CopyLockedDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::CopyLockedDatabaseL(TDes* aMessage)
+ {
+ TBool lockThreadExists = ThreadExistsL(KLockThreadSearchPattern);
+ if (lockThreadExists)
+ {
+ // Let lock thread launch first
+ User::After(KLockThreadStartupTime);
+ }
+
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+ AssertTrueL(dbList->Count() == KNrOfDatabases, _L("CopyLockedDatabaseL: Wrong number of databases"), aMessage);
+
+ // Try to copy database. Should result in KErrInUse
+ TRAPD(err, dbMan->CopyDatabaseL((*dbList)[KLockedDbIndex], KTestDbUri));
+// TBD: KErrLocked should not be accepted. Refer to ESLI-68HKE6
+ AssertTrueL(err != KErrLocked, _L("CopyLockedDatabaseL: Wrong error code when copying database - check ESLI-68HKE6"), aMessage, err);
+ AssertTrueL(err == KErrInUse , _L("CopyLockedDatabaseL: Wrong error code when copying database"), aMessage, err);
+
+ CleanupStack::PopAndDestroy(2, dbMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp127::CopyDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp127::CopyDatabaseL(TDes* aMessage)
+ {
+ // Execute thread for a number of seconds
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalSeconds executionTime;
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ TInt64 seed = startTime.Int64();
+ TBool errorsFound = EFalse;
+
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ while (executionTime.Int() < KShortExecutionTimeInSeconds)
+ {
+ CDesCArray* dbList = dbMan->ListDatabasesLC();
+
+ // Create a source and a target URI
+ _LIT(KCopy, "_copy");
+ TInt copyLength = KCopy().Length();
+ TInt index = (TInt) (Math::FRand(seed) * dbList->Count());
+ TPtrC sourceUri = (*dbList)[index];
+ HBufC* targetUriBuffer = HBufC::NewLC(sourceUri.Length() + copyLength);
+ TPtr targetUri = targetUriBuffer->Des();
+ targetUri.Copy(sourceUri);
+ targetUri.Insert(targetUri.Length() - 4, KCopy); // 4 == length of ".ldb"
+
+ // Try to copy database. Should result in KErrInUse if locked, KErrNone otherwise
+ TRAPD(err, dbMan->CopyDatabaseL(sourceUri, targetUri));
+ AssertTrueL(err == KErrNone || err == KErrAlreadyExists, _L("CopyDatabaseL: Wrong error code when copying database"), aMessage, err);
+
+ // Set default database to the created one
+ TRAP(err, dbMan->SetDefaultDatabaseUriL(targetUri));
+ AssertTrueL(err == KErrNone || err == KErrNotFound, _L("CopyDatabaseL: Wrong error code when setting default db to target"), aMessage, err);
+
+ // Remove the created database
+ err = KErrLocked;
+ while (err != KErrNone && err != KErrNotFound)
+ {
+ TRAP(err, dbMan->DeleteDatabaseL(targetUri));
+ }
+
+ // Set default database to the source
+ TRAP(err, dbMan->SetDefaultDatabaseUriL(sourceUri));
+ AssertTrueL(err == KErrNone, _L("CopyDatabaseL: Wrong error code when setting default db to source"), aMessage, err);
+
+ CleanupStack::PopAndDestroy(2, dbList);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.SecondsFrom(startTime, executionTime));
+ }
+
+ if (errorsFound)
+ {
+ User::Leave(KErrGeneral);
+ }
+ CleanupStack::PopAndDestroy(dbMan);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp13.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,417 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <StifParser.h>
+#include "FT_CPosTp13.h"
+#include <epos_cposlandmarkdatabase.h>
+#include <epos_cposlmcategorymanager.h>
+#include <epos_cposlmtextcriteria.h>
+#include <epos_cposlmcategorycriteria.h>
+#include <epos_cposlandmarksearch.h>
+#include <bautils.h>
+#include "EPos_Landmarks.h"
+
+// CONSTANTS
+_LIT(KTP13Db, "eposlm_tp13.ldb");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp13::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp13::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp13::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp13::StartL(CStifItemParser& /*aItem*/)
+ {
+ _LIT( KTransportName, "Teleport" );
+ _LIT( KPeopleName, "People" );
+ _LIT( KLmAName, "A" );
+ _LIT( KLmBName, "B" );
+
+ const TInt KTransportGlobalId = 45000;
+ const TInt KPeopleGlobalId = 27000;
+
+#undef TP13_PREP
+
+#ifdef TP13_PREP
+ // Preparation code, should be executed in Finnish (non-English) locale
+ // Default database should be removed so that new database is created
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+
+ CPosLmItemIterator* iter = NULL;
+ if ( db->IsInitializingNeeded() )
+ {
+ ExecuteAndDeleteLD( db->InitializeL() );
+ }
+
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL( *db );
+ CleanupStack::PushL( catMan );
+
+ // Rename global category
+ TPosLmItemId id = catMan->GetGlobalCategoryL( KTransportGlobalId );
+ CPosLandmarkCategory* cat = catMan->ReadCategoryLC( id );
+ cat->SetCategoryNameL( KTransportName );
+ catMan->UpdateCategoryL( *cat );
+ CleanupStack::PopAndDestroy( cat );
+
+ // Create user category
+ cat = CPosLandmarkCategory::NewLC();
+ cat->SetCategoryNameL( KPeopleName );
+ TPosLmItemId idUserPeople = catMan->AddCategoryL( *cat );
+ CleanupStack::PopAndDestroy( cat );
+
+ // Find matching global category
+ TPosLmItemId idPeople = catMan->GetGlobalCategoryL( KPeopleGlobalId );
+
+ // Create landmark for user's People category
+ CPosLandmark* lmA = CPosLandmark::NewLC();
+ lmA->SetLandmarkNameL( KLmAName );
+ lmA->AddCategoryL( idUserPeople );
+ db->AddLandmarkL( *lmA );
+ CleanupStack::PopAndDestroy( lmA );
+
+ // Create landmark for global People category
+ CPosLandmark* lmB = CPosLandmark::NewLC();
+ lmA->SetLandmarkNameL( KLmBName );
+ lmA->AddCategoryL( idPeople );
+ db->AddLandmarkL( *lmB );
+ CleanupStack::PopAndDestroy( lmB );
+
+ CleanupStack::PopAndDestroy( catMan );
+ CleanupStack::PopAndDestroy( db );
+
+#else
+
+ // Test code, should be executed in English locale
+
+ TInt lang = User::Language();
+ iLog->Log(_L("Current language is %d"), lang);
+
+ if ( lang != ELangEnglish )
+ {
+ iLog->Log(_L("Wrong language, should be English (1)"));
+ User::Leave( KErrGeneral );
+ }
+
+ CopyTestDbFileL( KTP13Db );
+
+ // 1. Open database
+ iLog->Log(_L("1. Open database"));
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL( KTP13Db );
+ CleanupStack::PushL(db);
+
+ // 2. Try to use it
+ iLog->Log(_L("2. Try use it"));
+
+ CPosLmItemIterator* iter = NULL;
+ TRAPD( err, iter = db->LandmarkIteratorL() );
+ if ( err != KErrPosLmNotInitialized )
+ {
+ iLog->Log(_L("Unexpected error on uninitialized database"));
+ iErrorsFound++;
+ }
+
+ // 3. Initialize database
+ iLog->Log(_L("3. Init database"));
+
+ if ( db->IsInitializingNeeded() )
+ {
+ ExecuteAndDeleteLD( db->InitializeL() );
+ }
+ else
+ {
+ iLog->Log(_L("Intialization not requried"));
+ iErrorsFound++;
+ }
+
+ // 4. Verify names of global categories
+ iLog->Log(_L("4. Verify globals"));
+
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL( *db );
+ CleanupStack::PushL( catMan );
+
+ iter = catMan->CategoryIteratorL();
+ CleanupStack::PushL( iter );
+
+ TPosLmItemId id = iter->NextL();
+ while ( id != KPosLmNullItemId )
+ {
+ CPosLandmarkCategory* cat = catMan->ReadCategoryLC( id );
+ TPosLmGlobalCategory globalId = cat->GlobalCategory();
+
+ TPtrC name;
+ cat->GetCategoryName( name );
+
+ if ( globalId != KTransportGlobalId )
+ {
+ HBufC* globalName = catMan->GlobalCategoryNameL( globalId );
+ if ( name.Compare( *globalName ) != 0 )
+ {
+ iLog->Log( _L("Global category %d name mismatch: actual '%S', predefined '%S'"),
+ globalId, &name, globalName );
+ iErrorsFound++;
+ }
+ delete globalName;
+ }
+ else // should retain user-defiend name
+ {
+ if ( name.Compare( KTransportName() ) != 0 )
+ {
+ iLog->Log( _L("Global category %d name mismatch: actual '%S', user-defined '%S'"),
+ globalId, &name, &KTransportName() );
+ iErrorsFound++;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( cat );
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy( iter );
+
+ // 5. Verify user-created category People, which now matches global category
+ iLog->Log(_L("5. Verify user's"));
+ TPosLmItemId idPeople = catMan->GetCategoryL( KPeopleName );
+ CPosLandmarkCategory* cat = catMan->ReadCategoryLC( idPeople );
+ TPosLmGlobalCategory idPeopleGlobal = cat->GlobalCategory();
+ if ( idPeopleGlobal != KPeopleGlobalId )
+ {
+ iLog->Log( _L("Global category People ID mismatch: actual '%d', predefined '%d'"),
+ idPeopleGlobal, KPeopleGlobalId );
+ iErrorsFound++;
+ }
+
+ RArray<TPosLmItemId> lmIds;
+ CleanupClosePushL( lmIds );
+ FindLandmarksL( *db, idPeople, lmIds );
+ if ( lmIds.Count() != 2 )
+ {
+ iLog->Log( _L("Global category People landmark list count mismatch: actual '%d', expected '%d'"),
+ lmIds.Count(), 2 );
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy( &lmIds );
+
+ // verify that those landmarks belong only to People
+ RArray<TPosLmItemId> catIds;
+
+ CPosLandmark* lmA = FindLandmarkLC( *db, KLmAName );
+ lmA->GetCategoriesL( catIds );
+ if ( catIds.Count() != 1 )
+ {
+ iLog->Log( _L("LmA: wrong category list count, actual '%d', expected '%d'"),
+ catIds.Count(), 1 );
+ iErrorsFound++;
+ }
+ if ( catIds.Count() && catIds[0] != idPeople )
+ {
+ iLog->Log( _L("LmB: wrong category in list, actual '%d', expected '%d'"),
+ catIds[0], idPeople );
+ iErrorsFound++;
+ }
+ catIds.Reset();
+ CleanupStack::PopAndDestroy( lmA );
+
+ CPosLandmark* lmB = FindLandmarkLC( *db, KLmBName );
+ lmA->GetCategoriesL( catIds );
+ if ( catIds.Count() != 1 )
+ {
+ iLog->Log( _L("LmB: wrong category list count, actual '%d', expected '%d'"),
+ catIds.Count(), 1 );
+ iErrorsFound++;
+ }
+ if ( catIds.Count() && catIds[0] != idPeople )
+ {
+ iLog->Log( _L("LmB: wrong category in list, actual '%d', expected '%d'"),
+ catIds[0], idPeople );
+ iErrorsFound++;
+ }
+ catIds.Reset();
+ CleanupStack::PopAndDestroy( lmB );
+ CleanupStack::PopAndDestroy( cat );
+
+ // 6. Reset global categories and verify again
+ iLog->Log(_L("6. Reset and verify globals"));
+ ExecuteAndDeleteLD(catMan->ResetGlobalCategoriesL());
+
+ iter = catMan->CategoryIteratorL();
+ CleanupStack::PushL( iter );
+
+ id = iter->NextL();
+ while ( id != KPosLmNullItemId )
+ {
+ CPosLandmarkCategory* cat = catMan->ReadCategoryLC( id );
+ TPosLmGlobalCategory globalId = cat->GlobalCategory();
+
+ TPtrC name;
+ cat->GetCategoryName( name );
+
+ HBufC* globalName = catMan->GlobalCategoryNameL( globalId );
+ if ( name.Compare( *globalName ) != 0 )
+ {
+ iLog->Log( _L("Global category %d name mismatch: actual '%S', predefined '%S'"),
+ globalId, &name, globalName );
+ iErrorsFound++;
+ }
+ delete globalName;
+ CleanupStack::PopAndDestroy( cat );
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy( iter );
+
+ CleanupStack::PopAndDestroy( catMan );
+ CleanupStack::PopAndDestroy( db );
+
+ if ( iErrorsFound > 0 )
+ {
+ iLog->Log(_L("Errors found in TP13 = %d"), iErrorsFound );
+ User::Leave( KErrGeneral );
+ }
+#endif
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+CPosLandmark* CPosTp13::FindLandmarkLC( CPosLandmarkDatabase& aDb, const TDesC& aName )
+ {
+ CPosLmTextCriteria* crit = CPosLmTextCriteria::NewLC();
+ crit->SetTextL( aName );
+ crit->SetAttributesToSearch( CPosLandmark::ELandmarkName );
+
+ CPosLandmarkSearch* search = CPosLandmarkSearch::NewL( aDb );
+ CleanupStack::PushL( search );
+
+ CPosLmOperation* op = search->StartLandmarkSearchL( *crit );
+ CleanupStack::PushL( op );
+ op->ExecuteL();
+
+ CPosLmItemIterator* iter = search->MatchIteratorL();
+ CleanupStack::PushL( iter );
+ RArray<TPosLmItemId> lmIds;
+ iter->GetItemIdsL( lmIds, 0, iter->NumOfItemsL() );
+ CleanupClosePushL( lmIds );
+
+ if ( lmIds.Count() < 1 )
+ {
+ iLog->Log(_L("Couldn't find landmarks, which match name '%S'"), &aName );
+ User::Leave( KErrNotFound );
+ }
+ else
+ {
+ iLog->Log(_L("Found %d landmarks, which match name '%S'"), lmIds.Count(), &aName );
+ }
+
+ CPosLandmark* lm = aDb.ReadLandmarkLC( lmIds[0] );
+ CleanupStack::Pop();
+
+ CleanupStack::PopAndDestroy( &lmIds );
+ CleanupStack::PopAndDestroy( iter );
+ CleanupStack::PopAndDestroy( op );
+ CleanupStack::PopAndDestroy( search );
+ CleanupStack::PopAndDestroy( crit );
+
+ CleanupStack::PushL( lm );
+ return lm;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp13::FindLandmarksL(
+ CPosLandmarkDatabase& aDb,
+ TPosLmItemId aCategoryId,
+ RArray<TPosLmItemId>& aLmIds )
+ {
+ CPosLmCategoryCriteria* crit = CPosLmCategoryCriteria::NewLC();
+ crit->SetCategoryItemId( aCategoryId );
+
+ CPosLandmarkSearch* search = CPosLandmarkSearch::NewL( aDb );
+ CleanupStack::PushL( search );
+
+ CPosLmOperation* op = search->StartLandmarkSearchL( *crit );
+ CleanupStack::PushL( op );
+ op->ExecuteL();
+
+ CPosLmItemIterator* iter = search->MatchIteratorL();
+ CleanupStack::PushL( iter );
+
+ iter->GetItemIdsL( aLmIds, 0, iter->NumOfItemsL() );
+
+ CleanupStack::PopAndDestroy( iter );
+ CleanupStack::PopAndDestroy( op );
+ CleanupStack::PopAndDestroy( search );
+ CleanupStack::PopAndDestroy( crit );
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp13::ListCategoriesL( CPosLmCategoryManager& aCatMan )
+ {
+ iLog->Log(_L("--- Global Categories ---"));
+
+ CPosLmItemIterator* iter = aCatMan.CategoryIteratorL();
+ CleanupStack::PushL(iter);
+ TBuf<50> buffe;
+
+ TPosLmItemId idde = iter->NextL();
+ while (idde != KPosLmNullItemId)
+ {
+ CPosLandmarkCategory* cat = aCatMan.ReadCategoryLC(idde);
+
+ TPtrC name;
+ cat->GetCategoryName(name);
+
+ TPosLmGlobalCategory globalId = cat->GlobalCategory();
+
+ TPtrC iconName;
+ TInt iconNr;
+ TInt iconMaskIndex;
+ cat->GetIcon(iconName, iconNr, iconMaskIndex);
+
+ iLog->Log(_L("Category %d, globalId %d, name '%S', icon {'%S',%d,%d}"),
+ cat->CategoryId(), cat->GlobalCategory(), &name, &iconName, iconNr, iconMaskIndex );
+
+ CleanupStack::PopAndDestroy(cat);
+
+ idde = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+
+ iLog->Log(_L("------"));
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp130.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,716 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp130.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmItemIterator.h>
+#include <EPos_TPosLmSortPref.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include "badesca.h"
+
+// CONSTANTS
+const TInt KNrOfDatabases = 5;
+_LIT(KSearchPattern, "*e*");
+
+class CNamedLmItem : public CBase
+ {
+ public:
+ ~CNamedLmItem() { delete iName; };
+ TPosLmItemId iId;
+ HBufC* iName;
+
+ static TInt CompareByName( const CNamedLmItem& aLeft, const CNamedLmItem& aRight )
+ {
+ return aLeft.iName->CompareC( *aRight.iName );
+ };
+ };
+
+// ================= LOCAL FUNCTIONS =======================
+
+void ResetAndDestroy(TAny* aAny)
+ {
+ RPointerArray<CPosLmItemIterator>* pointerArray =
+ reinterpret_cast <RPointerArray<CPosLmItemIterator>*> (aAny);
+ pointerArray->ResetAndDestroy();
+ }
+
+void ResetAndDestroyNamedLmItem(TAny* aAny)
+ {
+ RPointerArray<CNamedLmItem>* pointerArray =
+ reinterpret_cast <RPointerArray<CNamedLmItem>*> (aAny);
+ pointerArray->ResetAndDestroy();
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp130::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::InitTestL()
+ {
+ CLandmarkTestProcedureBase::InitTestL();
+
+ // PrepareDatabases
+ const TInt KNrOfDatabases = 5;
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+
+ // List databases
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ iDbUris = dbMan->ListDatabasesLC();
+ CleanupStack::Pop(iDbUris);
+ AssertTrueSecL(iDbUris->Count() == KNrOfDatabases, _L("Wrong number of test databases!"));
+ CleanupStack::PopAndDestroy(dbMan);
+
+ iDbSearcher = CPosLmMultiDbSearch::NewL(*iDbUris);
+
+ // Initialize expected landmark search result
+
+ for ( TInt i = 0; i < iDbUris->Count(); i++ )
+ {
+ RIdArray* lmArray = new (ELeave) RIdArray;
+ InitExpectedResultsL( (*iDbUris)[i], *lmArray, ETrue );
+ iExpectedLmResult.AppendL( lmArray );
+
+ RIdArray* catArray = new (ELeave) RIdArray;
+ InitExpectedResultsL( (*iDbUris)[i], *catArray, EFalse );
+ iExpectedCatResult.AppendL( catArray );
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::CloseTest()
+ {
+ delete iDbUris;
+ delete iDbSearcher;
+ for (TInt i = 0; i < iExpectedLmResult.Count(); i++)
+ {
+ iExpectedLmResult[i]->Close();
+ iExpectedCatResult[i]->Close();
+ }
+ iExpectedLmResult.ResetAndDestroy();
+ iExpectedCatResult.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::StartL()
+ {
+ // nrOfExpectedMatches contains the number of matches for each db when search pattern is *e*
+ RArray<TInt> nrOfExpectedMatches;
+ CleanupClosePushL(nrOfExpectedMatches);
+ for (TInt i = 0; i < KNrOfDatabases; i++)
+ {
+ nrOfExpectedMatches.AppendL((*iExpectedLmResult[i]).Count());
+ }
+
+// 1. Search for landmarks
+ iLog->Log(_L("1"));
+ SearchForLandmarksL();
+
+// 2-9. Verify result
+ iLog->Log(_L("2-9"));
+ VerifyIteratorsL(nrOfExpectedMatches, ETrue);
+
+ iLog->Log(_L("10.true"));
+// 10. Test iterators dynamically
+ TestMatchIteratorL(ETrue);
+ iLog->Log(_L("10.false"));
+ TestMatchIteratorL(EFalse);
+
+ iLog->Log(_L("11"));
+// 11. Test error codes
+ TestErrorCodesL();
+
+ iLog->Log(_L("12"));
+// 12. Check iterators from matching categories
+ nrOfExpectedMatches.Reset();
+ for (TInt i = 0; i < KNrOfDatabases; i++)
+ {
+ nrOfExpectedMatches.AppendL((*iExpectedCatResult[i]).Count());
+ }
+ SearchForCategoriesL();
+ VerifyIteratorsL(nrOfExpectedMatches, EFalse);
+ CleanupStack::PopAndDestroy(&nrOfExpectedMatches);
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::SearchForLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::SearchForLandmarksL()
+ {
+ // Search for landmarks containing a specific string in name
+ CPosLmTextCriteria* criteria = CPosLmTextCriteria::NewLC();
+ criteria->SetTextL(KSearchPattern);
+ criteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+
+ // Do the search
+ ExecuteAndDeleteLD(iDbSearcher->StartLandmarkSearchL(*criteria));
+
+ // Check errors
+ TUint nrOfSearchErrors = iDbSearcher->NumOfSearchErrors();
+ AssertTrueSecL(nrOfSearchErrors == 0, _L("Found errors during search"));
+
+ CleanupStack::PopAndDestroy(criteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::SearchForCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::SearchForCategoriesL()
+ {
+ // Search for categories containing a specific string in name
+ CPosLmCatNameCriteria* criteria = CPosLmCatNameCriteria::NewLC();
+ criteria->SetSearchPatternL(KSearchPattern);
+
+ // Do the search
+ ExecuteAndDeleteLD(iDbSearcher->StartCategorySearchL(*criteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ // Check errors
+ TUint nrOfSearchErrors = iDbSearcher->NumOfSearchErrors();
+ AssertTrueSecL(nrOfSearchErrors == 0, _L("Found errors during search"));
+
+ CleanupStack::PopAndDestroy(criteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::VerifyIteratorsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::VerifyIteratorsL(RArray<TInt>& aNrOfExpectedItems, TBool aLm)
+ {
+ RPointerArray<CPosLmItemIterator> iterators;
+ CleanupClosePushL(iterators);
+ CleanupStack::PushL(TCleanupItem(ResetAndDestroy, &iterators));
+
+ TInt totalNrOfMatches(0), totalNrOfExpectedMatches(0);
+ for (TInt i = 0; i < KNrOfDatabases; i++)
+ {
+ // 2. Ask for the iterator for each database
+ iterators.AppendL(iDbSearcher->MatchIteratorL(i));
+
+ // 3. Verify that the number of each iterator equals to the expected result
+ AssertTrueSecL(aNrOfExpectedItems[i] == iterators[i]->NumOfItemsL(), _L("aNrOfExpectedItems[i] != iterators[i]->NumOfItemsL()"));
+ AssertTrueSecL(aNrOfExpectedItems[i] == iDbSearcher->NumOfMatches(i), _L("aNrOfExpectedItems[i] != iDbSearcher->NumOfMatches(i)"));
+
+ totalNrOfExpectedMatches += aNrOfExpectedItems[i];
+ totalNrOfMatches += iterators[i]->NumOfItemsL();
+ }
+
+ // 4. Verify that the total number of matches equals the sum of expected
+ AssertTrueSecL(totalNrOfMatches == totalNrOfExpectedMatches, _L("totalNrOfMatches != totalNrOfExpectedMatches"));
+ AssertTrueSecL(totalNrOfMatches == iDbSearcher->TotalNumOfMatches(), _L("totalNrOfMatches != iDbSearcher->TotalNumOfMatches()"));
+
+ for (TInt dbIndex = 0; dbIndex < KNrOfDatabases; dbIndex++)
+ {
+ // 5. Ask for the first item in each iterator
+ TPosLmItemId id1 = iterators[dbIndex]->NextL();
+
+ // 6. Perform an operation on the first item, e.g. read it from db
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL((*iDbUris)[dbIndex]);
+ CleanupStack::PushL(db);
+ if (aLm)
+ {
+ CPosLandmark* lm = db->ReadLandmarkLC(id1);
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ AssertTrueSecL(name.MatchC(KSearchPattern) != KErrNotFound, _L("First lm in iterator does not contain \"e\""));
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else
+ {
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+ CPosLandmarkCategory* cat = catMan->ReadCategoryLC(id1);
+ TPtrC name;
+ cat->GetCategoryName(name);
+ AssertTrueSecL(name.MatchC(KSearchPattern) != KErrNotFound, _L("First category in iterator does not contain \"e\""));
+ CleanupStack::PopAndDestroy(2, catMan);
+ }
+ CleanupStack::PopAndDestroy(db);
+
+ RIdArray allIds;
+ CleanupClosePushL(allIds);
+
+ // 7. Reset iterator and ask for next item
+ iterators[dbIndex]->Reset();
+ TPosLmItemId id2 = iterators[dbIndex]->NextL();
+ AssertTrueSecL(id1 == id2, _L("id1 != id2"));
+ allIds.AppendL(id2);
+
+ // 8. Iterate until there are no more items to iterate
+ while (id2 != KPosLmNullItemId)
+ {
+ id2 = iterators[dbIndex]->NextL();
+ allIds.AppendL(id2);
+ }
+ AssertTrueSecL(id2 == KPosLmNullItemId, _L("id2 != KPosLmNullItemId"));
+
+ // 9. Ask for sequences of iterator
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ TInt nrOfItems = iterators[dbIndex]->NumOfItemsL();
+ for (TInt iterIndex = 0; iterIndex < nrOfItems; iterIndex++)
+ {
+ // Get sequence of the tail of the iterator
+ iterators[dbIndex]->GetItemIdsL(idArray, iterIndex, nrOfItems - iterIndex);
+ AssertTrueSecL(idArray.Count() == nrOfItems - iterIndex, _L("A: Wrong number of items in id array"));
+ for (TInt i = iterIndex; i < nrOfItems - iterIndex; i++)
+ {
+ id1 = idArray[i - iterIndex];
+ id2 = allIds[i];
+ AssertTrueSecL(id1 == id2, _L("A: Unexpected id in part of all ids array"));
+ }
+
+ // Get sequence of the nose of the iterator
+ iterators[dbIndex]->GetItemIdsL(idArray, 0, iterIndex);
+ AssertTrueSecL(idArray.Count() == iterIndex, _L("B: Wrong number of items in id array"));
+ for (TInt j = 0; j < iterIndex; j++)
+ {
+ id1 = idArray[j];
+ id2 = allIds[j];
+ AssertTrueSecL(id1 == id2, _L("B: Unexpected id in part of all ids array"));
+ }
+ }
+ CleanupStack::PopAndDestroy(2, &allIds);
+ }
+
+ CleanupStack::PopAndDestroy(2, &iterators);
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::TestErrorCodesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::TestErrorCodesL()
+ {
+ // No error codes to test
+ }
+
+// ---------------------------------------------------------
+// CPosTp130::TestMatchIteratorL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp130::TestMatchIteratorL(TBool aSearchLm)
+ {
+ CMatchIteratorTester* matchIterTester = CMatchIteratorTester::NewLC(iDbUris, iLog);
+ CPosLmOperation* operation = NULL;
+
+ if (aSearchLm)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(KSearchPattern);
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ operation = iDbSearcher->StartLandmarkSearchL(*textCriteria, sortPref);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ CleanupStack::PushL(operation);
+ matchIterTester->RunTestL(iDbSearcher, operation, iExpectedLmResult);
+ CleanupStack::Pop(operation); // ownership transferred
+ }
+ else
+ {
+ CPosLmCatNameCriteria* criteria = CPosLmCatNameCriteria::NewLC();
+ criteria->SetSearchPatternL(KSearchPattern);
+ operation = iDbSearcher->StartCategorySearchL(*criteria, CPosLmCategoryManager::ECategorySortOrderNameAscending);
+ CleanupStack::PopAndDestroy(criteria);
+
+ CleanupStack::PushL(operation);
+ matchIterTester->RunTestL(iDbSearcher, operation, iExpectedCatResult);
+ CleanupStack::Pop(operation); // ownership transferred
+ }
+
+ TInt error = matchIterTester->Result();
+ if (error != KErrNone)
+ {
+ TPtrC msg;
+ matchIterTester->GetErrorMsg(msg);
+
+ iLog->Log(msg);
+ User::Leave(error);
+ }
+
+ CleanupStack::PopAndDestroy(matchIterTester);
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp130::InitExpectedResultsL( const TDesC& aDbName, RIdArray& aArray, TBool aSearchLm )
+ {
+ iLog->Log( aDbName );
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL( aDbName );
+ CleanupStack::PushL( db );
+
+ if ( db->IsInitializingNeeded() )
+ {
+ ExecuteAndDeleteLD( db->InitializeL() );
+ }
+
+ CPosLmCategoryManager* catman = CPosLmCategoryManager::NewL( *db );
+ CleanupStack::PushL( catman );
+
+ RPointerArray<CNamedLmItem> items;
+ CleanupStack::PushL( TCleanupItem( ResetAndDestroyNamedLmItem, &items ) );
+
+ CPosLmItemIterator* iter = NULL;
+ if ( aSearchLm )
+ {
+ iter = db->LandmarkIteratorL();
+ }
+ else
+ {
+ iter = catman->CategoryIteratorL();
+ }
+ CleanupStack::PushL( iter );
+
+ TPosLmItemId id = iter->NextL();
+ while ( id != KPosLmNullItemId )
+ {
+ CNamedLmItem* item = new (ELeave) CNamedLmItem;
+ CleanupStack::PushL( item );
+
+ item->iId = id;
+
+ TPtrC name;
+ if ( aSearchLm )
+ {
+ CPosLandmark* lm = db->ReadLandmarkLC( id );
+ lm->GetLandmarkName( name );
+ item->iName = name.AllocL();
+ CleanupStack::PopAndDestroy( lm );
+ }
+ else
+ {
+ CPosLandmarkCategory* cat = catman->ReadCategoryLC( id );
+ cat->GetCategoryName( name );
+ item->iName = name.AllocL();
+ CleanupStack::PopAndDestroy( cat );
+ }
+
+ if ( item->iName->MatchC( KSearchPattern ) != KErrNotFound )
+ {
+ items.AppendL( item );
+ CleanupStack::Pop( item );
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( item );
+ }
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy( iter );
+
+ TLinearOrder<CNamedLmItem> order( CNamedLmItem::CompareByName );
+ items.Sort( order );
+
+ aArray.Reset();
+ for( TInt i = 0; i < items.Count(); i++ )
+ {
+ aArray.AppendL( items[i]->iId );
+ iLog->Log( _L("id: %d, name = '%S'"), items[i]->iId, items[i]->iName );
+ }
+
+ CleanupStack::PopAndDestroy(); // items
+ CleanupStack::PopAndDestroy( catman );
+ CleanupStack::PopAndDestroy( db );
+ }
+
+// ================= CMatchIteratorTester MEMBER FUNCTIONS =======================
+
+// Constructor
+CMatchIteratorTester::CMatchIteratorTester(
+ CDesCArray* aDbUris, CStifLogger* aLog )
+: CActive(CActive::EPriorityStandard),
+iDbUris(aDbUris), iLog( aLog )
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Destructor
+CMatchIteratorTester::~CMatchIteratorTester()
+ {
+ Cancel();
+ delete iErrorMsg;
+ delete iOperation;
+ iIterators.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::NewLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CMatchIteratorTester* CMatchIteratorTester::NewLC(
+ CDesCArray* aDbUris, CStifLogger* aLog)
+ {
+ CMatchIteratorTester* self =
+ new (ELeave) CMatchIteratorTester(aDbUris, aLog);
+ CleanupStack::PushL(self);
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::RunL()
+ {
+ iResult = iStatus.Int();
+ VerifyIteratorsL(iResult);
+
+ if (iStatus.Int() == KPosLmOperationNotComplete)
+ {
+ iOperation->NextStep(iStatus, iProgress);
+ SetActive();
+ }
+ else
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::DoCancel()
+ {
+ delete iOperation;
+ iOperation = NULL;
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::RunError
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CMatchIteratorTester::RunError(TInt aError)
+ {
+ iResult = aError;
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::RunTestL(
+ CPosLmMultiDbSearch* aMultiSearcher,
+ CPosLmOperation* aSearchOperation,
+ RPointerArray<RIdArray>& aExpectedResult)
+ {
+ iMultiSearcher = aMultiSearcher;
+ iExpectedResult = &aExpectedResult;
+ iOperation = aSearchOperation;
+
+ // Initialize iIterators
+ for (TInt i = 0; i < iMultiSearcher->NumOfDatabasesToSearch(); i++)
+ {
+ CPosLmItemIterator* iterator = iMultiSearcher->MatchIteratorL(i);
+ CleanupStack::PushL(iterator);
+ User::LeaveIfError(iIterators.Append(iterator));
+ CleanupStack::Pop(iterator);
+ }
+
+ iOperation->NextStep(iStatus, iProgress);
+ SetActive();
+ CActiveScheduler::Start();
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::Result
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CMatchIteratorTester::Result() const
+ {
+ return iResult;
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::GetErrorMsg
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::GetErrorMsg(TPtrC& aMsg) const
+ {
+ aMsg.Set(*iErrorMsg);
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::VerifyIteratorsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::VerifyIteratorsL(TInt aResult)
+ {
+ for (TInt dbIndex = 0; dbIndex < iMultiSearcher->NumOfDatabasesToSearch(); dbIndex++)
+ {
+ CPosLmItemIterator* iterator = iMultiSearcher->MatchIteratorL(dbIndex);
+ CleanupStack::PushL(iterator);
+ CompareIteratorsL(*iterator, *iIterators[dbIndex]);
+ delete iIterators[dbIndex];
+ iIterators[dbIndex] = iterator;
+ CleanupStack::Pop(iterator);
+
+ // Verify matches are correct
+ TBuf<50> buf;
+ iterator->Reset();
+ TPosLmItemId id = iterator->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ if ((*(*iExpectedResult)[dbIndex]).Find(id) == KErrNotFound)
+ {
+ buf.Format(_L("Cannot find match %d in expected result"), id );
+ SetErrorAndLeaveL(buf);
+ }
+ id = iterator->NextL();
+ }
+
+ if (aResult == KErrNone) // Search is completed - result should be sorted ascending
+ {
+ RIdArray idArray;
+ CleanupClosePushL(idArray);
+ TInt nrOfItems = iterator->NumOfItemsL();
+ iterator->GetItemIdsL(idArray, 0, nrOfItems);
+ for (TInt i = 0; i < nrOfItems; i++)
+ {
+ TPosLmItemId id1 = idArray[i];
+ TPosLmItemId id2 = (*(*iExpectedResult)[dbIndex])[i];
+ if (id1 != id2)
+ {
+ buf.Format(_L("Sorted result differs, %d != %d"), id1, id2);
+ SetErrorAndLeaveL(buf);
+ }
+ }
+
+ TInt expectedLength = (*(*iExpectedResult)[dbIndex]).Count();
+ if (nrOfItems != expectedLength)
+ {
+ buf.Format(_L("Length of arrays doesnät match, %d != %d"), nrOfItems, expectedLength);
+ SetErrorAndLeaveL(buf);
+ }
+ CleanupStack::PopAndDestroy(&idArray);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::CompareIteratorsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::CompareIteratorsL(
+ CPosLmItemIterator& aNewIter,
+ CPosLmItemIterator& aOldIter)
+ {
+ TInt oldIterLength = aOldIter.NumOfItemsL();
+ TInt newIterLength = aNewIter.NumOfItemsL();
+
+ if (newIterLength < oldIterLength)
+ {
+ SetErrorAndLeaveL(_L("aNewIter is shorter than aOldIter"));
+ }
+
+ // Verify that all the items in the old iterator can be found in the new one
+ if (newIterLength > 0)
+ {
+ RArray<TPosLmItemId> newItemIds;
+ CleanupClosePushL(newItemIds);
+ aNewIter.GetItemIdsL(newItemIds, 0, newIterLength);
+
+ aOldIter.Reset();
+ TPosLmItemId id = aOldIter.NextL();
+ while (id != KPosLmNullItemId)
+ {
+ TInt err = newItemIds.Find(id);
+ if (err == KErrNotFound)
+ {
+ SetErrorAndLeaveL(_L("aNewIter doesn't match aOldIter"));
+ }
+ id = aOldIter.NextL();
+ }
+
+ CleanupStack::PopAndDestroy(&newItemIds);
+ }
+ }
+
+// ---------------------------------------------------------
+// CMatchIteratorTester::SetErrorAndLeaveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMatchIteratorTester::SetErrorAndLeaveL(const TDesC& aErrMsg)
+ {
+ delete iErrorMsg;
+ iErrorMsg = NULL;
+ iErrorMsg = aErrMsg.AllocL();
+ User::Leave(KErrGeneral);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp131.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,979 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp131.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+#include <LbsPosition.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp131::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iSearchResults.ResetAndDestroy();
+
+ //CHECK TR Delete of landmarks search - ESLI-5WNG9N
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::StartL()
+ {
+ iErrorsFound = KErrNone;
+ // copy test db to the private path
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp131TestDb);
+
+ TInt er = fileMan->Copy(srcPath, KLmTp131DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (er != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp131TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KTp131TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ TRAPD( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL(err == KErrNone, _L("Init db failed"));
+ }
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ AppendSearchResultsL();
+
+ iLog->Log(_L("Testing search with a defined sortorder"));
+ SearchWithSortOrderL(iSearchResults);
+
+ // Test Partial landmarks
+ iLog->Log(_L("Testing search with a defined sortorder for partial landmarks"));
+ SearchPartialLandmarksL(iSearchResults);
+
+ iLog->Log(_L("Testing reset of DisplayData"));
+ CheckResetL(iSearchResults);
+
+ iLog->Log(_L("Testing cancel and displaydata"));
+ CancelTestL(iSearchResults);
+
+ // Test DisplayDataItem, create Landmark type
+ TUint dbIndex = 0;
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("Tp131Landmarkname"));
+ CPosLmDisplayItem* item = CPosLmDisplayItem::NewL(lm, dbIndex);
+ CleanupStack::PushL(item);
+
+ CPosLmDisplayItem::TDisplayItemType type = item->DisplayItemType();
+ AssertTrueSecL(type == CPosLmDisplayItem::ELandmarkItem, _L("Wrong TDisplayItemType"));
+ CleanupStack::PopAndDestroy(item);
+ CleanupStack::Pop(lm); // lm deleted when deleting displaydata
+
+ // Test DisplayDataItem, create Category type
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("Tp131CategoryName"));
+ item = CPosLmDisplayItem::NewL(category, dbIndex);
+ CleanupStack::PushL(item);
+ type = item->DisplayItemType();
+
+ AssertTrueSecL(type == CPosLmDisplayItem::ECategoryItem, _L("Wrong TDisplayItemType"));
+ CleanupStack::PopAndDestroy(item);
+ CleanupStack::Pop(category); // category deleted when deleting displaydata
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors were found in TP131"));
+ User::Leave(-1);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::ChechPartialLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const CPosLandmark::TAttributes& aAttr, const RArray<TUint>& aReqFields)
+ {
+ _LIT(KPartialIdErr, "Incorrect Id when reading from a Partial landmark");
+ _LIT(KPartialCategoryInfoErr, "Incorrect Category info when reading from a Partial landmark");
+
+ TPosLmItemId id = aLandmark.LandmarkId();
+ AssertTrueSecL(id != 0, KPartialIdErr);
+
+ AssertTrueSecL(aLandmark.IsPartial(), _L("Landmark is not partial"));
+
+ TInt err;
+ TPtrC name;
+ err = aLandmark.GetLandmarkName(name);
+ // Name is always included
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::ELandmarkName, err);
+
+ TReal32 coverageR;
+ err = aLandmark.GetCoverageRadius(coverageR);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::ECoverageRadius, err);
+
+ TPtrC desc;
+ err = aLandmark.GetLandmarkDescription(desc);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EDescription, err);
+
+ TPtrC iconName;
+ TInt iconIndex;
+ TInt iconMaskIndex;
+ err = aLandmark.GetIcon(iconName, iconIndex, iconMaskIndex);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EIcon, err);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ aLandmark.GetCategoriesL(categories);
+ if (aAttr & CPosLandmark::ECategoryInfo)
+ {
+ AssertTrueSecL(categories.Count() != 0, KPartialCategoryInfoErr);
+ }
+ else
+ {
+ AssertTrueSecL(categories.Count() == 0, KPartialCategoryInfoErr);
+ }
+ CleanupStack::PopAndDestroy(&categories);
+
+ TLocality loc;
+ err = aLandmark.GetPosition(loc);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EPosition, err);
+
+ // Check PositionFields
+ // Check fields from EPositionFieldCompassCapabilitiesBegin up to EPositionFieldMediaCapabilitiesBegin+100
+ // should be enough to also cover URL
+ for (TInt i=EPositionFieldCompassCapabilitiesBegin; i<EPositionFieldMediaCapabilitiesBegin+100; i++)
+ {
+ TBool avail = aLandmark.IsPositionFieldAvailable((TUint16)i);
+ TInt found = aReqFields.Find(i);
+ if (avail && found != KErrNotFound)
+ {
+ TPtrC value;
+ err = aLandmark.GetPositionField((TUint16)aReqFields[found], value);
+ AssertTrueSecL(err == KErrNone, _L("Could not retrieve positionfield value"), err);
+ iLog->Log(value);
+ }
+ else if (!avail && found != KErrNotFound || avail && found == KErrNotFound)
+ {
+ // Fields 405 and 802 are not always set
+ if (i!=405 && i!=802)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ERROR: Mismatch in positionfields, id %d were not found"), i);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::ChechPartialErrorCodeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::CheckPartialErrorCodeL(const TBool aPartial, const TInt aErr)
+ {
+ _LIT(KPartialLmErr, "Incorrect error code returned when reading from a Partial landmark");
+
+ if (aPartial)
+ {
+ AssertTrueSecL(aErr == KErrNone, KPartialLmErr);
+ }
+ else
+ {
+ AssertTrueSecL(aErr == KErrNotFound, KPartialLmErr);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::SearchPartialLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::SearchPartialLandmarksL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect");
+ _LIT(KNumOfMatchesErr2, "No. of display data matches is incorrect");
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ iDisplayData = CPosLmDisplayData::NewL();
+ iLandmarkSearch->SetDisplayData(*iDisplayData);
+
+ // Only do search for index KWhatToSearchFor in lmDbSearchResult.txt
+ // index 11 is MLFW
+ TInt KWhatToSearchFor = 11;
+ textCriteria->SetTextL(aSearchResults[KWhatToSearchFor]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[KWhatToSearchFor]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[KWhatToSearchFor]->PositionFields());
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+
+ iLog->Log(aSearchResults[KWhatToSearchFor]->TextCriteria());
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+
+ CPosLmPartialReadParameters* fakePartialParam = CPosLmPartialReadParameters::NewLC();
+ reqFields.Append(EPositionFieldStreet);
+ fakePartialParam->SetRequestedPositionFields(reqFields);
+ reqFields.Reset();
+
+ // Dont search for all search criteras
+ // takes just too long time on target (approx 1 hour for this test on target)
+
+ // Search for all combinations from 0 - CPosLandmark::EDescription
+ // Ex attr=0, attr=1, attr=2, attr=3, .....attr=63,
+#ifdef __WINS__
+ TUint max = CPosLandmark::EDescription;
+ max <<= 1;
+ max -= 1;
+#else
+ TUint max = CPosLandmark::ECategoryInfo;
+ max <<= 1;
+ max -= 1;
+#endif
+
+ TUint attr=0;
+ for (attr=0; attr<=max; attr++)
+ {
+ partialParam->SetRequestedAttributes(attr);
+ reqFields.Reset();
+
+ if (attr == 5)
+ {
+ // Add EPositionFieldCountry
+ iLog->Log(_L("Also cover EPositionFieldCountry"));
+ reqFields.Append(EPositionFieldCountry);
+ }
+ else if (attr == 12)
+ {
+ // Add EPositionFieldCity, EPositionFieldStreet, EPositionFieldCountry
+ iLog->Log(_L("Also cover EPositionFieldCity, EPositionFieldStreet, EPositionFieldCountry"));
+ reqFields.Append(EPositionFieldCity);
+ reqFields.Append(EPositionFieldStreet);
+ reqFields.Append(EPositionFieldCountry);
+
+ }
+ else if (attr == 32)
+ {
+ // Add EPositionFieldMediaLinksStart, EPositionFieldDistrict
+ iLog->Log(_L("Also cover EPositionFieldMediaLinksStart, EPositionFieldDistrict"));
+ reqFields.Append(EPositionFieldMediaLinksStart);
+ reqFields.Append(EPositionFieldDistrict);
+ }
+
+ iDisplayData->UnsetPartialReadParameters();
+ partialParam->SetRequestedPositionFields(reqFields);
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+
+ for (TInt i=0; i<2; i++)
+ {
+ switch (i)
+ {
+ case 0:
+ {
+ //**** async
+ //iLog->Log(_L("*****Async, EDescending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ iAscendedSorted = EFalse;
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[KWhatToSearchFor]->Redefined());
+ // Test that if SetPartialReadParametersL is called after search has started it has no affect
+ iDisplayData->SetPartialReadParametersL(*fakePartialParam);
+ ExecuteLmOpL();
+ }
+ break;
+ case 1:
+ {
+ partialParam->SetRequestedPositionFields(reqFields);
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ //iLog->Log(_L("*****Async EAscending"));
+ iAscendedSorted = ETrue;
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[KWhatToSearchFor]->Redefined());
+ ExecuteLmOpL();
+ }
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[KWhatToSearchFor]->SearchResult();
+ if ((TUint)searchResults->Count() != iLandmarkSearch->NumOfMatches())
+ {
+ TBuf<50> buf;
+ buf.Append(_L("KNumOfMatchesError when searching for "));
+ buf.Append(aSearchResults[KWhatToSearchFor]->TextCriteria());
+ iLog->Log(buf);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+
+ }
+
+ // Check correct displayData
+ AssertTrueSecL(iter->NumOfItemsL() == iDisplayData->Count(), KNumOfMatchesErr2);
+ LandmarksSortL(*searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((*searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ item.Landmark().GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+
+ if (lmId != (*searchResults)[ii])
+ {
+ // If found multiple match -> "Mölndal" etc
+ //Check if same name then don't Leave
+ AssertTrueSecL(sourceName.CompareC(targetName) == 0,KSortorderErr, lmId);
+ }
+ else
+ {
+ //CompareLandmarksL(item.Landmark(), *target);
+ // Add some check of partial landmarks here
+ AssertTrueSecL(sourceName.CompareC(targetName) == 0,KSortorderErr, lmId);
+
+ // Landmarkname is always included when sorting
+ CheckPartialLandmarkL(item.Landmark() , attr | CPosLandmark::ELandmarkName, reqFields);
+ }
+
+ CleanupStack::PopAndDestroy(target);
+ id = iter->NextL();
+
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iDisplayData->Reset();
+ }
+ }
+
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(fakePartialParam);
+ CleanupStack::PopAndDestroy(partialParam);
+ CleanupStack::PopAndDestroy(&reqFields);
+ CleanupStack::PopAndDestroy(textCriteria);
+ delete iDisplayData;
+ iDisplayData = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::SearchWithSortOrderL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect");
+ _LIT(KNumOfMatchesErr2, "No. of display data matches is incorrect");
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ iDisplayData = CPosLmDisplayData::NewL();
+ iLandmarkSearch->SetDisplayData(*iDisplayData);
+
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+
+ // Test that UnsetPartialReadParameters works
+ reqFields.Append(EPositionFieldCountry);
+ partialParam->SetRequestedPositionFields(reqFields);
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+ CleanupStack::PopAndDestroy(&reqFields);
+ CleanupStack::PopAndDestroy(partialParam);
+ iDisplayData->UnsetPartialReadParameters();
+
+ // Dont search for all search criteras (see excel file)
+ // takes just too long time on target (approx 1 hour for this test on target)
+ // therefore start at j=7
+#ifdef __WINS__
+ for(TInt j=2; j<aSearchResults.Count(); j++)
+#else
+ for(TInt j=7; j<aSearchResults.Count(); j++)
+#endif
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+
+ iLog->Log(aSearchResults[j]->TextCriteria());
+
+ // Dont test sync search
+ for (TInt i=2; i<6; i++)
+ {
+ switch (i)
+ {
+ //**** sync
+ case 0:
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ }
+ break;
+ case 1:
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ }
+ break;
+ case 2:
+ {
+ //**** async
+ //iLog->Log(_L("*****Async, EDescending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ iAscendedSorted = EFalse;
+ //iLog->Log(_L("Start"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[j]->Redefined());
+ ExecuteLmOpL();
+ //iLog->Log(_L("Done"));
+ }
+ break;
+ case 3:
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ //iLog->Log(_L("*****Async EAscending"));
+ iAscendedSorted = ETrue;
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[j]->Redefined());
+ ExecuteLmOpL();
+ }
+ break;
+ //**** asych with User::WaitForRequest()
+ case 4:
+ {
+ //iLog->Log(_L("*****User::WaitForRequest() EDescending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ CPosLmOperation* op = iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ case 5:
+ {
+ //iLog->Log(_L("*****User::WaitForRequest() EAscending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmOperation* op = iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[j]->SearchResult();
+ if ((TUint)searchResults->Count() != iLandmarkSearch->NumOfMatches())
+ {
+ TBuf<50> buf;
+ buf.Append(_L("KNumOfMatchesError when searching for "));
+ buf.Append(aSearchResults[j]->TextCriteria());
+ iLog->Log(buf);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ // Check correct displayData
+ AssertTrueSecL(iter->NumOfItemsL() == iDisplayData->Count(), KNumOfMatchesErr2);
+ LandmarksSortL(*searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((*searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ item.Landmark().GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+
+ if (lmId != (*searchResults)[ii])
+ {
+ // If found multiple match -> "Mölndal" etc
+ //Check if same name then don't Leave
+ AssertTrueSecL(sourceName.CompareC(targetName) == 0,KSortorderErr, lmId);
+ }
+ else
+ {
+ CompareLandmarksL(item.Landmark(), *target);
+ }
+
+ CleanupStack::PopAndDestroy(target);
+ id = iter->NextL();
+
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iDisplayData->Reset();
+ }
+ }
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(textCriteria);
+ delete iDisplayData;
+ iDisplayData = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::CheckResetL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::CheckResetL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ iLog->Log(_L("CheckResetL"));
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+
+ // Sync
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, aSearchResults[j]->Redefined()));
+ AssertTrueSecL(iLandmarkSearch->NumOfMatches() == displayData->Count(),_L("Wrong number of matches1"),j);
+ displayData->Reset();
+ AssertTrueSecL(displayData->Count() == 0,_L("DisplayData should have been resetted"));
+
+ // Async
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, aSearchResults[j]->Redefined()));
+ AssertTrueSecL(iLandmarkSearch->NumOfMatches() == displayData->Count(),_L("Wrong number of matches2"),j);
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[j]->SearchResult();
+ //AssertTrueSecL(iLandmarkSearch->NumOfMatches() == searchResults->Count(),_L("Wrong number of matches3"),j);
+ if (iLandmarkSearch->NumOfMatches() != searchResults->Count())
+ {
+ TBuf<150> buf;
+ buf.Format(_L("Exp %d nr of matches, got %d, searching for: "), searchResults->Count(), iLandmarkSearch->NumOfMatches());
+ buf.Append(aSearchResults[j]->TextCriteria());
+ iLog->Log(buf);
+ }
+
+ AssertTrueSecL(displayData->Count() == iLandmarkSearch->NumOfMatches(),_L("DisplayData matches is not correct"));
+
+ }
+
+ // Test unset of displaydata
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+
+ displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+ iLandmarkSearch->UnsetDisplayData();
+
+ textCriteria->SetTextL(aSearchResults[0]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[0]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[0]->PositionFields());
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria));
+ AssertTrueSecL(displayData->Count() == 0,_L("No matches should be found in DisplayData"));
+
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ textCriteria->SetTextL(aSearchResults[0]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[0]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[0]->PositionFields());
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria));
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[0]->SearchResult();
+ AssertTrueSecL(iLandmarkSearch->NumOfMatches() == displayData->Count(),_L("Wrong number of matches4"));
+ AssertTrueSecL(iLandmarkSearch->NumOfMatches() == searchResults->Count(),_L("Wrong number of matches5"));
+
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::CancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::CancelTestL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ iLog->Log(_L("CancelTestL"));
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Cancel search operation and verify that the displayData result is sorted correctly
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ for (TInt pp=0;pp<2;pp++)
+ {
+ if (pp == 0)
+ {
+ //iLog->Log(_L("Sorting Descending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ }
+ else {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ //iLog->Log(_L("Sorting Ascending"));
+ }
+
+ // Set DisplayData
+ iLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+
+ TBuf<150> buf;
+ buf.Append(aSearchResults[j]->TextCriteria());
+ //iLog->Log(buf);
+
+ // Cancel operation in callback
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, EFalse));
+ AssertTrueSecL(iLandmarkSearch->NumOfMatches() == displayData->Count(),_L("Wrong number of matches after cancel"),j);
+
+ buf.Zero();
+ buf.Format(_L("Search returned %d nr of matches, displayData %d nr of matches"),iLandmarkSearch->NumOfMatches(), displayData->Count());
+ //iLog->Log(buf);
+
+ // Check sort order below
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (iter->NumOfItemsL()>0)
+ {
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ iter->GetItemIdsL(arr, 0, iter->NumOfItemsL());
+
+ // Sort matchiterator
+ LandmarksSortL(arr, sortPref);
+
+ TInt index=0;
+ TInt itemId = displayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item = displayData->DisplayItem(itemId);
+
+ AssertTrueSecL(item.DisplayItemType() == CPosLmDisplayItem::ELandmarkItem,
+ _L("Wrong item returned, only ELandmarkItem should be returned"));
+
+ AssertTrueSecL(item.DatabaseIndex() == 0, _L("Wrong DatabaseIndex, should be 0"));
+
+ TInt lmId = item.Landmark().LandmarkId();
+
+
+ // AssertTrueSecL(arr[index] == lmId , _L("Incorrect sortorder"));
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(arr[index]);
+
+ if ( arr[index] != lmId )
+ {
+ TPtrC sourceName;
+ item.Landmark().GetLandmarkName(sourceName);
+ TPtrC name2;
+ lm->GetLandmarkName(name2);
+ iLog->Log( _L("CancelTestL: #%02d, exp %d, act %d, '%S', '%S'"),
+ index, arr[index], lmId, &name2, &sourceName );
+
+ if ( sourceName.CompareC( name2 ) != 0 )
+ {
+ AssertTrueSecL( arr[index] == lmId, _L("Incorrect sort order") );
+ }
+ }
+ else
+ {
+ CompareLandmarksL(*lm, item.Landmark());
+ }
+
+ itemId = displayData->NewItemIndex();
+ index++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ CleanupStack::PopAndDestroy(&arr);
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// Tp131InternalLandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt Tp131InternalLandmarksSortL(const CPosLandmark& aSource, const CPosLandmark& aTarget)
+ {
+ TPtrC sourceName, targetName;
+
+ User::LeaveIfError(aSource.GetLandmarkName(sourceName));
+ User::LeaveIfError(aTarget.GetLandmarkName(targetName));
+
+ return sourceName.CompareC(targetName);
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::LandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::LandmarksSortL(RArray<TPosLmItemId>& aArray, const TPosLmSortPref& aSortPref)
+ {
+
+ RPointerArray<CPosLandmark> landmarks;
+ CleanupClosePushL(landmarks);
+
+ for (TInt i=0; i<aArray.Count(); i++)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aArray[i]);
+ landmarks.Append(lm);
+ CleanupStack::Pop(lm);
+ }
+
+ TLinearOrder<CPosLandmark> order(Tp131InternalLandmarksSortL);
+ landmarks.Sort(order);
+
+ aArray.Reset();
+
+ if (aSortPref.SortOrder() == TPosLmSortPref::EAscending)
+ {
+ for (TInt j=0; j<landmarks.Count(); j++)
+ {
+ aArray.Append(landmarks[j]->LandmarkId());
+ }
+ }
+ else
+ {
+ for (TInt k=landmarks.Count()-1; k>=0; k--)
+ {
+ aArray.Append(landmarks[k]->LandmarkId());
+ }
+ }
+ landmarks.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&landmarks);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::ExecuteLmOpL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::ExecuteLmOpL()
+ {
+ CActiveLmOperation* operationWrapper = new (ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(operationWrapper);
+
+ operationWrapper->Start(iOperation, this);
+ CActiveScheduler::Start();
+
+ operationWrapper->CheckOperationL();
+ operationWrapper->DeleteOperationD();
+
+ CleanupStack::PopAndDestroy(operationWrapper);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp131::NotifyProgress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp131::NotifyProgress(TReal aProgress)
+ {
+
+ TBuf<100> buf;
+
+ TInt progress = (TInt) (aProgress * 100);
+ buf.Format(_L("Progress: %d"), progress);
+
+
+ if (iDisplayData)
+ {
+
+
+ if (iDisplayData->Count()>0)
+ {
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ iter->GetItemIdsL(arr, 0, iter->NumOfItemsL());
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ if (iAscendedSorted) sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ else sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ // Sort matchiterator
+ LandmarksSortL(arr, sortPref);
+
+ if (iter->NumOfItemsL() != iDisplayData->Count())
+ {
+ iLog->Log(_L("Error: Wrong number of items"));
+ iErrorsFound++;
+ }
+
+ TInt itemId = iDisplayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(itemId);
+
+ if (item.DisplayItemType() != CPosLmDisplayItem::ELandmarkItem)
+ {
+ iLog->Log(_L("Error: TDisplayItemType should be ELandmarkItem"));
+ iErrorsFound++;
+ }
+
+ if (item.DatabaseIndex() != 0)
+ {
+ // When single search, index should always be 0
+ iLog->Log(_L("Error: Wrong DatabaseIndex, should be 0"));
+ iErrorsFound++;
+ }
+
+ TPtrC lmName;
+ item.Landmark().GetLandmarkName(lmName);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ // Compare all landmarks from CPosLmDisplayItem and landmarks from MatchIteratorL
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TPtrC sourceName;
+ item.Landmark().GetLandmarkName(sourceName);
+
+
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(arr[i]);
+ TPtrC name;
+ lm2->GetLandmarkName(name);
+
+
+ // Only compare names
+ if (name.Compare(sourceName) != 0)
+ {
+ iLog->Log(_L("ERROR: No match, name %S, sourceName %S"), &name, &sourceName);
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(lm2);
+ }
+
+ itemId = iDisplayData->NewItemIndex();
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(iter);
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp132.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,696 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp132.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <EPos_TPosLMSortPref.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+
+#include <EPos_CPosLmMultiDbSearch.h>
+
+#include <e32std.h>
+
+// CONSTANTS
+//EPosLmServer
+_LIT(KPosLandmarksServerName, "*eposlmserver*");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp132::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp132::StartL()
+ {
+ MakeSurePanicDebugFileExistsL();
+
+ iUseLogFromThreadIsDisabled = ETrue;
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ iErrorsFound = KErrNone;
+
+ // Use multiple db
+ _LIT(KDb20, "EPOSLM_020.LDB");
+ _LIT(KDb40, "EPOSLM_040.LDB");
+ _LIT(KDb60, "EPOSLM_060.LDB");
+ _LIT(KDb80, "EPOSLM_080.LDB");
+ _LIT(KDb105, "EPOSLM_105.LDB");
+
+ // Copy to secure area
+
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // <<<<<<<<<<<<<<Panic testing below>>>>>>>>>>>>>>>>>>>
+ iLog->Log(_L(">>>>>>>Start Panic test<<<<<<<<<"));
+
+ // 1 Try to get item from DisplayData::DisplayItem outside accepted interval
+ // Should panic with EPosInvalidIndex
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 1"));
+ iTestCase = 1;
+ iExpectedErrorCode = EPosInvalidIndex;
+ ResumeThreadAndVerifyExit();
+
+ // 2 Try to get item from DisplayData::DisplayItem outside accepted interval
+ // Should panic with EPosInvalidIndex
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 2"));
+ iTestCase = 2;
+ iExpectedErrorCode = EPosInvalidIndex;
+ ResumeThreadAndVerifyExit();
+
+ // 3 Set displaydata during search, should panic with EPosSearchOperationInUse
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 3"));
+ iTestCase = 3;
+ iExpectedErrorCode = EPosSearchOperationInUse;
+ ResumeThreadAndVerifyExit();
+
+ // 4 Unset displaydata during search, should panic with EPosSearchOperationInUse
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 4"));
+ iTestCase = 4;
+ iExpectedErrorCode = EPosSearchOperationInUse;
+ ResumeThreadAndVerifyExit();
+
+ // 5 Unset displaydata during search, should panic with EPosSearchOperationInUse
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 5"));
+ iTestCase = 5;
+ iExpectedErrorCode = EPosSearchOperationInUse;
+ ResumeThreadAndVerifyExit();
+
+ // Nothing seems to happen, no leave or no panic
+ // 6 NULL check, try to set DisplayData as NULL
+ iExpectedExitType = ExitNormal;
+ iLog->Log(_L("Panic test 6"));
+ iTestCase = 6;
+ iExpectedErrorCode = KErrNone;
+ ResumeThreadAndVerifyExit();
+
+ // 7 Delete displaydata during search -> "may lead to unexpected errors"
+ // For some reason it panics with Kern-Exec 3
+ /* Excerpt from EPos_CPosLandmarkSearch.h
+ * The client owns the display data object. If the client deletes it
+ * during a search, this may lead to unexpected errors. The client must
+ * call @ref UnsetDisplayData before it deletes the display data object.
+ */
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 7"));
+ iTestCase = 7;
+ //iExpectedErrorCode = KErrNone;
+ iExpectedErrorCode = 3; // Kern-Exec 3
+ ResumeThreadAndVerifyExit();
+
+ // Test multi db search below
+ // 8) Set displaydata during search, should panic with EPosSearchOperationInUse
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 8"));
+ iTestCase = 8;
+ iExpectedErrorCode = EPosSearchOperationInUse;
+ ResumeThreadAndVerifyExit();
+
+ // 9) Unset displaydata during search, should panic with EPosSearchOperationInUse
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 9"));
+ iTestCase = 9;
+ iExpectedErrorCode = EPosSearchOperationInUse;
+ ResumeThreadAndVerifyExit();
+
+ // 10) Unset displaydata during search, should panic with EPosSearchOperationInUse
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 10"));
+ iTestCase = 10;
+ iExpectedErrorCode = EPosSearchOperationInUse;
+ ResumeThreadAndVerifyExit();
+
+ // 11 Delete displaydata during search -> "may lead to unexpected errors"
+ /* The client owns the display data object. If the client deletes it
+ * during a search, this may lead to unexpected errors. The client must
+ * call @ref UnsetDisplayData before it deletes the display data object.
+ */
+ // For some reason it panics with Kern-Exec 3
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 11"));
+ iTestCase = 11;
+ iExpectedErrorCode = 3; //3 Kern-Exec 3
+ ResumeThreadAndVerifyExit();
+
+ // 12) Use the CPosLmDisplayItem::Category() function on a Landmark item
+ // Should panic with EPosInvalidItemType
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 12"));
+ iTestCase = 12;
+ iExpectedErrorCode = EPosInvalidItemType;
+ ResumeThreadAndVerifyExit();
+
+ // 13) Use the CPosLmDisplayItem::Landmark() function on a Category item
+ // Should panic with EPosInvalidItemType
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 13"));
+ iTestCase = 13;
+ iExpectedErrorCode = EPosInvalidItemType;
+ ResumeThreadAndVerifyExit();
+
+ // 14) Set DisplayData to NULL and do multipledb search
+ // Nothing seems to happen, everything is OK
+ iExpectedExitType = ExitNormal;
+ iLog->Log(_L("Panic test 14"));
+ iTestCase = 14;
+ iExpectedErrorCode = KErrNone;
+ ResumeThreadAndVerifyExit();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("TP132 Failed"));
+ User::Leave(-1);
+ }
+ iLog->Log(_L(">>>>>>>Panic test Done<<<<<<<<<"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp132::ResumeThreadAndVerifyExit
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp132::ResumeThreadAndVerifyExit()
+ {
+ iLog->Log(_L("ResumeThreadAndVerifyExit"));
+ _LIT(KPanicErr, "Err: Method didn't Panic when expected");
+ _LIT(KPanicCodeErr, "Err: Paniced with unexpected panic code");
+ _LIT(KLeaveErr, "Err: Method didn't end correctly");
+ _LIT(KLeaveCodeErr, "Err: Unexpected leave error");
+
+ CreateThreadL();
+ TRequestStatus status;
+ iThread.Logon(status);
+ iThread.Resume();
+
+ User::WaitForRequest(status);
+
+ // Used for debugging
+ TBuf<100> buf;
+ buf.Format(_L("ExitType %d Exit reason %d "), iThread.ExitType(), iThread.ExitReason());
+ iLog->Log(buf);
+
+ TExitCategoryName buf1;
+ buf1=iThread.ExitCategory();
+ iLog->Log(buf1);
+
+ if (iExpectedExitType == ExitPanic)
+ {
+
+ if (iThread.ExitType() != EExitPanic)
+ {iErrorsFound++;iLog->Log(KPanicErr);}
+
+ if(iTestCase != 11)
+ {
+ if (iThread.ExitReason() != iExpectedErrorCode)
+ {iErrorsFound++;iLog->Log(KPanicCodeErr);}
+ }
+
+ }
+ else if (iExpectedExitType == ExitLeave)
+ {
+
+ if (iThread.ExitType() != EExitKill)
+ {iErrorsFound++;iLog->Log(KLeaveErr);}
+
+ if (iThread.ExitReason() != iExpectedErrorCode)
+ {iErrorsFound++;iLog->Log(KLeaveCodeErr);}
+ }
+ else if (iExpectedExitType == ExitNormal)
+ {
+
+ if (iThread.ExitType() != KErrNone)
+ {iErrorsFound++;iLog->Log(KLeaveErr);}
+
+ if (iThread.ExitReason() != iExpectedErrorCode)
+ {iErrorsFound++;iLog->Log(KLeaveCodeErr);}
+ }
+
+ iThread.Close();
+
+ TBool alive = ServerAlive(KPosLandmarksServerName);
+ if (!alive)
+ {
+ iLog->Log(_L("Landmarks Server is not alive"));
+ User::Leave(-1);
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp132::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp132::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iThread.Close();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp132::UnsetTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp132::UnsetTest(TAny* aSelf)
+ {
+ CPosLandmarkSearch* aLmSearch = static_cast<CPosLandmarkSearch*>(aSelf);
+ aLmSearch->UnsetDisplayData();
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp132::UnsetMultiSearch
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp132::UnsetMultiSearch(TAny* aSelf)
+ {
+ CPosLmMultiDbSearch* aLmSearch = static_cast<CPosLmMultiDbSearch*>(aSelf);
+ aLmSearch->UnsetDisplayData();
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp132::RunPanicTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp132::RunPanicTestL(TAny* aData)
+ {
+ CPosTp132* self = reinterpret_cast<CPosTp132*>(aData);
+
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkSearch* lmSearch = CPosLandmarkSearch::NewL(*database);
+ CleanupStack::PushL(lmSearch);
+
+ CDesCArray* dbUris = new (ELeave) CDesC16ArrayFlat(2);
+ CleanupStack::PushL(dbUris);
+
+ _LIT(KDb20, "c:EPOSLM_020.LDB");
+ _LIT(KDb40, "c:EPOSLM_040.LDB");
+
+ dbUris->AppendL(KDb20);
+ dbUris->AppendL(KDb40);
+
+ if (self->iTestCase == 1 || self->iTestCase == 2)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ lmSearch->SetDisplayData(*displayData);
+
+ textCriteria->SetTextL(_L("*"));
+
+ CPosLmOperation* operation = lmSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ // Outside accepted interval, should Panic with EPosInvalidIndex
+ if (self->iTestCase == 1)
+ {
+ CPosLmDisplayItem& item = displayData->DisplayItem(displayData->Count());
+ }
+ else if (self->iTestCase == 2)
+ {
+ CPosLmDisplayItem& item = displayData->DisplayItem(-1);
+ }
+
+ lmSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+
+ }
+ else if (self->iTestCase == 3)
+ {
+ // Set displaydata during search, should panic with EPosSearchOperationInUse
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ textCriteria->SetTextL(_L("*"));
+
+ CPosLmOperation* operation = lmSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ lmSearch->SetDisplayData(*displayData);
+
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ lmSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+ else if (self->iTestCase == 4)
+ {
+ // Unset displaydata during search, should panic with EPosSearchOperationInUse
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ textCriteria->SetTextL(_L("*"));
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ lmSearch->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = lmSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+ lmSearch->UnsetDisplayData();
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ lmSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ }
+ else if (self->iTestCase == 5)
+ {
+ // Unset displaydata during search, should panic with EPosSearchOperationInUse
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ textCriteria->SetTextL(_L("*"));
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ lmSearch->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = lmSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+ // Unset displaydata in callback method
+ TCallBack callback(UnsetTest, lmSearch);
+ CPeriodic* periodicTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ CleanupStack::PushL(periodicTimer);
+ periodicTimer->Start(1, 1, callback);
+
+ self->RunAsyncOperationLD(operation);
+ operation = NULL;
+
+ CPosLmItemIterator* iter = lmSearch->MatchIteratorL();
+ TInt size = iter->NumOfItemsL();
+
+ CleanupStack::PopAndDestroy(periodicTimer);
+ lmSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ }
+ else if (self->iTestCase == 6)
+ {
+ // NULL check
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ textCriteria->SetTextL(_L("*"));
+ CPosLmDisplayData* displayData = NULL;
+ lmSearch->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = lmSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ CPosLmItemIterator* iter = lmSearch->MatchIteratorL();
+ TInt size = iter->NumOfItemsL();
+
+ lmSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+ else if (self->iTestCase == 7)
+ {
+ // Delete displaydata during search, "may lead to unexpected errors"
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Set DisplayData
+ textCriteria->SetTextL(_L("*"));
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ lmSearch->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = lmSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+
+ // Delete display data here
+ CleanupStack::PopAndDestroy(displayData);
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+ else if (self->iTestCase == 8)
+ {
+ // Set displaydata during search, should panic with EPosSearchOperationInUse
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, EFalse);
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ multiSearcher->SetDisplayData(*displayData);
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(multiSearcher);
+
+ }
+ else if (self->iTestCase == 9)
+ {
+ // Unset displaydata during search, should panic with EPosSearchOperationInUse
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ multiSearcher->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, EFalse);
+ multiSearcher->UnsetDisplayData();
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ multiSearcher->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+ else if (self->iTestCase == 10)
+ {
+ // Unset displaydata during search, should panic with EPosSearchOperationInUse
+ // Unset displaydata in callback method
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ multiSearcher->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, EFalse);
+
+ TCallBack callback(UnsetMultiSearch, lmSearch);
+ CPeriodic* periodicTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ CleanupStack::PushL(periodicTimer);
+ periodicTimer->Start(1, 1, callback);
+ self->RunAsyncOperationLD(operation);
+ operation = NULL;
+
+ ExecuteAndDeleteLD(operation);
+ multiSearcher->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+ else if (self->iTestCase == 11)
+ {
+ // Delete displaydata during search, "may lead to unexpected errors"
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ multiSearcher->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, EFalse);
+ // Delete displaydata here
+ delete displayData;
+
+ ExecuteAndDeleteLD(operation);
+ operation = NULL;
+
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+ else if (self->iTestCase == 12)
+ {
+ // Use the CPosLmDisplayItem::Category() function on a Landmark item
+ // Should panic with EPosInvalidItemType
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ multiSearcher->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, EFalse);
+ ExecuteAndDeleteLD(operation);
+
+ // Verify that something was found
+ if (displayData->Count() < 2) User::Leave(-900);
+
+ CPosLmDisplayItem& item = displayData->DisplayItem(0);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ if (item.DisplayItemType() != CPosLmDisplayItem::ELandmarkItem) User::Leave(-901);
+
+ // This call should panic
+ item.Category();
+
+ multiSearcher->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+ else if (self->iTestCase == 13)
+ {
+ // Use the CPosLmDisplayItem::Landmark() function on a Category item
+ // Should panic with EPosInvalidItemType
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ multiSearcher->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = multiSearcher->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+ ExecuteAndDeleteLD(operation);
+
+ // Verify that something was found
+ if (displayData->Count() < 2) User::Leave(-900);
+
+ CPosLmDisplayItem& item = displayData->DisplayItem(0);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ if (item.DisplayItemType() != CPosLmDisplayItem::ECategoryItem) User::Leave(-901);
+
+ // This call should panic
+ item.Landmark();
+
+ multiSearcher->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+ else if (self->iTestCase == 14)
+ {
+ // NULL check, set DisplayData to NULL
+ CPosLmMultiDbSearch* multiSearcher = CPosLmMultiDbSearch::NewL(*dbUris);
+ CleanupStack::PushL(multiSearcher);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ CPosLmDisplayData* displayData = NULL;
+ multiSearcher->SetDisplayData(*displayData);
+
+ CPosLmOperation* operation = multiSearcher->StartLandmarkSearchL(*textCriteria, EFalse);
+ ExecuteAndDeleteLD(operation);
+
+ multiSearcher->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(multiSearcher);
+ }
+
+ CleanupStack::PopAndDestroy(dbUris);
+ CleanupStack::PopAndDestroy(lmSearch);
+ CleanupStack::PopAndDestroy(database);
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp132::RunPanicTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp132::CreateThreadL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp132::CreateThreadL()
+ {
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+ TBuf<100> buf;
+ buf.Format(_L("Tp132 test thread %d"), iTestCase);
+ TInt err=0;
+ err = iThread.Create(buf, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp133.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1063 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp133.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+#include <LbsPosition.h>
+
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+
+// CONSTANTS
+const TInt KNrOfDatabases = 5;
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp133::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iSearchResults.ResetAndDestroy();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iDisplayData;
+ iDisplayData = NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ delete iMultiLandmarkSearch;
+ iMultiLandmarkSearch = NULL;
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("Problem when removing all lm databases"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::StartL()
+ {
+ _LIT(KDb20, "EPOSLM_020.LDB");
+ _LIT(KDb40, "EPOSLM_040.LDB");
+ _LIT(KDb60, "EPOSLM_060.LDB");
+ _LIT(KDb80, "EPOSLM_080.LDB");
+ _LIT(KDb105, "EPOSLM_105.LDB");
+
+ // PrepareDatabases
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+
+ iDisplayData = NULL;
+ iLandmarkSearch = NULL;
+
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ CDesCArray* dbUris = dbMan->ListDatabasesLC();
+ CleanupStack::Pop(dbUris);
+ CleanupStack::PopAndDestroy(dbMan);
+ CleanupStack::PushL(dbUris);
+
+ AssertTrueSecL(dbUris->Count() == KNrOfDatabases, _L("Wrong number of test databases!"));
+
+ // Use this db as a template for how the result from multiple db search should be sorted
+ // used mostly in LandmarksSortL
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ AppendSearchResultsL();
+
+ DoSearchL(iSearchResults, dbUris, ESynchronous);
+
+ DoSearchL(iSearchResults, dbUris, EAsynchronous);
+
+ // Test Partial landmarks
+ iLog->Log(_L("Testing search with a defined sortorder for partial landmarks"));
+
+ // Only do search for index KWhatToSearchFor in lmDbSearchResult.txt
+ // index 11 is MLFW
+ TInt KWhatToSearchFor = 11;
+ SearchPartialLandmarksL(KWhatToSearchFor, iSearchResults, dbUris);
+
+ // index 20 is x
+ KWhatToSearchFor = 20;
+ SearchPartialLandmarksL(KWhatToSearchFor, iSearchResults, dbUris);
+
+ iLog->Log(_L("Testing search for partial landmarks without name"));
+ SearchPartialWithoutNameL(iSearchResults, dbUris);
+
+ iLog->Log(_L("Testing reset of DisplayData"));
+ CheckResetL(iSearchResults, dbUris);
+
+ iLog->Log(_L("Testing cancel and displaydata, cancel immeditely"));
+ CancelTestL(iSearchResults, dbUris, EFalse);
+
+ iLog->Log(_L("Testing cancel and displaydata, cancel in callback"));
+ CancelTestL(iSearchResults, dbUris, ETrue);
+
+ CleanupStack::PopAndDestroy(dbUris);
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors were found in TP133"));
+ User::Leave(-1);
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::DoSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::DoSearchL(const RPointerArray<CSearchResult>& aSearchResults,
+ CDesCArray* aDbUris, TExecutionMode aExecutionMode)
+ {
+ iMultiLandmarkSearch = CPosLmMultiDbSearch::NewL(*aDbUris);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ TBuf<150> buf;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Dont search for all search criteras (see excel file)
+ // takes just too long time on target (approx 1 hour for this test on target)
+ // therefore start at j=2
+#ifdef __WINS__
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+#else
+ for(TInt j=2; j<aSearchResults.Count(); j++)
+#endif
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+ if (aSearchResults[j]->PositionFields().Find(803) != KErrNotFound)
+ {
+ // Stupid fix, since the multi dbs have not been re-generated against correct LBSFieldsid.h
+ // they contain the 802 field (instead of 803) so append this id as well
+ RArray<TUint> arr;
+ iLog->Log(_L("Found 803"));
+ arr = aSearchResults[j]->PositionFields();
+ arr.Append(802);
+ textCriteria->SetPositionFieldsToSearchL(arr);
+ }
+ else
+ {
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+ }
+
+ iLog->Log(_L(">>>>>>Searching for: "));
+ iLog->Log(aSearchResults[j]->TextCriteria());
+
+ // Sort ascended and descended
+ for (TInt sorted=0;sorted<2;sorted++)
+ {
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+
+ switch (sorted)
+ {
+ case 0:
+ iLog->Log(_L("******Sorting EAscending*******"));
+ iAscendedSorted = ETrue;
+ sortPref = TPosLmSortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ break;
+ case 1:
+ iLog->Log(_L("**********Sorting EDescending**********"));
+ iAscendedSorted = EFalse;
+ sortPref = TPosLmSortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ break;
+ }
+
+ iJustNowSearchResults = &aSearchResults[j]->SearchResult();
+ LandmarksSortL(*iJustNowSearchResults, sortPref);
+ iLastNrOfDisplayData = 0;
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[j]->Redefined());
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ iLog->Log(_L("ESynchronous"));
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ iLog->Log(_L("EAsynchronous"));
+ // Also check progress here
+ ExecuteLmOpL();
+ break;
+ }
+
+
+ // Check for any errors when multi searching
+ if (iMultiLandmarkSearch->NumOfSearchErrors() != 0)
+ {
+ iLog->Log(_L("Errors after multi db search"));
+ User::Leave(-1);
+ }
+
+ TInt number = iDisplayData->Count();
+ buf.Zero();
+ buf.Format(_L("Nr in DisplayData: %d Nr in result %d"), number, iJustNowSearchResults->Count());
+ iLog->Log(buf);
+
+ AssertTrueSecL(iDisplayData->Count() == iJustNowSearchResults->Count(),_L("Mismatch in number of matches"));
+
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((*iJustNowSearchResults)[i]);
+ TPtrC sourceName, targetName;
+
+ item.Landmark().GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+ buf.Zero();
+
+ if (sourceName.CompareC(targetName) != 0)
+ {
+
+ iLog->Log(_L("Mismatch between landmarks"));
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy(target);
+ }
+
+ iMultiLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;iDisplayData=NULL;
+ }
+ }
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ delete iMultiLandmarkSearch;
+ iMultiLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::CheckPartialLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const CPosLandmark::TAttributes& aAttr, const RArray<TUint>& aReqFields)
+ {
+ _LIT(KPartialIdErr, "Incorrect Id when reading from a Partial landmark");
+ _LIT(KPartialCategoryInfoErr, "Incorrect Category info when reading from a Partial landmark");
+
+ TPosLmItemId id = aLandmark.LandmarkId();
+ AssertTrueSecL(id != 0, KPartialIdErr);
+
+ AssertTrueSecL(aLandmark.IsPartial(), _L("Landmark is not partial"));
+
+ TInt err;
+ TPtrC name;
+ err = aLandmark.GetLandmarkName(name);
+ // Name is always included
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::ELandmarkName, err);
+
+ TBuf<100> buf;
+ buf.Format(_L("Checking LM: %S"), &name);
+ // iLog->Log(buf);
+
+ TReal32 coverageR;
+ err = aLandmark.GetCoverageRadius(coverageR);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::ECoverageRadius, err);
+
+ TPtrC desc;
+ err = aLandmark.GetLandmarkDescription(desc);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EDescription, err);
+
+ TPtrC iconName;
+ TInt iconIndex;
+ TInt iconMaskIndex;
+ err = aLandmark.GetIcon(iconName, iconIndex, iconMaskIndex);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EIcon, err);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ aLandmark.GetCategoriesL(categories);
+ if (aAttr & CPosLandmark::ECategoryInfo)
+ {
+ AssertTrueSecL(categories.Count() != 0, KPartialCategoryInfoErr);
+ }
+ else
+ {
+ AssertTrueSecL(categories.Count() == 0, KPartialCategoryInfoErr);
+ }
+ CleanupStack::PopAndDestroy(&categories);
+
+ TLocality loc;
+ err = aLandmark.GetPosition(loc);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EPosition, err);
+
+ // Check PositionFields
+ // Check fields from EPositionFieldCompassCapabilitiesBegin up to EPositionFieldMediaCapabilitiesBegin+100
+ // should be enough to also cover URL
+ for (TInt i=EPositionFieldCompassCapabilitiesBegin; i<EPositionFieldMediaCapabilitiesBegin+100; i++)
+ {
+ TBool avail = aLandmark.IsPositionFieldAvailable((TUint16)i);
+ TInt found = aReqFields.Find(i);
+ if (avail && found != KErrNotFound)
+ {
+ TPtrC value;
+ err = aLandmark.GetPositionField((TUint16)aReqFields[found], value);
+ AssertTrueSecL(err == KErrNone, _L("Could not retrieve positionfield value"), err);
+ iLog->Log(value);
+ }
+ else if (!avail && found != KErrNotFound || avail && found == KErrNotFound)
+ {
+ // Fields 405 and 802 are not always set
+ if (i!=405 && i!=802)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ERROR: Mismatch in positionfields, id %d were not found"), i);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::ChechPartialErrorCodeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::CheckPartialErrorCodeL(const TBool aPartial, const TInt aErr)
+ {
+ _LIT(KPartialLmErr, "Incorrect error code returned when reading from a Partial landmark");
+ _LIT(KPartialLmErr2, "Incorrect error code returned when reading from a non-Partial landmark");
+
+ if (aPartial)
+ {
+
+ if (aErr != KErrNone)
+ {
+ iLog->Log(KPartialLmErr);
+ iErrorsFound++;
+ }
+ }
+ else
+ {
+
+ if (aErr != KErrNotFound)
+ {
+ iLog->Log(KPartialLmErr2);
+ iErrorsFound++;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::SearchPartialWithoutNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::SearchPartialWithoutNameL(const RPointerArray<CSearchResult>& aSearchResults,
+ CDesCArray* aDbUris)
+ {
+ iLog->Log(_L("SearchPartialWithoutNameL"));
+ // Search in all lm dbs
+ iMultiLandmarkSearch = CPosLmMultiDbSearch::NewL(*aDbUris);
+ // Set DisplayData
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ TBuf<150> buf;
+
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+
+ // Dont search for all search criteras (see excel file)
+ // takes just too long time on target
+ // therefore start at j=2
+#ifdef __WINS__
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+#else
+ for(TInt j=2; j<aSearchResults.Count(); j++)
+#endif
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+
+
+ if (aSearchResults[j]->PositionFields().Find(803) != KErrNotFound)
+ {
+ // Stupid fix, since the multi dbs have not been re-generated against correct LBSFieldsid.h
+ // they contain the 802 field (instead of 803) so append this id as well
+ RArray<TUint> arr;
+ iLog->Log(_L("Found 803"));
+ arr = aSearchResults[j]->PositionFields();
+ arr.Append(802);
+ textCriteria->SetPositionFieldsToSearchL(arr);
+ }
+ else
+ {
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+ }
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+
+ iLog->Log(aSearchResults[j]->TextCriteria());
+
+ // Set position and descriptiom
+ //partialParam->SetRequestedAttributes(CPosLandmark::EPosition);
+ partialParam->SetRequestedAttributes(CPosLandmark::EDescription| CPosLandmark::EPosition);
+
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+ iLastNrOfDisplayData=0;
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, aSearchResults[j]->Redefined());
+ ExecuteLmOpL();
+
+ iLog->Log(_L("Search Done, check sorting"));
+ // Check for any errors when multi searching
+ if (iMultiLandmarkSearch->NumOfSearchErrors() != 0)
+ {
+ iLog->Log(_L("Errors after multi db search"));
+ User::Leave(-1);
+ }
+
+ RArray<TPosLmItemId>* result = &aSearchResults[j]->SearchResult();
+
+ TInt number = iDisplayData->Count();
+ buf.Zero();
+ buf.Format(_L("Nr in DisplayData: %d Nr in result %d"), number, result->Count());
+ iLog->Log(buf);
+ TInt nrOfNoPos = 0;
+ AssertTrueSecL(iDisplayData->Count() == result->Count(),_L("Mismatch in number of matches"));
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ TInt err;
+ TPtrC name;
+ err = item.Landmark().GetLandmarkName(name);
+ AssertTrueSecL(err == KErrNotFound,_L("GetLandmarkName returned name"));
+ TReal32 radius;
+ err = item.Landmark().GetCoverageRadius(radius);
+ AssertTrueSecL(err == KErrNotFound,_L("GetLandmarkName returned name"));
+ TPtrC desc;
+ err = item.Landmark().GetLandmarkDescription(desc);
+ AssertTrueSecL(err == KErrNone,_L("GetLandmarkDescription returned error"));
+ TLocality loc;
+ err = item.Landmark().GetPosition(loc);
+
+ // Should only be three landmarks without position
+ if (err == KErrNotFound) nrOfNoPos++;
+
+ }
+
+ if (nrOfNoPos > 3)
+ {
+ iLog->Log(_L("ERROR: GetPosition returned error"));
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(&reqFields);
+ }
+
+
+ CleanupStack::PopAndDestroy(partialParam);
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ iMultiLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+ delete iMultiLandmarkSearch;
+ iMultiLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::SearchPartialLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::SearchPartialLandmarksL(TInt aWhatIndexToSerrachFor, const RPointerArray<CSearchResult>& aSearchResults,
+ CDesCArray* aDbUris)
+ {
+ // Search in all lm dbs
+ iMultiLandmarkSearch = CPosLmMultiDbSearch::NewL(*aDbUris);
+ // Set DisplayData
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ TBuf<150> buf;
+
+ textCriteria->SetTextL(aSearchResults[aWhatIndexToSerrachFor]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[aWhatIndexToSerrachFor]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[aWhatIndexToSerrachFor]->PositionFields());
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+
+ iLog->Log(aSearchResults[aWhatIndexToSerrachFor]->TextCriteria());
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+
+ CPosLmPartialReadParameters* fakePartialParam = CPosLmPartialReadParameters::NewLC();
+ reqFields.Append(EPositionFieldStreet);
+ fakePartialParam->SetRequestedPositionFields(reqFields);
+ reqFields.Reset();
+
+ // Search for all combinations from 0 - CPosLandmark::EDescription
+ // Ex attr=0, attr=1, attr=2, attr=3, .....attr=63,
+ TUint max = CPosLandmark::EDescription;
+ max <<= 1;
+ max -= 1;
+
+ TUint attr=0;
+ for (attr=0; attr<=max; attr++)
+ {
+ partialParam->SetRequestedAttributes(attr);
+ reqFields.Reset();
+
+ if (attr == 5)
+ {
+ // Add EPositionFieldCountry
+ iLog->Log(_L("Also cover EPositionFieldCountry"));
+ reqFields.Append(EPositionFieldCountry);
+ }
+ else if (attr == 12)
+ {
+ // Add EPositionFieldCity, EPositionFieldStreet, EPositionFieldCountry
+ iLog->Log(_L("Also cover EPositionFieldCity, EPositionFieldStreet, EPositionFieldCountry"));
+ reqFields.Append(EPositionFieldCity);
+ reqFields.Append(EPositionFieldStreet);
+ reqFields.Append(EPositionFieldCountry);
+ }
+ else if (attr == 32)
+ {
+ // Add EPositionFieldMediaLinksStart, EPositionFieldDistrict
+ iLog->Log(_L("Also cover EPositionFieldMediaLinksStart, EPositionFieldDistrict"));
+ reqFields.Append(EPositionFieldMediaLinksStart);
+ reqFields.Append(EPositionFieldDistrict);
+ }
+
+ partialParam->SetRequestedPositionFields(reqFields);
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+
+ for (TInt i=0; i<2; i++)
+ {
+ switch (i)
+ {
+ case 0:
+ {
+ //**** async
+ iLog->Log(_L("*****Async, EDescending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ iAscendedSorted = EFalse;
+ iLastNrOfDisplayData=0;
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[aWhatIndexToSerrachFor]->Redefined());
+ // Test that if SetPartialReadParametersL is called after search has started it has no affect
+ iDisplayData->SetPartialReadParametersL(*fakePartialParam);
+ ExecuteLmOpL();
+ }
+ break;
+ case 1:
+ {
+ partialParam->SetRequestedPositionFields(reqFields);
+ iDisplayData->SetPartialReadParametersL(*partialParam);
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ iLog->Log(_L("*****Async EAscending"));
+ iAscendedSorted = ETrue;
+ iLastNrOfDisplayData=0;
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[aWhatIndexToSerrachFor]->Redefined());
+ ExecuteLmOpL();
+ }
+ break;
+ }
+
+ // Sort correct result
+ iJustNowSearchResults = &aSearchResults[aWhatIndexToSerrachFor]->SearchResult();
+ LandmarksSortL(*iJustNowSearchResults, sortPref);
+ //
+ iLog->Log(_L("Search Done, check sorting"));
+ // Check for any errors when multi searching
+ if (iMultiLandmarkSearch->NumOfSearchErrors() != 0)
+ {
+ iLog->Log(_L("Errors after multi db search"));
+ User::Leave(-1);
+ }
+
+ TInt number = iDisplayData->Count();
+ buf.Zero();
+ buf.Format(_L("Nr in DisplayData: %d Nr in result %d"), number, iJustNowSearchResults->Count());
+ iLog->Log(buf);
+
+ AssertTrueSecL(iDisplayData->Count() == iJustNowSearchResults->Count(),_L("Mismatch in number of matches"));
+
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((*iJustNowSearchResults)[i]);
+ TPtrC sourceName, targetName;
+
+ item.Landmark().GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+ buf.Zero();
+
+ if (sourceName.CompareC(targetName) != 0)
+ {
+
+ iLog->Log(_L("Mismatch between landmarks"));
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy(target);
+
+ // Landmarkname is always included when sorting
+ CheckPartialLandmarkL(item.Landmark() , attr | CPosLandmark::ELandmarkName, reqFields);
+ }
+
+ }
+ }
+
+ CleanupStack::PopAndDestroy(fakePartialParam);
+ CleanupStack::PopAndDestroy(partialParam);
+ CleanupStack::PopAndDestroy(&reqFields);
+ CleanupStack::PopAndDestroy(textCriteria);
+ iMultiLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;
+ iDisplayData = NULL;
+ delete iMultiLandmarkSearch;
+ iMultiLandmarkSearch = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp133::CheckResetL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::CheckResetL(const RPointerArray<CSearchResult>& aSearchResults, CDesCArray* aDbUris)
+ {
+ iMultiLandmarkSearch = CPosLmMultiDbSearch::NewL(*aDbUris);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ TBuf<150> buf;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+ iAscendedSorted = ETrue;
+
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+
+ if (aSearchResults[j]->PositionFields().Find(803) != KErrNotFound)
+ {
+ // Stupid fix, since the multi dbs have not been re-generated against correct LBSFieldsid.h
+ // they contain the 802 field (instead of 803) so append this id as well
+ RArray<TUint> arr;
+ iLog->Log(_L("Found 803"));
+ arr = aSearchResults[j]->PositionFields();
+ arr.Append(802);
+ textCriteria->SetPositionFieldsToSearchL(arr);
+ }
+ else
+ {
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+ }
+
+ iLog->Log(_L(">>>>>>Searching for: "));
+ iLog->Log(aSearchResults[j]->TextCriteria());
+
+ RArray<TPosLmItemId>* result = &aSearchResults[j]->SearchResult();
+
+ LandmarksSortL(*result, sortPref);
+ iLastNrOfDisplayData = 0;
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[j]->Redefined());
+ ExecuteAndDeleteLD(iOperation);
+
+ iLastNrOfDisplayData = 0;
+ iDisplayData->Reset();
+ AssertTrueSecL(iDisplayData->Count() == 0,_L("DisplayData should have been resetted"));
+
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[j]->Redefined());
+ // Also check progress here
+ ExecuteLmOpL();
+ AssertTrueSecL(iDisplayData->Count() == result->Count(),_L("Mismatch in number of matches"));
+ }
+
+ iMultiLandmarkSearch->UnsetDisplayData();
+ iDisplayData->Reset();
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+ AssertTrueSecL(iDisplayData->Count() == 0,_L("DisplayData should have been resetted"));
+
+ // Unset display data
+ iMultiLandmarkSearch->UnsetDisplayData();
+
+ textCriteria->SetTextL(aSearchResults[0]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[0]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[0]->PositionFields());
+
+ // Check that no result is found in displaydata
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[0]->Redefined());
+ ExecuteAndDeleteLD(iOperation);
+ AssertTrueSecL(iDisplayData->Count() == 0,_L("No matches should be found in DisplayData1"));
+
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[0]->Redefined());
+ ExecuteAndDeleteLD(iOperation);
+
+ // Check that result is found in displaydata
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[0]->SearchResult();
+ AssertTrueSecL(iMultiLandmarkSearch->TotalNumOfMatches() == iDisplayData->Count(),_L("Wrong number of matches1"));
+ AssertTrueSecL(iMultiLandmarkSearch->TotalNumOfMatches() == searchResults->Count(),_L("Wrong number of matches2"));
+
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ iMultiLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;iDisplayData=NULL;
+
+ delete iMultiLandmarkSearch;
+ iMultiLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::CancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::CancelTestL(const RPointerArray<CSearchResult>& aSearchResults, CDesCArray* aDbUris,
+ TBool aCancelInCallback)
+ {
+ iMultiLandmarkSearch = CPosLmMultiDbSearch::NewL(*aDbUris);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ TBuf<150> buf;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ // Search for wildcard, index 0 in lmdbsearchresult.txt
+ TInt KWhatToSearchForIndex = 0;
+
+ textCriteria->SetTextL(aSearchResults[KWhatToSearchForIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[KWhatToSearchForIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[KWhatToSearchForIndex]->PositionFields());
+
+ iLog->Log(_L(">>>>>>Searching for: "));
+ iLog->Log(aSearchResults[KWhatToSearchForIndex]->TextCriteria());
+
+ // Sort ascended and descended
+ for (TInt sorted=0;sorted<2;sorted++)
+ {
+ iDisplayData = CPosLmDisplayData::NewL();
+ iMultiLandmarkSearch->SetDisplayData(*iDisplayData);
+
+ switch (sorted)
+ {
+ case 0:
+ iLog->Log(_L("******Sorting EAscending*******"));
+ iAscendedSorted = ETrue;
+ sortPref = TPosLmSortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ break;
+ case 1:
+ iLog->Log(_L("**********Sorting EDescending**********"));
+ iAscendedSorted = EFalse;
+ sortPref = TPosLmSortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ break;
+ }
+
+ iJustNowSearchResults = &aSearchResults[KWhatToSearchForIndex]->SearchResult();
+ LandmarksSortL(*iJustNowSearchResults, sortPref);
+ iLastNrOfDisplayData = 0;
+
+ iOperation = iMultiLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, aSearchResults[KWhatToSearchForIndex]->Redefined());
+
+ switch (aCancelInCallback)
+ {
+ case EFalse:
+ iLog->Log(_L("Cancel"));
+ RunAsyncOperationAndCancelLD(iOperation);
+ break;
+ case ETrue:
+ iLog->Log(_L("Cancel In Callback"));
+ RunAsyncOperationAndCancelInCallbackLD(iOperation);
+ break;
+ }
+
+
+ buf.Format(_L("TotalNumOfMatches returned %d matches and iDisplayData %d matches after cancel"), iMultiLandmarkSearch->TotalNumOfMatches(), iDisplayData->Count());
+ iLog->Log(buf);
+
+ iLog->Log(_L("After Cancel, check result"));
+ // Check for any errors when multi searching
+ // XXX Shouldnt error be KErrCancel
+ if (iMultiLandmarkSearch->NumOfSearchErrors() != 0) iLog->Log(_L("Errors after cancel"));
+ for (TInt i=0;i<iMultiLandmarkSearch->NumOfSearchErrors(); i++)
+ {
+ CPosLmMultiDbSearch::TSearchError searchErr;
+ iMultiLandmarkSearch->GetSearchError(i, searchErr);
+
+ buf.Format(_L("ErrorCode %d returned from db nr %d"),searchErr.iErrorCode, searchErr.iDatabaseIndex);
+ iLog->Log(buf);
+
+ }
+
+ TInt number = iDisplayData->Count();
+ buf.Zero();
+ buf.Format(_L("Nr in DisplayData: %d Nr in result %d"), number, iJustNowSearchResults->Count());
+ iLog->Log(buf);
+
+ if (!aCancelInCallback)
+ {
+ if (iDisplayData->Count() != 0)
+ {
+ iLog->Log(_L("No matches should be found when cancel before search started"));
+ User::Leave(-1);
+ }
+ }
+ else
+ {
+ // XXX maybe check result here
+ }
+
+ iMultiLandmarkSearch->UnsetDisplayData();
+ delete iDisplayData;iDisplayData=NULL;
+ }
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ delete iMultiLandmarkSearch;
+ iMultiLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// Tp133InternalLandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt Tp133InternalLandmarksSortL(const CPosLandmark& aSource, const CPosLandmark& aTarget)
+ {
+ TPtrC sourceName, targetName;
+
+ User::LeaveIfError(aSource.GetLandmarkName(sourceName));
+ User::LeaveIfError(aTarget.GetLandmarkName(targetName));
+
+ return sourceName.CompareC(targetName);
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::LandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::LandmarksSortL(RArray<TPosLmItemId>& aArray, const TPosLmSortPref& aSortPref)
+ {
+ iLog->Log(_L("LandmarksSortL"));
+ RPointerArray<CPosLandmark> landmarks;
+ CleanupClosePushL(landmarks);
+
+ for (TInt i=0; i<aArray.Count(); i++)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aArray[i]);
+ landmarks.Append(lm);
+ CleanupStack::Pop(lm);
+ }
+
+ TLinearOrder<CPosLandmark> order(Tp133InternalLandmarksSortL);
+ landmarks.Sort(order);
+
+ aArray.Reset();
+
+ if (aSortPref.SortOrder() == TPosLmSortPref::EAscending)
+ {
+ for (TInt j=0; j<landmarks.Count(); j++)
+ {
+ aArray.Append(landmarks[j]->LandmarkId());
+ }
+ }
+ else
+ {
+ for (TInt k=landmarks.Count()-1; k>=0; k--)
+ {
+ aArray.Append(landmarks[k]->LandmarkId());
+ }
+ }
+ landmarks.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&landmarks);
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::ExecuteLmOpL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::ExecuteLmOpL()
+ {
+ CActiveLmOperation* operationWrapper = new (ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(operationWrapper);
+
+ // Start operation with this class as observer
+ operationWrapper->Start(iOperation, this);
+ CActiveScheduler::Start();
+
+ operationWrapper->CheckOperationL();
+ operationWrapper->DeleteOperationD();
+
+ CleanupStack::PopAndDestroy(operationWrapper);
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::ExecuteLmOpInCallbackL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::ExecuteLmOpInCallbackL()
+ {
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(iLog, iUseLogFromThreadIsDisabled);
+ CleanupStack::PushL(activeLmOperation);
+
+ TCallBack callback(CLandmarkTestProcedureBase::CancelTest, activeLmOperation);
+
+ CPeriodic* periodicTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ CleanupStack::PushL(periodicTimer);
+
+ periodicTimer->Start(1, 1, callback);
+ activeLmOperation->SetCancelTest();
+ // Start operation with this class as observer
+ activeLmOperation->Start(iOperation, this);
+
+ CActiveScheduler::Start();
+ periodicTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(2, activeLmOperation);
+ }
+
+// ---------------------------------------------------------
+// CPosTp133::NotifyProgress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp133::NotifyProgress(TReal aProgress)
+ {
+ TBuf<100> buf;
+ TInt progress = (TInt) (aProgress * 100);
+ buf.Format(_L("Progress: %d"), progress);
+ TInt nrOfMatches = 0;
+
+ if (iDisplayData)
+ {
+ buf.Zero();
+ buf.Format(_L("Progress: %g DisplayData %d"), aProgress * 100, iDisplayData->Count());
+
+ // Check that nr of matches never decreases
+ if (iLastNrOfDisplayData>iDisplayData->Count())
+ {
+ iLog->Log(_L("ERROR: Less nr of mathes than in last search"));
+ iErrorsFound++;
+ }
+
+ if (iDisplayData->Count()>0)
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ // Check nr of hits for each db using the iterator
+ for (TInt i=0;i<KNrOfDatabases;i++)
+ {
+ CPosLmItemIterator* iter = iMultiLandmarkSearch->MatchIteratorL(i);
+ CleanupStack::PushL(iter);
+ if (iter->NumOfItemsL() > 0)
+ {
+ buf.Zero();
+ buf.Format(_L("Found %d nr of lm in db %d"), iter->NumOfItemsL(), i);
+
+ nrOfMatches+=iter->NumOfItemsL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ if (iAscendedSorted) sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ else sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+
+ for (TInt i=0;i<iDisplayData->Count();i++)
+ {
+ // Check for all but first and last
+ if (i>0 && i<iDisplayData->Count()-1)
+ {
+ CPosLmDisplayItem& item = iDisplayData->DisplayItem(i);
+ TInt lmId = item.Landmark().LandmarkId();
+
+ CPosLmDisplayItem& nextItem = iDisplayData->DisplayItem(i+1);
+ TInt nextLmId = item.Landmark().LandmarkId();
+
+ TPtrC name, nextLmName;
+ item.Landmark().GetLandmarkName(name);
+ nextItem.Landmark().GetLandmarkName(nextLmName);
+
+ TInt order = nextLmName.CompareC(name);
+ if (iAscendedSorted)
+ { // sorted ascended
+ if (order < 0)
+ {
+ iLog->Log(_L("ERROR: Wrong sortorder when ascended"));
+ iErrorsFound++;
+ }
+ }
+ else // sorted descended
+ {
+ if (order > 0)
+ {
+ iLog->Log(_L("ERROR: Wrong sortorder when descended"));
+ iErrorsFound++;
+ }
+
+ }
+ } // if (i>0 && i<iDisplayData->Count()-1)
+ } // for (TInt i=0;i<iDisplayData->Count();i++)
+ } // if (iDisplayData->Count()>0)
+ iLastNrOfDisplayData = iDisplayData->Count();
+ } //if (iDisplayData)
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp134.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,491 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp134.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include "FT_LandmarkConstants.h"
+#include <centralrepository.h>
+
+// CONSTANTS
+_LIT(KUriDb01, "C:TP104DB01.LDB");
+_LIT(KUriDb01Full, "file://C:TP104DB01.LDB");
+_LIT(KUriDb02Full, "file://C:TP104DB02.LDB");
+_LIT(KUriDb02, "C:TP104DB02.LDB");
+_LIT(KUriDbNonExisting, "file://C:TP104DBBLABLA.LDB");
+_LIT(KUriDbCorrupt, ":jf785hjtr748.abc");
+_LIT(KUriNotSupported, "bike://test/tp104.wheel");
+_LIT(KProtocolFile, "file");
+
+#ifdef __WINS__
+ _LIT(KUriRemovableMediaDb, "file://D:REMOVABLEDB.LDB");
+ _LIT(KUriRemovableMediaDbNonExisting, "file://D:REMOVABLEDBBLABLA.LDB");
+ #else
+ _LIT(KUriRemovableMediaDb, "file://F:REMOVABLEDB.LDB");
+ _LIT(KUriRemovableMediaDbNonExisting, "file://F:REMOVABLEDBBLABLA.LDB");
+ #endif
+
+_LIT(KNewDbName, "TP134 Disp Name");
+
+_LIT(KErrorWrongDrive, "Wrong drive returned from db info");
+
+_LIT(KErrorWrongDefault, "Wrong default db returned from db info");
+_LIT(KErrorWrongDbUri, "Wrong db uri returned from db info");
+_LIT(KErrorWrongProtocol, "Wrong protocol returned from db info");
+_LIT(KErrorWrongDbName, "Wrong db name returned from db info");
+_LIT(KErrorWrongAttributeInfo, "Wrong attribute info from db info");
+_LIT(KErrorWrongNrOfDbs, "Wrong nr of db:s for ListDatasesL");
+_LIT(KErrorWrongCodeForNonExistingDb, "Wrong error code for non-existing db");
+_LIT(KErrorWrongCodeForNonExistingDbRem, "Wrong error code for non-existing db on removable media");
+_LIT(KErrorWrongCodeForCorruptUri, "Wrong error code for corrupt uri");
+_LIT(KErrorWrongCodeForNotSupportedUri, "Wrong error code for not supported uri");
+
+// ================= MEMBER FUNCTIONS =======================
+// Cleanup for RPointerArray<HPosLmDatabaseInfo> objects
+void TP134CleanupTestPointerArray(TAny* aArray)
+
+ {
+ (static_cast<RPointerArray<HPosLmDatabaseInfo>*>(aArray))->ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp134::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp134::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp134::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp134::StartL()
+ {
+ iLog->Log(_L("Warning: this test case requires E: drive"));
+
+ iErrorsFound = KErrNone;
+ RemoveAllLmDatabasesL();
+ SetupExpectedResultsL();
+ // Create the test DB:s
+ iDbMan = CPosLmDatabaseManager::NewL();
+ HPosLmDatabaseInfo* dbInfo01 = HPosLmDatabaseInfo::NewLC(KUriDb01);
+ iDbMan->CreateDatabaseL(*dbInfo01);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ HPosLmDatabaseInfo* dbInfo02 = HPosLmDatabaseInfo::NewLC(KUriDb02);
+ iDbMan->CreateDatabaseL(*dbInfo02);
+ CleanupStack::PopAndDestroy(dbInfo02);
+ HPosLmDatabaseInfo* dbInfoRemovableMedia = HPosLmDatabaseInfo::NewLC(KUriRemovableMediaDb);
+ iDbMan->CreateDatabaseL(*dbInfoRemovableMedia);
+ CleanupStack::PopAndDestroy(dbInfoRemovableMedia);
+ dbInfo02 = NULL;
+ dbInfo01 = NULL;
+ dbInfoRemovableMedia = NULL;
+
+ // 1 Get info about the default DB
+ dbInfo01 = HPosLmDatabaseInfo::NewLC(KUriDb01Full);
+ iDbMan->SetDefaultDatabaseUriL(KUriDb01Full);
+ iDbMan->GetDatabaseInfoL(*dbInfo01);
+ CheckInfoL(dbInfo01, 1);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ dbInfo01 = NULL;
+
+ // 2 Get info about a non-default DB
+ dbInfo02 = HPosLmDatabaseInfo::NewLC(KUriDb02Full);
+ iDbMan->GetDatabaseInfoL(*dbInfo02);
+ CheckInfoL(dbInfo02, 2);
+ CleanupStack::PopAndDestroy(dbInfo02);
+ dbInfo02 = NULL;
+
+ // 3a Change the default db
+ // Check error report "ESLI-6CXJP3 Default database not marked as default"
+ iDbMan->SetDefaultDatabaseUriL(KUriDb02);
+ dbInfo02 = HPosLmDatabaseInfo::NewLC(KUriDb02Full);
+ iDbMan->GetDatabaseInfoL(*dbInfo02);
+ CheckInfoL(dbInfo02, 3);
+ CleanupStack::PopAndDestroy(dbInfo02);
+ dbInfo02 = NULL;
+
+ iDbMan->SetDefaultDatabaseUriL(KUriDb01Full);
+
+ // 3b Change the default db
+ // Check error report "ESLI-6CXJP3 Default database not marked as default"
+ iDbMan->SetDefaultDatabaseUriL(KUriDb02Full);
+ iDbUri[3] = KUriDb02;
+ iProtocol[3] = KNullDesC;
+ dbInfo02 = HPosLmDatabaseInfo::NewLC(KUriDb02);
+ iDbMan->GetDatabaseInfoL(*dbInfo02);
+ CheckInfoL(dbInfo02, 3);
+ CleanupStack::PopAndDestroy(dbInfo02);
+ dbInfo02 = NULL;
+
+ iDbMan->SetDefaultDatabaseUriL(KUriDb01Full);
+ // 3c Change the default db
+ // Check error report "ESLI-6CXJP3 Default database not marked as default"
+ iDbMan->SetDefaultDatabaseUriL(KUriDb02Full);
+ iDbUri[3] = KUriDb02Full;
+ iProtocol[3] = KProtocolFile;
+ dbInfo02 = HPosLmDatabaseInfo::NewLC(KUriDb02Full);
+ iDbMan->GetDatabaseInfoL(*dbInfo02);
+ CheckInfoL(dbInfo02, 3);
+ CleanupStack::PopAndDestroy(dbInfo02);
+ dbInfo02 = NULL;
+
+
+ // 4 DB on removable media
+ dbInfoRemovableMedia = HPosLmDatabaseInfo::NewLC(KUriRemovableMediaDb);
+ iDbMan->GetDatabaseInfoL(*dbInfoRemovableMedia);
+ CheckInfoL(dbInfoRemovableMedia, 4);
+ CleanupStack::PopAndDestroy(dbInfoRemovableMedia);
+ dbInfoRemovableMedia = NULL;
+
+ // 5 Get info for all databases using ListDatabasesL
+ iDbMan->ListDatabasesL(iDbArray);
+ AssertTrueSecL(iDbArray.Count() == 3, KErrorWrongNrOfDbs);
+
+ HPosLmDatabaseInfo* dbInfo = NULL;
+ for(TInt count = 0; count < 3; count++)
+ {
+ dbInfo = iDbArray[count];
+ TBuf<50> testbuf = dbInfo->DatabaseUri();
+ if (dbInfo->DatabaseUri() == KUriDb01Full)
+ {
+ CheckInfoL(dbInfo, 5);
+ }
+ else if (dbInfo->DatabaseUri() == KUriDb02Full)
+ {
+ CheckInfoL(dbInfo, 6);
+ }
+ else if (dbInfo->DatabaseUri() == KUriRemovableMediaDb)
+ {
+ CheckInfoL(dbInfo, 7);
+ }
+ }
+
+ // According to header for ListDatabasesL in EPos_CPosLmDatabaseManager.h
+ // "Any objects which are in the array when it is passed to this function are not removed."
+ // Therefore add object and make sure that it is not removed
+ HPosLmDatabaseInfo* testDbInfo = HPosLmDatabaseInfo::NewLC(_L("VeryMuchDummyURI.ldb"));
+ iDbArray.ResetAndDestroy();
+ iDbArray.Append(testDbInfo);
+ iDbMan->ListDatabasesL(iDbArray);
+ AssertTrueSecL(iDbArray.Count() == 4, _L("iDbArray count should be 4"));
+
+ CleanupStack::Pop(testDbInfo);
+ iDbArray.ResetAndDestroy();
+
+ // 6 Get info from a non-existing db:
+ TPosLmDatabaseSettings dummySettings;
+ HPosLmDatabaseInfo* dbInfoNonExisting = HPosLmDatabaseInfo::NewLC(KUriDbNonExisting);
+ TInt err = KErrNone;
+ TRAP(err, iDbMan->GetDatabaseInfoL(*dbInfoNonExisting));
+ AssertTrueSecL(err == KErrNotFound, KErrorWrongCodeForNonExistingDb);
+
+ CleanupStack::PopAndDestroy(dbInfoNonExisting);
+ dbInfoNonExisting = NULL;
+
+ // 7 Get info from a non-existing db on the removable media:
+ HPosLmDatabaseInfo* dbInfoNonExistingRem = HPosLmDatabaseInfo::NewLC(KUriRemovableMediaDbNonExisting);
+ TRAP(err, iDbMan->GetDatabaseInfoL(*dbInfoNonExistingRem));
+ AssertTrueSecL(err == KErrNotFound, KErrorWrongCodeForNonExistingDbRem);
+ CleanupStack::PopAndDestroy(dbInfoNonExistingRem);
+ dbInfoNonExistingRem = NULL;
+
+ // 8 Get info from a corrupt uri:
+ HPosLmDatabaseInfo* dbInfoCorrupt = HPosLmDatabaseInfo::NewLC(KUriDbCorrupt);
+ TRAP(err, iDbMan->GetDatabaseInfoL(*dbInfoCorrupt));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForCorruptUri);
+ TRAP(err, iDbMan->ModifyDatabaseSettingsL(KUriDbCorrupt, dummySettings));
+ AssertTrueSecL(err == KErrArgument, KErrorWrongCodeForCorruptUri);
+ CleanupStack::PopAndDestroy(dbInfoCorrupt);
+ dbInfoCorrupt = NULL;
+
+ // 9 Get info from a non-supported protocol in uri
+ HPosLmDatabaseInfo* dbInfoNotSupported = HPosLmDatabaseInfo::NewLC(KUriNotSupported);
+ TRAP(err, iDbMan->GetDatabaseInfoL(*dbInfoNotSupported));
+ AssertTrueSecL(err == KErrNotSupported, KErrorWrongCodeForNotSupportedUri);
+ TRAP(err, iDbMan->ModifyDatabaseSettingsL(KUriNotSupported, dummySettings));
+ AssertTrueSecL(err == KErrNotSupported, KErrorWrongCodeForNotSupportedUri);
+ CleanupStack::PopAndDestroy(dbInfoNotSupported);
+ dbInfoNotSupported = NULL;
+
+ // 10 Get info from the non-default db
+ dbInfo01 = HPosLmDatabaseInfo::NewLC(KUriDb01);
+ iDbMan->GetDatabaseInfoL(*dbInfo01);
+ CheckInfoL(dbInfo01, 8);
+
+ // 11 Change the display name for the non-default DB
+ TPosLmDatabaseSettings settings = dbInfo01->Settings();
+ TPosLmDatabaseName bufName(KNewDbName);
+ settings.SetDatabaseName(bufName);
+ iDbMan->ModifyDatabaseSettingsL(KUriDb01, settings);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ dbInfo01 = NULL;
+
+ // 12 Get info after name change
+ dbInfo01 = HPosLmDatabaseInfo::NewLC(KUriDb01);
+ iDbMan->GetDatabaseInfoL(*dbInfo01);
+ CheckInfoL(dbInfo01, 9);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ dbInfo01 = NULL;
+
+ // 10b Get info from the removable media db
+ dbInfoRemovableMedia = HPosLmDatabaseInfo::NewLC(KUriRemovableMediaDb);
+ iDbMan->GetDatabaseInfoL(*dbInfoRemovableMedia);
+ CheckInfoL(dbInfoRemovableMedia, 11);
+
+ // 11b Change the display name for the non-default DB
+ settings = dbInfoRemovableMedia->Settings();
+ bufName = KNewDbName;
+ settings.SetDatabaseName(bufName);
+ iDbMan->ModifyDatabaseSettingsL(KUriRemovableMediaDb, settings);
+ CleanupStack::PopAndDestroy(dbInfoRemovableMedia);
+ dbInfoRemovableMedia = NULL;
+
+ // 12b Get info after name change
+ dbInfoRemovableMedia = HPosLmDatabaseInfo::NewLC(KUriRemovableMediaDb);
+ iDbMan->GetDatabaseInfoL(*dbInfoRemovableMedia);
+ CheckInfoL(dbInfoRemovableMedia, 12);
+ CleanupStack::PopAndDestroy(dbInfoRemovableMedia);
+ dbInfoRemovableMedia = NULL;
+
+ // 13 Get info after name change
+ dbInfo01 = HPosLmDatabaseInfo::NewLC(KUriDb01);
+ iDbMan->GetDatabaseInfoL(*dbInfo01);
+ CheckInfoL(dbInfo01, 9);
+
+ // 14 Change display name, but use the unset attribute mechanism
+ settings = dbInfo01->Settings();
+ settings.UnsetAttribute(TPosLmDatabaseSettings::EName);
+ iDbMan->ModifyDatabaseSettingsL(KUriDb01, settings);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ dbInfo01 = NULL;
+
+ // 15 Get info after "non-name-change"
+ dbInfo01 = HPosLmDatabaseInfo::NewLC(KUriDb01);
+ iDbMan->GetDatabaseInfoL(*dbInfo01);
+ CheckInfoL(dbInfo01, 10);
+ CleanupStack::PopAndDestroy(dbInfo01);
+ dbInfo01 = NULL;
+
+ // 16 Check max length and KNullDesC
+ //_LIT(KErrorWrongCode, "Didn't receive correct error code");
+ _LIT(KMaxLengthString64, "1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString64Bad, "x1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString66, "c:2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString66Bad, "c:x2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString71, "file://3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString71Bad, "file://x3aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString73, "file://c:4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+ _LIT(KMaxLengthString73Bad, "file://c:x4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.ldb");
+
+ CheckUriLengthL(KMaxLengthString64, KErrNotFound);
+ CheckUriLengthL(KMaxLengthString64Bad, KErrNotFound); // tbd shall it be like this? (Should be KErrArgument)
+ CheckUriLengthL(KMaxLengthString66, KErrNotFound);
+ CheckUriLengthL(KMaxLengthString66Bad, KErrNotFound); // tbd shall it be like this?
+ CheckUriLengthL(KMaxLengthString71, KErrNotFound);
+ CheckUriLengthL(KMaxLengthString71Bad, KErrNotFound); // tbd shall it be like this?
+ CheckUriLengthL(KMaxLengthString73, KErrNotFound);
+ CheckUriLengthL(KMaxLengthString73Bad, KErrNotFound); // tbd shall it be like this?
+ CheckUriLengthL(KNullDesC, KErrArgument); //tbd This crashes, should it be so?
+
+ if (iErrorsFound != KErrNone) //LogErrorAndLeave(_L("Errors found in TP134"));
+ {
+ iLog->Log(_L("Errors found in TP134"));
+ User::Leave(-1);
+ }
+ else iLog->Log(_L("CPosTp134 Passed"));
+
+ }
+
+void CPosTp134::CheckInfoL(HPosLmDatabaseInfo* aDbInfo, TInt aTestNr)
+ {
+ _LIT(KTestInfo, "Step nr %d");
+ TBuf<20> testInfo;
+ testInfo.Format(KTestInfo, aTestNr);
+ iLog->Log(testInfo);
+
+ AssertTrueSecL(iDbDrive[aTestNr] == (aDbInfo->DatabaseDrive()).GetUpperCase(), KErrorWrongDrive);
+
+
+ iLog->Log(aDbInfo->DatabaseUri());
+ iLog->Log(iDbUri[aTestNr]);
+ AssertTrueSecL(iDefaultDb[aTestNr] == aDbInfo->IsDefault(), KErrorWrongDefault);
+ AssertTrueSecL(iDbUri[aTestNr] == aDbInfo->DatabaseUri(), KErrorWrongDbUri);
+
+ AssertTrueSecL(iProtocol[aTestNr] == aDbInfo->Protocol(), KErrorWrongProtocol);
+
+ TPosLmDatabaseSettings settings = aDbInfo->Settings();
+ if ( iDbName[aTestNr] != settings.DatabaseName() )
+ {
+ iLog->Log(_L("CheckInfo: dbNames do not match: exp '%S', act '%S'"),
+ &iDbName[aTestNr], &settings.DatabaseName() );
+ User::Leave( KErrGeneral );
+ }
+
+ AssertTrueSecL(iAttrSet[aTestNr] == settings.IsAttributeSet(TPosLmDatabaseSettings::EName),
+ KErrorWrongAttributeInfo);
+ }
+
+void CPosTp134::SetupExpectedResultsL()
+ {
+ TChar cDrive = 'C';
+ #ifdef __WINS__
+ TChar removableDrive = 'D';
+ TMediaType mediaTypeRemovable = EMediaHardDisk;
+ // DatabaseMedia() seems to return EMediaRam for WINS and EMediaFlash for target
+ TMediaType mediaType = EMediaRam;
+ #else
+ TMediaType mediaTypeRemovable = EMediaFlash;
+ TChar removableDrive = 'F';
+ // DatabaseMedia() seems to return EMediaRam for WINS and EMediaFlash for target
+ TMediaType mediaType = EMediaNANDFlash;
+ #endif
+
+ HBufC* dbName = ReadDefaultDatabaseNameFromResourceLC();
+ iLog->Log(_L("Default database name: '%S'"), dbName );
+
+ iDbDrive[1] = cDrive;
+ iMediaType[1] = mediaType;
+ iDefaultDb[1] = ETrue;
+ iDbUri[1] = KUriDb01Full;
+ iProtocol[1] = KProtocolFile;
+ iDbName[1] = *dbName;
+ iAttrSet[1] = ETrue; // TBD Shall it actually be so?
+
+ iDbDrive[2] = cDrive;
+ iMediaType[2] = mediaType;
+ iDefaultDb[2] = EFalse;
+ iDbUri[2] = KUriDb02Full;
+ iProtocol[2] = KProtocolFile;
+ iDbName[2] = KNullDesC;
+ iAttrSet[2] = EFalse;
+
+ iDbDrive[3] = cDrive;
+ iMediaType[3] = mediaType;
+ iDefaultDb[3] = ETrue;
+ iDbUri[3] = KUriDb02Full;
+ iProtocol[3] = KProtocolFile;
+ iDbName[3] = *dbName;
+ iAttrSet[3] = ETrue;
+
+ iDbDrive[4] = removableDrive;
+ iMediaType[4] = mediaTypeRemovable;
+ iDefaultDb[4] = EFalse;
+ iDbUri[4] = KUriRemovableMediaDb;
+ iProtocol[4] = KProtocolFile;
+ iDbName[4] = KNullDesC;
+ iAttrSet[4] = EFalse;
+
+ iDbDrive[5] = cDrive;
+ iMediaType[5] = mediaType;
+ iDefaultDb[5] = EFalse;
+ iDbUri[5] = KUriDb01Full;
+ iProtocol[5] = KProtocolFile;
+ iDbName[5] = KNullDesC;
+ iAttrSet[5] = EFalse;
+
+ iDbDrive[6] = cDrive;
+ iMediaType[6] = mediaType;
+ iDefaultDb[6] = ETrue;
+ iDbUri[6] = KUriDb02Full;
+ iProtocol[6] = KProtocolFile;
+ iDbName[6] = *dbName;
+ iAttrSet[6] = ETrue;
+
+ iDbDrive[7] = removableDrive;
+ iMediaType[7] = mediaTypeRemovable;
+ iDefaultDb[7] = EFalse;
+ iDbUri[7] = KUriRemovableMediaDb;
+ iProtocol[7] = KProtocolFile;
+ iDbName[7] = KNullDesC;
+ iAttrSet[7] = EFalse;
+
+ iDbDrive[8] = cDrive;
+ iMediaType[8] = mediaType;
+ iDefaultDb[8] = EFalse;
+ iDbUri[8] = KUriDb01;
+ iProtocol[8] = KNullDesC;
+ iDbName[8] = KNullDesC;
+ iAttrSet[8] = EFalse;
+
+ iDbDrive[9] = cDrive;
+ iMediaType[9] = mediaType;
+ iDefaultDb[9] = EFalse;
+ iDbUri[9] = KUriDb01;
+ iProtocol[9] = KNullDesC;
+ iDbName[9] = KNewDbName;
+ iAttrSet[9] = ETrue;
+
+ iDbDrive[10] = cDrive;
+ iMediaType[10] = mediaType;
+ iDefaultDb[10] = EFalse;
+ iDbUri[10] = KUriDb01;
+ iProtocol[10] = KNullDesC;
+ iDbName[10] = KNullDesC;
+ iAttrSet[10] = EFalse;
+
+ iDbDrive[11] = removableDrive;
+ iMediaType[11] = mediaTypeRemovable;
+ iDefaultDb[11] = EFalse;
+ iDbUri[11] = KUriRemovableMediaDb;
+ iProtocol[11] = KProtocolFile;
+ iDbName[11] = KNullDesC;
+ iAttrSet[11] = EFalse;
+
+ iDbDrive[12] = removableDrive;
+ iMediaType[12] = mediaTypeRemovable;
+ iDefaultDb[12] = EFalse;
+ iDbUri[12] = KUriRemovableMediaDb;
+ iProtocol[12] = KProtocolFile;
+ iDbName[12] = KNewDbName;
+ iAttrSet[12] = ETrue;
+
+ CleanupStack::PopAndDestroy( dbName );
+ }
+
+void CPosTp134::CheckUriLengthL(const TDesC& aUri,
+ TInt aExpectedErrorCode)
+ {
+ _LIT(KErrorWrongCode, "Wrong code when testing uri lengths");
+ TPosLmDatabaseSettings dummySettings;
+ HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(aUri);
+ TInt err = KErrNone;
+ TRAP(err, iDbMan->GetDatabaseInfoL(*dbInfo));
+ AssertTrueSecL(err == aExpectedErrorCode, KErrorWrongCode);
+ TRAP(err, iDbMan->ModifyDatabaseSettingsL(aUri, dummySettings));
+ AssertTrueSecL(err == aExpectedErrorCode, KErrorWrongCode);
+ CleanupStack::PopAndDestroy(dbInfo);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp135.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,660 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp135.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+
+
+// ================= CONSTANTS =======================
+
+_LIT(KRemoteDb1, "test://RemoteDb1.ldb");
+_LIT(KRemoteDb2, "test://RemoteDb2.ldb");
+_LIT(KLocalDb1, "file://C:SOMEDB.LDB");
+_LIT(KLocalDbName1, "SOMEDB");
+_LIT(KRemoteDbName1, "RemoteDb1");
+_LIT(KRemoteDbName2, "RemoteDb2");
+_LIT(KRemoteDb3, "test://RemoteDb3.ldb");
+_LIT(KRemoteDb4, "test://RemoteDb4.ldb");
+_LIT(KRemoteDb5, "RemoteDb5.ldb");
+_LIT(KLocalDb2, "file://C:SOMELOCALDB.LDB");
+_LIT(KRemoteNonExistingDb, "test://NonExistingDb.ldb");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Cleanup for RPointerArray<HPosLmDatabaseInfo> objects
+void CleanupTestPointerArray(TAny* aArray)
+
+ {
+ (static_cast<RPointerArray<HPosLmDatabaseInfo>*>(aArray))->ResetAndDestroy();
+ }
+
+// Cleanup for RPointerArray<HPosLmDatabaseInfo> objects
+void CleanupTestPointerArray2(TAny* aArray)
+
+ {
+
+ (static_cast<RPointerArray<HPosLmDatabaseInfo>*>(aArray))->Reset();
+ }
+
+// ---------------------------------------------------------
+// CPosTp135::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp135::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ iDbArray->Reset();
+ delete iDbArray;
+ iDbArray = NULL;
+
+ TRAPD(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Log(_L("RemoveAllLmDatabasesL() leaved"));
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp135::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp135::StartL()
+ {
+ _LIT(KEmptyProtocol, "");
+ _LIT(KRemoteProtocol, "test");
+
+ TInt err=KErrNone;
+ iErrorsFound = KErrNone;
+
+ RemoveAllLmDatabasesL();
+
+ iDbArray = NULL;
+ iDbArray = new (ELeave) CDesCArrayFlat(5);
+
+ // Create defaultdb
+ CPosLmDatabaseManager* dbManager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbManager);
+
+ // TC Step 1 Create a remote database (uses the test provider implementation, using test as identifier
+ // (compare with file)
+ HPosLmDatabaseInfo* db1 = HPosLmDatabaseInfo::NewLC(KRemoteDb1);
+ dbManager->CreateDatabaseL(*db1);
+
+ // TC Step 2 Register db
+ dbManager->RegisterDatabaseL(*db1);
+ TPosLmDatabaseSettings settings = db1->Settings();
+ TPosLmDatabaseName bufName(KRemoteDbName1);
+ settings.SetDatabaseName(bufName);
+ dbManager->ModifyDatabaseSettingsL(KRemoteDb1, settings);
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 3 Create local db and try to register it
+ HPosLmDatabaseInfo* localDb1 = HPosLmDatabaseInfo::NewLC(KLocalDb1);
+ dbManager->CreateDatabaseL(*localDb1);
+
+ settings = db1->Settings();
+ TPosLmDatabaseName bufName2(KLocalDbName1);
+ settings.SetDatabaseName(bufName2);
+ dbManager->ModifyDatabaseSettingsL(KLocalDb1, settings);
+
+ TRAP(err, dbManager->RegisterDatabaseL(*localDb1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("Register a local db should leave with KErrNotSupported")) ;
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(localDb1);
+
+ // TC Step 4 Create another remote database and register it
+ db1 = HPosLmDatabaseInfo::NewLC(KRemoteDb2);
+ dbManager->CreateDatabaseL(*db1);
+ // Register db,
+ dbManager->RegisterDatabaseL(*db1);
+ settings = db1->Settings();
+ TPosLmDatabaseName bufName3(KRemoteDbName2);
+ settings.SetDatabaseName(bufName3);
+ dbManager->ModifyDatabaseSettingsL(KRemoteDb2, settings);
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 5 List all dbs without specifying protocol
+ CDesCArray* list = dbManager->ListDatabasesLC();
+ // Verify list should contain two remote and one local database
+ iDbArray->AppendL(KLocalDb1);
+ iDbArray->AppendL(KRemoteDb1);
+ iDbArray->AppendL(KRemoteDb2);
+ VerifyDbListL(list);
+ CleanupStack::PopAndDestroy(list);
+
+ // TC Step 6 List all dbs but specify protocol (protocol "local")
+ list = dbManager->ListDatabasesLC(_L("file"));
+ iDbArray->Delete(0, iDbArray->Count());
+ iDbArray->AppendL(KLocalDb1);
+ //Verify list should contain one local database
+ VerifyDbListL(list);
+ CleanupStack::PopAndDestroy(list);
+
+ // TC Step 7 List all dbs but specify protocol (protocol "test")
+ list = dbManager->ListDatabasesLC(KRemoteProtocol);
+ //Verify list should contain two remote databases
+ iDbArray->Reset();
+ iDbArray->AppendL(KRemoteDb1);
+ iDbArray->AppendL(KRemoteDb2);
+ //Verify list should contain one local database
+ VerifyDbListL(list);
+ CleanupStack::PopAndDestroy(list);
+
+ // TC Step 8 Also test with empty protocol, All existing dbs will be returned
+ list = dbManager->ListDatabasesLC(_L(""));
+ iDbArray->Reset();
+ iDbArray->AppendL(KLocalDb1);
+ iDbArray->AppendL(KRemoteDb1);
+ iDbArray->AppendL(KRemoteDb2);
+ //Verify list
+ VerifyDbListL(list);
+ CleanupStack::PopAndDestroy(list);
+
+ // TC Step 9 Retrive info about all dbs without specifying protocol
+ HPosLmDatabaseInfo* dbInfo01 = HPosLmDatabaseInfo::NewLC(KLocalDb1);
+ HPosLmDatabaseInfo* dbInfo02 = HPosLmDatabaseInfo::NewLC(KRemoteDb1);
+ HPosLmDatabaseInfo* dbInfo03 = HPosLmDatabaseInfo::NewLC(KRemoteDb2);
+
+ RPointerArray<HPosLmDatabaseInfo> myDbInfoList;
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray2, &myDbInfoList));
+
+ RPointerArray<HPosLmDatabaseInfo> infoList;
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+
+ dbManager->ListDatabasesL(infoList);
+ // Verify list should contain all dbs
+
+ myDbInfoList.Append(dbInfo01);
+ myDbInfoList.Append(dbInfo02);
+ myDbInfoList.Append(dbInfo03);
+
+ VerifyDbInfoListL(infoList, myDbInfoList);
+ CleanupStack::PopAndDestroy(&infoList);
+ myDbInfoList.Reset();
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+
+ // TC Step 10 Retrive info about dbs specifying remote protocol
+ dbManager->ListDatabasesL(infoList, KRemoteProtocol);
+ // Verify list should contain two remote databases
+ myDbInfoList.Append(dbInfo03); myDbInfoList.Append(dbInfo02);
+ VerifyDbInfoListL(infoList, myDbInfoList);
+ CleanupStack::PopAndDestroy(&infoList);
+ myDbInfoList.Reset();
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+
+ // TC Step 11 Retrive info but specify empty protocol,
+ dbManager->ListDatabasesL(infoList, KEmptyProtocol);
+ // Verify list should contain all databases
+ myDbInfoList.Append(dbInfo01);myDbInfoList.Append(dbInfo02);myDbInfoList.Append(dbInfo03);
+ VerifyDbInfoListL(infoList, myDbInfoList);
+ CleanupStack::PopAndDestroy(&infoList);
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+ myDbInfoList.Reset();
+
+ // TC Step 12 Also test when specifying KNullDesC
+ dbManager->ListDatabasesL(infoList, KEmptyProtocol);
+ // Verify list should contain all databases
+ myDbInfoList.Append(dbInfo01);myDbInfoList.Append(dbInfo02);myDbInfoList.Append(dbInfo03);
+ VerifyDbInfoListL(infoList, myDbInfoList);
+ CleanupStack::PopAndDestroy(&infoList);
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+ myDbInfoList.Reset();
+
+ // TC Step 13 Unregister one remote db and list dbs
+ dbManager->UnregisterDatabaseL(KRemoteDb1);
+
+ list = dbManager->ListDatabasesLC(KRemoteProtocol);
+ // Verify list should contain one remote databases
+ iDbArray->Delete(0, iDbArray->Count());
+ iDbArray->AppendL(KRemoteDb2);
+ VerifyDbListL(list);
+ CleanupStack::PopAndDestroy(list);
+
+ // TC Step 14 Retrieves info about dbs, specify remote protocol
+ dbManager->ListDatabasesL(infoList, KRemoteProtocol);
+ // Verify list, should contain one remote
+ myDbInfoList.Append(dbInfo03);
+ VerifyDbInfoListL(infoList, myDbInfoList);
+ CleanupStack::PopAndDestroy(&infoList);
+ myDbInfoList.Reset();
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+
+ // TC Step 15 Unregisters all remote dbs
+ dbManager->UnregisterAllDatabasesL(KRemoteProtocol);
+ // Retrieves info about all dbs without specifying protocol
+ CleanupStack::PopAndDestroy(&infoList);
+ CleanupStack::PushL(TCleanupItem(CleanupTestPointerArray, &infoList));
+ dbManager->ListDatabasesL(infoList);
+ // Verify list should contain one local database
+ myDbInfoList.Append(dbInfo01);
+ VerifyDbInfoListL(infoList, myDbInfoList);
+ myDbInfoList.Reset();
+
+ CleanupStack::PopAndDestroy(&infoList);
+ CleanupStack::PopAndDestroy(&myDbInfoList);
+ CleanupStack::PopAndDestroy(dbInfo03);
+ CleanupStack::PopAndDestroy(dbInfo02);
+ CleanupStack::PopAndDestroy(dbInfo01);
+
+ // TC Step 16 set the default database to a remote database
+ TRAP(err, dbManager->SetDefaultDatabaseUriL(KRemoteDb1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: SetDefaultDatabaseUriL to a remote db should leave with KErrNotSupported")) ;
+ User::Leave(err);
+ }
+
+ // TC Step 17 Try to register a landmark database with an incorrect URI
+ db1 = HPosLmDatabaseInfo::NewLC(_L("test:/awd/C:Pelle.ldb"));
+ TRAP(err, dbManager->RegisterDatabaseL(*db1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: RegisterDatabaseL with incorrect URI should leave with KErrNotSupported (1)")) ;
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 18 Try to register a landmark database with an incorrect URI
+ db1 = HPosLmDatabaseInfo::NewLC(_L("test:/\"/C:Pelle.ldb"));
+ TRAP(err, dbManager->RegisterDatabaseL(*db1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: RegisterDatabaseL with incorrect URI should leave with KErrNotSupported (2)")) ;
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 19 Try to register a landmark database with an incorrect URI
+ db1 = HPosLmDatabaseInfo::NewLC(_L("file:/awd/C:C:Pelle.ldb"));
+ TRAP(err, dbManager->RegisterDatabaseL(*db1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: RegisterDatabaseL with incorrect URI should leave with KErrNotSupported (3)")) ;
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 20 Try to register a landmark database with an incorrect URI
+ db1 = HPosLmDatabaseInfo::NewLC(_L("file:/ /C:C:Pelle.ldb"));
+ TRAP(err, dbManager->RegisterDatabaseL(*db1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: RegisterDatabaseL with incorrect URI should leave with KErrNotSupported (4)")) ;
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 21 Try to un-register a landmark database with an incorrect URI
+ TRAP(err, dbManager->UnregisterDatabaseL(_L("test:/ /C:Pelle.ldb")));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: UnregisterDatabaseL with incorrect URI should leave with KErrArgument (1)")) ;
+ User::Leave(err);
+
+ }
+
+ // TC Step 22 Try to un-register a landmark database with an incorrect URI
+ TRAP(err, dbManager->UnregisterDatabaseL(_L("file: //C:C:Pelle.ldb")));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: UnregisterDatabaseL with incorrect URI should leave with KErrArgument (2)")) ;
+ User::Leave(err);
+
+ }
+
+ // TC Step 23 Try to register a local landmark database
+ db1 = HPosLmDatabaseInfo::NewLC(KLocalDb1);
+ TRAP(err, dbManager->RegisterDatabaseL(*db1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: RegisterDatabaseL a local db should leave with KErrNotSupported")) ;
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 24 Try to unregister a local landmark database
+ TRAP(err, dbManager->UnregisterDatabaseL(KLocalDb1));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR:UnRegisterDatabaseL a local db should leave with KErrNotSupported")) ;
+ User::Leave(err);
+
+ }
+
+ // TC Step 25 Unregisters all dbs using empty protocol
+ // make sure that one is registered
+ db1 = HPosLmDatabaseInfo::NewLC(KRemoteDb1);
+ dbManager->RegisterDatabaseL(*db1);
+ TRAP(err, dbManager->UnregisterAllDatabasesL(_L("")));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("ERROR: UnregisterAllDatabasesL with empty protocol should leave with KErrArgument")) ;
+ User::Leave(err);
+
+ }
+
+ // TC Step 26 Unregisters all dbs using KNullDesC
+ // make sure that one is registered
+
+ TRAP(err, dbManager->UnregisterAllDatabasesL(KNullDesC));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("ERROR: UnregisterAllDatabasesL with KNullDesc protocol should leave with KErrArgument")) ;
+ User::Leave(err);
+
+ }
+
+ // TC Step 27 Unregisters all dbs using local protocol
+ // make sure that one is registered
+
+ TRAP(err, dbManager->UnregisterAllDatabasesL(_L("file")));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: UnregisterAllDatabasesL with file protocol should leave with KErrArgument(1)")) ;
+ User::Leave(err);
+
+ }
+
+ // TC Step 28 Unregisters all dbs using local protocol
+ // make sure that one is registered
+ TRAP(err, dbManager->UnregisterAllDatabasesL(_L("file://")));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ERROR: UnregisterAllDatabasesL with file protocol should leave with KErrNotSupported(2)")) ;
+ User::Leave(err);
+
+ }
+
+ // TC 29 try to register again, should leave with KErrAlreadyExists
+
+ TRAP(err, dbManager->RegisterDatabaseL(*db1));
+ if (err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("ERROR: RegisterDatabaseL already registered db should leave with KErrAlreadyExists")) ;
+ User::Leave(err);
+
+ }
+
+ CleanupStack::PopAndDestroy(db1);
+
+ // TC Step 30 Copy database and verify that it is registered
+ dbManager->UnregisterAllDatabasesL(_L("test"));
+ db1 = HPosLmDatabaseInfo::NewLC(KRemoteDb3);
+ dbManager->CreateDatabaseL(*db1);
+ // Register db,
+ dbManager->RegisterDatabaseL(*db1);
+ CleanupStack::PopAndDestroy(db1);
+ dbManager->CopyDatabaseL(KRemoteDb3, KRemoteDb4);
+ // Only list "remote" dbs
+ list = dbManager->ListDatabasesLC(_L("test"));
+ iDbArray->Reset();
+ iDbArray->AppendL(KRemoteDb3);
+ iDbArray->AppendL(KRemoteDb4);
+
+ VerifyDbListL(list);
+ CleanupStack::PopAndDestroy(list);
+
+ // TC Step 31) Check DatabaseExistsL method
+ TBool result = dbManager->DatabaseExistsL(KRemoteDb3);
+ if (!result)
+ {
+ iLog->Log(_L("DatabaseExistsL should return ETrue")) ;
+ User::Leave(-1);
+
+ }
+ result = dbManager->DatabaseExistsL(KRemoteNonExistingDb);
+ if (result)
+ {
+ iLog->Log(_L("DatabaseExistsL should return EFalse")) ;
+ User::Leave(-1);
+ }
+
+ // TC Step 32) Try to copy remote db to local
+ TRAP(err, dbManager->CopyDatabaseL(KRemoteDb3, KLocalDb2));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Copy from remote to local should leave with KErrArgument")) ;
+ User::Leave(err);
+ }
+
+ // TC Step 33) Try to copy remote db to local
+ TRAP(err, dbManager->CopyDatabaseL(KRemoteDb3, KRemoteDb5));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Copy from remote to unspecified should leave with KErrArgument")) ;
+ User::Leave(err);
+
+ }
+
+ CleanupStack::PopAndDestroy(dbManager);
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP135")) ;
+ User::Leave(-1);
+
+ }
+ else iLog->Log(_L("CPosTp135 Passed"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp135::VerifyDbListL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp135::VerifyDbListL(CDesCArray* aDbArray)
+ {
+ iLog->Log(_L("VerifyDbListL"));
+ if (aDbArray->Count() != iDbArray->Count())
+ {
+ TBuf<100> buf;
+ buf.Format(_L("List was %d should be %d "), aDbArray->Count(), iDbArray->Count());
+
+ iLog->Log(buf);
+ User::Leave(KErrNone);
+ }
+
+ TInt found = 0;
+ TInt count = aDbArray->Count();
+ TInt i = 0;
+
+ for (i = 0; i<count; i++)
+ {
+ // Below for debug purposes
+
+ TInt pos;
+ if (aDbArray->Find(iDbArray->MdcaPoint(i), pos) != KErrNone)
+ {
+ iLog->Log(_L("Did Not Found:"));
+ iLog->Log(iDbArray->MdcaPoint(i));
+ iLog->Log(_L("------------------"));
+ }
+ else
+ {
+ iLog->Log(iDbArray->MdcaPoint(i));
+ found++;
+ }
+ }
+
+ if (found != count)
+ {
+
+ iLog->Log(_L("List was not correct"));
+ User::Leave(-1);
+
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp135::VerifyDbInfoListL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp135::VerifyDbInfoListL(RPointerArray<HPosLmDatabaseInfo> aDbInfoList,
+ RPointerArray<HPosLmDatabaseInfo> aDbInfoList2)
+ {
+ iLog->Log(_L("VerifyDbInfoListL"));
+
+ TBuf<100> debug;
+
+ if (aDbInfoList.Count() != aDbInfoList2.Count())
+ {
+ TBuf<100> buf;
+ buf.Format(_L("List was %d should be %d "), aDbInfoList.Count(), aDbInfoList2.Count());
+
+ iLog->Log(buf);
+ User::Leave(KErrNone);
+
+ }
+
+ TBool found = EFalse;
+ TInt count = aDbInfoList.Count();
+ TInt j=0;
+
+ for (j = 0; j<count; j++)
+ {
+ TInt i = 0;
+ found = EFalse;
+ iLog->Log(_L("Looking for: "));
+ iLog->Log(aDbInfoList[j]->DatabaseUri());
+
+ for (i = 0; i<count && !found; i++)
+ {
+ if (((aDbInfoList[j])->DatabaseUri()).CompareC((aDbInfoList2[i])->DatabaseUri()) == KErrNone)
+ {
+ iLog->Log(_L("Found:"));
+ iLog->Log(aDbInfoList2[i]->DatabaseUri());
+ found = ETrue;
+ TPosLmDatabaseSettings settings = aDbInfoList[j]->Settings();
+
+ if (aDbInfoList[j]->IsDefault())
+ {
+ iLog->Log(_L("Db should never be default"));
+ User::Leave(KErrNone);
+ }
+
+ if (aDbInfoList[j]->DatabaseUri() == KRemoteDb1)
+ {
+ if (settings.DatabaseName() != KRemoteDbName1)
+ {
+ iLog->Log(_L("Incorrect Databasename for remote db1"));
+ User::Leave(-1);
+ }
+ if (aDbInfoList[j]->Protocol() != _L("test"))
+ {
+ iLog->Log(_L("Incorrect protocol for remote db1"));
+ User::Leave(-1);
+ }
+ if (aDbInfoList[j]->DatabaseMedia() != EMediaRemote)
+ {
+ iLog->Log(_L("Incorrect media for remote db1"));
+ User::Leave(-1);
+ }
+ if (aDbInfoList[j]->DatabaseDrive() != 'U')
+ {
+ iLog->Log(_L("Incorrect drive for remote db1"));
+ User::Leave(-1);
+ }
+ }
+ else if (aDbInfoList[j]->DatabaseUri() == KRemoteDb2)
+ {
+ if (settings.DatabaseName() != KRemoteDbName2)
+ {
+ iLog->Log(_L("Incorrect Databasename for remote db2"));
+ User::Leave(-1);
+ }
+ if (aDbInfoList[j]->Protocol() != _L("test"))
+ {
+ iLog->Log(_L("Incorrect protocol for remote db2"));
+ User::Leave(-1);
+ }
+ if (aDbInfoList[j]->DatabaseMedia() != EMediaRemote)
+ {
+ iLog->Log(_L("Incorrect media for remote db2"));
+ User::Leave(-1);
+ }
+ if (aDbInfoList[j]->DatabaseDrive() != 'U')
+ {
+ iLog->Log(_L("Incorrect drive for remote db2"));
+ User::Leave(-1);
+ }
+ }
+ else
+ {
+ // Local db
+ if (aDbInfoList[j]->Protocol() != _L("file"))
+ {
+ iLog->Log(_L("Incorrect protocol for local db"));
+ User::Leave(-1);
+ }
+ if (settings.DatabaseName() != KLocalDbName1)
+ {
+ iLog->Log(_L("Incorrect Databasename for local db"));
+ User::Leave(-1);
+ }
+
+
+
+ if (aDbInfoList[j]->DatabaseDrive() != 'C')
+ {
+ iLog->Log(_L("Incorrect drive for remote db1"));
+ User::Leave(-1);
+ }
+
+ }
+
+ if (aDbInfoList[j]->Size() <1)
+ {
+ iLog->Log(_L("Size should have a value"));
+ User::Leave(-1);
+ }
+ if (!settings.IsAttributeSet(TPosLmDatabaseSettings::EName))
+ {
+ iLog->Log(_L("Name attribute should be set"));
+ User::Leave(-1);
+ }
+
+ }
+ }
+ if (!found)
+ {
+
+ iLog->Log(_L("List was not correct"));
+ User::Leave(-1);
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp136.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp136.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+
+// ================= CONSTANTS =======================
+
+ _LIT(KLMXFile, "c:\\system\\test\\testdata\\Tp136.xml");
+ _LIT(KGPXFile, "c:\\system\\test\\testdata\\Tp136.gpx");
+
+ _LIT(KEmpty, "");
+
+ _LIT(K1, "Category nr1 added in TP48");
+
+ _LIT(K2, "Läkare");
+ _LIT(K3, "Sjukhus");
+ _LIT(K4, "Restaurant");
+ _LIT(K5, "Shop");
+
+ _LIT(K6, "Frisör");
+
+ _LIT(K7, "Dagis");
+ _LIT(K8, "BurgerKing");
+ _LIT(K9, "Hotel");
+ _LIT(K10, "Car park");
+
+ _LIT(K11, "Garage");
+ _LIT(K12, "Bus stop");
+ _LIT(K13, "BurgerKing");
+
+ _LIT(K14, "Category nr2 added in TP48");
+ _LIT(K15_1, "OutSight");
+ const TInt KNrOfLandmarks = 8;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp136::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp136::CloseTest()
+ {
+ // Release ECOM stuff
+ ReleaseLandmarkResources();
+
+ delete iOperation;iOperation=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp136::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp136::StartL()
+ {
+ iErrorsFound = 0;
+
+ // LMX
+ TestParseL(KLMXFile, KLmxMimeType);
+ TestImportL(KLMXFile, KLmxMimeType);
+
+ // GPX
+ TestParseL(KGPXFile, KGpxMimeType);
+ TestImportL(KGPXFile, KGpxMimeType);
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP136"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp136::TestParseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp136::TestParseL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestParseL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+
+ RemoveAllLmDatabasesL();
+
+ const TDesC* categoryNames[KNrOfLandmarks][4] = {{&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K1, &KEmpty, &KEmpty, &KEmpty},
+ {&K2, &K3, &K4, &K5},
+ {&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K6, &KEmpty, &KEmpty, &KEmpty},
+ {&K7, &K8, &K9, &K10},
+ {&K11, &K12, &K13, &KEmpty},
+ {&K14, &K15_1, &KEmpty, &KEmpty}};
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(aMime);
+ CleanupStack::PushL(parser);
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when opening file"));
+ User::Leave(err);
+ }
+ CleanupClosePushL(file);
+ parser->SetInputFileHandleL(file);
+ iOperation = parser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress=0;
+
+ CDesCArrayFlat* landmarkNames = new (ELeave) CDesCArrayFlat(KNrOfLandmarks);
+ landmarkNames->AppendL(_L("Billigt"));
+ landmarkNames->AppendL(_L("LOG9"));
+ landmarkNames->AppendL(_L("Kalles Hundgård"));
+ landmarkNames->AppendL(_L("MLFW"));
+ landmarkNames->AppendL(_L("TE, Lund"));
+ landmarkNames->AppendL(_L("asdf"));
+ landmarkNames->AppendL(_L("TP48LandmarkWithAllXMLFields"));
+ landmarkNames->AppendL(_L("TP48Landmark With Empty XML Fields"));
+
+ TInt counter=0;
+ while (progress != 1)
+ {
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ CPosLandmark* lm = parser->LandmarkLC();
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ TPtrC expName(landmarkNames->MdcaPoint(counter));
+ iLog->Log(_L("Landmark %d, Actual name '%S', Expected '%S'"), counter, &name, &expName);
+ if (expName.CompareC(name) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Landmark Name"));
+ iErrorsFound++;
+ }
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ lm->GetCategoriesL(arr);
+ for (TInt i=0;i<arr.Count();i++)
+ {
+ CPosLandmarkCategory* cat = parser->LandmarkCategoryLC(arr[i]);
+ TPtrC catName;
+ cat->GetCategoryName(catName);
+ iLog->Log(_L("Category %d, Actual '%S', Expected '%S'"), i, &catName, categoryNames[counter][i]);
+ if (catName.CompareC(*categoryNames[counter][i]) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Category Name when comparing"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(lm);
+ counter++;
+ }
+
+ TUint32 nr = parser->NumOfParsedLandmarks();
+ if (nr != KNrOfLandmarks)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmarks parsed"));
+ iErrorsFound++;
+ }
+
+ iLog->Log(_L("-------------------\n"));
+ delete iOperation;iOperation=NULL;
+
+ CleanupStack::PopAndDestroy(&file);
+
+ landmarkNames->Reset();
+ delete landmarkNames;
+ landmarkNames = NULL;
+ CleanupStack::PopAndDestroy(parser);
+ }
+
+// ---------------------------------------------------------
+// CPosTp136::TestImportL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp136::TestImportL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImportL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+
+ RemoveAllLmDatabasesL();
+
+ const TDesC* categoryNames[KNrOfLandmarks][4] = {{&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K1, &KEmpty, &KEmpty, &KEmpty},
+ {&K2, &K3, &K4, &K5},
+ {&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K6, &KEmpty, &KEmpty, &KEmpty},
+ {&K7, &K8, &K9, &K10},
+ {&K11, &K12, &K13, &KEmpty},
+ {&K14, &K15_1, &KEmpty, &KEmpty}};
+
+ CPosLandmarkDatabase* database = OpenDatabaseLC();
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(aMime);
+ CleanupStack::PushL(parser);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(categoryManager);
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when opening file"));
+ User::Leave(err);
+ }
+ CleanupClosePushL(file);
+
+ parser->SetInputFileHandleL(file);
+ iOperation = database->ImportLandmarksL(*parser, CPosLandmarkDatabase::EIncludeCategories);
+
+ ExecuteAndDeleteLD(iOperation);
+ iOperation=NULL;
+
+ CPosLmItemIterator* iter = database->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ CDesCArrayFlat* landmarkNames = new (ELeave) CDesCArrayFlat(KNrOfLandmarks);
+ landmarkNames->AppendL(_L("Billigt"));
+ landmarkNames->AppendL(_L("LOG9"));
+ landmarkNames->AppendL(_L("Kalles Hundgård"));
+ landmarkNames->AppendL(_L("MLFW"));
+ landmarkNames->AppendL(_L("TE, Lund"));
+ landmarkNames->AppendL(_L("asdf"));
+ landmarkNames->AppendL(_L("TP48LandmarkWithAllXMLFields"));
+ landmarkNames->AppendL(_L("TP48Landmark With Empty XML Fields"));
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter = 0;
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = database->ReadLandmarkLC(id);
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ TPtrC expName(landmarkNames->MdcaPoint(counter));
+ iLog->Log(_L("Landmark %d, Actual name '%S', Expected '%S'"), counter, &name, &expName);
+ if (expName.CompareC(name) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Landmark Name"));
+ iErrorsFound++;
+ }
+
+ lm->GetCategoriesL(arr);
+ if (arr.Count() == 0) iLog->Log(_L("NOLL"));
+ else
+ {
+ TBuf<100> buf;
+ buf.Format(_L("nr of categories %d"), arr.Count());
+ iLog->Log(buf);
+ }
+
+ for (TInt i=0;i<arr.Count();i++)
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(arr[i]);
+ TPtrC catName;
+ cat->GetCategoryName(catName);
+ iLog->Log(_L("Category %d, Actual '%S', Expected '%S'"), i, &catName, categoryNames[counter][i]);
+ if (catName.CompareC(*categoryNames[counter][i]) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Category Name"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(lm);
+ id = iter->NextL();
+ counter++;
+ }
+ TUint32 nr = parser->NumOfParsedLandmarks();
+ if (nr != KNrOfLandmarks)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmarks parsed"));
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ landmarkNames->Reset();
+ delete landmarkNames;
+ landmarkNames = NULL;
+
+ iLog->Log(_L("-------------------\n"));
+
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(parser);
+ CleanupStack::PopAndDestroy(database);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp137.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,295 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp137.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+
+#include <LbsPosition.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+
+// ================= CONSTANTS =======================
+
+ _LIT(KLmxFile, "c:\\system\\test\\testdata\\Tp137.xml");
+ _LIT(KGpxFile, "c:\\system\\test\\testdata\\Tp137.gpx");
+
+#define DEBUG ETrue
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp137::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp137::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp137::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp137::StartL()
+ {
+ iErrorsFound = 0;
+
+ // LMX
+ TestImportEmptyDbL( KLmxFile, KLmxMimeType );
+ TestImport1L( KLmxFile, KLmxMimeType );
+
+ // GPX
+ TestImportEmptyDbL( KGpxFile, KGpxMimeType );
+ TestImport1L( KGpxFile, KGpxMimeType );
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP137"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp137::TestImportEmptyDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp137::TestImportEmptyDbL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImportEmptyDbL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+ RemoveAllLmDatabasesL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMime);
+ iLandmarkParser->SetInputFileL(aFile);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesBefore = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ iLog->Log(_L("iDatabase->ImportLandmarksL"));
+ // No categories should be imported, since ESupressCategoryCreation is used and the landmarks
+ // db is empty when starting
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::ESupressCategoryCreation| CPosLandmarkDatabase::EIncludeCategories));
+
+ catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesAfter = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ if (nrOfcategoriesAfter != nrOfcategoriesBefore)
+ {
+ iLog->Log(_L("ERROR: No categories should have been imported"));
+ iErrorsFound++;
+ }
+ iLog->Log(_L("-------------------\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp137::TestImport1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp137::TestImport1L(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImport1L ------"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+ RemoveAllLmDatabasesL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMime);
+ iLandmarkParser->SetInputFileL(aFile);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ // Create two local categories, "Dagis" and "BurgerKing" belongs to landmark "asdf"
+ CPosLandmarkCategory* category1 = CPosLandmarkCategory::NewLC();
+ category1->SetCategoryNameL(_L("Dagis"));
+ TPosLmItemId id1 = categoryManager->AddCategoryL(*category1);
+ CleanupStack::PopAndDestroy(category1);
+
+ CPosLandmarkCategory* category2 = CPosLandmarkCategory::NewLC();
+ category2->SetCategoryNameL(_L("BurgerKing"));
+ TPosLmItemId id2 = categoryManager->AddCategoryL(*category2);
+ CleanupStack::PopAndDestroy(category2);
+
+ // Create "Frisör" belongs to landmark "TE, Lund"
+ CPosLandmarkCategory* category3 = CPosLandmarkCategory::NewLC();
+ category3->SetCategoryNameL(_L("Frisör"));
+ TPosLmItemId id3 = categoryManager->AddCategoryL(*category3);
+ CleanupStack::PopAndDestroy(category3);
+
+ // Remove global category with global id 1
+ // Belongs to "Kalles Hundgård"
+ TPosLmItemId globalId = categoryManager->GetGlobalCategoryL(3000);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(globalId));
+
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesBefore = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ iLog->Log(_L("iDatabase->ImportLandmarksL"));
+
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::EIncludeGlobalCategoryNames | CPosLandmarkDatabase::ESupressCategoryCreation| CPosLandmarkDatabase::EIncludeCategories));
+
+
+ catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesAfter = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+ if (nrOfcategoriesAfter != nrOfcategoriesBefore)
+ {
+ iLog->Log(_L("ERROR: Three categories should have been added"));
+ iErrorsFound++;
+ }
+
+ // Check that landmark "TE, Lund" has "Frisör" and
+ // landmark "asdf" has "Dagis" and "BurgerKing" (and also already existing global categories
+
+ TBuf<100> buf;
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ TPosLmItemId idde1;
+
+ // Check id=5 Te, Lund
+ idde1 = categoryManager->GetCategoryL(_L("Frisör"));
+ categories.Append(idde1);
+ CheckLandmarkL(5, categories);
+ categories.Reset();
+
+ // Check id=6 asdf
+ idde1 = categoryManager->GetCategoryL(_L("Dagis"));
+ TPosLmItemId idde2 = categoryManager->GetCategoryL(_L("BurgerKing"));
+ categories.Append(idde1);
+ if ( aMime != KGpxMimeType )
+ {
+ categories.Append(idde2);
+ }
+ CheckLandmarkL(6, categories);
+ categories.Reset();
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iLog->Log(_L("-------------------\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp137::CheckLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp137::CheckLandmarkL(TPosLmItemId aLandmarkId, RArray<TPosLmItemId> aCategoriesList)
+ {
+ iLog->Log(_L("CheckLandmarkL"));
+
+ // Get landmark
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(aLandmarkId);
+ TPtrC name1;
+ lm1->GetLandmarkName(name1);
+ iLog->Log(name1);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ // Get all categories attached to this landmark
+ lm1->GetCategoriesL(categories);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ if ( aCategoriesList.Count() != categories.Count() )
+ {
+ iLog->Log(_L("ERROR: Wrong number of categories, actual %d, expected %d"),
+ categories.Count(), aCategoriesList.Count() );
+ iErrorsFound++;
+ }
+
+ for (TInt i=0;i<categories.Count();i++)
+ {
+ if (aCategoriesList.Find(categories[i]) != KErrNotFound)
+ {
+ iLog->Log(_L("Found"));
+ }
+ else
+ {
+ iLog->Log(_L("ERROR: Category '%S' was not found"));
+ iErrorsFound++;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(lm1);
+ }
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp139.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp139.h"
+#include <EPos_CPosLandmark.h>
+
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp139::GetSortAttribute
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp139::GetSortAttribute()
+ {
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLandmark::TAttributes att;
+
+ for (TInt i=0; i<6; i++)
+ {
+ if (i==0)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ att = sortPref.LandmarkAttributeToSortBy();
+ if(att == CPosLandmark::ELandmarkName)
+ {
+ iLog->Log(_L("The landmark attribute to sort by is :ELandmarkName"));
+ }
+ }
+ else if (i==1)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::EPosition, TPosLmSortPref::EDescending);
+ att = sortPref.LandmarkAttributeToSortBy();
+ if(att == CPosLandmark::EPosition )
+ {
+ iLog->Log(_L("The landmark attribute to sort by is :EPosition"));
+ }
+ }
+ else if (i==2)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ECoverageRadius, TPosLmSortPref::EAscending);
+ att = sortPref.LandmarkAttributeToSortBy();
+ if(att == CPosLandmark::ECoverageRadius)
+ {
+ iLog->Log(_L("The landmark attribute to sort by is :ECoverageRadius"));
+ }
+ }
+ else if (i==3)
+ {
+
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ECategoryInfo, TPosLmSortPref::EDescending);
+ att = sortPref.LandmarkAttributeToSortBy();
+ if(att == CPosLandmark::ECategoryInfo)
+ {
+ iLog->Log(_L("The landmark attribute to sort by is :ECategoryInfo"));
+ }
+ }
+ else if (i==4)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::EIcon, TPosLmSortPref::EAscending);
+
+ att = sortPref.LandmarkAttributeToSortBy();
+ if(att == CPosLandmark::EIcon)
+ {
+ iLog->Log(_L("The landmark attribute to sort by is :EIcon"));
+ }
+ }
+
+ else if (i==5)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::EDescription, TPosLmSortPref::EDescending);
+
+ att = sortPref.LandmarkAttributeToSortBy();
+ if(att == CPosLandmark::EDescription)
+ {
+ iLog->Log(_L("The landmark attribute to sort by is :EDescription"));
+ }
+ }
+
+ }
+ }
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp141.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,183 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp141.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp141::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp141::CloseTest()
+ {
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iSearchResults.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp141::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp141::StartL()
+ {
+ _LIT(KEmptyTextCriteriaErr, "An empty string as text criteria should not be allowed");
+ _LIT(KLandMarkattrErr, "Landmark attribute set -> AttributesToSearch should return ELandmarkName |EDescription ");
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ TestInvalidPositionFieldsL();
+
+ // Check iterator before search has started (in multidb search all iterators are empty thus NOT NULL)
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == 0, _L("Iterator should be empty"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+
+ iLog->Log(_L("Iterator should NOT be NULL"));
+ User::Leave(-1);
+ }
+
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetAttributesToSearch(attr);
+ AssertTrueSecL(textCriteria->AttributesToSearch() == CPosLandmark::EDescription | CPosLandmark::ELandmarkName, KLandMarkattrErr);
+
+ textCriteria->SetTextL(_L(""));
+
+ TRAPD(err, iLandmarkSearch->StartLandmarkSearchL(*textCriteria));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+
+
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp141::TestInvalidPositionFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp141::TestInvalidPositionFieldsL()
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ RArray<TUint> arr;
+ CleanupClosePushL(arr);
+ textCriteria->GetPositionFieldsToSearchL(arr);
+ textCriteria->SetTextL(_L("*"));
+ textCriteria->SetPositionFieldsToSearchL(arr);
+
+ // Search with empty positionfields list, should find all landmarks
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ ExecuteAndDeleteLD(iOperation);
+ TInt nr = iLandmarkSearch->NumOfMatches();
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of matches when searching in empty position fields list"), nr);
+ iLog->Log(buf);
+
+
+
+ User::LeaveIfError(arr.Append(1));
+ User::LeaveIfError(arr.Append(2));
+ User::LeaveIfError(arr.Append(3));
+
+ textCriteria->SetPositionFieldsToSearchL(arr);
+ textCriteria->GetPositionFieldsToSearchL(arr);
+ TBuf<100> buf1;
+ for(TInt i=0;i< arr.Count();i++)
+ {
+ buf1.Format(_L(" %d position fields--%d- "),i, arr[i]);
+ iLog->Log(buf1);
+ }
+
+
+ //Clears the position fields list used in a search
+ textCriteria->ClearPositionFieldsToSearch();
+ textCriteria->GetPositionFieldsToSearchL(arr);
+ if(arr.Count()==0)
+ {
+ iLog->Log(_L("ClearPositionFieldsToSearch()-Cleared the position fields list used in a search."));
+ }
+
+
+
+ iLog->Log(_L("Sets the position fields list used in a search"));
+ User::LeaveIfError(arr.Append(0));
+ User::LeaveIfError(arr.Append(50));
+ User::LeaveIfError(arr.Append(500));
+
+ textCriteria->SetPositionFieldsToSearchL(arr);
+ textCriteria->GetPositionFieldsToSearchL(arr);
+ TBuf<100> buf2;
+ for(TInt i=0;i< arr.Count();i++)
+ {
+ buf2.Format(_L(" %d position fields--%d- "),i, arr[i]);
+ iLog->Log(buf2);
+ }
+
+
+ // Search with invalid positionfields list, should NOT find any landmarks
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ ExecuteAndDeleteLD(iOperation);
+ nr = iLandmarkSearch->NumOfMatches();
+
+ buf.Format(_L("Found %d nr of matches when searching in invalid position fields"), nr);
+ iLog->Log(buf);
+
+ AssertTrueSecL(nr == 0, _L("We should not find any matches"));
+ textCriteria->ClearPositionFieldsToSearch();
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp143.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,150 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkDatabaseExtended.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <e32svr.h> // RDebug
+#include "FT_CPosTp143.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp143::StartL()
+ {
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ AddLandmarksL();
+
+ CheckCountersL();
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp143::CloseTest()
+ {
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp143::AddLandmarksL()
+ {
+ iLog->Log(_L("AddLandmarksL"));
+ _LIT(KLmName, "LmTP143 - %d");
+ _LIT(KLmDescription, "LmTP143Description - %d");
+
+ const TInt KNoLandmarks = 1000;
+ for (TInt i=0; i< KNoLandmarks ; i++)
+ {
+ TBuf<100> lmName;
+ lmName.Format(KLmName,i);
+ TBuf<100> lmDesc;
+ lmDesc.Format(KLmDescription,i);
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ landmark->SetLandmarkDescriptionL(lmDesc);
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iDatabase->AddLandmarkL(*landmark));
+ }
+
+ iLandmarks.Append(landmark);
+
+ CleanupStack::Pop(landmark);
+ }
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp143::CheckCountersL()
+ {
+ iLog->Log(_L("CheckCountersL"));
+
+ TTime start, end;
+ CPosLandmarkDatabaseExtended* dbExt = CPosLandmarkDatabaseExtended::OpenL();
+ CleanupStack::PushL(dbExt);
+
+ iLog->Log(_L("checking LandmarksCount"));
+ start.UniversalTime();
+ TInt lmCount = dbExt->LandmarksCount();
+ end.UniversalTime();
+ TTimeIntervalMicroSeconds interval = end.MicroSecondsFrom( start );
+ iLog->Log(_L("LandmarksCount done in %ld us"), interval.Int64());
+
+ if ( lmCount != iLandmarks.Count() )
+ {
+ iLog->Log( _L("LandmarksCount wrong result, expected %d, actual %d"),
+ iLandmarks.Count(), lmCount );
+ User::Leave( KErrGeneral );
+ }
+
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ if ( lmCount != iter->NumOfItemsL() )
+ {
+ iLog->Log( _L("CategoriesCount wrong result, expected %d, actual %d"),
+ iter->NumOfItemsL(), lmCount );
+ User::Leave( KErrGeneral );
+ }
+
+ CleanupStack::PopAndDestroy( iter );
+
+ iLog->Log(_L("checking CategoriesCount"));
+ start.UniversalTime();
+ TInt catCount = dbExt->CategoriesCount();
+ end.UniversalTime();
+ interval = end.MicroSecondsFrom( start );
+ iLog->Log(_L("CategoriesCount done in %ld us"), interval.Int64());
+
+ CPosLmCategoryManager& catman = dbExt->CategoryManager();
+
+ CPosLmItemIterator* catIter = catman.CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+
+ if ( catCount != catIter->NumOfItemsL() )
+ {
+ iLog->Log( _L("CategoriesCount wrong result, expected %d, actual %d"),
+ catIter->NumOfItemsL(), catCount );
+ User::Leave( KErrGeneral );
+ }
+
+ CleanupStack::PopAndDestroy( catIter );
+ CleanupStack::PopAndDestroy( dbExt );
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp144.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,320 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp144.h"
+#include <e32math.h>
+#include <LbsPosition.h>
+
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_PosLandmarkSerialization.h>
+#include <EPos_PosLmCategorySerialization.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp144::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp144::StartL()
+ {
+
+ CheckLmSerializationL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp144::DumpBuffer
+//
+// ---------------------------------------------------------
+
+void CPosTp144::DumpBuffer(const TDesC8& aBuffer)
+ {
+ DECLARE_ERROR_LOGGING;
+ LOG("=== Buffer Dump ===");
+ message.Format(_L("Buffer size = %d units"), aBuffer.Length());
+ LOG_DES(message);
+ for (TInt i = 0; i < aBuffer.Length(); i++)
+ {
+ _LIT(KByte, "Offset %4d = % 2d");
+ _LIT(KChar, "Offset %4d = % 2c");
+ TUint8 c = aBuffer[i];
+ if (TChar(c).IsAlphaDigit())
+ {
+ message.Format(KChar, i, c);
+ }
+ else
+ {
+ message.Format(KByte, i, TInt(c));
+ }
+ LOG_DES(message);
+ }
+ LOG("===================");
+ }
+// ---------------------------------------------------------
+// CPosTp144::CompareBuffers
+//
+// ---------------------------------------------------------
+
+void CPosTp144::CompareBuffers(
+ const TDesC8& aBuf1,
+ const TDesC8& aBuf2)
+ {
+ DECLARE_ERROR_LOGGING;
+
+ CHECK_EQUAL(aBuf1.Length(), aBuf2.Length(), "Different buffer lengths");
+ for (TInt i = 0; i < Min(aBuf1.Length(), aBuf2.Length()); i++)
+ {
+ TInt c1 = aBuf1[i], c2 = aBuf2[i];
+ if (c1 != c2)
+ {
+ _LIT(KMessage, "Different at offset %d (actual = %d, expected %d)");
+ message.Format(KMessage, i, c1, c2);
+ ERR_DES(message);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp144::CreateDummyLandmarkLC
+//
+// ---------------------------------------------------------
+
+CPosLandmark* CPosTp144::CreateDummyLandmarkLC()
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+
+ _LIT(KName, "Name");
+ _LIT(KDesc, "Description");
+ _LIT(KIcon, "IconFile");
+ const TInt KIconIndex = 1, KIconMaskIndex = 2;
+
+ const TPosLmItemId KCat[] = { 3, 4, 5 };
+ const TInt KCats = sizeof KCat / sizeof(TPosLmItemId);
+
+ _LIT(KField1Val, "field1");
+ _LIT(KField2Val, "field11");
+ const TPositionFieldId KField[] =
+ {
+ EPositionFieldComment,
+ EPositionFieldCountry
+ };
+ const TInt KFields = sizeof KField / sizeof(TPositionFieldId);
+ const TPtrC KFieldData[] =
+ {
+ KField1Val(), KField2Val()
+ };
+
+ const TReal32 KRadius = 0.12;
+ const TReal32 KHacc = 0.23, KVacc = 0.34;
+ const TReal KLat = 12, KLon = -23, KAlt = 34;
+
+ lm->SetLandmarkNameL(KName);
+ lm->SetLandmarkDescriptionL(KDesc);
+ lm->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+
+ const TLocality KLoc(TCoordinate(KLat,KLon,KAlt), KHacc, KVacc);
+ lm->SetPositionL(KLoc);
+ lm->SetCoverageRadius(KRadius);
+
+ for (TInt c = 0; c < KCats; c++)
+ {
+ lm->AddCategoryL(KCat[c]);
+ }
+
+ for (TInt f = 0; f < KFields; f++)
+ {
+ lm->SetPositionFieldL(KField[f], KFieldData[f]);
+ }
+
+ return lm;
+ }
+
+// ---------------------------------------------------------
+// CPosTp144::CompareLandmarks
+//
+// ---------------------------------------------------------
+
+void CPosTp144::CompareLandmarks(
+ CPosLandmark& aLm1,
+ CPosLandmark& aLm2)
+ {
+ DECLARE_ERROR_LOGGING;
+
+ TPtrC name1, name2;
+
+ CHECK_EQUAL(aLm1.LandmarkId(), aLm2.LandmarkId(), "Diff id");
+ CHECK_EQUAL(aLm1.IsPartial(), aLm2.IsPartial(), "Diff partial state");
+
+ aLm1.GetLandmarkName(name1);
+ aLm2.GetLandmarkName(name2);
+ ERROR(name1 != name2, "Diff name");
+
+ aLm1.GetLandmarkDescription(name1);
+ aLm2.GetLandmarkDescription(name2);
+ ERROR(name1 != name2, "Diff description");
+
+ TInt iconIndex1 = 0, iconMaskIndex1 = 0;
+ TInt iconIndex2 = 1, iconMaskIndex2 = 2;
+
+ TInt found1 = aLm1.GetIcon(name1, iconIndex1, iconMaskIndex1);
+ TInt found2 = aLm2.GetIcon(name2, iconIndex2, iconMaskIndex2);
+
+ if (found1 == found2)
+ {
+ if (found1 != KErrNotFound)
+ {
+ ERROR(name1 != name2, "Diff icon name");
+ CHECK_EQUAL(iconIndex1, iconIndex2, "Diff icon index");
+ CHECK_EQUAL(iconMaskIndex1, iconMaskIndex2, "Diff icon mask index");
+ }
+ }
+ else
+ {
+ ERR("Diff icon")
+ }
+
+ // location
+ TLocality loc1, loc2;
+ found1 = aLm1.GetPosition(loc1);
+ found2 = aLm2.GetPosition(loc2);
+
+ if (found1 == found2)
+ {
+ if (found1 != KErrNotFound)
+ {
+ CHECK_EQUAL(loc1.Latitude(), loc2.Latitude(), "Diff latitude");
+ CHECK_EQUAL(loc1.Longitude(), loc2.Longitude(), "Diff longitude");
+ CHECK_EQUAL(loc1.Altitude(), loc2.Altitude(), "Diff altitude");
+ CHECK_EQUAL(loc1.HorizontalAccuracy(), loc2.HorizontalAccuracy(), "Diff hacc");
+ CHECK_EQUAL(loc1.VerticalAccuracy(), loc2.VerticalAccuracy(), "Diff vacc");
+ CHECK_EQUAL(loc1.Datum(), loc2.Datum(), "Diff datum");
+ }
+ }
+ else
+ {
+ ERR("Diff position");
+ }
+
+ // categories
+ RArray<TPosLmItemId> cats1, cats2;
+ aLm1.GetCategoriesL(cats1);
+ aLm2.GetCategoriesL(cats2);
+ CHECK_EQUAL(cats1.Count(), cats2.Count(), "Diff amount of categories");
+ for (TInt c = 0; c < Min(cats1.Count(), cats2.Count()); c++)
+ {
+ CHECK_EQUAL(cats1[c], cats2[c], "Diff category");
+ }
+ cats1.Close();
+ cats2.Close();
+
+ // fields
+ TInt fields1 = aLm1.NumOfAvailablePositionFields();
+ TInt fields2 = aLm2.NumOfAvailablePositionFields();
+ CHECK_EQUAL(fields1, fields2, "Diff amount of fields");
+
+ TPositionFieldId fid1 = aLm1.FirstPositionFieldId();
+ TPositionFieldId fid2 = aLm2.FirstPositionFieldId();
+ for (TInt f = 0;
+ f < Min(fields1, fields2) &&
+ (fid1 != EPositionFieldNone || fid2 != EPositionFieldNone);
+ f++)
+ {
+ CHECK_EQUAL(fid1, fid2, "Diff field");
+ aLm1.GetPositionField(fid1, name1);
+ aLm2.GetPositionField(fid2, name2);
+ ERROR(name1 != name2, "Diff field data");
+
+ fid1 = aLm1.NextPositionFieldId(fid1);
+ fid2 = aLm1.NextPositionFieldId(fid2);
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp144::CheckLmSerialization_SubL
+//
+// ---------------------------------------------------------
+
+void CPosTp144::CheckLmSerialization_SubL(CPosLandmark* lm)
+ {
+ DECLARE_ERROR_LOGGING;
+
+ CPosLandmark* lm1 = lm;
+ CPosLandmark* lm2 = NULL;
+
+ TInt err = KErrNone;
+ HBufC8* buf1 = NULL;
+ HBufC8* buf2 = NULL;
+
+ TRAP(err, buf1 = PosLandmarkSerialization::PackL(*lm1));
+ IF_ERROR(err, "Packing failed");
+ User::LeaveIfError(err);
+ CleanupStack::PushL(buf1);
+
+ TRAP(err, lm2 = PosLandmarkSerialization::UnpackL(*buf1));
+ IF_ERROR(err, "Unpacking failed");
+ User::LeaveIfError(err);
+ CleanupStack::PushL(lm2);
+
+ // read and compare values
+ CompareLandmarks(*lm1, *lm2);
+
+ // compare by buffer
+ TRAP(err, buf2 = PosLandmarkSerialization::PackL(*lm2));
+ CleanupStack::PushL(buf2);
+
+ CompareBuffers(*buf1, *buf2);
+
+ // cleanup
+ CleanupStack::PopAndDestroy(buf2);
+ CleanupStack::PopAndDestroy(lm2);
+ CleanupStack::PopAndDestroy(buf1);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp144::CheckLmSerializationL
+//
+// ---------------------------------------------------------
+
+ void CPosTp144::CheckLmSerializationL()
+ {
+ DECLARE_ERROR_LOGGING;
+
+
+ //LOG("1. Dummy landmark")
+ CPosLandmark* lm = CreateDummyLandmarkLC();
+ CheckLmSerialization_SubL(lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ //LOG("2. Empty landmark")
+ lm = CPosLandmark::NewLC();
+ CheckLmSerialization_SubL(lm);
+ CleanupStack::PopAndDestroy(lm);
+
+
+ LEAVE_IF_ERRORS()
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp145.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,194 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp145.h"
+#include <e32math.h>
+#include <LbsPosition.h>
+
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_PosLandmarkSerialization.h>
+#include <EPos_PosLmCategorySerialization.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp145::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp145::StartL()
+ {
+
+ CheckLmCatSerializationL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp145::CompareBuffers
+//
+// ---------------------------------------------------------
+
+
+ void CPosTp145::CompareBuffers(
+ const TDesC8& aBuf1,
+ const TDesC8& aBuf2)
+ {
+ DECLARE_ERROR_LOGGING
+
+ CHECK_EQUAL(aBuf1.Length(), aBuf2.Length(), "Different buffer lengths");
+ for (TInt i = 0; i < Min(aBuf1.Length(), aBuf2.Length()); i++)
+ {
+ TInt c1 = aBuf1[i], c2 = aBuf2[i];
+ if (c1 != c2)
+ {
+ _LIT(KMessage, "Different at offset %d (actual = %d, expected %d)");
+ message.Format(KMessage, i, c1, c2);
+ ERR_DES(message);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp145::CreateDummyCategoryLC
+//
+// ---------------------------------------------------------
+
+CPosLandmarkCategory* CPosTp145::CreateDummyCategoryLC()
+ {
+ CPosLandmarkCategory* cat = CPosLandmarkCategory::NewLC();
+
+ TInt KCatId = cat->CategoryId();
+ _LIT(KName, "Name");
+ _LIT(KIcon, "IconFile");
+ const TInt KIconIndex = 1, KIconMaskIndex = 2;
+ cat->SetCategoryNameL(KName);
+ cat->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+ return cat;
+ }
+
+// ---------------------------------------------------------
+// CPosTp145::CompareCategoriesL
+//
+// ---------------------------------------------------------
+
+void CPosTp145::CompareCategoriesL(
+ CPosLandmarkCategory& aCat1,
+ CPosLandmarkCategory& aCat2)
+ {
+ DECLARE_ERROR_LOGGING;
+
+ CHECK_EQUAL(aCat1.CategoryId(), aCat2.CategoryId(), "Diff id");
+ CHECK_EQUAL(aCat1.GlobalCategory(), aCat2.GlobalCategory(), "Diff global category");
+
+ TPtrC name1, name2;
+ aCat1.GetCategoryName(name1);
+ aCat2.GetCategoryName(name2);
+ ERROR(name1 != name2, "Diff name");
+
+ TInt iconIndex1 = 0, iconMaskIndex1 = 0;
+ TInt iconIndex2 = 1, iconMaskIndex2 = 2;
+
+ TInt found1 = aCat1.GetIcon(name1, iconIndex1, iconMaskIndex1);
+ TInt found2 = aCat2.GetIcon(name2, iconIndex2, iconMaskIndex2);
+
+ if (found1 == found2)
+ {
+ if (found1 != KErrNotFound)
+ {
+ ERROR(name1 != name2, "Diff icon name");
+ CHECK_EQUAL(iconIndex1, iconIndex2, "Diff icon index");
+ CHECK_EQUAL(iconMaskIndex1, iconMaskIndex2, "Diff icon mask index");
+ }
+ }
+ else
+ {
+ ERR("Diff icon");
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp145::CheckLmCatSerializationL
+//
+// ---------------------------------------------------------
+
+void CPosTp145::CheckLmCatSerializationL()
+ {
+ DECLARE_ERROR_LOGGING;
+
+
+ LOG("1. Dummy category")
+ CPosLandmarkCategory* cat = CreateDummyCategoryLC();
+ CheckLmCatSerialization_SubL(cat);
+ CleanupStack::PopAndDestroy(cat);
+
+ LOG("2. Empty category")
+ cat = CPosLandmarkCategory::NewLC();
+ CheckLmCatSerialization_SubL(cat);
+ CleanupStack::PopAndDestroy(cat);
+
+
+ LEAVE_IF_ERRORS()
+ }
+
+// ---------------------------------------------------------
+// CPosTp145::CheckLmCatSerialization_SubL
+//
+// ---------------------------------------------------------
+
+void CPosTp145::CheckLmCatSerialization_SubL(CPosLandmarkCategory* aTest)
+ {
+ DECLARE_ERROR_LOGGING;
+
+ CPosLandmarkCategory* cat1 = aTest;
+ CPosLandmarkCategory* cat2 = NULL;
+
+ TInt err = KErrNone;
+ HBufC8* buf1 = NULL;
+ HBufC8* buf2 = NULL;
+
+ TRAP(err, buf1 = PosLmCategorySerialization::PackL(*cat1));
+ IF_ERROR(err, "Packing failed");
+ User::LeaveIfError(err);
+ CleanupStack::PushL(buf1);
+
+ TRAP(err, cat2 = PosLmCategorySerialization::UnpackL(*buf1));
+ IF_ERROR(err, "Unpacking failed");
+ User::LeaveIfError(err);
+ CleanupStack::PushL(cat2);
+
+ CompareCategoriesL(*cat1, *cat2);
+
+ // compare by buffer
+ TRAP(err, buf2 = PosLmCategorySerialization::PackL(*cat2));
+ CleanupStack::PushL(buf2);
+
+ CompareBuffers(*buf1, *buf2);
+
+ // cleanup
+ CleanupStack::PopAndDestroy(buf2);
+ CleanupStack::PopAndDestroy(cat2);
+ CleanupStack::PopAndDestroy(buf1);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp146.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp146.h"
+#include <e32math.h>
+#include <LbsPosition.h>
+
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_PosLandmarkSerialization.h>
+#include <EPos_PosLmCategorySerialization.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp146::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp146::StartL()
+ {
+
+ CheckLmCatSerializationInvalidL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp146::CreateDummyLandmarkLC
+//
+// ---------------------------------------------------------
+
+CPosLandmark* CPosTp146::CreateDummyLandmarkLC()
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+
+ _LIT(KName, "Name");
+ _LIT(KDesc, "Description");
+ _LIT(KIcon, "IconFile");
+ const TInt KIconIndex = 1, KIconMaskIndex = 2;
+
+ const TPosLmItemId KCat[] = { 3, 4, 5 };
+ const TInt KCats = sizeof KCat / sizeof(TPosLmItemId);
+
+ _LIT(KField1Val, "field1");
+ _LIT(KField2Val, "field11");
+ const TPositionFieldId KField[] =
+ {
+ EPositionFieldComment,
+ EPositionFieldCountry
+ };
+ const TInt KFields = sizeof KField / sizeof(TPositionFieldId);
+ const TPtrC KFieldData[] =
+ {
+ KField1Val(), KField2Val()
+ };
+
+ const TReal32 KRadius = 0.12;
+ const TReal32 KHacc = 0.23, KVacc = 0.34;
+ const TReal KLat = 12, KLon = -23, KAlt = 34;
+
+ lm->SetLandmarkNameL(KName);
+ lm->SetLandmarkDescriptionL(KDesc);
+ lm->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+
+ const TLocality KLoc(TCoordinate(KLat,KLon,KAlt), KHacc, KVacc);
+ lm->SetPositionL(KLoc);
+ lm->SetCoverageRadius(KRadius);
+
+ for (TInt c = 0; c < KCats; c++)
+ {
+ lm->AddCategoryL(KCat[c]);
+ }
+
+ for (TInt f = 0; f < KFields; f++)
+ {
+ lm->SetPositionFieldL(KField[f], KFieldData[f]);
+ }
+
+ return lm;
+ }
+
+// ---------------------------------------------------------
+// CPosTp146::CreateDummyCategoryLC
+//
+// ---------------------------------------------------------
+
+
+CPosLandmarkCategory* CPosTp146::CreateDummyCategoryLC()
+ {
+ CPosLandmarkCategory* cat = CPosLandmarkCategory::NewLC();
+
+ TInt KCatId = cat->CategoryId();
+ _LIT(KName, "Name");
+ _LIT(KIcon, "IconFile");
+ const TInt KIconIndex = 1, KIconMaskIndex = 2;
+ cat->SetCategoryNameL(KName);
+ cat->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+ return cat;
+ }
+
+// ---------------------------------------------------------
+// CPosTp146::CheckLmCatSerializationInvalidL
+//
+// ---------------------------------------------------------
+
+void CPosTp146::CheckLmCatSerializationInvalidL()
+ {
+ DECLARE_ERROR_LOGGING
+
+
+ TInt err = KErrNone;
+ HBufC8* buf1 = NULL;
+ HBufC8* buf2 = NULL;
+
+ CPosLandmark* lm = CreateDummyLandmarkLC();
+ TRAP(err, buf1 = PosLandmarkSerialization::PackL(*lm));
+ CleanupStack::PopAndDestroy(lm);
+ lm = NULL;
+
+ IF_ERROR(err, "Packing failed");
+ User::LeaveIfError(err);
+ CleanupStack::PushL(buf1);
+
+ CPosLandmarkCategory* cat = CreateDummyCategoryLC();
+ TRAP(err, buf2 = PosLmCategorySerialization::PackL(*cat));
+ CleanupStack::PopAndDestroy(cat);
+ cat = NULL;
+
+ IF_ERROR(err, "Packing failed");
+ User::LeaveIfError(err);
+ CleanupStack::PushL(buf2);
+
+ TRAP(err, cat = PosLmCategorySerialization::UnpackL(*buf1));
+ delete cat;
+
+ ERROR(err == KErrNone, "Wrong error (lm->cat)");
+
+ TRAP(err, lm = PosLandmarkSerialization::UnpackL(*buf2));
+ delete lm;
+
+ ERROR(err == KErrNone, "Wrong error (cat->lm)");
+
+ CleanupStack::PopAndDestroy(buf2);
+ CleanupStack::PopAndDestroy(buf1);
+
+
+ LEAVE_IF_ERRORS()
+ }
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp147.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp147.h"
+#include <e32math.h>
+#include <LbsPosition.h>
+
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_PosLandmarkSerialization.h>
+#include <EPos_PosLmCategorySerialization.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp147::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp147::StartL()
+ {
+
+ CheckSerializationMemoryL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp147::CreateDummyLandmarkLC
+//
+// ---------------------------------------------------------
+
+CPosLandmark* CPosTp147::CreateDummyLandmarkLC()
+ {
+ CPosLandmark* lm = CPosLandmark::NewLC();
+
+ _LIT(KName, "Name");
+ _LIT(KDesc, "Description");
+ _LIT(KIcon, "IconFile");
+ const TInt KIconIndex = 1, KIconMaskIndex = 2;
+
+ const TPosLmItemId KCat[] = { 3, 4, 5 };
+ const TInt KCats = sizeof KCat / sizeof(TPosLmItemId);
+
+ _LIT(KField1Val, "field1");
+ _LIT(KField2Val, "field11");
+ const TPositionFieldId KField[] =
+ {
+ EPositionFieldComment,
+ EPositionFieldCountry
+ };
+ const TInt KFields = sizeof KField / sizeof(TPositionFieldId);
+ const TPtrC KFieldData[] =
+ {
+ KField1Val(), KField2Val()
+ };
+
+ const TReal32 KRadius = 0.12;
+ const TReal32 KHacc = 0.23, KVacc = 0.34;
+ const TReal KLat = 12, KLon = -23, KAlt = 34;
+
+ lm->SetLandmarkNameL(KName);
+ lm->SetLandmarkDescriptionL(KDesc);
+ lm->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+
+ const TLocality KLoc(TCoordinate(KLat,KLon,KAlt), KHacc, KVacc);
+ lm->SetPositionL(KLoc);
+ lm->SetCoverageRadius(KRadius);
+
+ for (TInt c = 0; c < KCats; c++)
+ {
+ lm->AddCategoryL(KCat[c]);
+ }
+
+ for (TInt f = 0; f < KFields; f++)
+ {
+ lm->SetPositionFieldL(KField[f], KFieldData[f]);
+ }
+
+ return lm;
+ }
+
+// ---------------------------------------------------------
+// CPosTp147::CreateDummyCategoryLC
+//
+// ---------------------------------------------------------
+
+
+CPosLandmarkCategory* CPosTp147::CreateDummyCategoryLC()
+ {
+ CPosLandmarkCategory* cat = CPosLandmarkCategory::NewLC();
+
+ TInt KCatId = cat->CategoryId();
+ _LIT(KName, "Name");
+ _LIT(KIcon, "IconFile");
+ const TInt KIconIndex = 1, KIconMaskIndex = 2;
+ cat->SetCategoryNameL(KName);
+ cat->SetIconL(KIcon, KIconIndex, KIconMaskIndex);
+ return cat;
+ }
+
+// ---------------------------------------------------------
+// CPosTp147::CheckSerializationMemoryL
+//
+// ---------------------------------------------------------
+
+void CPosTp147::CheckSerializationMemoryL()
+ {
+ CheckLmSerialization_MemoryL();
+ CheckLmCatSerialization_MemoryL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp147::CheckLmSerialization_MemoryL
+//
+// ---------------------------------------------------------
+
+void CPosTp147::CheckLmSerialization_MemoryL()
+ {
+ DECLARE_ERROR_LOGGING;
+
+ LOG("Packing and checking uheap");
+
+ CPosLandmark* lm = CreateDummyLandmarkLC();
+
+ __UHEAP_MARK;
+ HBufC8* buf = PosLandmarkSerialization::PackL(*lm);
+ delete buf;
+ __UHEAP_MARKEND;
+
+ LOG("Unpacking and checking uheap");
+
+ buf = PosLandmarkSerialization::PackL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ CleanupStack::PushL(buf);
+
+ __UHEAP_MARK;
+ lm = PosLandmarkSerialization::UnpackL(*buf);
+ delete lm;
+ __UHEAP_MARKEND;
+
+ LOG("Done");
+ CleanupStack::PopAndDestroy(buf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp147::CheckLmCatSerialization_MemoryL
+//
+// ---------------------------------------------------------
+
+void CPosTp147::CheckLmCatSerialization_MemoryL()
+ {
+ DECLARE_ERROR_LOGGING;
+
+ LOG("Packing and checking uheap");
+
+ CPosLandmarkCategory* cat = CreateDummyCategoryLC();
+
+ __UHEAP_MARK;
+ HBufC8* buf = PosLmCategorySerialization::PackL(*cat);
+ delete buf;
+ __UHEAP_MARKEND;
+
+ LOG("Unpacking and checking uheap");
+
+ buf = PosLmCategorySerialization::PackL(*cat);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PushL(buf);
+
+ __UHEAP_MARK;
+ cat = PosLmCategorySerialization::UnpackL(*buf);
+ delete cat;
+ __UHEAP_MARKEND;
+
+ LOG("Done");
+ CleanupStack::PopAndDestroy(buf);
+ }
+
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp148.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,632 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp148.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP148Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP148Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp148KMZFile.kmz");
+
+// Maxmimum size for each line in trace file
+static const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp148::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp148::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp148::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp148::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp148KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if ( correctLine.Compare( line ) != KErrNone )
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( linebuffer );
+ CleanupStack::PopAndDestroy( correctLinebuffer );
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP148"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp148::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp148::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp148::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp148::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+
+ buf.Append( catName );
+ iLog->Log( buf );
+ TraceL( buf );
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp148::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp148::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName( landmarkName );
+ if ( err == KErrNone )
+ {
+
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Append( _L(" \tLandmark Name: "));
+ buf.Append( landmarkName );
+ iLog->Log( buf );
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L(" srcRadius %S" ), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Format( _L( "\tIdField Id: %d Value:" ), sourceFieldId );
+ buf.Append( sourceValue );
+ iLog->Log( buf );
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId( sourceFieldId );
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp148::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp148::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp149.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,610 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp149.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP149Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP149Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp149KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp149::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp149::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp149::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp149::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+
+if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp149KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP149"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp149::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp149::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp149::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp149::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp149::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp149::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Append(_L("\tLandmark Name: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+
+
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp149::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp149::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp15.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp15.h"
+#include <EPos_CPosLandmarkDatabase.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp15::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp15::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP15 - Database initialization - Created");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp13::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp15::StartL()
+ {
+ TestInitializeDatabaseL(ETrue);
+
+ TestInitializeDatabaseL();
+
+ TestInitializeWithUserWaitForL();
+
+ TestInitializeDatabaseAndCancelL();
+
+ // Cancel proceeds even if the client cancels it so added User::After just to make sure it's done when the test case completes
+ User::After(2000000);
+ }
+
+// ---------------------------------------------------------
+// CPosTp15::TestInitializeDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp15::TestInitializeDatabaseL(const TBool aSyncronously)
+ {
+ _LIT(KAccessErr, "Access method is not returning KErrPosLmNotInitialized when expected");
+ _LIT(KInitializedErr, "Method InitializedNeeded is not returning ETrue when expected");
+ _LIT(KAccessAfterInitErr, "Access method leaves with %d after initialized");
+
+ TRAPD(err, RemoveDefaultDbL());
+ while (err == KErrInUse)
+ {
+ User::After(1000);
+ TRAP(err, RemoveDefaultDbL());
+ }
+ User::LeaveIfError(err);
+
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ TPosLmGlobalCategory globalCategory = 1;
+ TRAP(err, cm->GetGlobalCategoryL(globalCategory));
+ AssertTrueSecL(err == KErrPosLmNotInitialized, KAccessErr);
+
+ AssertTrueSecL(lmd->IsInitializingNeeded(), KInitializedErr);
+
+ if (aSyncronously)
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ else
+ {
+ RunAsyncOperationLD(lmd->InitializeL());
+ }
+
+
+ TRAP(err, cm->GetGlobalCategoryL(globalCategory));
+ AssertTrueSecL(err == KErrNone, KAccessAfterInitErr, err);
+
+ CleanupStack::PopAndDestroy(2, lmd);
+
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp15::TestInitializeDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp15::TestInitializeWithUserWaitForL()
+ {
+ // ESLI-64VGXW
+ _LIT(KInitializedErr, "Method InitializedNeeded is not returning ETrue when expected");
+
+ TRAPD(err, RemoveDefaultDbL());
+ while (err == KErrInUse)
+ {
+ User::After(1000);
+ TRAP(err, RemoveDefaultDbL());
+ }
+ User::LeaveIfError(err);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ AssertTrueSecL(lmd->IsInitializingNeeded(), KInitializedErr);
+
+ CPosLmOperation* op = lmd->InitializeL();
+ CleanupStack::PushL(op);
+
+ RunAsyncOperationByWaitForReqL(op);
+
+ CleanupStack::PopAndDestroy(2, lmd);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp15::TestInitializeDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp15::TestInitializeDatabaseAndCancelL()
+ {
+ iLog->Put(_L("TestInitializeDatabaseAndCancelL"));
+ _LIT(KAccessCancelErr, "Access method is not returning KErrPosLmNotInitialized after cancel");
+
+ CPosLandmarkDatabase* lmd = NULL;
+ TReal32 progress(0);
+ while (progress < 1.0)
+ {
+ RemoveDefaultDbL();
+ lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ RunAsyncOperationAndCancelInCallbackLD(lmd->InitializeL(), progress);
+ progress = progress + 0.09;
+
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+ lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ TPosLmGlobalCategory globalCategory = 1;
+ TRAPD(err, cm->GetGlobalCategoryL(globalCategory));
+
+ // KErrNone means that the initialization already has completed which is OK
+ if (err == KErrNone)
+ {
+ iLog->Put(_L("Err. code returned is KErrNone->initialization has already completed"));
+ }
+ else
+ {
+ AssertTrueSecL(err == KErrPosLmNotInitialized, KAccessCancelErr, err);
+ }
+
+ CleanupStack::PopAndDestroy(2, lmd);
+ iLog->Put(_L("TestInitializeDatabaseAndCancelL Done"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp150.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,615 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp150.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP150Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP150Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp150KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp150::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp150::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp150::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp150::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp150KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP150"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp150::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp150::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp150::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp150::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+
+ buf.Append( catName );
+ iLog->Log( buf );
+ TraceL( buf );
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp150::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp150::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Append( _L(" \tLandmark Name: "));
+ buf.Append( landmarkName );
+ iLog->Log( buf );
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp150::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp150::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp151.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,611 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp151.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP151Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP151Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp151KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp151::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp151::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp151::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp151::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp151KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP151"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp151::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp151::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp151::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp151::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy(buffer);
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp151::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp151::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Append( _L(" \tLandmark Name: "));
+ buf.Append( landmarkName );
+ iLog->Log( buf );
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp151::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp151::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp152.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,610 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp152.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP152Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP152Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp152KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp152::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp152::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp152::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp152::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp152KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP152"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp152::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp152::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp152::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp152::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy(buffer);
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp152::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp152::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Append(_L("\tLandmark Name: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp152::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp152::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp153.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,613 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp153.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP153Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP153Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp153KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp153::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp153::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp153::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp153::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp153KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, -993, KKmzMimeType ); //EXmlTagMismatch = -993
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP153"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp153::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp153::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if(status == KErrNone)
+ {
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ iErrorsFound++;
+ }
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp153::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp153::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[i]);
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+
+ buf.Append( catName );
+ iLog->Log( buf );
+ TraceL( buf );
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp153::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp153::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Append( _L(" \tLandmark Name: "));
+ buf.Append( landmarkName );
+ iLog->Log( buf );
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp153::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp153::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp154.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,610 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp154.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP154Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP154Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp154KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp154::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp154::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp154::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp154::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp154KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, -993, KKmzMimeType ); //EXmlTagMismatch = -993
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC * correctLinebuffer = HBufC::NewLC(KBufSize);
+ TPtr correctLine(correctLinebuffer->Des());
+ HBufC * linebuffer = HBufC::NewLC(KBufSize);
+ TPtr line(linebuffer->Des());
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP154"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp154::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp154::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp154::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp154::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp154::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp154::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Append( _L(" \tLandmark Name: "));
+ buf.Append( landmarkName );
+ iLog->Log( buf );
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp154::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp154::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp155.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,609 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp155.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP155Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP155Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp155KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp155::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp155::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp155::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp155::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+
+if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp155KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP155"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp155::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp155::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp155::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp155::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp155::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp155::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Append(_L("\tLandmark Name: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp155::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp155::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp156.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,616 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp156.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP156Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP156Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp156KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp156::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp156::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp156::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp156::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp156KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, -993, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP156"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp156::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp156::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if(status == KErrNone)
+ {
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ iErrorsFound++;
+ }
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp156::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp156::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[i]);
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+
+ buf.Append( catName );
+ iLog->Log( buf );
+ TraceL( buf );
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp156::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp156::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Append(_L("\tLandmark Name: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp156::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp156::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp157.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,286 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp157.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP157Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP157Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp157KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp157::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp157::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp157::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp157::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+
+ iLog->Log(_L("Test with Tp157KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP157"));
+ User::Leave(-1);
+ }
+
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp157::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp157::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ TRAPD(err,iLandmarkParser->SetInputFileL(file));
+ if(err != KErrNone)
+ {
+ TBuf<100> buffe;
+ buffe.Format(_L("\t SetInputFile leaves with error code : %d"), err);
+ iLog->Log(buffe);
+
+ }
+ else
+ {
+ iErrorsFound++;
+ TBuf<100> buffe;
+ buffe.Format(_L("\tERROR: SetInputFile should leave with error code"));
+ iLog->Log(buffe);
+
+ }
+
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+
+
+
+// ---------------------------------------------------------
+// CPosTp157::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp157::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp158.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,607 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp158.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP158Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP158Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp158KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp158::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp158::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp158::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp158::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp158KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP158"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp158::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp158::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KKmzMimeType);
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KKMZFile);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+ // ---------------------------------------------------------
+// CPosTp158::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp158::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ iLandmarkParser->SetInputFileL(file);
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ iLog->Log(_L("Parsing Complete"));
+
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("Parsing element"));
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC( array[i] );
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp158::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp158::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ iLog->Log(_L("Parsing Description ... \n"));
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Append(_L("\tLandmark Name: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp158::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp158::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp159.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,284 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp159.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP159Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP159Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp159KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp159::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp159::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp159::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp159::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+
+if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp159KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrPosLmUnknownFormat, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP159"));
+ User::Leave(-1);
+ }
+ }
+
+
+
+ // ---------------------------------------------------------
+// CPosTp159::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp159::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ TRAPD(err,iLandmarkParser->SetInputFileL(file));
+ if(err != KErrPosLmUnknownFormat)
+ {
+ iErrorsFound++;
+ TBuf<100> buffe;
+ buffe.Format(_L("\tERROR: SetInputFile should leave with error code KErrPosLmUnknownFormat (-30352)"));
+ iLog->Log(buffe);
+
+ }
+ else
+ {
+
+ TBuf<100> buffe;
+ buffe.Format(_L("\tSetInputFile leaves with error code KErrPosLmUnknownFormat"));
+ iLog->Log(buffe);
+
+ }
+
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+
+
+// ---------------------------------------------------------
+// CPosTp159::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp159::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp16.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,327 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp16.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+
+#include "FT_LandmarkConstants.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp16::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp16::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP16 - Initialize corrupt database");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp16::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp16::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iGlobalCategoryIds.Close();
+ iGlobalCategoryNames.Close();
+ RemoveGlobalCategoriesL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp16::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp16::StartL()
+ {
+ _LIT(KAccessErr, "Access method is not returning KErrPosLmNotInitialized when expected");
+ _LIT(KInitializedErr, "Method InitializedNeeded is not returning ETrue when expected");
+
+ SetupGlobalCategoriesL();
+
+ iDatabase=UseCorruptDbL();
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = UseGlobalCategoriesL();
+
+ CPosLmItemIterator* iter = NULL;
+ TRAPD(err, iter = iDatabase->LandmarkIteratorL());
+ delete iter;
+ AssertTrueSecL(err == KErrPosLmNotInitialized, KAccessErr);
+ AssertTrueSecL(iDatabase->IsInitializingNeeded(), KInitializedErr);
+
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+
+ iter = iDatabase->LandmarkIteratorL();
+ delete iter;
+ iter=NULL;
+
+ // check that global categories are automatically inserter into lm db
+ // when recovering database
+ CheckGlobalCategoriesL();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase=UseCorruptDbL();
+ TRAP(err, iter = iDatabase->LandmarkIteratorL());
+ delete iter;
+ AssertTrueSecL(err == KErrPosLmNotInitialized, KAccessErr);
+ AssertTrueSecL(iDatabase->IsInitializingNeeded(), KInitializedErr);
+
+ RunAsyncOperationLD(iDatabase->InitializeL());
+
+ iter = iDatabase->LandmarkIteratorL();
+ delete iter;
+
+ // check that global categories are automatically inserter into lm db
+ // when recovering database
+ CheckGlobalCategoriesL();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = UseTextDbL();
+
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+
+ iter = iDatabase->LandmarkIteratorL();
+ delete iter;
+ iter=NULL;
+
+ // check that global categories are automatically inserter into lm db
+ // when recovering database
+ CheckGlobalCategoriesL();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = UseContactDbL();
+
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+
+ iter = iDatabase->LandmarkIteratorL();
+ delete iter;
+ iter=NULL;
+
+ // check that global categories are automatically inserter into lm db
+ // when recovering database
+ CheckGlobalCategoriesL();
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp16::CheckGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp16::CheckGlobalCategoriesL()
+ {
+ iLog->Put(_L("CheckGlobalCategoriesL"));
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(cm);
+
+ iLog->Put(_L("using CategoryIteratorL"));
+ CPosLmItemIterator* catIter = cm->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+
+ AssertTrueSecL(catIter->NumOfItemsL() == (TUint)iGlobalCategoryIds.Count(), _L("Wrong number of global categories"));
+
+ TPosLmItemId id = catIter->NextL();
+ TInt i=0;
+ while (id != KPosLmNullItemId)
+ {
+/*
+ // For debugging purposes
+ TBuf<100> buf;
+ buf.Format(_L("Id %d Exp Id %d"),id, iGlobalCategoryIds[i]);
+ iLog->Put(buf);
+ if (id != iGlobalCategoryIds[i]) LogErrorAndLeave(_L("Wrong id"));
+ else iLog->Put(_L("++"));
+*/
+ id = catIter->NextL();
+ i++;
+ }
+ CleanupStack::PopAndDestroy(catIter);
+ CleanupStack::PopAndDestroy(cm);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp16::UseCorruptDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp16::UseCorruptDbL()
+ {
+ RemoveDefaultDbL();
+
+ #ifdef __WINS__
+ _LIT(KCorruptDbFile, "z:\\system\\test\\testdata\\SRVeposdamaged.ldb");
+ #else
+ _LIT(KCorruptDbFile, "c:\\system\\test\\testdata\\SRVeposdamaged.ldb");
+ #endif
+
+ _LIT(KCorruptDbFileOld, "c:\\system\\data\\SRVeposdamaged.ldb");
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ User::LeaveIfError(fileMan->Copy(KCorruptDbFile, KDefaultDbPath, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Rename(KCorruptDbFileOld, KDefaultDb, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp16::UseTextDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp16::UseTextDbL()
+ {
+ RemoveDefaultDbL();
+
+ #ifdef __WINS__
+ _LIT(KCorruptDbFile, "z:\\system\\test\\testdata\\SRVepostext.ldb");
+ #else
+ _LIT(KCorruptDbFile, "c:\\system\\test\\testdata\\SRVepostext.ldb");
+ #endif
+
+ _LIT(KCorruptDbFileOld, "c:\\system\\data\\SRVepostext.ldb");
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ User::LeaveIfError(fileMan->Copy(KCorruptDbFile, KDefaultDbPath, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Rename(KCorruptDbFileOld, KDefaultDb, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp16::UseContactDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp16::UseContactDbL()
+ {
+ RemoveDefaultDbL();
+
+ #ifdef __WINS__
+ _LIT(KCorruptDbFile, "z:\\system\\test\\testdata\\SRVeposcontact.ldb");
+ #else
+ _LIT(KCorruptDbFile, "c:\\system\\test\\testdata\\SRVeposcontact.ldb");
+ #endif
+
+ _LIT(KCorruptDbFileOld, "c:\\system\\data\\SRVeposcontact.ldb");
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ User::LeaveIfError(fileMan->Copy(KCorruptDbFile, KDefaultDbPath, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Rename(KCorruptDbFileOld, KDefaultDb, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp16::SetupGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp16::SetupGlobalCategoriesL()
+ {
+ iGlobalCategoryNames.Reset();
+ iGlobalCategoryIds.Reset();
+
+ iGlobalCategoryNames.Append(_L("Restaurant"));
+ iGlobalCategoryIds.Append(1);
+
+ iGlobalCategoryNames.Append(_L("Bar"));
+ iGlobalCategoryIds.Append(2);
+
+ iGlobalCategoryNames.Append(_L("Gas station"));
+ iGlobalCategoryIds.Append(3);
+
+ iGlobalCategoryNames.Append(_L("Hotel"));
+ iGlobalCategoryIds.Append(4);
+
+ iGlobalCategoryNames.Append(_L("Shop"));
+ iGlobalCategoryIds.Append(5);
+
+ iGlobalCategoryNames.Append(_L("Sight"));
+ iGlobalCategoryIds.Append(6);
+
+ iGlobalCategoryNames.Append(_L("Car park"));
+ iGlobalCategoryIds.Append(7);
+
+ iGlobalCategoryNames.Append(_L("Bus stop"));
+ iGlobalCategoryIds.Append(8);
+
+ iGlobalCategoryNames.Append(_L("Pools"));
+ iGlobalCategoryIds.Append(9);
+
+ iGlobalCategoryNames.Append(_L("Shopping streets"));
+ iGlobalCategoryIds.Append(10);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp160.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,281 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp160.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP160Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP160Trace.txt");
+
+_LIT(KKMZFile, "c:\\system\\test\\TestData\\Tp160KMZFile.kmz");
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp160::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp160::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp160::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp160::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KKMZFile );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ iLog->Log(_L("Test with Tp160KMZFile.kmz"));
+ PrintParsedDataFromEncoderL(KKMZFile, *emptyBuffer, KErrNone, KKmzMimeType );
+
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+
+
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP160"));
+ User::Leave(-1);
+ }
+ }
+
+
+
+ // ---------------------------------------------------------
+// CPosTp160::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp160::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+
+ TFileName file( aFile );
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ TraceL(file);
+ TRAPD(err,iLandmarkParser->SetInputFileL(file));
+ if(err != KErrNone)
+ {
+ TBuf<100> buffe;
+ buffe.Format(_L("\t SetInputFile leaves with error code : %d"), err);
+ iLog->Log(buffe);
+
+ }
+ else
+ {
+ iErrorsFound++;
+ TBuf<100> buffe;
+ buffe.Format(_L("\tERROR: SetInputFile should leave with error code"));
+ iLog->Log(buffe);
+
+ }
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+
+
+
+
+// ---------------------------------------------------------
+// CPosTp160::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp160::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp161.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp161.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+
+// ================= CONSTANTS =======================
+
+
+ _LIT(KKMLFile, "c:\\system\\test\\testdata\\Tp161KML.kml");
+
+
+ _LIT(KEmpty, "");
+
+ _LIT(K1, "Category nr1 added in TP48");
+
+ _LIT(K2, "Läkare");
+ _LIT(K3, "Sjukhus");
+ _LIT(K4, "Restaurant");
+ _LIT(K5, "Shop");
+
+ _LIT(K6, "Frisör");
+
+ _LIT(K7, "Dagis");
+ _LIT(K8, "BurgerKing");
+ _LIT(K9, "Hotel");
+ _LIT(K10, "Car park");
+
+ _LIT(K11, "Garage");
+ _LIT(K12, "Bus stop");
+ _LIT(K13, "BurgerKing");
+
+ _LIT(K14, "Category nr2 added in TP48");
+ _LIT(K15_1, "OutSight");
+ const TInt KNrOfLandmarks = 8;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp161::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp161::CloseTest()
+ {
+ // Release ECOM stuff
+ ReleaseLandmarkResources();
+
+ delete iOperation;iOperation=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp161::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp161::StartL()
+ {
+ iErrorsFound = 0;
+
+
+ // KML
+ TestParseL(KKMLFile, KKmlMimeType);
+ TestImportL(KKMLFile, KKmlMimeType);
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP161"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp161::TestParseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp161::TestParseL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestParseL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+
+ RemoveAllLmDatabasesL();
+
+ const TDesC* categoryNames[KNrOfLandmarks][4] = {{&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K1, &KEmpty, &KEmpty, &KEmpty},
+ {&K2, &K3, &K4, &K5},
+ {&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K6, &KEmpty, &KEmpty, &KEmpty},
+ {&K7, &K8, &K9, &K10},
+ {&K11, &K12, &K13, &KEmpty},
+ {&K14, &K15_1, &KEmpty, &KEmpty}};
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(aMime);
+ CleanupStack::PushL(parser);
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when opening file"));
+ User::Leave(err);
+ }
+ CleanupClosePushL(file);
+ parser->SetInputFileHandleL(file);
+ iOperation = parser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress=0;
+
+ CDesCArrayFlat* landmarkNames = new (ELeave) CDesCArrayFlat(KNrOfLandmarks);
+ landmarkNames->AppendL(_L("Billigt"));
+ landmarkNames->AppendL(_L("LOG9"));
+ landmarkNames->AppendL(_L("Kalles Hundgård"));
+ landmarkNames->AppendL(_L("MLFW"));
+ landmarkNames->AppendL(_L("TE, Lund"));
+ landmarkNames->AppendL(_L("asdf"));
+ landmarkNames->AppendL(_L("TP48LandmarkWithAllXMLFields"));
+ landmarkNames->AppendL(_L("TP48Landmark With Empty XML Fields"));
+
+ TInt counter=0;
+ while (progress != 1)
+ {
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ CPosLandmark* lm = parser->LandmarkLC();
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ TPtrC expName(landmarkNames->MdcaPoint(counter));
+ iLog->Log(_L("Landmark %d, Actual name '%S', Expected '%S'"), counter, &name, &expName);
+ if (expName.CompareC(name) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Landmark Name"));
+ iErrorsFound++;
+ }
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ lm->GetCategoriesL(arr);
+ for (TInt i=0;i<arr.Count();i++)
+ {
+ CPosLandmarkCategory* cat = parser->LandmarkCategoryLC(arr[i]);
+ TPtrC catName;
+ cat->GetCategoryName(catName);
+ iLog->Log(_L("Category %d, Actual '%S', Expected '%S'"), i, &catName, categoryNames[counter][i]);
+ if (catName.CompareC(*categoryNames[counter][i]) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Category Name when comparing"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(lm);
+ counter++;
+ }
+
+ TUint32 nr = parser->NumOfParsedLandmarks();
+ if (nr != KNrOfLandmarks)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmarks parsed"));
+ iErrorsFound++;
+ }
+
+ iLog->Log(_L("-------------------\n"));
+ delete iOperation;iOperation=NULL;
+
+ CleanupStack::PopAndDestroy(&file);
+
+ landmarkNames->Reset();
+ delete landmarkNames;
+ landmarkNames = NULL;
+ CleanupStack::PopAndDestroy(parser);
+ }
+
+// ---------------------------------------------------------
+// CPosTp161::TestImportL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp161::TestImportL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImportL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+
+ RemoveAllLmDatabasesL();
+
+ const TDesC* categoryNames[KNrOfLandmarks][4] = {{&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K1, &KEmpty, &KEmpty, &KEmpty},
+ {&K2, &K3, &K4, &K5},
+ {&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K6, &KEmpty, &KEmpty, &KEmpty},
+ {&K7, &K8, &K9, &K10},
+ {&K11, &K12, &K13, &KEmpty},
+ {&K14, &K15_1, &KEmpty, &KEmpty}};
+
+ CPosLandmarkDatabase* database = OpenDatabaseLC();
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(aMime);
+ CleanupStack::PushL(parser);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(categoryManager);
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when opening file"));
+ User::Leave(err);
+ }
+ CleanupClosePushL(file);
+
+ parser->SetInputFileHandleL(file);
+ iOperation = database->ImportLandmarksL(*parser, CPosLandmarkDatabase::EIncludeCategories);
+
+ ExecuteAndDeleteLD(iOperation);
+ iOperation=NULL;
+
+ CPosLmItemIterator* iter = database->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ CDesCArrayFlat* landmarkNames = new (ELeave) CDesCArrayFlat(KNrOfLandmarks);
+ landmarkNames->AppendL(_L("Billigt"));
+ landmarkNames->AppendL(_L("LOG9"));
+ landmarkNames->AppendL(_L("Kalles Hundgård"));
+ landmarkNames->AppendL(_L("MLFW"));
+ landmarkNames->AppendL(_L("TE, Lund"));
+ landmarkNames->AppendL(_L("asdf"));
+ landmarkNames->AppendL(_L("TP48LandmarkWithAllXMLFields"));
+ landmarkNames->AppendL(_L("TP48Landmark With Empty XML Fields"));
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter = 0;
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = database->ReadLandmarkLC(id);
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ TPtrC expName(landmarkNames->MdcaPoint(counter));
+ iLog->Log(_L("Landmark %d, Actual name '%S', Expected '%S'"), counter, &name, &expName);
+ if (expName.CompareC(name) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Landmark Name"));
+ iErrorsFound++;
+ }
+
+ lm->GetCategoriesL(arr);
+ if (arr.Count() == 0) iLog->Log(_L("NOLL"));
+ else
+ {
+ TBuf<100> buf;
+ buf.Format(_L("nr of categories %d"), arr.Count());
+ iLog->Log(buf);
+ }
+
+ for (TInt i=0;i<arr.Count();i++)
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(arr[i]);
+ TPtrC catName;
+ cat->GetCategoryName(catName);
+ iLog->Log(_L("Category %d, Actual '%S', Expected '%S'"), i, &catName, categoryNames[counter][i]);
+ if (catName.CompareC(*categoryNames[counter][i]) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Category Name"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(lm);
+ id = iter->NextL();
+ counter++;
+ }
+ TUint32 nr = parser->NumOfParsedLandmarks();
+ if (nr != KNrOfLandmarks)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmarks parsed"));
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ landmarkNames->Reset();
+ delete landmarkNames;
+ landmarkNames = NULL;
+
+ iLog->Log(_L("-------------------\n"));
+
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(parser);
+ CleanupStack::PopAndDestroy(database);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp162.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp162.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+
+#include <LbsPosition.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+
+// ================= CONSTANTS =======================
+
+
+ _LIT(KKMLFile, "c:\\system\\test\\testdata\\Tp162KML.kml");
+
+
+#define DEBUG ETrue
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp162::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp162::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp162::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp162::StartL()
+ {
+ iErrorsFound = 0;
+
+
+ // KML
+ TestImportEmptyDbL( KKMLFile, KKmlMimeType );
+ TestImport1L( KKMLFile, KKmlMimeType );
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP162"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp162::TestImportEmptyDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp162::TestImportEmptyDbL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImportEmptyDbL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+ RemoveAllLmDatabasesL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMime);
+ iLandmarkParser->SetInputFileL(aFile);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesBefore = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ iLog->Log(_L("iDatabase->ImportLandmarksL"));
+ // No categories should be imported, since ESupressCategoryCreation is used and the landmarks
+ // db is empty when starting
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::ESupressCategoryCreation| CPosLandmarkDatabase::EIncludeCategories));
+
+ catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesAfter = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ if (nrOfcategoriesAfter != nrOfcategoriesBefore)
+ {
+ iLog->Log(_L("ERROR: No categories should have been imported"));
+ iErrorsFound++;
+ }
+ iLog->Log(_L("-------------------\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp162::TestImport1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp162::TestImport1L(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImport1L ------"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+ RemoveAllLmDatabasesL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMime);
+ iLandmarkParser->SetInputFileL(aFile);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ // Create two local categories, "Dagis" and "BurgerKing" belongs to landmark "asdf"
+ CPosLandmarkCategory* category1 = CPosLandmarkCategory::NewLC();
+ category1->SetCategoryNameL(_L("Dagis"));
+ TPosLmItemId id1 = categoryManager->AddCategoryL(*category1);
+ CleanupStack::PopAndDestroy(category1);
+
+ CPosLandmarkCategory* category2 = CPosLandmarkCategory::NewLC();
+ category2->SetCategoryNameL(_L("BurgerKing"));
+ TPosLmItemId id2 = categoryManager->AddCategoryL(*category2);
+ CleanupStack::PopAndDestroy(category2);
+
+ // Create "Frisör" belongs to landmark "TE, Lund"
+ CPosLandmarkCategory* category3 = CPosLandmarkCategory::NewLC();
+ category3->SetCategoryNameL(_L("Frisör"));
+ TPosLmItemId id3 = categoryManager->AddCategoryL(*category3);
+ CleanupStack::PopAndDestroy(category3);
+
+ // Remove global category with global id 1
+ // Belongs to "Kalles Hundgård"
+ TPosLmItemId globalId = categoryManager->GetGlobalCategoryL(3000);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(globalId));
+
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesBefore = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ iLog->Log(_L("iDatabase->ImportLandmarksL"));
+
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::EIncludeGlobalCategoryNames | CPosLandmarkDatabase::ESupressCategoryCreation| CPosLandmarkDatabase::EIncludeCategories));
+
+
+ catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesAfter = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+ if (nrOfcategoriesAfter != nrOfcategoriesBefore)
+ {
+ iLog->Log(_L("ERROR: Three categories should have been added"));
+ iErrorsFound++;
+ }
+
+ // Check that landmark "TE, Lund" has "Frisör" and
+ // landmark "asdf" has "Dagis" and "BurgerKing" (and also already existing global categories
+
+ TBuf<100> buf;
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ TPosLmItemId idde1;
+
+ // Check id=5 Te, Lund
+ idde1 = categoryManager->GetCategoryL(_L("Frisör"));
+ categories.Append(idde1);
+ CheckLandmarkL(5, categories);
+ categories.Reset();
+
+ // Check id=6 asdf
+ idde1 = categoryManager->GetCategoryL(_L("Dagis"));
+
+ categories.Append(idde1);
+
+ CheckLandmarkL(6, categories);
+ categories.Reset();
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iLog->Log(_L("-------------------\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp162::CheckLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp162::CheckLandmarkL(TPosLmItemId aLandmarkId, RArray<TPosLmItemId> aCategoriesList)
+ {
+ iLog->Log(_L("CheckLandmarkL"));
+
+ // Get landmark
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(aLandmarkId);
+ TPtrC name1;
+ lm1->GetLandmarkName(name1);
+ iLog->Log(name1);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ // Get all categories attached to this landmark
+ lm1->GetCategoriesL(categories);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ if ( aCategoriesList.Count() != categories.Count() )
+ {
+ iLog->Log(_L("ERROR: Wrong number of categories, actual %d, expected %d"),
+ categories.Count(), aCategoriesList.Count() );
+ iErrorsFound++;
+ }
+
+ for (TInt i=0;i<categories.Count();i++)
+ {
+ if (aCategoriesList.Find(categories[i]) != KErrNotFound)
+ {
+ iLog->Log(_L("Found"));
+ }
+ else
+ {
+ iLog->Log(_L("ERROR: Category '%S' was not found"));
+ iErrorsFound++;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(lm1);
+ }
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp163.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,325 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp163.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+
+// ================= CONSTANTS =======================
+
+
+ _LIT(KKMZFile, "c:\\system\\test\\testdata\\Tp163KMZ.kmz");
+
+
+ _LIT(KEmpty, "");
+
+ _LIT(K1, "Category nr1 added in TP48");
+
+ _LIT(K2, "Läkare");
+ _LIT(K3, "Sjukhus");
+ _LIT(K4, "Restaurant");
+ _LIT(K5, "Shop");
+
+ _LIT(K6, "Frisör");
+
+ _LIT(K7, "Dagis");
+ _LIT(K8, "BurgerKing");
+ _LIT(K9, "Hotel");
+ _LIT(K10, "Car park");
+
+ _LIT(K11, "Garage");
+ _LIT(K12, "Bus stop");
+ _LIT(K13, "BurgerKing");
+
+ _LIT(K14, "Category nr2 added in TP48");
+ _LIT(K15_1, "OutSight");
+ const TInt KNrOfLandmarks = 8;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp163::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp163::CloseTest()
+ {
+ // Release ECOM stuff
+ ReleaseLandmarkResources();
+
+ delete iOperation;iOperation=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp163::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp163::StartL()
+ {
+ iErrorsFound = 0;
+
+
+ // KML
+ TestParseL(KKMZFile, KKmzMimeType);
+ TestImportL(KKMZFile, KKmzMimeType);
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in Tp163"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp163::TestParseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp163::TestParseL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestParseL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+
+ RemoveAllLmDatabasesL();
+
+ const TDesC* categoryNames[KNrOfLandmarks][4] = {{&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K1, &KEmpty, &KEmpty, &KEmpty},
+ {&K2, &K3, &K4, &K5},
+ {&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K6, &KEmpty, &KEmpty, &KEmpty},
+ {&K7, &K8, &K9, &K10},
+ {&K11, &K12, &K13, &KEmpty},
+ {&K14, &K15_1, &KEmpty, &KEmpty}};
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(aMime);
+ CleanupStack::PushL(parser);
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when opening file"));
+ User::Leave(err);
+ }
+ CleanupClosePushL(file);
+ parser->SetInputFileHandleL(file);
+ iOperation = parser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress=0;
+
+ CDesCArrayFlat* landmarkNames = new (ELeave) CDesCArrayFlat(KNrOfLandmarks);
+ landmarkNames->AppendL(_L("Billigt"));
+ landmarkNames->AppendL(_L("LOG9"));
+ landmarkNames->AppendL(_L("Kalles Hundgård"));
+ landmarkNames->AppendL(_L("MLFW"));
+ landmarkNames->AppendL(_L("TE, Lund"));
+ landmarkNames->AppendL(_L("asdf"));
+ landmarkNames->AppendL(_L("TP48LandmarkWithAllXMLFields"));
+ landmarkNames->AppendL(_L("TP48Landmark With Empty XML Fields"));
+
+ TInt counter=0;
+ while (progress != 1)
+ {
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ CPosLandmark* lm = parser->LandmarkLC();
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ TPtrC expName(landmarkNames->MdcaPoint(counter));
+ iLog->Log(_L("Landmark %d, Actual name '%S', Expected '%S'"), counter, &name, &expName);
+ if (expName.CompareC(name) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Landmark Name"));
+ iErrorsFound++;
+ }
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ lm->GetCategoriesL(arr);
+ for (TInt i=0;i<arr.Count();i++)
+ {
+ CPosLandmarkCategory* cat = parser->LandmarkCategoryLC(arr[i]);
+ TPtrC catName;
+ cat->GetCategoryName(catName);
+ iLog->Log(_L("Category %d, Actual '%S', Expected '%S'"), i, &catName, categoryNames[counter][i]);
+ if (catName.CompareC(*categoryNames[counter][i]) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Category Name when comparing"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(lm);
+ counter++;
+ }
+
+ TUint32 nr = parser->NumOfParsedLandmarks();
+ if (nr != KNrOfLandmarks)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmarks parsed"));
+ iErrorsFound++;
+ }
+
+ iLog->Log(_L("-------------------\n"));
+ delete iOperation;iOperation=NULL;
+
+ CleanupStack::PopAndDestroy(&file);
+
+ landmarkNames->Reset();
+ delete landmarkNames;
+ landmarkNames = NULL;
+ CleanupStack::PopAndDestroy(parser);
+ }
+
+// ---------------------------------------------------------
+// CPosTp163::TestImportL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp163::TestImportL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImportL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+
+ RemoveAllLmDatabasesL();
+
+ const TDesC* categoryNames[KNrOfLandmarks][4] = {{&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K1, &KEmpty, &KEmpty, &KEmpty},
+ {&K2, &K3, &K4, &K5},
+ {&KEmpty, &KEmpty, &KEmpty, &KEmpty},
+ {&K6, &KEmpty, &KEmpty, &KEmpty},
+ {&K7, &K8, &K9, &K10},
+ {&K11, &K12, &K13, &KEmpty},
+ {&K14, &K15_1, &KEmpty, &KEmpty}};
+
+ CPosLandmarkDatabase* database = OpenDatabaseLC();
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(aMime);
+ CleanupStack::PushL(parser);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(categoryManager);
+
+ RFile file;
+ TInt err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when opening file"));
+ User::Leave(err);
+ }
+ CleanupClosePushL(file);
+
+ parser->SetInputFileHandleL(file);
+ iOperation = database->ImportLandmarksL(*parser, CPosLandmarkDatabase::EIncludeCategories);
+
+ ExecuteAndDeleteLD(iOperation);
+ iOperation=NULL;
+
+ CPosLmItemIterator* iter = database->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ CDesCArrayFlat* landmarkNames = new (ELeave) CDesCArrayFlat(KNrOfLandmarks);
+ landmarkNames->AppendL(_L("Billigt"));
+ landmarkNames->AppendL(_L("LOG9"));
+ landmarkNames->AppendL(_L("Kalles Hundgård"));
+ landmarkNames->AppendL(_L("MLFW"));
+ landmarkNames->AppendL(_L("TE, Lund"));
+ landmarkNames->AppendL(_L("asdf"));
+ landmarkNames->AppendL(_L("TP48LandmarkWithAllXMLFields"));
+ landmarkNames->AppendL(_L("TP48Landmark With Empty XML Fields"));
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter = 0;
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = database->ReadLandmarkLC(id);
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ TPtrC name;
+ lm->GetLandmarkName(name);
+ TPtrC expName(landmarkNames->MdcaPoint(counter));
+ iLog->Log(_L("Landmark %d, Actual name '%S', Expected '%S'"), counter, &name, &expName);
+ if (expName.CompareC(name) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Landmark Name"));
+ iErrorsFound++;
+ }
+
+ lm->GetCategoriesL(arr);
+ if (arr.Count() == 0) iLog->Log(_L("NOLL"));
+ else
+ {
+ TBuf<100> buf;
+ buf.Format(_L("nr of categories %d"), arr.Count());
+ iLog->Log(buf);
+ }
+
+ for (TInt i=0;i<arr.Count();i++)
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(arr[i]);
+ TPtrC catName;
+ cat->GetCategoryName(catName);
+ iLog->Log(_L("Category %d, Actual '%S', Expected '%S'"), i, &catName, categoryNames[counter][i]);
+ if (catName.CompareC(*categoryNames[counter][i]) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong Category Name"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(lm);
+ id = iter->NextL();
+ counter++;
+ }
+ TUint32 nr = parser->NumOfParsedLandmarks();
+ if (nr != KNrOfLandmarks)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmarks parsed"));
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ landmarkNames->Reset();
+ delete landmarkNames;
+ landmarkNames = NULL;
+
+ iLog->Log(_L("-------------------\n"));
+
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(parser);
+ CleanupStack::PopAndDestroy(database);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp164.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp164.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLandmarkParser.h>
+
+#include <LbsPosition.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+
+// ================= CONSTANTS =======================
+
+
+ _LIT(KKMZFile, "c:\\system\\test\\testdata\\Tp164KMZ.kmz");
+
+
+#define DEBUG ETrue
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp164::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp164::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp164::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp164::StartL()
+ {
+ iErrorsFound = 0;
+
+
+ // KML
+ TestImportEmptyDbL( KKMZFile, KKmzMimeType );
+ TestImport1L( KKMZFile, KKmzMimeType );
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP164"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp164::TestImportEmptyDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp164::TestImportEmptyDbL(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImportEmptyDbL -----"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+ RemoveAllLmDatabasesL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMime);
+ iLandmarkParser->SetInputFileL(aFile);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesBefore = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ iLog->Log(_L("iDatabase->ImportLandmarksL"));
+ // No categories should be imported, since ESupressCategoryCreation is used and the landmarks
+ // db is empty when starting
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::ESupressCategoryCreation| CPosLandmarkDatabase::EIncludeCategories));
+
+ catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesAfter = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ if (nrOfcategoriesAfter != nrOfcategoriesBefore)
+ {
+ iLog->Log(_L("ERROR: No categories should have been imported"));
+ iErrorsFound++;
+ }
+ iLog->Log(_L("-------------------\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp164::TestImport1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp164::TestImport1L(const TDesC& aFile, const TDesC8& aMime)
+ {
+ iLog->Log(_L("----- TestImport1L ------"));
+ iLog->Log(_L("FILE: %S"), &aFile);
+ RemoveAllLmDatabasesL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMime);
+ iLandmarkParser->SetInputFileL(aFile);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ // Create two local categories, "Dagis" and "BurgerKing" belongs to landmark "asdf"
+ CPosLandmarkCategory* category1 = CPosLandmarkCategory::NewLC();
+ category1->SetCategoryNameL(_L("Dagis"));
+ TPosLmItemId id1 = categoryManager->AddCategoryL(*category1);
+ CleanupStack::PopAndDestroy(category1);
+
+ CPosLandmarkCategory* category2 = CPosLandmarkCategory::NewLC();
+ category2->SetCategoryNameL(_L("BurgerKing"));
+ TPosLmItemId id2 = categoryManager->AddCategoryL(*category2);
+ CleanupStack::PopAndDestroy(category2);
+
+ // Create "Frisör" belongs to landmark "TE, Lund"
+ CPosLandmarkCategory* category3 = CPosLandmarkCategory::NewLC();
+ category3->SetCategoryNameL(_L("Frisör"));
+ TPosLmItemId id3 = categoryManager->AddCategoryL(*category3);
+ CleanupStack::PopAndDestroy(category3);
+
+ // Remove global category with global id 1
+ // Belongs to "Kalles Hundgård"
+ TPosLmItemId globalId = categoryManager->GetGlobalCategoryL(3000);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(globalId));
+
+ CPosLmItemIterator* catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesBefore = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+
+ iLog->Log(_L("iDatabase->ImportLandmarksL"));
+
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::EIncludeGlobalCategoryNames | CPosLandmarkDatabase::ESupressCategoryCreation| CPosLandmarkDatabase::EIncludeCategories));
+
+
+ catIter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(catIter);
+ TInt nrOfcategoriesAfter = catIter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(catIter);
+ if (nrOfcategoriesAfter != nrOfcategoriesBefore)
+ {
+ iLog->Log(_L("ERROR: Three categories should have been added"));
+ iErrorsFound++;
+ }
+
+ // Check that landmark "TE, Lund" has "Frisör" and
+ // landmark "asdf" has "Dagis" and "BurgerKing" (and also already existing global categories
+
+ TBuf<100> buf;
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ TPosLmItemId idde1;
+
+ // Check id=5 Te, Lund
+ idde1 = categoryManager->GetCategoryL(_L("Frisör"));
+ categories.Append(idde1);
+ CheckLandmarkL(5, categories);
+ categories.Reset();
+
+ // Check id=6 asdf
+ idde1 = categoryManager->GetCategoryL(_L("Dagis"));
+
+ categories.Append(idde1);
+
+ CheckLandmarkL(6, categories);
+ categories.Reset();
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iLog->Log(_L("-------------------\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp164::CheckLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp164::CheckLandmarkL(TPosLmItemId aLandmarkId, RArray<TPosLmItemId> aCategoriesList)
+ {
+ iLog->Log(_L("CheckLandmarkL"));
+
+ // Get landmark
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(aLandmarkId);
+ TPtrC name1;
+ lm1->GetLandmarkName(name1);
+ iLog->Log(name1);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ // Get all categories attached to this landmark
+ lm1->GetCategoriesL(categories);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ if ( aCategoriesList.Count() != categories.Count() )
+ {
+ iLog->Log(_L("ERROR: Wrong number of categories, actual %d, expected %d"),
+ categories.Count(), aCategoriesList.Count() );
+ iErrorsFound++;
+ }
+
+ for (TInt i=0;i<categories.Count();i++)
+ {
+ if (aCategoriesList.Find(categories[i]) != KErrNotFound)
+ {
+ iLog->Log(_L("Found"));
+ }
+ else
+ {
+ iLog->Log(_L("ERROR: Category '%S' was not found"));
+ iErrorsFound++;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(lm1);
+ }
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp17.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,219 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp17.h"
+#include <f32file.h>
+#include <bautils.h>
+
+// CONSTANTS
+const TInt KMaxDllFileNameLength = 100;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp17::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp17::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP17 - Memory footprint");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp17::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp17::CloseTest()
+ {
+ iFootprints.Close();
+ iDllNames.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp17::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp17::StartL()
+ {
+#ifdef __WINS__
+ _LIT(KNotSupported, "Test case is not supported on WINS, exucute it on target!");
+ LogErrorAndLeave(KNotSupported);
+#else
+ _LIT(KErrors, "One or several Dll's have an incorrect size");
+ SetupTestDataL();
+
+ RFs session;
+ User::LeaveIfError(session.Connect());
+ CleanupClosePushL(session);
+
+ RFile file;
+ TBuf<1> drive= _L("c");
+ TBuf<KMaxDllFileNameLength> name;
+ name.Copy(iDllNames[0]);
+ name.Replace(0,1,drive);
+
+ if (file.Open(session, name, EFileRead) != KErrNone)
+ {
+ iLog->Put(_L("(Flashed) Use Drive Z:"));
+ drive.Copy(_L("z"));
+ }
+ else iLog->Put(_L("(Nonflashed) Use Drive C:"));
+
+ file.Close();
+ TBool errors=EFalse;
+ for (TInt i=0; i<iDllNames.Count(); i++)
+ {
+ name.Copy(iDllNames[i]);
+ name.Replace(0,1,drive);
+ //User::LeaveIfError(file.Open(session, name, EFileRead));
+ TInt err = file.Open(session, name, EFileRead);
+ if (err != KErrNone)
+ {
+ TBuf<70> buffe;
+ buffe.Append(_L("Error when opening file "));
+ buffe.Append(name);
+ LogErrorAndLeave(buffe, err);
+ }
+
+ CleanupClosePushL(file);
+ TInt fileSize=0;
+ file.Size(fileSize);
+
+ if (fileSize > iFootprints[i])
+ {
+ errors = ETrue;
+
+ _LIT(KDllSizeErr, "ERROR: %S is to big (%d), Max allowed ROM footprint is %d");
+ TBuf<255> info;
+ HBufC* temp = name.Alloc();
+ info.Format(KDllSizeErr, temp, fileSize, iFootprints[i]);
+ delete temp;
+ iLog->Put(info);
+ }
+ else
+ {
+ // Always log .dll size
+ _LIT(KDllSizeDebug, "%S is (%d), Max allowed ROM footprint is %d");
+ TBuf<255> info;
+ HBufC* temp = name.Alloc();
+ info.Format(KDllSizeDebug, temp, fileSize, iFootprints[i]);
+ delete temp;
+ iLog->Put(info);
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+ }
+ CleanupStack::PopAndDestroy(&session);
+
+ if (errors)
+ {
+ LogErrorAndLeave(KErrors);
+ }
+#endif
+ }
+
+// ---------------------------------------------------------
+// CPosTp17::SetupTestDataL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp17::SetupTestDataL()
+ {
+ iLog->Put(_L("SetupTestDataL"));
+
+ _LIT(KLANDMARK,"z:\\sys\\bin\\eposlandmarks.dll");
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ //check if landmark is flashed
+ if (BaflUtils::FileExists(fs, KLANDMARK))
+ {
+ //Landmark is flashed
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlandmarks.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmsearchlib.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmmultidbsearch.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmlocalsearchprovider.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmlocalaccessprovider.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmlocalaccess.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmservlib.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmserver.exe")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmdbreg.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmintservices.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmconverter.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmrecognizer.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmdbmanlib.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmdbmanprov.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("z:\\sys\\bin\\eposlmlocaldbmanprovider.dll")));
+ }
+ else
+ {
+ //Landmark is not flashed
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlandmarks.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmsearchlib.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmmultidbsearch.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmlocalsearchprovider.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmlocalaccessprovider.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmlocalaccess.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmservlib.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmserver.exe")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmdbreg.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmintservices.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmconverter.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmrecognizer.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmdbmanlib.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmdbmanprov.dll")));
+ User::LeaveIfError(iDllNames.Append(_L("!:\\sys\\bin\\eposlmlocaldbmanprovider.dll")));
+ }
+
+ User::LeaveIfError(iFootprints.Append(9000)); //eposlandmarks.dll (Landmarks Client Library)
+ // Note that eposlmmultidbsearch.dll + eposlmsearchlib.dll must not be bigger than 17000
+ User::LeaveIfError(iFootprints.Append(8500)); //eposlmsearchlib.dll (Landmarks Search Client Library)
+ User::LeaveIfError(iFootprints.Append(8500)); //eposlmmultidbsearch.dll (Landmarks Search Client Library)
+ User::LeaveIfError(iFootprints.Append(19000)); //eposlmlocalsearchprovider.dll (Landmarks Local Search Provider)
+ // Note that eposlmlocalaccessprovider.dll + eposlmlocalaccess.dll must not be bigger than 23000
+ User::LeaveIfError(iFootprints.Append(400)); //eposlmlocalaccessprovider.dll (Landmarks Local Access Provider)
+ User::LeaveIfError(iFootprints.Append(23000)); //eposlmlocalaccess.dll (Landmarks Local Access)
+ User::LeaveIfError(iFootprints.Append(2000)); //eposlmservlib.dll (Landmarks Server Client Library)
+ User::LeaveIfError(iFootprints.Append(26000)); //eposlmserver.exe (Landmarks Server)
+ User::LeaveIfError(iFootprints.Append(6000)); //eposlmdbreg.dll (Landmarks Database Registry)
+ User::LeaveIfError(iFootprints.Append(23000)); //eposlmintservices.dll (Landmarks Internal Services)
+ User::LeaveIfError(iFootprints.Append(22000)); //eposlmconverter,dll (Landmarks Content Format Converter)
+ User::LeaveIfError(iFootprints.Append(2000)); //eposlmrecognizer.mdl (Landmarks Content Format Recognizer)
+ User::LeaveIfError(iFootprints.Append(3000)); //eposlmdbmanlib.dll (Landmarks DB Management Client)
+ User::LeaveIfError(iFootprints.Append(6000)); //eposlmdbmanprov.dll (Landmarks Database Management Provider)
+ User::LeaveIfError(iFootprints.Append(5000)); //eposlmlocaldbmanprovider.dll (Landmarks Local Database Management Provider)
+
+ CleanupStack::PopAndDestroy(2, &fs);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp18.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,851 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp18.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMPartialReadParameters.h>
+#include <EPos_CPosLMOperation.h>
+#include <LbsPosition.h>
+
+
+// CONSTANTS
+const TInt KNoPreparePartial = 40;
+_LIT(KTakePreparedPartialErr, "Method TakePreparedPartialLandmarksL doesn't leave with KErrNotFound");
+_LIT(KNoPreparedPartialErr, "Method TakePreparedPartialLandmarksL returns incorrect no. landmarks");
+_LIT(KNoPreparedPartialErr2, "Method TakePreparedPartialLandmarksL returns incorrect landmarks");
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp10::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::CloseTest()
+ {
+ if (iArrayPtr)
+ {
+ iArrayPtr->ResetAndDestroy();
+ }
+ delete iArrayPtr;
+ iArrayPtr = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::StartL()
+ {
+ _LIT(KNotPartialErr, "Landmark is not a partial landmark");
+
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Test some non-existing landmark ids
+ TPosLmItemId id = KPosLmNullItemId;
+ TRAPD(err, iDatabase->ReadPartialLandmarkLC(id));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ReadPartialLandmarkLC should leave with KErrnotFound"));
+ User::Leave(err);
+ }
+ id = 2000;
+ TRAP(err, iDatabase->ReadPartialLandmarkLC(id));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ReadPartialLandmarkLC should leave with KErrnotFouns"));
+ User::Leave(err);
+ }
+
+ TestAllPartialAttributesL();
+
+ TestPartialPositionFieldsL();
+
+ PreparePartialLandmarksL();
+
+ PreparePartialLandmarksAsyncL(EAsynchronous);
+
+ PreparePartialLandmarksAsyncL(EWaitForRequest);
+
+ iLog->Log(_L("TESTS BELOW ARE TESTING CANCEL"));
+ PreparePartialLandmarksAsyncAndCancelL();
+
+ iLog->Log(_L("TEST BELOW IS TESTING CANCEL IN CALLBACK"));
+ PreparePartialLandmarksAsyncAndCancelL(ETrue);
+
+ TUint attr=CPosLandmark::ELandmarkName;
+ CPosLmPartialReadParameters* partialParam = iDatabase->PartialReadParametersLC();
+ partialParam->SetRequestedAttributes(attr);
+ CPosLandmark* lm = GetPartialLandmarkLC(1, *partialParam);
+ CheckPartialLandmarkL(*lm, attr);
+
+ CPosLandmark* copy = CPosLandmark::NewLC(*lm);
+
+ iDatabase->AddLandmarkL(*copy);
+
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(copy->LandmarkId());
+
+ AssertTrueSecL(!lm2->IsPartial(), KNotPartialErr);
+ CleanupStack::PopAndDestroy(4,partialParam);
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::TestAllPartialAttributes
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::TestAllPartialAttributesL()
+ {
+ iLog->Log(_L("TestAllPartialAttributesL"));
+ iLog->Log(_L("Testing GetPartialLandmarks with all combination of attributes requested"));
+ _LIT(KNoAttrReqErr, "No attributes have been requested -> RequestedAttributes should return ENoAttribute");
+
+ CPosLmPartialReadParameters* partialParam = iDatabase->PartialReadParametersLC();
+
+ AssertTrueSecL(partialParam->RequestedAttributes() == CPosLandmark::ENoAttribute, KNoAttrReqErr);
+
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ TPosLmItemId id=1; // landmarks Id with all attr set
+
+ TUint max = CPosLandmark::EDescription;
+ max <<= 1;
+ max -= 1;
+ CPosLandmark* lm = NULL;
+
+ TUint attr=0;
+ for (attr=0; attr<=max; attr++)
+ {
+ partialParam->SetRequestedAttributes(attr);
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, attr);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ id = 2; // attr coverage radius not availible
+ attr = 0x003F; // req all
+ partialParam->SetRequestedAttributes(attr);
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ attr = attr & 0x00FB; // remove coverage radius
+ CheckPartialLandmarkL(*lm, attr);
+ CleanupStack::PopAndDestroy(lm);
+
+ id = 3; // Description not available
+ attr = 0x003F; // req all
+ partialParam->SetRequestedAttributes(attr);
+ lm = GetPartialLandmarkLC(id, *partialParam);
+
+
+ // After error report "ESLI-5ZDH4N Landmarks - Empty descriptors"
+ // Even if name or description not has been set it will return empty string "" when reading
+ // it from landmarks db, thus GetLandmarkDescription will KErrNone (instead of KErrNotFound as earlier)
+ //attr = attr & 0x00DF; // remove description
+ CheckPartialLandmarkL(*lm, attr);
+ CleanupStack::PopAndDestroy(lm);
+
+ id= 5; // IconName and IconIndex not availible
+ attr = 0x003F; // req all
+ partialParam->SetRequestedAttributes(attr);
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ attr = attr & 0x00EF; // remove IconName and IconIndex
+ CheckPartialLandmarkL(*lm, attr);
+ CleanupStack::PopAndDestroy(lm);
+
+ CleanupStack::PopAndDestroy(partialParam);
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::TestPartialPositionFields
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::TestPartialPositionFieldsL()
+ {
+ iLog->Log(_L("TestPartialPositionFieldsL"));
+ iLog->Log(_L("Testing GetPartialLandmarks with different combinations of positionfields requested"));
+ _LIT(KNoFieldsReqErr, "No fields have been requested -> GetRequestedPositionFields should return 0");
+
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+
+ RArray<TUint> reqFields;
+ partialParam->GetRequestedPositionFields(reqFields);
+ CleanupClosePushL(reqFields);
+
+ AssertTrueSecL(partialParam->GetRequestedPositionFields(reqFields) == 0, KNoFieldsReqErr);
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+
+ // Landmark Id with Street, PostalCode, City, LocationName,
+ // Country, MediaLinks, MediaLink1, MediaLink2 fields
+ TPosLmItemId id=2;
+
+ AppendFields(reqFields);
+ RArray<TBool> availFields;
+ CleanupClosePushL(availFields);
+ for(TInt i=0; i<8; i++)
+ {
+ availFields.Append(ETrue);
+ }
+
+ partialParam->SetRequestedPositionFields(reqFields);
+
+ CPosLandmark* lm = NULL;
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with PostalCode, City, LocationName,
+ // Country, MediaLinks, MediaLink1, MediaLink2 fields
+ id=3;
+ availFields[0] = EFalse;
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with Street, City, LocationName,
+ // Country, MediaLinks, MediaLink1, MediaLink2 fields
+ id=4;
+ availFields[0] = ETrue;
+ availFields[1] = EFalse;
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with Street, PostalCode, LocationName,
+ // Country, MediaLinks, MediaLink1, MediaLink2 fields
+ id=5;
+ availFields[1] = ETrue;
+ availFields[2] = EFalse;
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with Street,PostalCode, City,
+ // Country, MediaLinks, MediaLink1, MediaLink2 fields
+ id=6;
+ availFields[2] = ETrue;
+ availFields[3] = EFalse;
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with Street,PostalCode, City,
+ // MediaLinks, MediaLink1, MediaLink2 fields
+ id=7;
+ availFields[3] = ETrue;
+ availFields[4] = EFalse;
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with Street,PostalCode, City,
+ // Country fields
+ id=8;
+ availFields[4] = ETrue;
+ availFields[5] = EFalse;
+ availFields[6] = EFalse;
+ availFields[7] = EFalse;
+
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Landmark Id with Street,PostalCode, City,
+ // Country, MediaLinks, MediaLink1 fields
+ id=9;
+ availFields[5] = ETrue;
+ availFields[6] = ETrue;
+ availFields[7] = EFalse;
+
+ lm = GetPartialLandmarkLC(id, *partialParam);
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+ CleanupStack::PopAndDestroy(lm);
+
+ availFields[0] = EFalse;
+
+ reqFields[0] = EPositionFieldMagneticCourse;
+
+ partialParam->SetRequestedPositionFields(reqFields);
+ lm = GetPartialLandmarkLC(id, *partialParam);
+
+ reqFields[0] = EPositionFieldStreet; // To verify that street is not return when not requested
+ CheckPartialLandmarkL(*lm, reqFields, availFields);
+
+ CleanupStack::PopAndDestroy(4, partialParam);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::PreparePartialLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::PreparePartialLandmarksL()
+ {
+ iLog->Log(_L("PreparePartialLandmarksL"));
+ iLog->Log(_L("Testing Prepare and TakePartialLandmarks syncronously"));
+
+ CPosLmPartialReadParameters* partialParam = CPosLmPartialReadParameters::NewLC();
+
+ TUint attr = CPosLandmark::ELandmarkName;
+ partialParam->SetRequestedAttributes(attr);
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ for (TInt i=0; i<KNoPreparePartial; i++)
+ {
+ TPosLmItemId id= i+1;
+ ids.Append(id);
+ }
+ // Test with non-existing id
+ ids.Append(13112321);
+
+ //*** Add time measurements
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+ iOperation->ExecuteL();
+
+ iArrayPtr = iDatabase->TakePreparedPartialLandmarksL(iOperation);
+ AssertTrueSecL(iArrayPtr->Count() == ids.Count(), KNoPreparedPartialErr);
+
+ for (TInt j=0; j<iArrayPtr->Count()-1; j++)
+ {
+ CheckPartialLandmarkL(*iArrayPtr->At(j), CPosLandmark::ELandmarkName);
+ }
+ AssertTrueSecL(iArrayPtr->At(iArrayPtr->Count()-1) == NULL, KNoPreparedPartialErr2);
+
+ TRAPD(err, iArrayPtr=iDatabase->TakePreparedPartialLandmarksL(iOperation));
+ AssertTrueSecL(err == KErrNotFound, KTakePreparedPartialErr);
+
+ delete iOperation;
+ iOperation = NULL;
+
+ // landmarks with Name, coverage radius, description and fields street and country set
+ const TInt idsStart = 8;
+ const TInt idsEnd = 28;
+
+ attr = attr | CPosLandmark::ECoverageRadius | CPosLandmark::EDescription;
+ partialParam->SetRequestedAttributes(attr);
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+
+ reqFields.Append(EPositionFieldStreet);
+ reqFields.Append(EPositionFieldCountry);
+ partialParam->SetRequestedPositionFields(reqFields);
+
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ RArray<TBool> availFields;
+ CleanupClosePushL(availFields);
+ for(TInt jj=0; jj<2; jj++)
+ {
+ availFields.Append(ETrue);
+ }
+
+ ids.Reset();
+ for (TInt k=idsStart; k<=idsEnd; k++)
+ {
+ ids.Append(k);
+ }
+
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+ iOperation->ExecuteL();
+
+ iArrayPtr->ResetAndDestroy();
+ delete iArrayPtr;
+ iArrayPtr = NULL;
+
+ iArrayPtr = iDatabase->TakePreparedPartialLandmarksL(iOperation);
+ delete iOperation;
+ iOperation = NULL;
+
+ AssertTrueSecL(iArrayPtr->Count() == ids.Count(),KNoPreparedPartialErr);
+ for (TInt ii=0; ii<iArrayPtr->Count()-1; ii++)
+ {
+ CheckPartialLandmarkL(*iArrayPtr->At(ii), attr);
+ CheckPartialLandmarkL(*iArrayPtr->At(ii), reqFields, availFields);
+ }
+
+ CleanupStack::PopAndDestroy(4, partialParam);
+
+ iArrayPtr->ResetAndDestroy();
+ delete iArrayPtr;
+ iArrayPtr = NULL;
+
+ // Test not setting any attributes with SetRequestedAttributes,
+ // should only return empty landmarks
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded()) ExecuteAndDeleteLD(iDatabase->InitializeL());
+
+ CleanupClosePushL(ids);
+ ids.Append(1);
+ ids.Append(2);
+ ids.Append(10);
+ ids.Append(20);
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+ iOperation->ExecuteL();
+
+ iArrayPtr = iDatabase->TakePreparedPartialLandmarksL(iOperation);
+ AssertTrueSecL(iArrayPtr->Count() == ids.Count(), _L("Nr of Ids not correct"));
+ delete iOperation;
+ iOperation = NULL;
+
+ // Check that returned landmarks are empty
+ for (TInt ii=0; ii<iArrayPtr->Count()-1; ii++)
+ {
+ for (TInt j=0;j<KMaxTUint16;j++)
+ {
+ AssertTrueSecL(!iArrayPtr->At(ii)->IsPositionFieldAvailable(j), _L("Only empty landmarks should be returned"));
+ }
+ }
+ iArrayPtr->ResetAndDestroy();
+ delete iArrayPtr;
+ iArrayPtr = NULL;
+
+ CleanupStack::PopAndDestroy(&ids);
+
+ // Test with empty list, should cause error
+ partialParam = CPosLmPartialReadParameters::NewLC();
+ attr = CPosLandmark::ELandmarkName;
+ partialParam->SetRequestedAttributes(attr);
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ CleanupClosePushL(ids);
+ TRAP(err, iDatabase->PreparePartialLandmarksL(ids));
+
+ CleanupStack::PopAndDestroy();
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("PreparePartialLandmarksL should leave with KErrArgument"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(partialParam);
+// CleanupStack::PopAndDestroy(&ids);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::PreparePartialLandmarksAsyncL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::PreparePartialLandmarksAsyncL(TExecutionMode aExecutionMode)
+ {
+ iLog->Log(_L("Testing Prepare and TakePartialLandmarks asyncronously"));
+
+ CPosLmPartialReadParameters* partialParam = iDatabase->PartialReadParametersLC();
+
+ TUint attr = CPosLandmark::ELandmarkName;
+ partialParam->SetRequestedAttributes(attr);
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ for (TInt i=0; i<KNoPreparePartial; i++)
+ {
+ TPosLmItemId id= i+1;
+ ids.Append(id);
+ }
+ ids.Append(13112321);
+
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+
+ TRAPD(err, iArrayPtr=iDatabase->TakePreparedPartialLandmarksL(iOperation));
+ AssertTrueSecL(err == KErrNotFound, KTakePreparedPartialErr);
+
+ switch (aExecutionMode)
+ {
+ case EAsynchronous:
+ RunAsyncOperationL(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+
+ if (iArrayPtr != NULL)
+ {
+ iArrayPtr->ResetAndDestroy();
+ delete iArrayPtr;
+ iArrayPtr=NULL;
+ }
+
+ iArrayPtr = iDatabase->TakePreparedPartialLandmarksL(iOperation);
+
+ AssertTrueSecL(iArrayPtr->Count() == ids.Count(),KNoPreparedPartialErr);
+ AssertTrueSecL(iArrayPtr->At(iArrayPtr->Count()-1) == NULL, KNoPreparedPartialErr2);
+
+ for (TInt j=0; j<iArrayPtr->Count()-1; j++)
+ {
+ CheckPartialLandmarkL(*iArrayPtr->At(j), CPosLandmark::ELandmarkName);
+ }
+
+ iArrayPtr->ResetAndDestroy();
+ delete iArrayPtr;
+ iArrayPtr = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ // landmarks with Name, Icon, Position MediaLink1 set
+ const TInt idsStart = 10;
+ const TInt idsEnd = 35;
+
+ attr = attr | CPosLandmark::EIcon | CPosLandmark::EPosition;
+ partialParam->SetRequestedAttributes(attr);
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+ reqFields.Append(EPositionFieldMediaLinks);
+ reqFields.Append(EPositionFieldMediaLinksStart);
+ partialParam->SetRequestedPositionFields(reqFields);
+
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ RArray<TBool> availFields;
+ CleanupClosePushL(availFields);
+ for(TInt jj=0; jj<2; jj++)
+ {
+ availFields.Append(ETrue);
+ }
+
+ ids.Reset();
+ for (TInt k=idsStart; k<=idsEnd; k++)
+ {
+ ids.Append(k);
+ }
+
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+
+ switch (aExecutionMode)
+ {
+ case EAsynchronous:
+ RunAsyncOperationL(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ break;
+ default:
+ User::Leave(KErrArgument);
+ break;
+ }
+
+ iArrayPtr = iDatabase->TakePreparedPartialLandmarksL(iOperation);
+
+ AssertTrueSecL(iArrayPtr->Count() == ids.Count(),KNoPreparedPartialErr);
+
+ for (TInt x=0; x<iArrayPtr->Count()-1; x++)
+ {
+ CheckPartialLandmarkL(*iArrayPtr->At(x), attr);
+ CheckPartialLandmarkL(*iArrayPtr->At(x), reqFields, availFields);
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+
+ CleanupStack::PopAndDestroy(4, partialParam);
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::PreparePartialLandmarksAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::PreparePartialLandmarksAsyncAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("Testing Prepare and TakePartialLandmarks asyncronously with cancel"));
+
+ CPosLmPartialReadParameters* partialParam = iDatabase->PartialReadParametersLC();
+
+ TUint attr = CPosLandmark::ELandmarkName;
+ partialParam->SetRequestedAttributes(attr);
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ for (TInt i=0; i<KNoPreparePartial; i++)
+ {
+ TPosLmItemId id= i+1;
+ ids.Append(id);
+ }
+ ids.Append(13112321);
+
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+
+ TRAPD(err, iArrayPtr=iDatabase->TakePreparedPartialLandmarksL(iOperation));
+ AssertTrueSecL(err == KErrNotFound, KTakePreparedPartialErr);
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iOperation);
+ iOperation = NULL;
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iOperation);
+ }
+
+ // landmarks with Name, Icon, Position MediaLink1 set
+ const TInt idsStart = 10;
+ const TInt idsEnd = 35;
+
+ attr = attr | CPosLandmark::EIcon | CPosLandmark::EPosition;
+ partialParam->SetRequestedAttributes(attr);
+
+ RArray<TUint> reqFields;
+ CleanupClosePushL(reqFields);
+ reqFields.Append(EPositionFieldMediaLinks);
+ reqFields.Append(EPositionFieldMediaLinksStart);
+ partialParam->SetRequestedPositionFields(reqFields);
+
+ iDatabase->SetPartialReadParametersL(*partialParam);
+
+ RArray<TBool> availFields;
+ CleanupClosePushL(availFields);
+ for(TInt jj=0; jj<2; jj++)
+ {
+ availFields.Append(ETrue);
+ }
+
+ ids.Reset();
+ for (TInt k=idsStart; k<=idsEnd; k++)
+ {
+ ids.Append(k);
+ }
+
+ iOperation = iDatabase->PreparePartialLandmarksL(ids);
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iOperation);
+ iOperation = NULL;
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iOperation);
+ }
+
+ CleanupStack::PopAndDestroy(4, partialParam);
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::GetPartialLandmarkLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmark* CPosTp18::GetPartialLandmarkLC(const TPosLmItemId aId,
+ const CPosLmPartialReadParameters& aPartialParam)
+ {
+ _LIT(KIsPartialErr, "Method Landmark->IsPartial returns incorrect value");
+ _LIT(KUpdateErr, "It should not be possible to update a partial landmark");
+
+ iDatabase->SetPartialReadParametersL(aPartialParam);
+
+ CPosLandmark* lm = iDatabase->ReadPartialLandmarkLC(aId);
+ AssertTrueSecL(lm->IsPartial(), KIsPartialErr);
+
+ TRAPD(err, iDatabase->UpdateLandmarkL(*lm));
+ AssertTrueSecL(err == KErrArgument, KUpdateErr);
+
+ return lm;
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::AppendFields
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::AppendFields(RArray<TUint>& aArray)
+ {
+ // Appends fields availible to set with Landmarks db generator
+ aArray.Append(EPositionFieldStreet);
+ aArray.Append(EPositionFieldPostalCode);
+ aArray.Append(EPositionFieldCity);
+ aArray.Append(EPositionFieldLocationName);
+ aArray.Append(EPositionFieldCountry);
+ aArray.Append(EPositionFieldMediaLinks);
+ aArray.Append(EPositionFieldMediaLinksStart);
+
+ TUint16 tmp = (TUint16)EPositionFieldMediaLinksStart;
+ aArray.Append(++tmp);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::ChechPartialLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const RArray<TUint>& aReqFields,
+ const RArray<TBool>& aAvailFields)
+ {
+
+ _LIT(KPosFieldAvailableErr, "Method IsPositionFieldAvailable return incorrect value, should be availabe");
+ _LIT(KPosFieldAvailableErr2, "Method IsPositionFieldAvailable return incorrect value, should not be available");
+
+ TInt err=0;
+ for (TInt i=0; i<aReqFields.Count(); i++)
+ {
+ if (aAvailFields[i])
+ {
+ AssertTrueSecL(aLandmark.IsPositionFieldAvailable((TUint16)aReqFields[i]), KPosFieldAvailableErr);
+ TPtrC value;
+ err = aLandmark.GetPositionField((TUint16)aReqFields[i], value);
+ AssertTrueSecL(err == KErrNone, KPosFieldAvailableErr, err);
+ }
+ else
+ {
+ AssertTrueSecL(!aLandmark.IsPositionFieldAvailable((TUint16)aReqFields[i]), KPosFieldAvailableErr);
+ TPtrC value;
+ err = aLandmark.GetPositionField((TUint16)aReqFields[i], value);
+ AssertTrueSecL(err == KErrNotFound, KPosFieldAvailableErr2, err);
+ }
+ }
+
+ // Check some fields not avail
+
+ for (TUint16 j = EPositionFieldCompassCapabilitiesBegin; j <=EPositionFieldCompassCapabilitiesBegin+50; j++)
+ {
+ AssertTrueSecL(!aLandmark.IsPositionFieldAvailable(j), KPosFieldAvailableErr2);
+ TPtrC value;
+ err = aLandmark.GetPositionField(j, value);
+ AssertTrueSecL(err == KErrNotFound, KPosFieldAvailableErr2, err);
+ }
+ for (TUint16 k =EPositionFieldSatelliteCapabilitiesBegin; k <=EPositionFieldSatelliteGeoidalSeparation; k++)
+ {
+ AssertTrueSecL(!aLandmark.IsPositionFieldAvailable(k), KPosFieldAvailableErr2);
+ TPtrC value;
+ err = aLandmark.GetPositionField(k, value);
+ AssertTrueSecL(err == KErrNotFound, KPosFieldAvailableErr2, err);
+ }
+
+ AssertTrueSecL(!aLandmark.IsPositionFieldAvailable(EPositionFieldIdLast), KPosFieldAvailableErr2);
+ TPtrC value;
+ err = aLandmark.GetPositionField(EPositionFieldIdLast, value);
+ AssertTrueSecL(err == KErrNotFound, KPosFieldAvailableErr2, err);
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::ChechPartialLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::CheckPartialLandmarkL(const CPosLandmark& aLandmark,
+ const CPosLandmark::TAttributes& aAttr)
+ {
+ _LIT(KPartialIdErr, "Incorrect Id when reading from a Partial landmark");
+ _LIT(KPartialCategoryInfoErr, "Incorrect Category info when reading from a Partial landmark");
+
+ TPosLmItemId id = aLandmark.LandmarkId();
+ AssertTrueSecL(id != 0, KPartialIdErr);
+
+ TInt err;
+ TPtrC name;
+ err = aLandmark.GetLandmarkName(name);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::ELandmarkName, err);
+
+ TReal32 coverageR;
+ err = aLandmark.GetCoverageRadius(coverageR);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::ECoverageRadius, err);
+
+ TPtrC desc;
+ err = aLandmark.GetLandmarkDescription(desc);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EDescription, err);
+
+ TPtrC iconName;
+ TInt iconIndex;
+ TInt iconMaskIndex;
+ err = aLandmark.GetIcon(iconName, iconIndex, iconMaskIndex);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EIcon, err);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ aLandmark.GetCategoriesL(categories);
+ if (aAttr & CPosLandmark::ECategoryInfo)
+ {
+ AssertTrueSecL(categories.Count() != 0, KPartialCategoryInfoErr);
+ }
+ else
+ {
+ AssertTrueSecL(categories.Count() == 0, KPartialCategoryInfoErr);
+ }
+ CleanupStack::PopAndDestroy(&categories);
+
+ TLocality loc;
+ err = aLandmark.GetPosition(loc);
+ CheckPartialErrorCodeL(aAttr & CPosLandmark::EPosition, err);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp18::ChechPartialErrorCodeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp18::CheckPartialErrorCodeL(const TBool aPartial, const TInt aErr)
+ {
+ _LIT(KPartialLmErr, "Incorrect error code returned when reading from a Partial landmark");
+
+ if (aPartial)
+ {
+ AssertTrueSecL(aErr == KErrNone, KPartialLmErr);
+ }
+ else
+ {
+ AssertTrueSecL(aErr == KErrNotFound, KPartialLmErr);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp19.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,269 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp19.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp19::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp19::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+
+ iCategoryIds.Close();
+ iCategoryNames.ResetAndDestroy();
+
+ iGlobalCategoryNames.Close();
+ iGlobalCategoryIds.Close();
+
+ iCategories.ResetAndDestroy();
+ iCategories.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp19::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp19::StartL()
+ {
+ iLog->Log(_L("**** Testing CPosCategoryManager():: GetCategoires methods ****"));
+
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL(); // return default database
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L(" Default database opened and initialised "));
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+
+ // Test with non-global categories
+ TestGetByNameL();
+
+ /*
+ * Test with global categories
+ */
+
+ // Added for testing
+ ExecuteAndDeleteLD(iCategoryManager->ResetGlobalCategoriesL());
+
+ iLog->Log(_L(" ******** Testing with global categories ******"));
+
+ TestGetGlobalL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp19::TestGetGlobal
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp19::TestGetGlobalL()
+ {
+ _LIT(KGetGlobalErr, "GetGlobalCategoryL should return KPosLmNullItemId for category Id = 0");
+ _LIT(KGetGlobalErr2, "GetGlobalCategoryL should return KPosLmNullItemId for non existing categories"); // Rajesh : Commented
+
+ SetupGlobalCategoriesL();
+ TBuf<100> info;
+ info.Zero();
+ TPosLmItemId id(0);
+
+ /*
+ * Test with global categories
+ */
+ iLog->Log(_L("Testing GetGlobalCategoryL() with non existing global category( catId 0 )"));
+ id = iCategoryManager->GetGlobalCategoryL(0);
+ AssertTrueSecL(id == KPosLmNullItemId, KGetGlobalErr);
+
+ iLog->Log(_L("Testing GlobalCategoryNameL() with non existing global category (catid 0)"));
+ HBufC* name = iCategoryManager->GlobalCategoryNameL(0);
+ CleanupStack::PushL(name);
+ AssertTrueSecL(name == NULL, KGetGlobalErr);
+ CleanupStack::PopAndDestroy(name);
+
+ // Test with non existing category id
+ iLog->Log(_L("Testing GetGlobalCategoryL() with non existing global category (CatId = 500)"));
+ id = iCategoryManager->GetGlobalCategoryL(500);
+ AssertTrueSecL(id == KPosLmNullItemId, KGetGlobalErr2);
+
+ iLog->Log(_L("Testing GlobalCategoryNameL() with non existing global category (CatId = 500)"));
+ name = iCategoryManager->GlobalCategoryNameL(500);
+ CleanupStack::PushL(name);
+ AssertTrueSecL(name == NULL, KGetGlobalErr2);
+ CleanupStack::PopAndDestroy(name);
+
+ iLog->Log(_L("Testing GetGlobalCategoryL() and GlobalCategoryNameL() with valid categories)"));
+
+ for (TInt i=0; i<iGlobalCategoryNames.Count(); i++)
+ {
+ // Get the id of the global category in the db
+ TPosLmItemId catId = iCategoryManager->GetGlobalCategoryL(iGlobalCategoryIds[i]);
+ CPosLandmarkCategory* category = iCategoryManager->ReadCategoryLC( catId );
+
+ // Compare the Ids of the global categories
+ if ( category->GlobalCategory() != iGlobalCategoryIds[i])
+ {
+ iLog->Log(_L("Incorrect category id returned"));
+ _LIT(KIds, "Expected: %d, returned %d");
+ info.Format(KIds, iGlobalCategoryIds[i], category->GlobalCategory());
+ iLog->Log(info);
+ info.Zero();
+ User::Leave(KErrGeneral);
+ }
+ CleanupStack::PopAndDestroy( category);
+
+ HBufC* name = iCategoryManager->GlobalCategoryNameL(iGlobalCategoryIds[i]);
+ CleanupStack::PushL(name);
+
+ if (name->CompareC(*iGlobalCategoryNames[i]))
+ {
+ iLog->Log(_L("Incorrect global category name"));
+ iLog->Log(_L("Expected: "));
+ iLog->Log(*iGlobalCategoryNames[i]);
+ iLog->Log(_L("Returned: "));
+ iLog->Log(*name);
+ User::Leave(KErrGeneral);
+ }
+ CleanupStack::PopAndDestroy(name);
+ }
+ }
+
+// ---------------------------------------------------------
+// CLandmarkTestProcedureBase::SetupGlobalCategoriesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+ void CPosTp19::SetupGlobalCategoriesL()
+ {
+ ReadGlobalCategoriesFromResourceL( iGlobalCategoryIds, iGlobalCategoryNames );
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp19::TestGetByName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp19::TestGetByNameL()
+ {
+ _LIT(KEmptyStringErr, "GetCategoryL with an empty string should return KErrArgument, not %d");
+ _LIT(KMaxStringErr, "GetCategoryL with an maximum length string should return KErrArgument, not %d");
+ _LIT(KNotFoundErr, "GetCategoryL should return KPosLmNullItemId for a category that doesn't exist in the db, not %d");
+
+ iLog->Log(_L(" Testing CPosCategoryManager::GetCategoryL() with wrong arguement (Empty name string)"));
+ TRAPD(err, iCategoryManager->GetCategoryL(_L("")));
+ AssertTrueSecL(err == KErrArgument, KEmptyStringErr, err);
+
+ iLog->Log(_L(" Testing CPosCategoryManager::GetCategoryL() with wrong arguement (Name not existing)"));
+ TPosLmItemId categoryId = iCategoryManager->GetCategoryL(_L("kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
+ AssertTrueSecL(categoryId == KPosLmNullItemId, KNotFoundErr, categoryId);
+
+ // Test with maximum lenght of name
+ iLog->Log(_L(" Testing CPosCategoryManager::GetCategoryL() with wrong arguement (With max length of Name not existing)"));
+ _LIT(KMaxName124, "Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12_ABC");
+ categoryId = iCategoryManager->GetCategoryL(KMaxName124);
+ AssertTrueSecL(categoryId == KPosLmNullItemId, KNotFoundErr, categoryId);
+
+ // Test with more than maximum lenght of name
+ iLog->Log(_L(" Testing CPosCategoryManager::GetCategoryL() with wrong arguement (With more than max length of Name not existing)"));
+ _LIT(KMaxName, "Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12Category12");
+ TRAP(err, iCategoryManager->GetCategoryL(KMaxName));
+ AssertTrueSecL(err == KErrArgument, KMaxStringErr, err);
+
+ // Add some categories and verify the addition
+ iLog->Log(_L(" Testing with some valid categories in the database ( +ve testing )"));
+ AddCategoriesL (10);
+ VerifyAddedCategoriesL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp19:AddCategoriesL
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp19::AddCategoriesL( TInt aNumofCats )
+ {
+ _LIT(KName, "Category - %d");
+ TInt err = KErrLocked;
+ for (TUint i = 0; i<aNumofCats ; i++)
+ {
+ TBuf<100> categoryName;
+ categoryName.Format( KName,i );
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL( categoryName );
+ err = KErrLocked;
+ while ( err == KErrLocked )
+ {
+ TRAP(err, iCategoryManager->AddCategoryL( *lmc ));
+ }
+ iCategories.Append(lmc);
+ CleanupStack::Pop( lmc );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp19:VerifyAddedCategoriesL()
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp19::VerifyAddedCategoriesL()
+ {
+ TInt noOfCats = iCategoryNames.Count();
+ // Verify the added categories
+ for ( TUint i = 0; i < noOfCats; i++ )
+ {
+ CPosLandmarkCategory* cat = iCategories[i];
+ TPtrC catName;
+ cat->GetCategoryName( catName );
+ // Get the categories from the database using name
+ TPosLmItemId catId = iCategoryManager->GetCategoryL( catName);
+
+ if ( catId != cat->CategoryId())
+ {
+ TBuf<150> buf;
+ buf.Format(_L("Unable to verify the added non-global category Id %d "), cat->CategoryId() );
+ iLog->Log(buf);
+ User::Leave(-1);
+ }
+ }
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp2.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp2.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <ecom.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp2::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp2::StartL()
+ {
+ _LIT(KMoveDllErr, "Move of the Local Acces Provider dll failed with %d");
+ _LIT(KMoveRscErr, "Move of the Local Acces Provider rsc failed with %d");
+ _LIT(KLeaveErr, "CPosLandmarkDatabase::OpenL() doesn't leave with KErrNotSupported");
+ _LIT(KOpenErr, "CPosLandmarkDatabase::OpenL() failed with %d");
+
+ _LIT(KMoveToPath, "c:\\system\\test\\");
+ _LIT(KPluginMovedToPathDll, "c:\\system\\test\\eposlmlocalaccessprovider.dll");
+ _LIT(KPluginMovedToPathRsc, "c:\\system\\test\\eposlmlocalaccessprovider.RSC");
+
+ /*
+ // Before
+ //_LIT(KPluginMovedToPathRsc, "c:\\system\\test\\101FDF89.RSC");
+
+ _LIT(KPluginsPath, "c:\\system\\libs\\plugins\\");
+ _LIT(KDll, "c:\\system\\libs\\plugins\\eposlmlocalaccessprovider.dll");
+ _LIT(KRsc,"c:\\system\\libs\\plugins\\101FDF89.RSC");
+ */
+
+ _LIT(KPluginsPath, "c:\\sys\\bin\\");
+ _LIT(KPluginsResourcePath, "c:\\resource\\plugins\\");
+ _LIT(KDll, "c:\\sys\\bin\\eposlmlocalaccessprovider.dll");
+ _LIT(KRsc,"c:\\resource\\plugins\\eposlmlocalaccessprovider.RSC");
+
+//#ifdef __WINS__
+// _LIT(KCanceledErr, "Test canceled");
+// _LIT(KMoveDll, "Move Epoc32\\release\\winscw\\udeb\\eposlmlocalaccessprovider.dll to c:\\sys\\bin\\ \
+// and z:\\resource\\plugins\\eposlmlocalaccessprovider.rsc to c:\\resource\\plugins, press OK when done.");
+// TUtfwUserAnswer answer;
+// answer = iUserInfo->ShowDialog(KMoveDll, EUtfwDialogTypeOkCancel, EFalse);
+// AssertTrueSecL(answer == EUtfwUserAnswerOk, KCanceledErr, KErrCancel);
+//#endif
+
+ CPosLandmarkDatabase* lmd=CPosLandmarkDatabase::OpenL();
+ delete lmd;
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ REComSession ecom = REComSession::OpenL();
+ CleanupClosePushL(ecom);
+
+ TRequestStatus status;
+
+ TInt err;
+ err = fileMan->Move(KDll, KMoveToPath, CFileMan::EOverWrite);
+ AssertTrueSecL(err == KErrNone, KMoveDllErr, err);
+ err = fileMan->Move(KRsc, KMoveToPath, CFileMan::EOverWrite);
+ AssertTrueSecL(err == KErrNone, KMoveRscErr, err);
+
+ ecom.NotifyOnChange(status);
+ User::WaitForRequest(status); // Wait for Ecom
+
+ CPosLandmarkDatabase* lmd2=NULL;
+ TRAP(err, lmd2=CPosLandmarkDatabase::OpenL());
+ delete lmd2;
+ if (err)
+ {
+ AssertTrueSecL(err == KErrNotFound || err == KErrNotSupported, KLeaveErr, err);
+ }
+ else
+ {
+ AssertTrueSecL(err == KErrNotFound || err == KErrNotSupported, KLeaveErr);
+ }
+
+ err = fileMan->Move(KPluginMovedToPathDll, KPluginsPath, CFileMan::EOverWrite);
+ AssertTrueSecL(err == KErrNone, KMoveDllErr, err);
+ err = fileMan->Move(KPluginMovedToPathRsc, KPluginsResourcePath, CFileMan::EOverWrite);
+ AssertTrueSecL(err == KErrNone, KMoveRscErr, err);
+
+ ecom.NotifyOnChange(status);
+ User::WaitForRequest(status); // Wait for Ecom
+
+ CPosLandmarkDatabase* lmd3=NULL;
+ TRAP(err, lmd3 = CPosLandmarkDatabase::OpenL());
+ delete lmd3;
+ AssertTrueSecL(err == KErrNone, KOpenErr, err);
+
+ CleanupStack::PopAndDestroy(3, &fs);
+
+// #ifdef __WINS__
+// _LIT(KRestoreTest, "Restore c:\\sys\\bin\\eposlmlocalaccessprovider.dll to Epoc32\\release\\winscw\\udeb\\ and \
+// c:\\resource\\plugins\\eposlmlocalaccessprovider.rsc to z:\\resource\\plugins ");
+// answer = iUserInfo->ShowDialog(KRestoreTest, EUtfwDialogTypeOk, EFalse);
+// #endif
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp2::WaitForEcomL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp2::WaitForEcomL()
+ {
+ REComSession ecom = REComSession::OpenL();
+ CleanupClosePushL(ecom);
+ TRequestStatus status;
+ ecom.NotifyOnChange(status);
+ User::WaitForRequest(status);
+ CleanupStack::PopAndDestroy(&ecom);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp20.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,358 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp20.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+// See file eposlmglobalcategories02.rss in testdata for category Bar
+//_LIT(KICONFILE, "c:\\system\\data\\test2.mbm");
+//const TInt KTP20IconIndex = 2;
+//const TInt KTP20IconMaskIndex = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp20::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp20::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+ iGlobalCategoryIds.Close();
+ iGlobalCategoryNames.Close();
+ iGlobalCategoryTestNames.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp20::RemoveAllCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp20::RemoveAllCategoriesL()
+ {
+ iLog->Log(_L("RemoveAllCategoriesL"));
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ CPosLmItemIterator* iter = catMan->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ if (iter->NumOfItemsL() > 0)
+ {
+ iter->GetItemIdsL(ids, 0, iter->NumOfItemsL());
+ ExecuteAndDeleteLD(catMan->RemoveCategoriesL(ids));
+ }
+
+ CleanupStack::PopAndDestroy(&ids);
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(catMan);
+ }
+
+// ---------------------------------------------------------
+// CPosTp20::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp20::StartL()
+ {
+ iLog->Log(_L("**** Testing CPosCategoryManager::ResetGlobalCategories() ********"));
+ /*
+ * Open the default landmark database
+ * By default it is initialized with global categories (Assumption based on global categories API specification)
+ * Test the Reset global categories functionality
+ */
+
+ TBuf<150> info;
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L("Default database opened and initialised"));
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ // Setup global category info
+ SetupGlobalCategoriesL();
+
+ iLog->Log(_L("Execute ResetGlobalCategoriesL() synchronously)"));
+
+ // Rename some global categories
+ UpdateGlobalCategoriesInDb();
+
+ iLog->Log(_L("Global category info updated in database (Renaming category done)"));
+
+ // Execute synchronously
+ // Reset the global categories (the name and icon info of the global category will be reset)
+ ExecuteAndDeleteLD(iCategoryManager->ResetGlobalCategoriesL());
+
+ /*
+ * Verification of 'reset' feature of global categories
+ * Check for global category with name 'Hotel' and it should not exist
+ * Check for global category having name 'Accomodation'
+ */
+ VerifyGlobalCategoriesL();
+
+ iLog->Log(_L("Verification of CPosCategoryManager::ResetGlobalCategories() done)"));
+
+
+ iLog->Log(_L("Execute ResetGlobalCategoriesL() asynchronously)"));
+ // Rename some global categories
+ UpdateGlobalCategoriesInDb();
+
+ iLog->Log(_L("Global category info updated in database (Renaming category done)"));
+
+ // Execute asynchronously
+ RunAsyncOperationLD(iCategoryManager->ResetGlobalCategoriesL());
+ VerifyGlobalCategoriesL();
+
+ iLog->Log(_L("Verification of CPosCategoryManager::ResetGlobalCategories() done)"));
+
+
+ iLog->Log(_L("Execute ResetGlobalCategoriesL() Asynchronously using User::WaitForRequest())"));
+
+ // Rename some global categories
+ UpdateGlobalCategoriesInDb();
+
+ iLog->Log(_L("Global category info updated in database (Renaming category done)"));
+
+ // Execute asynchronously using User::WaitForRequest()
+ CPosLmOperation* op = iCategoryManager->ResetGlobalCategoriesL();
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ VerifyGlobalCategoriesL();
+
+ iLog->Log(_L("Verification of CPosCategoryManager::ResetGlobalCategories() done)"));
+
+ iLog->Log(_L("Execute ResetGlobalCategoriesL() using Cancel immediately, after a while etc..."));
+ // Rename some global categories
+ UpdateGlobalCategoriesInDb();
+
+ // Test cancel immediately
+ RunAsyncOperationAndCancelLD(iCategoryManager->ResetGlobalCategoriesL());
+
+ // Test cancel after a while
+ RunAsyncOperationAndCancelInCallbackLD(iCategoryManager->ResetGlobalCategoriesL());
+
+ ExecuteAndDeleteLD(iCategoryManager->ResetGlobalCategoriesL());
+ VerifyGlobalCategoriesL();
+ iLog->Log(_L("Verification of CPosCategoryManager::ResetGlobalCategories() done)"));
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp20::UseGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp20::UpdateGlobalCategoriesInDb()
+ {
+ /*
+ * Change some properties of the existing global category (changing only the name here)
+ */
+
+ TBuf<150>info;
+ // Get sample global category info
+ TPosLmItemId catId(0);
+ TPosLmItemId catId1(0);
+ CPosLandmarkCategory* category = NULL;
+
+ for (TUint i = 0; i< iGlobalCategoryNames.Count(); i++)
+ {
+ catId = iCategoryManager->GetGlobalCategoryL(iGlobalCategoryIds[i]);
+ category = iCategoryManager->ReadCategoryLC( catId );
+ category->SetCategoryNameL( iGlobalCategoryTestNames[i] );
+ iCategoryManager->UpdateCategoryL( *category );
+ CleanupStack::PopAndDestroy( category );
+
+ // Verify whether the added category exists with same global category id or not
+ catId1 = iCategoryManager->GetCategoryL( iGlobalCategoryTestNames[i] );
+
+ //Read the landmark from the database
+ category = iCategoryManager->ReadCategoryLC( catId1 );
+
+ // verify whether this is a global category or not (Accomodation)
+
+ if ( category->GlobalCategory() != iGlobalCategoryIds[i] )
+ {// Error in category updation/verification
+ iLog->Log(_L("Error in global category verification"));
+ info.Zero();
+ info.Format(_L("Expected global category id %d"), iGlobalCategoryIds[i] );
+ info.Format(_L("Returned global category id %d"), category->GlobalCategory() );
+ iLog->Log( info );
+ info.Zero();
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy( category );
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp20::SetupGlobalCategoriesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CPosTp20::SetupGlobalCategoriesL()
+ {
+ // Testing with only 3 global categories
+ ReadGlobalCategoriesFromResourceL( iGlobalCategoryIds, iGlobalCategoryNames, 3 );
+
+ iGlobalCategoryTestNames.Append(_L("Housing"));
+ iGlobalCategoryTestNames.Append(_L("Movies"));
+ iGlobalCategoryTestNames.Append(_L("Society"));
+ }
+
+
+
+
+// ---------------------------------------------------------
+// CPosTp20::VerifyGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp20::VerifyGlobalCategoriesL(TBool /*aCheck */)
+ {
+ // Search database based on the new names of the global categories
+ TBuf<100> info;
+ info.Zero();
+
+ TPosLmItemId catId( 0 );
+
+ for ( TUint i = 0; i < iGlobalCategoryNames.Count(); i++ )
+ {
+ // Search based on the Test names (with which the global category was renamed!)
+ catId = iCategoryManager->GetCategoryL(iGlobalCategoryTestNames[i]);
+
+ if ( catId != KPosLmNullItemId )
+ {
+ iLog->Log(_L("Error in global category reset functionality verification"));
+ info.Zero();
+ info.Format(_L("Expected global category id %d"), KPosLmNullItemId );
+ info.Format(_L("Returned global category id %d"), catId );
+ iLog->Log( info );
+ info.Zero();
+ User::Leave(-1);
+ }
+
+ // Search for old names of the global category
+ catId = iCategoryManager->GetCategoryL( *iGlobalCategoryNames[i] );
+ CPosLandmarkCategory* category = iCategoryManager->ReadCategoryLC( catId );
+
+ // Get the global category id
+ if ( category->GlobalCategory() )
+ {
+ if ( category->GlobalCategory() != iGlobalCategoryIds[i] )
+ {
+ iLog->Log(_L("Error in global category reset functionality verification"));
+ info.Zero();
+ info.Format(_L("Expected global category id %d"), iGlobalCategoryIds[i] );
+ info.Format(_L("Returned global category id %d"), catId );
+ iLog->Log( info );
+ info.Zero();
+ User::Leave(-1);
+ }
+ }
+ CleanupStack::PopAndDestroy(category);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp20::RenameAndDeleteGlobalL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp20::RenameAndDeleteGlobalL()
+ {
+ const TPosLmGlobalCategory KRemoveGlobalId1 = 1;
+ const TPosLmGlobalCategory KRemoveGlobalId2 = 11;
+
+ const TPosLmGlobalCategory KRenameGlobalId1 = 3;
+ const TPosLmGlobalCategory KRenameGlobalId2 = 12;
+
+ TBuf<150> buf;
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ TPosLmItemId id = iCategoryManager->GetGlobalCategoryL(KRemoveGlobalId1);
+ HBufC* name = iCategoryManager->GlobalCategoryNameL(KRemoveGlobalId1);
+ CleanupStack::PushL(name);
+ buf.Format(_L("Removing global category %S"), name);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(name);
+ CPosLmOperation* op = iCategoryManager->RemoveCategoryL(id);
+ ExecuteAndDeleteLD(op);
+
+ id = iCategoryManager->GetGlobalCategoryL(KRemoveGlobalId2);
+ name = iCategoryManager->GlobalCategoryNameL(KRemoveGlobalId2);
+ CleanupStack::PushL(name);
+ buf.Zero();
+ buf.Format(_L("Removing global category %S"), name);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(name);
+ op = iCategoryManager->RemoveCategoryL(id);
+ ExecuteAndDeleteLD(op);
+
+ id = iCategoryManager->GetGlobalCategoryL(KRenameGlobalId1);
+
+ name = iCategoryManager->GlobalCategoryNameL(KRenameGlobalId1);
+ CleanupStack::PushL(name);
+ buf.Format(_L("Renaming global category %S to Jada jada"), name);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(name);
+
+ CPosLandmarkCategory* cm = iCategoryManager->ReadCategoryLC(id);
+ cm->SetCategoryNameL(_L("Jada jada"));
+ iCategoryManager->UpdateCategoryL(*cm);
+ CleanupStack::PopAndDestroy(cm);
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ id = iCategoryManager->GetGlobalCategoryL(KRenameGlobalId2);
+ name = iCategoryManager->GlobalCategoryNameL(KRenameGlobalId2);
+ CleanupStack::PushL(name);
+ buf.Format(_L("Renaming global category %S to asdfasdas"), name);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(name);
+ cm = iCategoryManager->ReadCategoryLC(id);
+ cm->SetCategoryNameL(_L("asdfasdas"));
+ iCategoryManager->UpdateCategoryL(*cm);
+ CleanupStack::PopAndDestroy(cm);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp21.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,780 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+
+#include "FT_CPosTp21.h"
+#include "FT_CCategoryLandmarkSearchResult.h"
+#include <EPos_CPosLmCatNameCriteria.h>
+
+//CONSTANTS
+const TInt KNoCategoriesTp21 = 40;
+const TInt KNoLandmarksTp21 = 40;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp29::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::CloseTest()
+ {
+ iCategories.ResetAndDestroy();
+ iCategories.Close();
+ iReferencedCategories.Close();
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iCategoryManager;
+ iCategoryManager = NULL;
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::StartL()
+ {
+
+ iLog->Log(_L("***Testing CPosLandmarkSearch:: ( LM Search Category Criteria) *** "));
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ iLog->Log(_L("Default database initialized"));
+
+
+ // Remove all the categories and landmarks from database to make it empty
+ MakeEmptyLmDatabaseL( *iDatabase, *iCategoryManager);
+
+ // Add some landmarks to db
+ // Add some categories to db
+ // Add categories to lms in the database
+ AddCategoriesL();
+ AddLandmarksL();
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ // Test some leave codes
+ iLog->Log(_L("Check that StartLandmarkSearchL leaves with correct codes "));
+ SearchWithSortOrderL();
+
+ // Search synchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt syncronously, \
+using CategoryName"));
+
+ SearchL(iCategoryLandmarkSearchResults, ETrue);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt syncronously, \
+using CategoryId"));
+ SearchL(iCategoryLandmarkSearchResults);
+
+ iLog->Log(_L("Searching fon nonexisting entries synchronously"));
+ SearchNonExistingL(ESynchronous);
+
+ // Search asynchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asynchronously, \
+using CategoryName"));
+ SearchL(iCategoryLandmarkSearchResults, ETrue, EAsynchronous);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asynchronously, \
+using Categoryid"));
+ SearchL(iCategoryLandmarkSearchResults, EFalse, EAsynchronous);
+
+ iLog->Log(_L("Searching for nonexisting entries asynchronously"));
+ SearchNonExistingL(EAsynchronous);
+
+ // Search asynchronously using User::WaitForRequest()
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asynchronously, \
+with User::WaitForRequest() using CategoryName"));
+ SearchL(iCategoryLandmarkSearchResults, ETrue, EWaitForRequest);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asynchronously, \
+with User::WaitForRequest() using Categoryid"));
+ SearchL(iCategoryLandmarkSearchResults, EFalse, EWaitForRequest);
+
+ iLog->Log(_L("Searching for nonexisting entries asynchronously"));
+ SearchNonExistingL(EWaitForRequest);
+
+
+ // Test cancel
+ iLog->Log(_L("Search and cancels the search"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Search and cancels the search in a callback"));
+ SearchAndCancelL(ETrue);
+
+ // Search in global categories
+ iLog->Log(_L("SearchForLandmarksInGlobalCategoriesL asynchronously"));
+ SearchForLandmarksInGlobalCategoriesL(EAsynchronous);
+
+ iLog->Log(_L("SearchForLandmarksInGlobalCategoriesL synchronously"));
+ SearchForLandmarksInGlobalCategoriesL(ESynchronous);
+
+ iLog->Log(_L("SearchForLandmarksInGlobalCategoriesL synchronously"));
+ SearchForLandmarksInGlobalCategoriesL(EWaitForRequest);
+
+ iLog->Log(_L("Check maximum length of search pattern"));
+ TestSearchPatternLengthL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::SearchL(
+ const RPointerArray<CCategoryLandmarkSearchResult>& /* aSearchResults */,
+ TBool aNameOrId,
+ TExecutionMode aExecutionMode)
+ {
+ /*
+ * Positive test cases
+ * Test for referenced category search
+ */
+
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+
+ //Test SetMaxNumOfMatches, first set to one and then back to unlimited
+ iLandmarkSearch->SetMaxNumOfMatches(1);
+ iLandmarkSearch->SetMaxNumOfMatches();
+
+ TPtrC refCatName;
+ TPosLmItemId refCatId(0);
+
+ for ( TInt i = 0; i < iReferencedCategories.Count(); i++ )
+ {
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ // Perform search with either name or id
+ if (aNameOrId)
+ {
+ // Set cearch criteria based on category name
+ TInt retErr = iReferencedCategories[i]->GetCategoryName( refCatName );
+ if ( retErr == KErrNone)
+ {
+ catSearchCriteria->SetCategoryNameL( refCatName );
+ //iLog->Log( refCatName );
+ }
+ }
+ else
+ {
+ refCatId = iReferencedCategories[i]->CategoryId();
+ catSearchCriteria->SetCategoryItemId( refCatId );
+ }
+
+ //aSearchOnlyPreviousMatches is set to false by default
+ iOperation = iLandmarkSearch->StartLandmarkSearchL( *catSearchCriteria );
+
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ /* iter->NumOfItems() contains the number of items that are contained in this search
+ * iteration
+ */
+
+ TPosLmItemId id = iter->NextL(); // First item from the search results
+
+ if ( iLandmarkSearch->NumOfMatches() != iter->NumOfItemsL() )
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format( KExpected, iter->NumOfItemsL() );
+ iLog->Log( info );
+ info.Format( KReturned, iLandmarkSearch->NumOfMatches() );
+ iLog->Log(info);
+ iLog->Log(KNumOfMatchesErr);
+ CleanupStack::PopAndDestroy( 2 ); // Iter,catSearchCriteria
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy( iter );
+
+ // Test by setting Max num of matches and also set aSearchOnlyPreviousMatches to true
+
+ iLandmarkSearch->SetMaxNumOfMatches(1);
+
+ if ( aNameOrId )
+ {
+ refCatId = iReferencedCategories[i]->CategoryId();
+ catSearchCriteria->SetCategoryItemId( refCatId );
+ }
+ else
+ {
+ // Set cearch criteria based on category name
+ TInt retErr = iReferencedCategories[i]->GetCategoryName( refCatName );
+ if ( retErr == KErrNone)
+ {
+ catSearchCriteria->SetCategoryNameL( refCatName );
+ //iLog->Log( refCatName );
+ }
+ }
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria, ETrue);
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+ id = iter->NextL();
+
+ if (iLandmarkSearch->NumOfMatches() != 1)
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, 1);
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(catSearchCriteria->CategoryName());
+ iLog->Log(KNumOfMatchesErr);
+ CleanupStack::PopAndDestroy( 2 ); // Iter,catSearchCriteria
+ User::Leave(-1);
+ }
+
+ // Set back to unlimited
+ iLandmarkSearch->SetMaxNumOfMatches();
+ CleanupStack::PopAndDestroy( 2 ); // Iter,catSearchCriteria
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::SearchForLandmarksInGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::SearchForLandmarksInGlobalCategoriesL(
+ TExecutionMode aExecutionMode)
+ {
+ iLog->Log(_L("SearchForGlobalCategoriesL"));
+ TBuf<150> buf; // Buffer used for log messages
+ buf.Zero();
+
+ /*
+ *Default db is open in the beginning of the test procedure anyway
+ *Use it for global categories related testing
+ */
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ // Using default database with global cateegories initialized
+ // Add some more landmarks
+ AddLandmarksToGlobalCategoriesL();
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // Set the criteria for global category search
+ catSearchCriteria->SetGlobalCategory( KAccommodation );
+ if ( catSearchCriteria->GlobalCategory() == KPosLmNullGlobalCategory ) // Error in setting category search criteria
+ {
+ iLog->Log(_L("Error in setting Search criteria for global category search"));
+ buf.Format(_L("What should be set : global cat id %d, "), KAccommodation);
+ buf.Format(_L("What is set now : global cat id %d, "), catSearchCriteria->GlobalCategory() );
+ iLog->Log( buf );
+ buf.Zero();
+ CleanupStack::PopAndDestroy( catSearchCriteria );
+ User::Leave(-1);
+ }
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL( *catSearchCriteria );
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ /*
+ * Verify the search result
+ * iter->NumOfItems holds the total number of searched items in this iteration
+ */
+
+ if ( iLandmarkSearch->NumOfMatches() != iter->NumOfItemsL() )
+ {
+ iLog->Log(_L("Wrong number of landmarks returned global category search (Accomodation)"));
+ buf.Format(_L("Expected : Num %d, "), iter->NumOfItemsL());
+ buf.Format(_L("Found : Num %d, "), iLandmarkSearch->NumOfMatches() );
+ buf.Zero();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ User::Leave( -1 );
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::AddLandmarksToGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::AddLandmarksToGlobalCategoriesL()
+ {
+ iLog->Log(_L("AddLandmarksToGlobalCategoriesL"));
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ CPosLandmark* lm = NULL;
+
+ // Add some new landmarks to the db, associate some with global categories
+
+ // lm1
+ lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("LandmarkName1"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription"));
+ lm->AddCategoryL( KAccommodation );
+ lm->AddCategoryL( KBusiness );
+
+ TPosLmItemId id = iDatabase->AddLandmarkL(*lm);
+ iRestaurantId1 = id;
+ CleanupStack::PopAndDestroy(lm);
+
+ // lm2
+ lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("LandmarkName2"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription2"));
+ lm->AddCategoryL(KAccommodation );
+ lm->AddCategoryL( KBusiness );
+ id = iDatabase->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ // lm3
+ lm = CPosLandmark::NewLC();
+ lm->SetLandmarkNameL(_L("LandmarkName3"));
+ lm->SetLandmarkDescriptionL(_L("SomeLandmarkDescription3"));
+ lm->AddCategoryL( KAccommodation );
+ lm->AddCategoryL( KBusiness );
+ lm->AddCategoryL( KEducational );
+ id = iDatabase->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::SearchNonExistingL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::SearchNonExistingL(TExecutionMode aExecutionMode)
+ {
+ iLog->Log(_L("SearchNonExistingL"));
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ catSearchCriteria->SetCategoryNameL(_L("NonExistingLandmark"));
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria);
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ if (id != KPosLmNullItemId)
+ {
+ //LogErrorAndLeave(_L("Should return KPosLmNullItemId"));
+ iLog->Log(_L("Should return KPosLmNullItemId"));
+ User::Leave(-1);
+ }
+ CleanupStack::PopAndDestroy(iter);
+
+ TPosLmItemId nonExistingId = 56789;
+ catSearchCriteria->SetCategoryItemId(nonExistingId);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria);
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ id = iter->NextL();
+ if (id != KPosLmNullItemId)
+ {
+ //LogErrorAndLeave(_L("Should return KPosLmNullItemId"));
+ iLog->Log(_L("Should return KPosLmNullItemId"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ //Test with invalid id as global category id
+ catSearchCriteria->SetGlobalCategory((TPosLmGlobalCategory)nonExistingId);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria);
+ ExecuteAndDeleteLD(iOperation);
+
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ id = iter->NextL();
+ if (id != KPosLmNullItemId)
+ {
+ //LogErrorAndLeave(_L("Should return KPosLmNullItemId"));
+ iLog->Log(_L("Should return KPosLmNullItemId"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::SearchWithSortOrderL()
+ {
+ iLog->Log(_L("SearchWithSortOrderL"));
+
+ TPosLmSortPref sortPref(CPosLandmark::ECategoryInfo, TPosLmSortPref::EAscending);
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // Only ECategoryName is supported,all other leave with KErrNotSupported
+ TRAPD(err, iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria, sortPref));
+ if (err != KErrNotSupported) //LogErrorAndLeave(_L("Should leave with KErrNotSupported1"));
+ {
+ iLog->Log(_L("Should leave with KErrNotSupported1"));
+ User::Leave(err);
+ }
+
+ // Only ECategoryName is supported,all other leave with KErrNotSupported
+ catSearchCriteria->SetCategoryNameL(_L("SomeCategory"));
+ TRAP(err, iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria, sortPref));
+ if (err != KErrNotSupported) //LogErrorAndLeave(_L("Should leave with KErrNotSupported2"));
+ {
+ iLog->Log(_L("Should leave with KErrNotSupported2"));
+ User::Leave(err);
+ }
+
+ // Only ECategoryName is supported,all other leave with KErrNotSupported
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::EDescription, TPosLmSortPref::EDescending);
+ TRAP(err, iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria, sortPref));
+ if (err != KErrNotSupported)// LogErrorAndLeave(_L("Should leave with KErrNotSupported3"));
+ {
+ iLog->Log(_L("Should leave with KErrNotSupported3"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+
+ // Also test with a category criteria into a landmarksearch operation
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("SomeCategoryPattern"));
+ TRAP(err, iLandmarkSearch->StartLandmarkSearchL(*nameCriteria, sortPref));
+ if (err != KErrArgument) //LogErrorAndLeave(_L("Should leave with KErrNotSupported4"), err);
+ {
+ iLog->Log(_L("Should leave with KErrNotSupported4"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+
+//---------------------------------------------------------
+// CPosTp21::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KCancelErr, "The search is canceled after progress has increased but no search result is found");
+
+ // Test search with one criteria
+
+ const TInt KIndex = 10; // Try testing with referenced category at index 10
+ TPtrC refCatName;
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ TInt err = iReferencedCategories[KIndex]->GetCategoryName( refCatName );
+ if (err == KErrNone) // Got the category name
+ {
+ catSearchCriteria->SetCategoryNameL( refCatName );
+ }
+ else
+ {
+ iLog->Log(_L("Error in setting category search criteria"));
+ CleanupStack::PopAndDestroy(); // catSearchCriteria
+ User::Leave(-1);
+ }
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(
+ iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(
+ iLandmarkSearch->StartLandmarkSearchL(
+ *catSearchCriteria));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ if (iter->NumOfItemsL() != iLandmarkSearch->NumOfMatches())
+ {
+ iLog->Log(_L("Iterators no. of items is not equal to LandmarksSearch no. matches"));
+ _LIT( KExpected, "Iter. of matches: %d" );
+ _LIT( KReturned, "LandmarksSearch no. of matches: %d" );
+ TBuf<100> info;
+ info.Format( KExpected, iter->NumOfItemsL() );
+ info.Format( KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log( info );
+ iLog->Log( KNumOfMatchesErr );
+ CleanupStack::PopAndDestroy ( 2 );
+ User::Leave(-1);
+ }
+
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancel = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+ AssertTrueSecL(iter->NumOfItemsL() != 0, KCancelErr);
+ }
+
+ CleanupStack::PopAndDestroy( 2 );// Iter, catSearchCriteria
+
+
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::TestSearchPatternLengthL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::TestSearchPatternLengthL()
+ {
+ iLog->Log(_L("TestSearchPatternLengthL"));
+
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ //Test with maximum size of search pattern
+ //KPosLmMaxCategoryNameLength is 124 (from EPos_Landmarks.h)
+ HBufC* hbuf = HBufC::NewLC(KPosLmMaxCategoryNameLength+1);
+ while(hbuf->Des().Length() < KPosLmMaxCategoryNameLength)
+ {
+ hbuf->Des().Append(_L("*"));
+ }
+ catSearchCriteria->SetCategoryNameL(*hbuf);
+
+ hbuf->Des().Append(_L("*"));
+
+ TRAPD(err, catSearchCriteria->SetCategoryNameL(*hbuf));
+
+ AssertTrueSecL(err == KErrArgument, _L("It should not be possible to set search pattern"));
+ CleanupStack::PopAndDestroy(hbuf);
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ }
+
+
+/*
+ * Added for BC testing
+ */
+
+
+// ---------------------------------------------------------
+// CPosTp11::AddCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::AddCategoriesL()
+ {
+ _LIT(KName, "CategoryTP21 - %d");
+ TInt err=KErrLocked;
+ for (TInt i=0; i<KNoCategoriesTp21; i++)
+ {
+ TBuf<100> categoryName;
+ categoryName.Format(KName,i);
+
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(categoryName);
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iCategoryManager->AddCategoryL(*lmc));
+ }
+
+ iCategories.Append(lmc);
+ //TPosLmItemId catId = iCategories [i]->CategoryId();
+ CleanupStack::Pop(lmc);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp11::AddLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp21::AddLandmarksL()
+ {
+ _LIT(KLmName, "LmTP21 - %d");
+ TInt err = KErrLocked;
+ TPosLmItemId catId(0);
+ for (TInt i=0; i<KNoLandmarksTp21; i++)
+ {
+ TBuf<100> lmName;
+ lmName.Format(KLmName,i);
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+
+ if (i % 2)
+ {
+ catId = iCategories[i]->CategoryId();
+ landmark->AddCategoryL( catId );
+ iReferencedCategories.Append(iCategories[i]);
+ }
+
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iDatabase->AddLandmarkL(*landmark));
+ }
+ iLandmarks.Append(landmark);
+ CleanupStack::Pop(landmark);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp21::MakeEmptyLmDatabaseL()
+// ---------------------------------------------------------
+//
+void CPosTp21::MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr )
+ {
+ CPosLmOperation* operation1 = aLdb.RemoveAllLandmarksL();
+
+ //Remove all landmarks from default db : Sync call
+ ExecuteAndDeleteLD( operation1 );
+
+ RArray<TPosLmItemId> catArray;
+ CleanupClosePushL( catArray );
+
+ // Get all the categories from the database and delete them if necessary
+ CPosLmItemIterator* iter = aCatMgr.CategoryIteratorL();
+ CleanupStack::PushL( iter );
+
+ TUint count = iter->NumOfItemsL();
+ if ( count > 0 )
+ { // can only be called if there are some items
+ iter->GetItemIdsL( catArray, 0, count );
+ }
+
+ // Remove all the categories here Sync call
+ ExecuteAndDeleteLD(aCatMgr.RemoveCategoriesL( catArray ));
+
+ CleanupStack::PopAndDestroy( 2 ); // catArray, iter
+ }
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp23.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,778 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp23.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp23::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::CloseTest()
+ {
+ //CHECK TR Delete of landmarks search - ESLI-5WNG9N
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iSearchResults.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::StartL()
+ {
+ _LIT(KEmptyTextCriteriaErr, "An empty string as text criteria should not be allowed");
+
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ TestInvalidPositionFieldsL();
+
+ // Check iterator before search has started (in multidb search all iterators are empty thus NOT NULL)
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ if (iter)
+ {
+ CleanupStack::PushL(iter);
+ AssertTrueSecL(iter->NumOfItemsL() == 0, _L("Iterator should be empty"));
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+
+ iLog->Log(_L("Iterator should NOT be NULL"));
+ User::Leave(-1);
+ }
+
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetAttributesToSearch(attr);
+ textCriteria->SetTextL(_L(""));
+
+ TRAPD(err, iLandmarkSearch->StartLandmarkSearchL(*textCriteria));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ AppendSearchResultsL();
+
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt syncronously"));
+ SearchL(iSearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asyncronously"));
+ SearchL(SearchResults(), EAsynchronous);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asyncronously using User::WaitForRequest"));
+ SearchL(SearchResults(), EWaitForRequest);
+
+ iLog->Log(_L("Testing search with a defined sortorder"));
+ SearchWithSortOrderL(iSearchResults);
+
+ iLog->Log(_L("Testing search anc cancel"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Testing search and cancel in callback"));
+ SearchAndCancelL(ETrue);
+
+ iLog->Log(_L("Testing a redefined search after a landmark has been removed"));
+ SearchAndDeleteL(iSearchResults);
+
+ iLog->Log(_L("Testing a redefined search after landmarks have been renamed"));
+ SearchAndRenameL(iSearchResults);
+
+ iLog->Log(_L("Test max length for SetTextL"));
+ TestMaxLengthL();
+
+ // Verify error report "ESLI-62DBXR Landmarks - Sort order is not correctly implemented"
+ // Check that CPosLandmarkSearch::MatchIteratorL are CPosLandmarkDatabase::LandmarkIteratorL
+ // are sorted correctly (should be identically sorted)
+ VerifySortOrderL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::SearchL(
+ const RPointerArray<CSearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ // Set DisplayData
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[i]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[i]->Attributes());
+
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[i]->PositionFields());
+
+ CPosLmOperation* operation =
+ iLandmarkSearch->StartLandmarkSearchL(*textCriteria, aSearchResults[i]->Redefined());
+ CleanupStack::PushL(operation);
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(operation);
+ CleanupStack::Pop(operation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(operation);
+ CleanupStack::Pop(operation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(operation);
+ CleanupStack::PopAndDestroy(operation);
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != iLandmarkSearch->NumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(textCriteria->Text());
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+
+ }
+
+ //Check displaydata
+ AssertTrueSecL(iter->NumOfItemsL() == displayData->Count(), _L("Wrong number of DisplayData matches"));
+
+ TInt itemId = displayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item = displayData->DisplayItem(itemId);
+
+ if (item.DisplayItemType() != CPosLmDisplayItem::ELandmarkItem)
+ {
+ iLog->Log(_L("ERROR :::::"));
+ iLog->Log(_L("Wrong item returned, only ELandmarkItem should be returned"));
+ User::Leave(-1);
+ }
+
+ if (item.DatabaseIndex() != 0)
+ {
+ // When single search, index should always be 0
+ iLog->Log(_L("Wrong DatabaseIndex, should be 0"));
+ User::Leave(-1);
+
+ }
+
+
+ TInt lmId = item.Landmark().LandmarkId();
+
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(lmId), KNotFoundErr, lmId);
+ itemId = displayData->NewItemIndex();
+ }
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr, id);
+
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::VerifySortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::VerifySortOrderL()
+ {
+ iLog->Log(_L("VerifySortOrderL"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect");
+ _LIT(KNumOfMatchesErr2, "No. of matches in DisplayData is incorrect");
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+ _LIT(KNameMatchError, "The landmark names does not match");
+ _LIT(KNameMatchError2, "The landmark name in DisplayData does not match");
+
+ // Just in case, add some landmarks
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("CategoryA"));
+ TPosLmItemId id1 = iDatabase->AddLandmarkL(*landmark);
+
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Categorya"));
+ TPosLmItemId id2 = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("AA"));
+ TPosLmItemId id3 = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("aa"));
+ TPosLmItemId id4 = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ TPosLmSortPref sortDesc(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ TPosLmSortPref sortAsc(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ // Search pattern "*" should match all existing landmarks -> it is possible to compare
+ // sort order of CPosLandmarkSearch::MatchIteratorL with CPosLandmarkDatabase::LandmarkIteratorL
+ textCriteria->SetTextL(_L("*"));
+
+ // Set DisplayData
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ CPosLmItemIterator* lmDbIter = NULL;
+
+ for (TInt i=0; i<6; i++)
+ {
+ if(i==0)
+ {
+ // Sorted ascending
+ lmDbIter = iDatabase->LandmarkIteratorL(sortAsc);
+ CleanupStack::PushL(lmDbIter);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, sortAsc, EFalse));
+ }
+ else if (i==1)
+ {
+ // Sorted descending
+ lmDbIter = iDatabase->LandmarkIteratorL(sortDesc);
+ CleanupStack::PushL(lmDbIter);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, sortDesc, EFalse));
+ }
+ else if (i==2)
+ {
+ //**** Async search, sorted ascending
+ lmDbIter = iDatabase->LandmarkIteratorL(sortAsc);
+ CleanupStack::PushL(lmDbIter);
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, sortAsc, EFalse));
+ }
+ else if (i==3)
+ {
+ //**** Async search, sorted descending
+ lmDbIter = iDatabase->LandmarkIteratorL(sortDesc);
+ CleanupStack::PushL(lmDbIter);
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, sortDesc, EFalse));
+ }
+ else if (i==4)
+ {
+ //**** Async search with User::WaitForRequest(), sorted ascending
+ lmDbIter = iDatabase->LandmarkIteratorL(sortAsc);
+ CleanupStack::PushL(lmDbIter);
+ CPosLmOperation* op = iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, sortAsc, EFalse);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ else if (i==5)
+ {
+ //**** Async search with User::WaitForRequest(), sorted descending
+ lmDbIter = iDatabase->LandmarkIteratorL(sortDesc);
+ CleanupStack::PushL(lmDbIter);
+ CPosLmOperation* op = iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, sortDesc, EFalse);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == lmDbIter->NumOfItemsL(), KNumOfMatchesErr);
+ // Check correct displayData
+ AssertTrueSecL(iter->NumOfItemsL() == displayData->Count(), KNumOfMatchesErr2);
+
+ TInt itemId = displayData->NewItemIndex();
+
+ TPosLmItemId id = iter->NextL();
+ TPosLmItemId lmDbId = lmDbIter->NextL();
+ // check that the two iterators are sorted identically
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(lmDbId);
+
+ CPosLmDisplayItem& item = displayData->DisplayItem(itemId);
+ TPtrC lmName;
+ item.Landmark().GetLandmarkName(lmName);
+
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+
+ // For debugging purposes
+ TBuf<150> buf;
+ buf.Append(_L("Name:"));
+ buf.Append(sourceName);
+ buf.Append(_L("<->"));
+ buf.Append(targetName);
+ buf.Append(_L("<->"));
+ buf.Append(lmName);
+ //iLog->Log(buf);
+
+
+ if (id != lmDbId) iLog->Log(_L("ids are not identical, therefore check name"));
+ // Should always be the same
+ AssertTrueSecL(sourceName.Compare(targetName) == KErrNone, KNameMatchError);
+ AssertTrueSecL(sourceName.Compare(lmName) == KErrNone, KNameMatchError2);
+
+ CleanupStack::PopAndDestroy(target);
+ CleanupStack::PopAndDestroy(source);
+ id = iter->NextL();
+ lmDbId = lmDbIter->NextL();
+ itemId = displayData->NewItemIndex();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(lmDbIter);
+ }
+ // Unset displayData before deleting
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ //Remove landmarks created in this part
+ iDatabase->RemoveLandmarkL(id1);
+ iDatabase->RemoveLandmarkL(id2);
+ iDatabase->RemoveLandmarkL(id3);
+ iDatabase->RemoveLandmarkL(id4);
+
+ iLog->Log(_L("VerifySortOrderL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::SearchWithSortOrderL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed syncronously");
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ for(TInt j=0; j<aSearchResults.Count(); j++)
+ {
+ textCriteria->SetTextL(aSearchResults[j]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[j]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[j]->PositionFields());
+
+ //iLog->Log(aSearchResults[j]->TextCriteria());
+
+ for (TInt i=0; i<6; i++)
+ {
+ switch (i)
+ {
+ //**** sync
+ case 0:
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 1:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 2:
+ //**** async
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ case 3:
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined()));
+ break;
+ //**** asych with User::WaitForRequest()
+ case 4:
+ {
+ CPosLmOperation* op = iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ case 5:
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ CPosLmOperation* op = iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortPref,
+ aSearchResults[j]->Redefined());
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[j]->SearchResult();
+ if ((TUint)searchResults->Count() != iLandmarkSearch->NumOfMatches())
+ {
+ TBuf<50> buf;
+ buf.Append(_L("KNumOfMatchesError when searching for "));
+ buf.Append(aSearchResults[j]->TextCriteria());
+ iLog->Log(buf);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ LandmarksSortL(*searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ if (id != (*searchResults)[ii])
+ {
+ //Check if same name then don't Leave
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((*searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ target->GetLandmarkName(targetName);
+
+ AssertTrueSecL(!sourceName.CompareC(targetName),KSortorderErr, id);
+ CleanupStack::PopAndDestroy(2, source);
+ }
+ id = iter->NextL();
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ } // for (TInt i=0; i<6; i++)
+ } // for(TInt j=0; j<aSearchResults.Count(); j++)
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::SearchAndDeleteL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::SearchAndDeleteL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a redefined search is performed");
+ _LIT(KSortorderErr, "The sortorder is incorrect after a delete when a redefined search is performed");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[11]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[11]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[11]->PositionFields());
+
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref));
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[11]->SearchResult();
+
+ iDatabase->RemoveLandmarkL((*searchResults)[0]);
+ searchResults->Remove(0);
+ searchResults->Compress();
+
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, ETrue));
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL((TUint)searchResults->Count() == iLandmarkSearch->NumOfMatches(), KNumOfMatchesErr);
+
+ LandmarksSortL(*searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(id == (*searchResults)[ii], KSortorderErr, id);
+
+ id = iter->NextL();
+ ++ii;
+ }
+
+ CleanupStack::PopAndDestroy(2, textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::SearchAndRenameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::SearchAndRenameL(const RPointerArray<CSearchResult>& aSearchResults)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a redefined search is performed");
+ const TInt KTestIndex=4;
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(aSearchResults[KTestIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(aSearchResults[KTestIndex]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(aSearchResults[KTestIndex]->PositionFields());
+
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref));
+
+ RArray<TPosLmItemId>* searchResults = &aSearchResults[KTestIndex]->SearchResult();
+
+ _LIT(KLmName, "LmTP23-%d");
+ for (TInt i=0; i<searchResults->Count(); i++)
+ {
+ CPosLandmark* lm =iDatabase->ReadLandmarkLC((*searchResults)[i]);
+
+ TBuf<100> lmName;
+ lmName.Format(KLmName,i);
+
+ lm->SetLandmarkNameL(lmName);
+ iDatabase->UpdateLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria, sortPref, ETrue));
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+
+
+ AssertTrueSecL(iLandmarkSearch->NumOfMatches()==0, KNumOfMatchesErr);
+
+ CleanupStack::PopAndDestroy(2, textCriteria);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KCancelErr, "The search is canceled after progress has increased but no search result is found");
+
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(iSearchResults[KIndex]->TextCriteria());
+ textCriteria->SetAttributesToSearch(iSearchResults[KIndex]->Attributes());
+
+ textCriteria->SetPositionFieldsToSearchL(iSearchResults[KIndex]->PositionFields());
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, iSearchResults[KIndex]->Redefined()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarkSearch->StartLandmarkSearchL(
+ *textCriteria, iSearchResults[KIndex]->Redefined()));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ if (iter->NumOfItemsL() != iLandmarkSearch->NumOfMatches())
+ {
+ iLog->Log(_L("Iterators no. of items is not equal to LandmarksSearch no. matches"));
+ _LIT(KExpected, "Iter. of matches: %d");
+ _LIT(KReturned, "LandmarksSearch no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, iter->NumOfItemsL());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Search criteria: "));
+ iLog->Log(textCriteria->Text());
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancel = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+ AssertTrueSecL(iter->NumOfItemsL() != 0, KCancelErr);
+ }
+
+ CleanupStack::PopAndDestroy(2, textCriteria);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::TestMaxLengthL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::TestMaxLengthL()
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ _LIT(K255Error, "Exceeding limit should leave with KErrArgument");
+
+ _LIT(K255CHAR, "ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ12345");
+ _LIT(K256CHAR, "ABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJABCDEFGHIJ123456");
+
+ textCriteria->SetTextL(K255CHAR);
+
+ TRAPD(err, textCriteria->SetTextL(K256CHAR););
+ AssertTrueSecL(err == KErrArgument, K255Error);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ ExecuteAndDeleteLD(iOperation);
+
+ TInt nr = iLandmarkSearch->NumOfMatches();
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of matches"), nr);
+ iLog->Log(buf);
+
+ AssertTrueSecL(nr == 0, _L("We should not find any matches"));
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp23::TestInvalidPositionFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp23::TestInvalidPositionFieldsL()
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ RArray<TUint> arr;
+ CleanupClosePushL(arr);
+
+ textCriteria->SetTextL(_L("*"));
+ textCriteria->SetPositionFieldsToSearchL(arr);
+
+ // Search with empty positionfields list, should find all landmarks
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ ExecuteAndDeleteLD(iOperation);
+ TInt nr = iLandmarkSearch->NumOfMatches();
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of matches when searching in empty position fields list"), nr);
+ iLog->Log(buf);
+
+
+
+ User::LeaveIfError(arr.Append(0));
+ User::LeaveIfError(arr.Append(50));
+ User::LeaveIfError(arr.Append(500));
+ textCriteria->SetPositionFieldsToSearchL(arr);
+
+ // Search with invalid positionfields list, should NOT find any landmarks
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria);
+ ExecuteAndDeleteLD(iOperation);
+ nr = iLandmarkSearch->NumOfMatches();
+
+ buf.Format(_L("Found %d nr of matches when searching in invalid position fields"), nr);
+ iLog->Log(buf);
+
+ AssertTrueSecL(nr == 0, _L("We should not find any matches"));
+
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(textCriteria);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp24.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,384 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp24.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp24::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp24::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iAreaSearchResults.ResetAndDestroy();
+ delete iOperation;iOperation=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp24::StartL()
+ {
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ AppendAreaSearchResultsL();
+
+ // Invalid areas is tested (see LmDbAreaSearchResult.txt)
+ iLog->Log(_L("Testing area search with criterias read from LmDbAreaSearchResult.txt syncronously"));
+ SearchL(ESynchronous);
+
+ iLog->Log(_L("Testing area search with criterias read from LmDbAreaSearchResult.txt asyncronously"));
+ SearchL(EAsynchronous);
+
+ iLog->Log(_L("Testing area search with criterias read from LmDbAreaSearchResult.txt asyncronously with User::WaitForRequest()"));
+ SearchL(EWaitForRequest);
+
+ iLog->Log(_L("Testing area search with a defined sortorder"));
+ SearchWithSortOrderL();
+
+ iLog->Log(_L("Testing area search and cancel"));
+ SearchAndCancelL();
+ iLog->Log(_L("Testing area search and cancel in callback"));
+ SearchAndCancelL(ETrue);
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp24::SearchL(TExecutionMode aExecutionMode)
+ {
+ TBuf<255> info;
+ for (TInt i=0; i<iAreaSearchResults.Count(); i++)
+ {
+ CPosLmAreaCriteria* areaCriteria=NULL;
+ TRAPD(err, areaCriteria = CPosTp24::NewLmAreaCriteriaL(iAreaSearchResults[i]->SouthLat(),
+ iAreaSearchResults[i]->NorthLat(),
+ iAreaSearchResults[i]->WestLong(),
+ iAreaSearchResults[i]->EastLong()
+ ));
+ CleanupStack::PushL(areaCriteria);
+ if (err != iAreaSearchResults[i]->ErrorCode())
+ {
+ iLog->Log(_L("Unexpected error code returned"));
+ iLog->Log(_L("Area Search result read from file:"));
+
+ iAreaSearchResults[i]->Print(info);
+ iLog->Log(info);
+
+ _LIT(KReturned, "Search returned errorCode = %d");
+ info.Format(KReturned, err);
+ iLog->Log(info);
+ User::Leave(KErrGeneral);
+ }
+
+ if (!err)
+ {
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(
+ *areaCriteria, iAreaSearchResults[i]->Redefined());
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ iOperation = NULL;
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ iOperation = NULL;
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;iOperation=NULL;
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if ((TUint)(iAreaSearchResults[i]->SearchResult()).Count() != iLandmarkSearch->NumOfMatches())
+ {
+ iLog->Log(_L("Unexpected no. of matches returned"));
+ _LIT(KExpected, "Expected no. of matches: %d ");
+ _LIT(KReturned, "Returned no. of matches: %d ");
+ info.Format(KExpected, (iAreaSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Area Search result read from file:"));
+ info.Zero();
+ iAreaSearchResults[i]->Print(info);
+ iLog->Log(info);
+
+ iLog->Log(_L("Landmarks expected to find:"));
+ for (TInt j=0; j<iAreaSearchResults[i]->SearchResult().Count(); j++)
+ {
+ RArray<TPosLmItemId>* searchResults = &iAreaSearchResults[i]->SearchResult();
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC((*searchResults)[j]);
+ info.Zero();
+ PrintLandmark(*lm, info);
+ iLog->Log(info);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ iLog->Log(_L("Landmarks returned by Area search:"));
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(id);
+ info.Zero();
+ PrintLandmark(*lm2, info);
+ iLog->Log(info);
+ CleanupStack::PopAndDestroy(lm2);
+ id = iter->NextL();
+ }
+
+ User::Leave(KErrGeneral);
+ }
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ if (!iAreaSearchResults[i]->FindSearchResult(id))
+ {
+ _LIT(KUnexpectedId, "Unexpected id, %d returned from search which is not in read area search result");
+ info.Format(KUnexpectedId, id);
+ iLog->Log(_L("Area Search result read from file:"));
+ iAreaSearchResults[i]->Print(info);
+ iLog->Log(info);
+ User::Leave(KErrGeneral);
+ }
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+ CleanupStack::PopAndDestroy(areaCriteria);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp24::SearchWithSortOrderL()
+ {
+ const TInt KSortOrderIndex=4;
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect");
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ CPosLmAreaCriteria* areaCriteria=CPosLmAreaCriteria::NewLC(
+ iAreaSearchResults[KSortOrderIndex]->SouthLat(),
+ iAreaSearchResults[KSortOrderIndex]->NorthLat(),
+ iAreaSearchResults[KSortOrderIndex]->WestLong(),
+ iAreaSearchResults[KSortOrderIndex]->EastLong()
+ );
+
+ // Test SetSearchArea
+ areaCriteria->SetSearchArea(iAreaSearchResults[KSortOrderIndex]->SouthLat(),
+ iAreaSearchResults[KSortOrderIndex]->NorthLat(),
+ iAreaSearchResults[KSortOrderIndex]->WestLong(),
+ iAreaSearchResults[KSortOrderIndex]->EastLong());
+
+
+ TReal64 southLat;
+ TReal64 northLat;
+ TReal64 westLong;
+ TReal64 eastLong;
+ areaCriteria->GetSearchArea(southLat, northLat, westLong, eastLong);
+ AssertTrueSecL(southLat == iAreaSearchResults[KSortOrderIndex]->SouthLat(), _L("SouthLat is wrong"));
+ AssertTrueSecL(northLat == iAreaSearchResults[KSortOrderIndex]->NorthLat(), _L("NorthLat is wrong"));
+ AssertTrueSecL(westLong == iAreaSearchResults[KSortOrderIndex]->WestLong(), _L("WestLong is wrong"));
+ AssertTrueSecL(eastLong == iAreaSearchResults[KSortOrderIndex]->EastLong(), _L("EastLong is wrong"));
+
+
+ for (TInt i=0; i<6; i++)
+ {
+ if(i==0)
+ {
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*areaCriteria, sortPref);
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (i==1)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*areaCriteria, sortPref);
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (i==2)
+ {
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*areaCriteria, sortPref);
+ RunAsyncOperationLD(iOperation);
+ }
+ else if (i==3)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*areaCriteria, sortPref);
+ RunAsyncOperationLD(iOperation);
+ }
+ else if (i==4)
+ {
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*areaCriteria, sortPref);
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;iOperation=NULL;
+ }
+ else if (i==5)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*areaCriteria, sortPref);
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;iOperation=NULL;
+ }
+ iOperation = NULL;
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId>* searchResults = &iAreaSearchResults[KSortOrderIndex]->SearchResult();
+ AssertTrueSecL((TUint)searchResults->Count() == iLandmarkSearch->NumOfMatches(), KNumOfMatchesErr);
+
+ LandmarksSortL(*searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(id == (*searchResults)[ii], KSortorderErr, id);
+
+ id = iter->NextL();
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ CleanupStack::PopAndDestroy(areaCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::NewLmAreaCriteriaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLmAreaCriteria* CPosTp24::NewLmAreaCriteriaL(const TReal64 &aSouthLat,
+ const TReal64 &aNorthLat,
+ const TReal64 &aWestLong,
+ const TReal64 &aEastLong)
+ {
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(aSouthLat,
+ aNorthLat,
+ aWestLong,
+ aEastLong
+ );
+ CleanupStack::Pop();
+ return areaCriteria;
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp24::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KCancelErr, "The search is canceled after progress has increased but no search result is found");
+
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmAreaCriteria* areaCriteria=NULL;
+ areaCriteria = CPosLmAreaCriteria::NewLC(iAreaSearchResults[KIndex]->SouthLat(),
+ iAreaSearchResults[KIndex]->NorthLat(),
+ iAreaSearchResults[KIndex]->WestLong(),
+ iAreaSearchResults[KIndex]->EastLong()
+ );
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL(
+ *areaCriteria, iAreaSearchResults[KIndex]->Redefined()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarkSearch->StartLandmarkSearchL(
+ *areaCriteria, iAreaSearchResults[KIndex]->Redefined()));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ if (iter->NumOfItemsL() != iLandmarkSearch->NumOfMatches())
+ {
+ iLog->Log(_L("Iterators no. of items is not equal to LandmarksSearch no. matches"));
+ _LIT(KExpected, "Iter. of matches: %d");
+ _LIT(KReturned, "LandmarksSearch no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, iter->NumOfItemsL());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancel = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+ AssertTrueSecL(iter->NumOfItemsL() != 0, KCancelErr);
+ }
+
+ CleanupStack::PopAndDestroy(2, areaCriteria);
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp25.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,958 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp25.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+#include <EPos_Landmarks.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp25::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iCategorySearchResults.ResetAndDestroy();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::StartL()
+ {
+ _LIT(KEmptyTextCriteriaErr, "An empty string as text criteria should not be allowed");
+ _LIT(KEmptyTextCriteriaErr1, "An empty text criteria should not be allowed");
+ // copy test db to the private path
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp25TestDb);
+
+ TInt er = fileMan->Copy(srcPath, KLmTp25DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (er != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp25TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KTp25TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ TRAPD( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL(err == KErrNone, _L("Init db failed"));
+ }
+
+
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ TInt err = KErrNone;
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ // Start by testing some error flows, returning KErrArgument
+ TRAP(err, iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr1);
+
+
+ // Test with a landmark search criteria into a category search operation
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TRAP(err, iLandmarkSearch->StartCategorySearchL(*textCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ // Test empty string
+ nameCriteria->SetSearchPatternL(_L(""));
+ TRAP(err, iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+ CleanupStack::PopAndDestroy(nameCriteria);
+
+ // test with maximum nr of characters in search pattern
+ TestSearchPatternLengthL();
+
+ AppendCategorySearchResultsL();
+
+ // Search synchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt syncronously"));
+ SearchL(iCategorySearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing search with sort order"));
+ SearchWithSortOrderL(iCategorySearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing search with maximum nr of matches"));
+ SearchWithMaximumL(iCategorySearchResults, ESynchronous);
+
+ // Search asynchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asyncronously"));
+ SearchL(iCategorySearchResults, EAsynchronous);
+
+ iLog->Log(_L("Testing search with sort order asynchronously"));
+ SearchWithSortOrderL(iCategorySearchResults, EAsynchronous);
+
+ iLog->Log(_L("Testing search with maximum nr of matches asynchronously"));
+ SearchWithMaximumL(iCategorySearchResults, EAsynchronous);
+
+ // Search asynchronously with User::WaitForRequest()
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asyncronously using User::WaitForRequest()"));
+ SearchL(iCategorySearchResults, EWaitForRequest);
+
+ iLog->Log(_L("Testing search with sort order asynchronously using User::WaitForRequest()"));
+ SearchWithSortOrderL(iCategorySearchResults, EWaitForRequest);
+
+ iLog->Log(_L("Testing search with maximum nr of matches asynchronously using User::WaitForRequest()"));
+ SearchWithMaximumL(iCategorySearchResults, EWaitForRequest);
+
+ // Search for added categories
+ iLog->Log(_L("Testing search after category has been added"));
+ SearchAfterAddedCategoryL();
+
+ // Cancel search test
+ iLog->Log(_L("Testing category search and cancel"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Testing category search and cancel in callback"));
+ SearchAndCancelL(ETrue);
+
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iDatabase = UseGlobalCategoriesL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ iLog->Log(_L("Testing search with global categories included, sync"));
+ SearchGlobalL(iCategorySearchResults, ETrue);
+
+ iLog->Log(_L("Testing search with global categories included, asyncronously"));
+ SearchGlobalL(iCategorySearchResults, EFalse);
+
+ // Verify error report "ESLI-62DBXR Landmarks - Sort order is not correctly implemented"
+ // Check that CPosLandmarkSearch::MatchIteratorL are CPosLandmarkDatabase::LandmarkIteratorL
+ // are sorted correctly (should be identically sorted)
+ VerifySortOrderL();
+
+ RemoveGlobalCategoriesL();
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::SearchL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != iLandmarkSearch->NumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Name criteria: "));
+ iLog->Log(nameCriteria->SearchPattern());
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr, id);
+
+ id = iter->NextL();
+ }
+
+ // Check DisplayData below
+ TInt nrr = displayData->Count();
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != displayData->Count())
+ {
+ _LIT(KExpected, "Expected no. of displaydata matches: %d");
+ _LIT(KReturned, "Returned no. of displaydata matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, displayData->Count());
+ iLog->Log(info);
+ iLog->Log(_L("Name criteria: "));
+ iLog->Log(nameCriteria->SearchPattern());
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt itemId = displayData->NewItemIndex();
+ while (itemId != KPosLmNoNewItems)
+ {
+ CPosLmDisplayItem& item = displayData->DisplayItem(itemId);
+
+ if (item.DisplayItemType() != CPosLmDisplayItem::ECategoryItem)
+ {
+ iLog->Log(_L("ERROR :::::"));
+ iLog->Log(_L("Wrong item returned, only ECategoryItem should be returned"));
+ User::Leave(-1);
+ }
+
+ if (item.DisplayItemType() == CPosLmDisplayItem::ELandmarkItem)
+ {
+ iLog->Log(_L("Is ELandmarkItem:::::"));
+ }
+
+ if (item.DatabaseIndex() != 0)
+ {
+ // When single search, index should always be 0
+ iLog->Log(_L("Wrong DatabaseIndex, should be 0"));
+ User::Leave(-1);
+
+ }
+
+ TInt categoryId = item.Category().CategoryId();
+
+ if (!aSearchResults[i]->FindSearchResult(categoryId))
+ {
+ iLog->Log(_L("Not Found"));
+ TPtrC name;
+ item.Category().GetCategoryName(name);
+ iLog->Log(name);
+ iLog->Log(_L("Could not find LandmarkCategory"));
+ User::Leave(-1);
+
+ }
+ itemId = displayData->NewItemIndex();
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::TestSearchPatternLengthL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::TestSearchPatternLengthL()
+ {
+ iLog->Log(_L("TestSearchPatternLengthL"));
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ //Test with maximum size of search pattern
+ //KPosLmMaxCategoryNameLength is 124 (from EPos_Landmarks.h)
+ HBufC* hbuf = HBufC::NewLC(KPosLmMaxCategoryNameLength+1);
+ while(hbuf->Des().Length() < KPosLmMaxCategoryNameLength)
+ {
+ hbuf->Des().Append(_L("*"));
+ }
+ nameCriteria->SetSearchPatternL(*hbuf);
+
+ hbuf->Des().Append(_L("*"));
+ TRAPD(err, nameCriteria->SetSearchPatternL(*hbuf));
+
+ AssertTrueSecL(err == KErrArgument, _L("It should not be possible to set search pattern"));
+
+ CleanupStack::PopAndDestroy(hbuf);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::SearchWithSortOrderL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+
+ CPosLmCategoryManager::TCategorySortPref sortPref;
+
+ for (TInt j=0;j<2;j++)
+ {
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+
+ if (j==0)
+ {
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPref);
+ }
+ else
+ {
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPref);
+ }
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ // Create a sorted list out of the search result
+ RArray<TPosLmItemId> searchResults = aSearchResults[i]->SearchResult();
+ // To avoid User-44 create a copy of the aSearchResults[i]
+ RArray<TPosLmItemId> searchResultsSorted;
+ CleanupClosePushL(searchResultsSorted);
+
+ for (TInt kk=0;kk<searchResults.Count();kk++)
+ {
+ searchResultsSorted.Append(searchResults[kk]);
+ }
+
+ CategoriesSortL(searchResultsSorted, sortPref);
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != iLandmarkSearch->NumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResults[i]->SearchResult()).Count());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(_L("Name criteria: "));
+ iLog->Log(nameCriteria->SearchPattern());
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+
+ }
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter=0;
+ while (id != KPosLmNullItemId)
+ {
+ // Check that sort order is correct
+ AssertTrueSecL(searchResultsSorted[counter] == id, _L("Error in sorting"));
+ id = iter->NextL();
+ counter++;
+ }
+ CleanupStack::PopAndDestroy(&searchResultsSorted);
+ CleanupStack::PopAndDestroy(2, nameCriteria);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::SearchWithMaximumL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::SearchWithMaximumL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchWithMaximumL is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ // First get the maximum number of matches
+ nameCriteria->SetSearchPatternL(_L("*"));
+ ExecuteAndDeleteLD(iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ TInt max = iLandmarkSearch->NumOfMatches();
+
+ for (TInt j=1;j<=max;j++)
+ {
+ nameCriteria->SetSearchPatternL(_L("*"));
+ iLandmarkSearch->SetMaxNumOfMatches(j);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ case EWaitForRequest:
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ break;
+ }
+
+ AssertTrueSecL((TUint)j == iLandmarkSearch->NumOfMatches(), KNumOfMatchesErr);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ // Use search result for position 0, should always be for *
+ AssertTrueSecL(aSearchResults[0]->FindSearchResult(id), KNotFoundErr, id);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::SearchAfterAddedCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::SearchAfterAddedCategoryL()
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchAfterAddedCategoryL is performed");
+ _LIT(KCategoryNotFound, "Added category could not be found");
+ _LIT(KCategory, "StoraKoncernen");
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ CPosLandmarkCategory* cat1 = CPosLandmarkCategory::NewLC();
+
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(_L("S*"));
+ ExecuteAndDeleteLD(iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ // Then add a new category with a name starting with S
+ cat1->SetCategoryNameL(KCategory);
+ TPosLmItemId categoryId = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ // Then use do another search within the results of previous search
+ // should return Stadsbibliotek and Stadspark
+ nameCriteria->SetSearchPatternL(_L("St*"));
+ ExecuteAndDeleteLD(iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone, ETrue));
+ TInt max = iLandmarkSearch->NumOfMatches();
+
+ if (max != 2)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+ // Set a maximum number of matches, should return only one of Stadsbibliotek and Stadspark
+ iLandmarkSearch->SetMaxNumOfMatches(1);
+
+ // Do another search just to see that it is possible to find the added category
+ nameCriteria->SetSearchPatternL(KCategory);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ max = iLandmarkSearch->NumOfMatches();
+
+ if (max != 1)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+ if (categoryId != id)
+ {
+ iLog->Log(KCategoryNotFound);
+ User::Leave(-1);
+ }
+
+
+ // Remove added category
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(categoryId));
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::SearchGlobalL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::SearchGlobalL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync)
+ {
+ iLog->Log(_L("SearchGlobalL"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchGlobalL is performed");
+
+ // Nr of global categories, defined in resource file
+ const TInt KNrOfGlobalCategories = 15;
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ CPosLmCategoryManager::TCategorySortPref sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+
+ for (TInt l=0;l<2;l++)
+ {
+ if (l==0) sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ else if (l==1) sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+
+ // i=0 the first entry in aSearchResults should be wildcard "*"
+ TInt i = 0;
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPref);
+
+ // The asynchronous flow
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ // Create a sorted list out of the search result
+ RArray<TPosLmItemId> searchResults = aSearchResults[i]->SearchResult();
+ RArray<TPosLmItemId> searchResultsSorted;
+
+ for (TInt kk=0;kk<searchResults.Count();kk++)
+ {
+ searchResultsSorted.Append(searchResults[kk]);
+ }
+
+ searchResultsSorted.Append(28);
+ searchResultsSorted.Append(29);
+ searchResultsSorted.Append(30);
+ searchResultsSorted.Append(31);
+ searchResultsSorted.Append(32);
+ searchResultsSorted.Append(33);
+ searchResultsSorted.Append(34);
+ searchResultsSorted.Append(35);
+ searchResultsSorted.Append(36);
+ searchResultsSorted.Append(37);
+ searchResultsSorted.Append(38);
+ searchResultsSorted.Append(39);
+ searchResultsSorted.Append(40);
+ searchResultsSorted.Append(41);
+ searchResultsSorted.Append(42);
+
+ // Sort list according to sortPref
+ CategoriesSortL(searchResultsSorted, sortPref);
+ TUint expNr = (aSearchResults[i]->SearchResult()).Count() + KNrOfGlobalCategories;
+ TUint expNr2 = iLandmarkSearch->NumOfMatches();
+
+ if (expNr != expNr2)
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, expNr);
+ iLog->Log(info);
+ info.Format(KReturned, expNr2);
+ iLog->Log(info);
+ iLog->Log(_L("Name criteria: "));
+ iLog->Log(nameCriteria->SearchPattern());
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter=0;
+ while (id != KPosLmNullItemId)
+ {
+ // Check that sort order is correct
+ AssertTrueSecL(searchResultsSorted[counter] == id, _L("Error in sorting"));
+ id = iter->NextL();
+ counter++;
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ searchResultsSorted.Reset();
+ searchResultsSorted.Close();
+
+ } // end for (TInt l=0 ...)
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("SearchGlobalL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KCancelErr, "The search is canceled after progress has increased but no search result is found");
+
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(iCategorySearchResults[KIndex]->TextCriteria());
+ iLandmarkSearch->SetMaxNumOfMatches();
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartCategorySearchL(
+ *nameCriteria,
+ CPosLmCategoryManager::ECategorySortOrderNone,
+ iCategorySearchResults[KIndex]->Redefined()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarkSearch->StartCategorySearchL(
+ *nameCriteria,
+ CPosLmCategoryManager::ECategorySortOrderNone,
+ iCategorySearchResults[KIndex]->Redefined()));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ if (iter->NumOfItemsL() != iLandmarkSearch->NumOfMatches())
+ {
+ iLog->Log(_L("Iterators no. of items is not equal to LandmarksSearch no. matches"));
+ _LIT(KExpected, "Iter. of matches: %d");
+ _LIT(KReturned, "LandmarksSearch no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, iter->NumOfItemsL());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancel = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+ AssertTrueSecL(iter->NumOfItemsL() != 0, KCancelErr);
+ }
+
+ CleanupStack::PopAndDestroy(2, nameCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp25::VerifySortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp25::VerifySortOrderL()
+ {
+ iLog->Log(_L("VerifySortOrderL"));
+ // Search pattern "*" should match all existing landmarks -> it is possible to compare
+ // sort order of CPosLandmarkSearch::MatchIteratorL with CPosLandmarkDatabase::LandmarkIteratorL
+
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNumOfMatchesErr2, "No. of matches in DisplayData is incorrect when the search is performed");
+
+ _LIT(KSortorderErr, "The sortorder is incorrect");
+ _LIT(KNameMatchError, "The landmark category name does not match");
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ // Just in case, add some categories
+ CPosLandmarkCategory* cat1 = CPosLandmarkCategory::NewLC();
+ cat1->SetCategoryNameL(_L("CategoryA"));
+ TPosLmItemId categoryId1 = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ cat1 = CPosLandmarkCategory::NewLC();
+ cat1->SetCategoryNameL(_L("Categorya"));
+ TPosLmItemId categoryId2 = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ cat1 = CPosLandmarkCategory::NewLC();
+ cat1->SetCategoryNameL(_L("AA"));
+ TPosLmItemId categoryId3 = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ cat1 = CPosLandmarkCategory::NewLC();
+ cat1->SetCategoryNameL(_L("aa"));
+ TPosLmItemId categoryId4 = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ CPosLmCategoryManager::TCategorySortPref sortPrefAsc = CPosLmCategoryManager::ECategorySortOrderNameAscending;;
+ CPosLmCategoryManager::TCategorySortPref sortPrefDesc = CPosLmCategoryManager::ECategorySortOrderNameDescending;;
+ CPosLmItemIterator* categoryDbIter = NULL;
+
+ for (TInt j=0;j<6;j++)
+ {
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarkSearch->SetDisplayData(*displayData);
+
+ if (j==0)
+ {
+ // Sorted Ascending, sync
+ iLog->Log(_L("Sorted Ascending, Sync"));
+ categoryDbIter = categoryManager->CategoryIteratorL(sortPrefAsc);
+ CleanupStack::PushL(categoryDbIter);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPrefAsc);
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (j==1)
+ {
+ // Sorted Descending, sync
+ iLog->Log(_L("Sorted Descending, Sync"));
+ categoryDbIter = categoryManager->CategoryIteratorL(sortPrefDesc);
+ CleanupStack::PushL(categoryDbIter);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPrefDesc);
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (j==2)
+ {
+ // Sorted Ascending, async
+ iLog->Log(_L("Sorted Ascending, Async"));
+ categoryDbIter = categoryManager->CategoryIteratorL(sortPrefAsc);
+ CleanupStack::PushL(categoryDbIter);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPrefAsc);
+ RunAsyncOperationLD(iOperation);
+ }
+ else if (j==3)
+ {
+ // Sorted Descending, async
+ iLog->Log(_L("Sorted Descending, Async"));
+ categoryDbIter = categoryManager->CategoryIteratorL(sortPrefDesc);
+ CleanupStack::PushL(categoryDbIter);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPrefDesc);
+ RunAsyncOperationLD(iOperation);
+ }
+ else if (j==4)
+ {
+ iLog->Log(_L("Sorted Ascending, Async using User::WaitForRequest"));
+ // Sorted Ascending, async using User::WaitForRequest()
+ categoryDbIter = categoryManager->CategoryIteratorL(sortPrefAsc);
+ CleanupStack::PushL(categoryDbIter);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPrefAsc);
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ }
+ else if (j==5)
+ {
+ iLog->Log(_L("Sorted Descending, Async using User::WaitForRequest"));
+ // Sorted Descending, async using User::WaitForRequest()
+ categoryDbIter = categoryManager->CategoryIteratorL(sortPrefDesc);
+ CleanupStack::PushL(categoryDbIter);
+ iOperation = iLandmarkSearch->StartCategorySearchL(*nameCriteria, sortPrefDesc);
+ RunAsyncOperationByWaitForReqL(iOperation);
+ delete iOperation;
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == categoryDbIter->NumOfItemsL(), KNumOfMatchesErr);
+
+ // Check correct displayData
+ AssertTrueSecL(iter->NumOfItemsL() == displayData->Count(), KNumOfMatchesErr2);
+
+ TInt itemId = displayData->NewItemIndex();
+
+ TPosLmItemId id = iter->NextL();
+ TPosLmItemId categoryDbId = categoryDbIter->NextL();
+ // check that the two iterators are sorted identically
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmarkCategory* source = categoryManager->ReadCategoryLC(id);
+ CPosLandmarkCategory* target = categoryManager->ReadCategoryLC(categoryDbId);
+
+ CPosLmDisplayItem& item = displayData->DisplayItem(itemId);
+ TInt categoryId = item.Category().CategoryId();
+
+ // For debugging purposes
+ TPtrC sourceName, targetName;
+ source->GetCategoryName(sourceName);
+ target->GetCategoryName(targetName);
+ TPtrC name;
+ item.Category().GetCategoryName(name);
+
+ TBuf<150> buf;
+ buf.Append(_L("Name:"));
+ buf.Append(sourceName);
+ buf.Append(_L("<->"));
+ buf.Append(targetName);
+ buf.Append(_L("<->"));
+ buf.Append(name);
+ iLog->Log(buf);
+
+ AssertTrueSecL(id == categoryDbId, KSortorderErr);
+ AssertTrueSecL(id == categoryId, _L("Wrong displaydata item when sorting"));
+ // Should always be the same, since we check that id are equal above
+ AssertTrueSecL(sourceName.Compare(targetName) == KErrNone, KNameMatchError);
+ AssertTrueSecL(sourceName.Compare(name) == KErrNone, _L("Wrong DisplayData item name when sorting"));
+
+ CleanupStack::PopAndDestroy(target);
+ CleanupStack::PopAndDestroy(source);
+
+ id = iter->NextL();
+ categoryDbId = categoryDbIter->NextL();
+ itemId = displayData->NewItemIndex();
+ }
+ iLog->Log(_L("Done"));
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(categoryDbIter);
+
+ iLandmarkSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+ // Delete the categories added in the beginning
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ iOperation = categoryManager->RemoveCategoryL(categoryId1);
+ ExecuteAndDeleteLD(iOperation);
+ iOperation = categoryManager->RemoveCategoryL(categoryId2);
+ ExecuteAndDeleteLD(iOperation);
+ iOperation = categoryManager->RemoveCategoryL(categoryId3);
+ ExecuteAndDeleteLD(iOperation);
+ iOperation = categoryManager->RemoveCategoryL(categoryId4);
+ ExecuteAndDeleteLD(iOperation);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("VerifySortOrderL Done"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp3.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp3.h"
+#include <EPos_CPosLandmarkDatabase.h>
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp3::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp3::StartL()
+ {
+
+ _LIT(KDbUri5, "http://c:\\system\\data\\eposlm.ldb");
+
+ _LIT(KHttpErr, "http is not a supported protocol");
+
+ RemoveDefaultDbL();
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ delete lmd;
+
+
+ TInt err=0;
+ TRAP(err, TestOpenDbL(KDbUri5));
+ AssertTrueSecL(err == KErrNotSupported, KHttpErr);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp3::TestOPenDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp3::TestOpenDbL(const TDesC& aDbURI)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(aDbURI);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp30.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include "FT_CSearchResult.h"
+#include <LbsPosition.h>
+#include <e32std.h>
+#include <ss_std.h>
+
+#include "FT_CPosTp30.h"
+
+
+#include "FT_LandmarkConstants.h"
+//#include "FT_CActiveSearch.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp30::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp30::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP30 - Multiple clients in search");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp30::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp30::CloseTest()
+ {
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iUseLogFromThreadIsDisabled = EFalse;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp30::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp30::StartL()
+ {
+ _LIT(KTimeErr, "The request time for several simultaneously requests is > n*'request time for one request'");
+ MakeSurePanicDebugFileExistsL();
+
+ iDatabase = UseGeneratedDbFileL();
+ delete iDatabase;
+ iDatabase=NULL;
+ iUseLogFromThreadIsDisabled = ETrue;
+ AppendSearchResultsL();
+ iAsyncSearch = ETrue;
+ TTime start, stop;
+ start.UniversalTime();
+ StartMultipleClientsL(1);
+ stop.UniversalTime();
+
+ TInt64 msecOne = (stop.Int64() - start.Int64())/1000;
+
+ _LIT8(KTrace, "%d simultaneously search request(s) = %d mseconds");
+ TBuf8<100> msg;
+ msg.Format(KTrace, 1, msecOne);
+ iLog->Put(msg);
+
+ start.UniversalTime();
+ StartMultipleClientsL(KNoMultipleClients);
+ stop.UniversalTime();
+ iAsyncSearch = EFalse;
+
+ TInt64 msecSeveral = (stop.Int64() - start.Int64())/1000;
+ msg.Format(KTrace, KNoMultipleClients, msecSeveral);
+ iLog->Put(msg);
+
+ AssertTrueSecL((msecOne*KNoMultipleClients) >= msecSeveral, KTimeErr);
+
+ iLog->Put(_L("Testing simultaneously search syncronously and remove all syncronously"));
+
+ iRemoveTest=ETrue;
+ StartMultipleClientsL(3);
+ iRemoveTest=EFalse;
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = UseGeneratedDbFileL();
+
+ iLog->Put(_L("Testing simultaneously search asyncronously"));
+ iAsyncSearch = ETrue;
+ StartMultipleClientsL(KNoMultipleClients);
+
+////
+
+ iLog->Put(_L("Testing simultaneously search asyncronously and remove all syncronously"));
+ iRemoveTest=ETrue;
+ StartMultipleClientsL(3);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp30::StartMultipleClientsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp30::StartMultipleClientsL(const TUint aNoClients)
+ {
+ _LIT(KMultipleErr, "Error %d when multiple clients access the landmarks db");
+ _LIT(KPanicErr, "Thread has panicked or is still alive when multiple clients searched the databse");
+
+ CreateThreadsL(aNoClients);
+
+ RArray<TRequestStatus> statuses;
+ CleanupClosePushL(statuses);
+
+ for (TUint j=0; j<aNoClients; j++)
+ {
+ TRequestStatus status;
+ statuses.Append(status);
+ }
+
+ TInt i=0;
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ User::WaitForRequest(statuses[i]);
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ TInt exitReason = iThreads[i].ExitReason();
+
+ AssertTrueSecL(exitReason == KErrNone, KMultipleErr, exitReason);
+ AssertTrueSecL(iThreads[i].ExitType() == EExitKill, KPanicErr);
+ }
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+ iThreadIndex=0;
+ iThreads.Close();
+ CleanupStack::PopAndDestroy(&statuses);
+ }
+
+// ---------------------------------------------------------
+// CPosTp30::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp30::RunTestL(TAny* aData)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when a multiple search is performed");
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosTp30* self = reinterpret_cast<CPosTp30*>(aData);
+ ++self->iThreadIndex;
+
+ if (self->iRemoveTest && self->iThreadIndex == 3)
+ {
+ CPosLmOperation* lmo=NULL;
+ TRAPD(err,lmo = lmd->RemoveAllLandmarksL());
+
+ if (err != KErrNone && err != KErrLocked)
+ {
+ User::Leave(err);
+ }
+ else if(!err)
+ {
+ TRAP(err, ExecuteAndDeleteLD(lmo));
+ if (err != KErrNone && err != KErrLocked)
+ {
+ User::Leave(err);
+ }
+ }
+ }
+ else
+ {
+ CPosLandmarkSearch* lms = CPosLandmarkSearch::NewL(*lmd);
+
+ CleanupStack::PushL(lms);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(self->iSearchResults[0]->TextCriteria());
+ textCriteria->SetAttributesToSearch(self->iSearchResults[0]->Attributes());
+ textCriteria->SetPositionFieldsToSearchL(self->iSearchResults[0]->PositionFields());
+
+ if (!self->iAsyncSearch)
+ {
+ ExecuteAndDeleteLD(lms->StartLandmarkSearchL(*textCriteria));
+ }
+ else
+ {
+ self->RunAsyncOperationLD(lms->StartLandmarkSearchL(*textCriteria));
+ }
+
+ CPosLmItemIterator* iter = lms->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ self->AssertTrueSecL((TUint)(self->iSearchResults[0]->SearchResult()).Count() == lms->NumOfMatches(), KNumOfMatchesErr);
+
+ CleanupStack::PopAndDestroy(3, lms);
+
+ }
+
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+
+// ---------------------------------------------------------
+// ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp30::RunTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp30::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp30::CreateThreadsL(const TUint aNoThreads)
+ {
+ _LIT(KThreadName, "LM test thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TUint i=0; i<aNoThreads; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1+iThreads.Count());
+
+ TInt err;
+ err = thread.Create(name, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp31.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,575 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp31.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <e32std.h>
+#include <ss_std.h>
+
+// CONSTANTS
+const TInt KNoListeners=2;
+
+const TInt KNoLandmarks = 10;
+const TInt KNoCategories = 10;
+
+const TInt KCancelledThreadIndex = 2;
+
+const TInt KNoEvents = 25;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp31::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP31 - Multiple event listeners");
+ aName = KTestName;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp31::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::StartL()
+ {
+ _LIT(KMultipleErr, "Error %d when multiple clients listen for events");
+ _LIT(KEventErr, "%d Error(s) when multiple clients listen for events");
+ _LIT(KExitErr, "Thread was panicked or is still alive");
+ iUseLogFromThreadIsDisabled = ETrue;
+ MakeSurePanicDebugFileExistsL();
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ //We should use an empty database for this test case
+ CPosLandmarkDatabase* database = UseEmptyDbFileL();
+ delete database;
+
+ TFixedArray<TRequestStatus, KNoListeners+1> statuses;
+
+ CreateThreadsL();
+
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+ for (TInt j=0; j<iThreads.Count(); j++)
+ {
+ User::WaitForRequest(statuses[j]);
+ }
+
+ for (TInt t=0; t<iThreads.Count(); t++)
+ {
+ TInt exitReason = iThreads[t].ExitReason();
+
+ AssertTrueSecL(exitReason == KErrNone, KMultipleErr, exitReason);
+ AssertTrueSecL(iThreads[t].ExitType() == EExitKill, KExitErr);
+ }
+
+ if (iErrors > 0)
+ {
+ TBuf<100> info;
+ info.Format(KEventErr, iErrors);
+ LogErrorAndLeave(iErrorLog);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp31::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::CloseTest()
+ {
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+ iUseLogFromThreadIsDisabled = EFalse;
+ }
+
+// ---------------------------------------------------------
+// CPosTp31::RunReceiveEventTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::RunReceiveEventsTestL(TAny* aData)
+ {
+ CPosTp31* self = reinterpret_cast<CPosTp31*>(aData);
+
+ RDebug::Print(_L(">>>>>>>>>RunReceiveEventsTestL<<<<<<<<<"));
+
+ CEventObserver* eventObserver = CEventObserver::NewL(self, ++self->iThreadIndex);
+ CleanupStack::PushL(eventObserver);
+ eventObserver->Start();
+
+ eventObserver->StartTimer();
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(eventObserver);
+
+ }
+
+LOCAL_C TInt ReceiveEventsThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp31::RunReceiveEventsTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp31::CreateEventsTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::CreateEventsTestL(TAny* aData)
+ {
+ CPosTp31* self = reinterpret_cast<CPosTp31*>(aData);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ ExecuteAndDeleteLD(lmd->CompactL());
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ RArray<TPosLmItemId> landmarksIds;
+ CleanupClosePushL(landmarksIds);
+ RDebug::Print(_L(">>>>>>>>>CreateEventsTestL<<<<<<<<<"));
+ for (TInt i=0; i<KNoLandmarks; i++)
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("TP31"));
+ TPosLmItemId idde;
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, idde = lmd->AddLandmarkL(*landmark));
+ }
+ landmarksIds.Append(idde);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ RArray<TPosLmItemId> catIds;
+ CleanupClosePushL(catIds);
+
+ _LIT(KCategoryName, "TP31 Category %d");
+ for (TInt j =0; j < KNoCategories; j++)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName, j);
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(name);
+ TPosLmItemId idde;
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, idde = cm->AddCategoryL(*category));
+ }
+ catIds.Append(idde);
+ CleanupStack::PopAndDestroy(category);
+ }
+ ExecuteAndDeleteLD(lmd->CompactL());
+
+ // Add categories to landmarks #21
+ self->RunAsyncOperationLD(cm->AddCategoryToLandmarksL(catIds[0], landmarksIds));
+
+ // Remove category #22
+ self->RunAsyncOperationLD(cm->RemoveCategoryL(catIds[0]));
+
+ // Remove categories #23
+ catIds.Remove(0);
+ self->RunAsyncOperationLD(cm->RemoveCategoriesL(catIds));
+
+ // Remove category from landmarks #24
+ TRAPD(err, self->RunAsyncOperationLD(cm->RemoveCategoryFromLandmarksL(catIds[0], landmarksIds)));
+ User::After(200000);
+
+ // Remove landmarks #25
+ landmarksIds.Remove(0);
+ landmarksIds.Remove(1);
+ self->RunAsyncOperationLD(lmd->RemoveLandmarksL(landmarksIds));
+ User::After(200000);
+
+ // Remove all landmarks #26
+ self->RunAsyncOperationLD(lmd->RemoveAllLandmarksL());
+ User::After(200000);
+
+ CleanupStack::PopAndDestroy(4, lmd);
+ }
+
+LOCAL_C TInt CreateEventsThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp31::CreateEventsTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp31::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::CreateThreadsL()
+ {
+
+ _LIT(KThreadName, "TP31 test thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TInt i=0; i<=KNoListeners; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1+iThreads.Count());
+
+ TInt err;
+ if (i==KNoListeners)
+ {
+ err = thread.Create(name, CreateEventsThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+ }
+ else
+ {
+ err = thread.Create(name, ReceiveEventsThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+ }
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp31::LogError
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::LogError(const TDesC& aError)
+ {
+ iErrorLog.Append(aError);
+ iErrors++;
+ }
+
+// ---------------------------------------------------------
+// CEventObserver::CheckEventL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp31::CheckEvent(const TInt aThreadIndex,
+ const TPosLmEventType aExpectedEventType,
+ const TPosLmEventType aEventType,
+ const TPosLmItemId aExpectedItemId,
+ const TPosLmItemId aItemId)
+ {
+ if (aExpectedEventType != aEventType)
+ {
+ _LIT(KError,"Thread %d received an unexpected eventtype. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aThreadIndex, aExpectedEventType, aEventType);
+ LogError(error);
+ }
+ if (aExpectedItemId != aItemId)
+ {
+ _LIT(KError,"Thread %d received an unexpected item id. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aThreadIndex, aExpectedItemId, aItemId);
+ LogError(error);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CEventObserver::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CEventObserver* CEventObserver::NewL(CPosTp31* aTp31, TInt aThreadIndex)
+ {
+ CEventObserver* self = new(ELeave) CEventObserver(aTp31, aThreadIndex);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CEventObserver::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CEventObserver::ConstructL()
+ {
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iPeriodicTimer = CPeriodic::NewL(EPriorityNormal);
+ }
+
+// C++ Constructor
+CEventObserver::CEventObserver(CPosTp31* aTp31, TInt aThreadIndex) :
+ CActive(EPriorityNormal),
+ iTp31(aTp31),
+ iThreadIndex(aThreadIndex),
+ iCallback(TimeoutCheck, this)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// C++ destructor
+CEventObserver::~CEventObserver()
+ {
+ Cancel();
+ delete iDatabase;
+ iDatabase = NULL;
+ if (iPeriodicTimer)
+ {
+ iPeriodicTimer->Cancel();
+ }
+ delete iPeriodicTimer;
+ iPeriodicTimer = NULL;
+ }
+
+// ---------------------------------------------------------
+// CEventObserver::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserver::Start()
+ {
+
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+
+ SetActive();
+ }
+
+//---------------------------------------------------------
+// CEventObserver::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserver::DoCancel()
+ {
+ iDatabase->CancelNotifyDatabaseEvent();
+ }
+
+//---------------------------------------------------------
+// CEventObserver::StartTimer
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserver::StartTimer()
+ {
+ iPeriodicTimer->Start(10000000, 10000000, TCallBack(TimeoutCheck, this));
+ }
+
+//---------------------------------------------------------
+// CPosEventObserver::TimeoutCheck
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CEventObserver::TimeoutCheck(TAny* aSelf)
+ {
+ CEventObserver* self = reinterpret_cast<CEventObserver*>(aSelf);
+
+
+ if ((self->iEventNumber == KNoEvents && self->iThreadIndex != KCancelledThreadIndex) ||
+ (self->iEventNumber == KNoEvents && self->iThreadIndex == KCancelledThreadIndex))
+ {
+ self->iPeriodicTimer->Cancel();
+ self->Cancel();
+
+ CActiveScheduler::Stop();
+ }
+ else if (self->iEventNumber != KNoEvents)
+ {
+ _LIT(KError,"Incorrect number of events received by Thread %d, events received %d \r\n");
+ TBuf<200> error;
+ error.Format(KError, self->iThreadIndex, self->iEventNumber);
+ self->iTp31->LogError(error);
+
+ self->iPeriodicTimer->Cancel();
+ self->Cancel();
+ CActiveScheduler::Stop();
+ }
+
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPosEventObserver::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserver::RunL()
+ {
+ iEventNumber++;
+
+ if (!(iEventNumber == KNoEvents && iThreadIndex == KCancelledThreadIndex))
+ {
+ if (iStatus != KErrNone)
+ {
+ iTp31->LogError(_L("Unexpected status in RunL"));
+ }
+ }
+ switch (iEventNumber)
+ {
+ case 1:
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 10:
+ iTp31->CheckEvent(iThreadIndex,
+ EPosLmEventLandmarkCreated,
+ iEvent.iEventType,
+ iEventNumber,
+ iEvent.iLandmarkItemId);
+ break;
+ case 11:
+ case 12:
+ case 13:
+ case 14:
+ case 15:
+ case 16:
+ case 17:
+ case 18:
+ case 19:
+ case 20:
+ iTp31->CheckEvent(iThreadIndex,
+ EPosLmEventCategoryCreated,
+ iEvent.iEventType,
+ (iEventNumber-KNoLandmarks),
+ iEvent.iLandmarkItemId);
+ break;
+ case 21:
+ case 24:
+ case 25:
+
+ iTp31->CheckEvent(iThreadIndex,
+ EPosLmEventLandmarkUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+ break;
+ case 22:
+ iTp31->CheckEvent(iThreadIndex,
+ EPosLmEventCategoryDeleted,
+ iEvent.iEventType,
+ 1,
+ iEvent.iLandmarkItemId);
+ break;
+ case 23:
+ iTp31->CheckEvent(iThreadIndex,
+ EPosLmEventCategoryUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+ break;
+ case 26:
+ if (iThreadIndex == KCancelledThreadIndex)
+ {
+ if (iStatus != KErrCancel)
+ {
+ iTp31->LogError(_L("Unexpected status when cancelled"));
+ }
+ }
+ else
+ {
+ iTp31->CheckEvent(iThreadIndex,
+ EPosLmEventLandmarkUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+ }
+ break;
+ default:
+ iTp31->LogError(_L("Unexpected event received"));
+ iPeriodicTimer->Cancel();
+ Cancel();
+ CActiveScheduler::Stop();
+ break;
+ }
+
+
+ if (iEventNumber == KNoEvents-1 && iThreadIndex == KCancelledThreadIndex)
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ iDatabase->CancelNotifyDatabaseEvent();
+
+ SetActive();
+ }
+ else if(!(iEventNumber == KNoEvents && iThreadIndex == KCancelledThreadIndex))
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp33.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,564 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp33.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <ss_std.h>
+
+//EPosLmServer
+_LIT(KPosLandmarksServerName, "*eposlmserver*");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp33::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp33 - LM Server shutdown");
+ aName = KTestName;
+ }
+
+void CPosTp33::CloseTest()
+ {
+ delete iLmd1;
+ iLmd1 = NULL;
+ delete iLmd2;
+ iLmd2 = NULL;
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp33::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::StartL()
+ {
+ MakeSurePanicDebugFileExistsL();
+ RemoveDefaultDbL();
+
+/* ListAllServers(_L("*"));
+ ListAllProcesses(_L("*"));
+ ListAllThreads(_L("*"));
+*/
+ // When running on security SDK, not possible to kill LM Server
+ //KillTestL();
+
+ RemoveDefaultDbL();
+
+ iLmd1 = CPosLandmarkDatabase::OpenL();
+
+ TBool alive = ServerAlive(KPosLandmarksServerName);
+
+ MonitorHeapL(ETrue);
+
+ ListAllServers(_L("*"));
+ ListAllProcesses(_L("*"));
+ ListAllThreads(_L("*"));
+
+ alive = ServerAlive(KPosLandmarksServerName);
+ if(!alive) LogErrorAndLeave(_L("Server not alive"));
+
+ if (iLmd1->IsInitializingNeeded())
+ {
+ iLog -> Put(_L("Doing InitializeL()"));
+ ExecuteAndDeleteLD(iLmd1->InitializeL());
+ }
+
+ MonitorHeapL(ETrue);
+
+ alive = ServerAlive(KPosLandmarksServerName);
+ if(!alive) LogErrorAndLeave(_L("Server not alive"));
+
+ iLmd2 = CPosLandmarkDatabase::OpenL();
+
+ alive = ServerAlive(KPosLandmarksServerName);
+ if(!alive) LogErrorAndLeave(_L("Server not alive"));
+
+ delete iLmd1;
+ iLmd1 = NULL;
+ User::After(4000000); //just to make sure that timing does not matter
+
+ alive = ServerAlive(KPosLandmarksServerName);
+ if(!alive) LogErrorAndLeave(_L("Server not alive"));
+
+ delete iLmd2;
+ iLmd2 = NULL;
+ User::After(4000000);
+
+ alive = ServerAlive(KPosLandmarksServerName);
+ if(alive) LogErrorAndLeave(_L("Server alive"));
+
+ //stress test below
+ StressTestL();
+
+ //thread test to verify that heap does not grow when threads are killed.
+ ThreadTestL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp33::StressTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::StressTestL()
+ {
+ iLog -> Put(_L("StressTestL() -->"));
+ for(TInt i = 0; i < 50; i++)
+ {
+ iLmd1 = CPosLandmarkDatabase::OpenL();
+ iLmd2 = CPosLandmarkDatabase::OpenL();
+ delete iLmd1;
+ iLmd1 = NULL;
+ delete iLmd2;
+ iLmd2 = NULL;
+ }
+ // MonitorHeapL();
+ MonitorHeapL(ETrue);
+ TBool alive = ServerAlive(KPosLandmarksServerName);
+ if(!alive) LogErrorAndLeave(_L("Server not alive in StressTestL"));
+
+ User::After(4000000);
+
+ alive = ServerAlive(KPosLandmarksServerName);
+ if(alive) LogErrorAndLeave(_L("Server alive in StressTestL"));
+ iLog -> Put(_L("StressTestL() <--"));
+ }
+// ---------------------------------------------------------
+// CPosTp33::ListAllServers
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::ListAllServers(const TDesC& aServerName)
+ {
+ TFindServer find(aServerName);
+ TFullName name;
+
+ //TraceL(_L("ListAllServers"), aTraceFile);
+
+ iLog->Put(_L("ListAllServers"));
+
+ while (find.Next(name) == KErrNone)
+ {
+ //iLog->Put(name);
+ //TraceL(name, aTraceFile);
+ iLog->Put(name);
+
+ }
+ //TraceL(_L("--------------------"), aTraceFile);
+ iLog->Put(_L("--------------------"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp33::ListAllProcesses
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::ListAllProcesses(const TDesC& aProcessName)
+ {
+ TFindProcess find(aProcessName);
+ TFullName name;
+
+ iLog->Put(_L("ListAllProcesses"));
+ //TraceL(_L("ListAllProcesses"), aTraceFile);
+
+ while (find.Next(name) == KErrNone)
+ {
+ //iLog->Put(name);
+ //TraceL(name, aTraceFile);
+ iLog->Put(name);
+ }
+ //TraceL(_L("--------------------"), aTraceFile);
+ iLog->Put(_L("--------------------"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp33::ListAllThreads
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::ListAllThreads(const TDesC& aThreadName)
+ {
+ TFindThread find(aThreadName);
+ TFullName name;
+
+ iLog->Put(_L("ListAllThreads"));
+ //TraceL(_L("ListAllThreads"), aTraceFile);
+ while (find.Next(name) == KErrNone)
+ {
+ //TraceL(name, aTraceFile);
+ iLog->Put(name);
+ }
+ //TraceL(_L("--------------------"), aTraceFile);
+ iLog->Put(_L("--------------------"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp33::KillTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::KillTestL()
+ {
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ TFullName targetName;
+
+ #ifndef __WINS__
+ TFindProcess finderLMSERV(KPosLandmarksServerName);
+ RProcess process_or_thread_lmserv;
+ #else
+ TFindThread finderLMSERV(KPosLandmarksServerName);
+ RThread process_or_thread_lmserv;
+ #endif
+
+ if (finderLMSERV.Next(targetName) == KErrNone)
+ {
+ process_or_thread_lmserv.Open(finderLMSERV);
+ process_or_thread_lmserv.Kill(KErrGeneral);
+ process_or_thread_lmserv.Close();
+ }
+
+ if (ServerAlive(KPosLandmarksServerName))
+ {
+ LogErrorAndLeave(_L("Server alive, error in TC!"));
+ }
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+
+ landmark->SetLandmarkNameL(_L("TP33"));
+
+ TRAPD(err, lmd->AddLandmarkL(*landmark));
+ if (err != KErrServerTerminated)
+ {
+ LogErrorAndLeave(_L("AddLanmdark does not Leave with -15 after the server has been killed"));
+ }
+
+ TRAP(err, lmd->UpdateLandmarkL(*landmark));
+ if (err != KErrServerTerminated)
+ {
+ LogErrorAndLeave(_L("UpdateLandmark does not Leave with -15 after the server has been killed"));
+ }
+
+ CleanupStack::PopAndDestroy(2, lmd);
+ }
+
+// ---------------------------------------------------------
+// CPosTp33::MonitorHeapL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::MonitorHeapL(TBool aMaxSet)
+ {
+ iLog->Put(_L("MonitorHeapL"));
+ TInt landmarkHeap=0, landmarkHeapUsed=0;
+
+ TBuf<150> buf;
+ TInt err = GetHeapSizeL(KPosLandmarksServerName, landmarkHeap, landmarkHeapUsed);
+ if (err != KErrNone)
+ {
+ buf.Zero();
+ buf.Format(_L("GetHeapSizeL for Landmark server returned error, err %d"), err);
+ iLog->Put(buf);
+ }
+ if (aMaxSet)
+ {
+ iMaxHeap = 2*landmarkHeapUsed;
+ }
+ else
+ {
+ if(landmarkHeapUsed > iMaxHeap)
+ {
+ LogErrorAndLeave(_L("Used heap to large"));
+ }
+ }
+
+ buf.Zero();
+ buf.Format(_L("Landmark Heap; %d Landmark Heap Used: %d"), landmarkHeap, landmarkHeapUsed);
+ iLog->Put(buf);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp33::GetHeapSizeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp33::GetHeapSizeL(const TDesC& aThreadName, TInt& aSize, TInt& aUsed)
+ {
+ RThread thread;
+ TFindThread findThread(aThreadName);
+
+ TFullName fullName;
+
+ if (findThread.Next(fullName) != KErrNone)
+ {
+ iLog->Put(_L("Thread not found"));
+ aSize=-1;aUsed=-1;
+ return KErrNotFound;
+ }
+
+ TInt err = thread.Open(fullName);
+
+ if (err != KErrNone)
+ {
+ iLog->Put(_L("Thread could not be opened"));
+ aSize=-1;aUsed=-1;
+ return err;
+ }
+ CleanupClosePushL(thread);
+
+ //TInt tmp;
+
+#ifndef __WINS__
+// For some reason cannot access heap in target
+// thread.GetRamSizes(aSize,tmp);
+// aUsed = aSize;
+
+ // FrBo Commented since not supported on ARMV5 (on SDK Series60_30_2005_wk02_incl_LBSpre4)
+ //thread.GetRamSizes(aSize, aUsed);
+ // Use below for now
+ aSize=-1;aUsed=-1;
+
+ TThreadStackInfo stackInfo;
+ thread.StackInfo(stackInfo);
+
+ aSize = stackInfo.iBase - stackInfo.iLimit;
+ aUsed = aSize;
+
+#else
+
+ // FrBo Commented since not supported on WINSCW (on SDK Series60_30_2005_wk04_Mars)
+ // Use below for now
+ aSize=-1;aUsed=-1;
+
+ TThreadStackInfo stackInfo;
+ thread.StackInfo(stackInfo);
+
+ aSize = stackInfo.iBase - stackInfo.iLimit;
+ aUsed = aSize;
+
+ /*
+ // In WINS we can get both the size of the heap, and amount
+ // of bytes actually used. This method Panics on ARMI
+ RHeap* heap = NULL;
+ heap = thread.Heap();
+ if (heap == NULL)
+ {
+ iLog->Put(_L("Could not open heap."));
+ aSize=-1;aUsed=-1;
+ return KErrGeneral;
+ LogErrorAndLeave(_L("Could not open heap."));
+ }
+ TInt tmp;
+ aSize = heap->Size();
+ aUsed = heap->Size() - (heap->Available(tmp));
+ */
+
+#endif
+ CleanupStack::PopAndDestroy(&thread); // thread
+ return KErrNone;
+ }
+
+
+void CPosTp33::ThreadTestL()
+ {
+ iLog -> Put(_L("ThreadTestL() -->"));
+ StartMultipleClientsL(5);
+ MonitorHeapL();
+ User::After(4000000);
+ TBool alive = ServerAlive(KPosLandmarksServerName);
+ if(alive) LogErrorAndLeave(_L("Server alive"));
+ iLog -> Put(_L("ThreadTestL() <--"));
+ }
+
+// ---------------------------------------------------------
+// ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp33::RunTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+void CPosTp33::StartMultipleClientsL(const TUint aNoClients)
+ {
+ _LIT(KMultipleErr, "Error %d from client %d when multiple clients access the landmarks db");
+ _LIT(KPanicErr, "Thread exit with incorrect code");
+
+ CreateThreadsL(aNoClients);
+
+ RArray<TRequestStatus> statuses;
+ CleanupClosePushL(statuses);
+
+ for (TUint j=0; j<aNoClients; j++)
+ {
+ TRequestStatus status;
+ statuses.Append(status);
+ }
+
+ TInt i=0;
+ TInt errrorsFound = KErrNone;
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ // This prevents some weird CentralRepository alloc to accur, which
+ // caused the test to fail
+ User::After(2000000);
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ User::WaitForRequest(statuses[i]);
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+
+ iLog -> Put(_L("Checking Thread"));
+ TInt exitReason = iThreads[i].ExitReason();
+
+ //AssertTrueSecL(exitReason == KErrNone || exitReason == KErrNotFound, KMultipleErr, exitReason);
+ if (exitReason != KErrNone && exitReason != KErrNotFound)
+ {
+ TBuf<100> buf;
+ buf.Format(KMultipleErr, exitReason, i);
+ iLog->Put(buf);
+ errrorsFound++;
+ }
+
+#ifndef __WINS__
+ AssertTrueSecL(iThreads[i].ExitType() == EExitPanic, KPanicErr); //does not currently work use exit on wins instead
+#else
+ AssertTrueSecL(iThreads[i].ExitType() == EExitKill, KPanicErr);
+#endif
+ }
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+ iThreadIndex=0;
+ iThreads.Close();
+ CleanupStack::PopAndDestroy(&statuses);
+
+ if (errrorsFound != KErrNone) LogErrorAndLeave(_L("Error from thread client"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp33::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::CreateThreadsL(const TUint aNoThreads)
+ {
+ _LIT(KThreadName, "LM TP33 test thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TUint i=0; i<aNoThreads; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1+iThreads.Count());
+
+ TInt err;
+ err = thread.Create(name, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp30::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp33::RunTestL(TAny* /*aData*/)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ TRequestStatus status;
+ TPosLmEvent event;
+ lmd->NotifyDatabaseEvent(event, status);
+
+ //XXX fix this when dialogs works again
+#ifndef __WINS__
+ User::Panic(_L("Panic before cleanup"),-1); //does not currently work use exit on wins instead
+#else
+ User::Exit(-1);
+#endif
+
+ lmd->CancelNotifyDatabaseEvent();
+ CleanupStack::PopAndDestroy(2, lmd);
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp34.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp34.h"
+#include <f32file.h>
+
+//#include "FT_CSearchResult.h"
+//#include "FT_CActiveSearch.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLMItemIterator.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp34::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp34::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP34 - Multiple async operations");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp34::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp34::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iSearchResults.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp34::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp34::StartL()
+ {
+ _LIT(KInUseErr, "search is already running, StartLandmarksSearch should leave with error code KErrInUse");
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(iLog);//1
+ CleanupStack::PushL(activeLmOperation);
+
+ AppendSearchResultsL();
+
+ const TInt KSearchResultIndex1=1;
+ const TInt KSearchResultIndex2=10;
+
+ CPosLmTextCriteria* textCriteria1 = CPosLmTextCriteria::NewLC(); //2
+ textCriteria1->SetTextL(iSearchResults[KSearchResultIndex1]->TextCriteria());
+ textCriteria1->SetAttributesToSearch(iSearchResults[KSearchResultIndex1]->Attributes());
+
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC(); //3
+ textCriteria2->SetTextL(iSearchResults[KSearchResultIndex2]->TextCriteria());
+ textCriteria2->SetAttributesToSearch(iSearchResults[KSearchResultIndex2]->Attributes());
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria1);
+ activeLmOperation->Start(iOperation);
+
+ TRAPD(err, iLandmarkSearch->StartLandmarkSearchL(*textCriteria2));
+ AssertTrueSecL(err == KErrInUse, KInUseErr);
+
+ CActiveLmOperation* activeLmOperation2 = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation2); //4
+
+ ///
+ CPosLandmarkSearch* landmarkSearch2 = CPosLandmarkSearch::NewL(*iDatabase);
+ CleanupStack::PushL(landmarkSearch2); //5
+
+ CPosLmOperation* lmo = landmarkSearch2->StartLandmarkSearchL(*textCriteria2);
+ CleanupStack::PushL(lmo); //6
+
+ activeLmOperation2->Start(lmo);
+
+ CActiveScheduler::Start();
+
+ CActiveScheduler::Start();
+
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+
+ activeLmOperation2->CheckOperationL();
+
+ CheckSearchResultL(*iSearchResults[KSearchResultIndex1], *iLandmarkSearch, *textCriteria1);
+
+ CheckSearchResultL(*iSearchResults[KSearchResultIndex2], *landmarkSearch2, *textCriteria2);
+
+ //CleanupStack::PopAndDestroy(5, activeSearch);
+ CleanupStack::PopAndDestroy(6, activeLmOperation);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp34::CheckSearchResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp34::CheckSearchResultL(CSearchResult& aSearchResult,
+ CPosLandmarkSearch& aLandmarkSearch,
+ CPosLmTextCriteria& aTextCriteria)
+ {
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ if ((TUint)(aSearchResult.SearchResult()).Count() != aLandmarkSearch.NumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, (aSearchResult.SearchResult()).Count());
+ iLog->Put(info);
+ info.Format(KReturned, aLandmarkSearch.NumOfMatches());
+ iLog->Put(info);
+ iLog->Put(_L("Search criteria: "));
+ iLog->Put(aTextCriteria.Text());
+ LogErrorAndLeave(KNumOfMatchesErr);
+ }
+ CPosLmItemIterator* iter = aLandmarkSearch.MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ AssertTrueSecL(aSearchResult.FindSearchResult(id), KNotFoundErr, id);
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp35.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,903 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp35.h"
+#include <f32file.h>
+#include <e32math.h>
+#include <e32math.h>
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KMaxFieldLength = 80;
+const TInt KDistanceFieldLength = 24;
+const TInt KMaxNearestLineLength = 1024;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp35::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp35::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iNearestSearchResults.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp35::StartL()
+ {
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+ iDatabase = UseNearestSearchGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ AppendNearestSearchResultsL();
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ iLog->Log(_L("Testing search with criterias read from LmDbNearestResult.txt syncronously"));
+ SearchL();
+
+ iLog->Log(_L("Testing search with criterias read from LmDbNearestResult.txt asyncronously"));
+ SearchL(ETrue);
+
+ iLog->Log(_L("Testing search and cancel"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Testing search and cancel in callback"));
+ SearchAndCancelL(ETrue);
+
+ iLog->Log(_L("Testing search with a sortorder"));
+ SearchWithSortOrderL();
+
+ iLog->Log(_L("Testing error codes"));
+ _LIT(KStartCatErr, "StartCategorySearch should leave with KErrArgument with nearest criteria");
+ _LIT(KNaNErr, "Max distance should be NaN by default");
+
+ TCoordinate coord(12, 13);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord);
+ AssertTrueSecL(Math::IsNaN(nearestCriteria->MaxDistance()), KNaNErr);
+
+ TRAPD(err, iLandmarkSearch->StartCategorySearchL(*nearestCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KStartCatErr);
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+
+ TCoordinate pos(55, 18);
+ nearestCriteria = CPosLmNearestCriteria::NewLC(pos, ETrue);
+ nearestCriteria->SetMaxDistance(1);
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(*nearestCriteria, EFalse));
+
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+
+ nearestCriteria = CPosLmNearestCriteria::NewLC(pos, ETrue);
+ nearestCriteria->SetMaxDistance(300);
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(*nearestCriteria, EFalse));
+
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+ CleanupStack::PopAndDestroy(nearestCriteria);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::UseNearestSearchGeneratedDbFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp35::UseNearestSearchGeneratedDbFileL()
+ {
+ _LIT(KDbFile, "eposlmnearestsearch.ldb");
+ CopyTestDbFileL(KDbFile);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KDbFile);
+ CleanupStack::PopAndDestroy(manager);
+
+ return CPosLandmarkDatabase::OpenL(KDbFile);
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp35::SearchL(const TBool& aSync)
+ {
+
+ for(TInt i=0; i<iNearestSearchResults.Count(); i++)
+ {
+ TCoordinate coord(iNearestSearchResults[i]->iLatitude, iNearestSearchResults[i]->iLongitude);
+ iLog->Log(_L("SearchL"));
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, iNearestSearchResults[i]->iUseCoverageRadius);
+ nearestCriteria->SetMaxDistance(iNearestSearchResults[i]->iMaxDistance);
+
+ TBuf<100> pelle;
+ pelle.Format(_L("StartSearchOperationL: Searching for Lat %f Long %f"), iNearestSearchResults[i]->iLatitude, iNearestSearchResults[i]->iLongitude);
+ iLog->Log(pelle);
+
+ if (iNearestSearchResults[i]->iMaxSearchResult > 0)
+ {
+ iLandmarkSearch->SetMaxNumOfMatches(iNearestSearchResults[i]->iMaxSearchResult);
+ }
+ else
+ {
+ iLandmarkSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+ }
+
+ if (aSync)
+ {
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(*nearestCriteria, iNearestSearchResults[i]->Redefined()));
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*nearestCriteria, iNearestSearchResults[i]->Redefined()));
+ }
+
+ if (iNearestSearchResults[i]->Redefined() && i > 0)
+ {
+ iLog->Log(_L("Redefined"));
+
+ for (TInt j=0; j<iNearestSearchResults[i]->iDistances.Count(); j++)
+ {
+ TBool found = EFalse;
+ TInt id = 0;
+ TPosLmItemId idde;
+
+ id = j;
+ idde = iNearestSearchResults[i]->iDistances[j].Id();
+
+ TBuf<100> debug;
+ debug.Format(_L("Looking for id %d or id: %d "), idde, id);
+ //iLog->Log(debug);
+
+ for (TInt p=0;p<iNearestSearchResults[i-1]->iDistances.Count();p++)
+ {
+
+ if (iNearestSearchResults[i]->iDistances[j].Id() == iNearestSearchResults[i-1]->iDistances[p].Id())
+ {
+ found = ETrue;
+ TBuf<100> buf;
+ buf.Format(_L("Found id %d or id: %d "), idde, id);
+ //iLog->Log(buf);
+ }
+ }
+ if (!found)
+ {
+ // Remove since not found, only keep ids that was found in previous search
+ TBuf<100> buf;
+ buf.Format(_L("Removing lm Id %d from index %d"), idde, id);
+ //iLog->Log(buf);
+ iNearestSearchResults[i]->iDistances.Remove(id);
+ //iLog->Log(_L("Removing Done"));
+ j--;
+ }
+ //iLog->Log(_L("***********"));
+ }
+
+
+ }
+
+ CheckSearchResultL(*iNearestSearchResults[i]);
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::CheckSearchResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+//void CPosTp35::CheckSearchResultL(CNearestSearchResult& aSearchResult)
+void CPosTp35::CheckSearchResultL(CNearestSearchResultTp35& aSearchResult)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+
+ TUint expectedNoMatches = aSearchResult.iDistances.Count();
+ if (aSearchResult.iMaxSearchResult != 0 && aSearchResult.iMaxSearchResult < aSearchResult.iDistances.Count())
+ {
+ expectedNoMatches = aSearchResult.iMaxSearchResult;
+ }
+
+ if (expectedNoMatches != iLandmarkSearch->NumOfMatches())
+ {
+ _LIT(KExpected, "Expected no. of matches: %d");
+ _LIT(KReturned, "Returned no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, expectedNoMatches);
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt index=0;
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ if (aSearchResult.iDistances[index].iId != id)
+ {
+ // if the distance is equal to the distance to the landmark
+ // before or after then no error.
+ // This to be able to use a databse with landmarks with the same position.
+
+ TBool noError=EFalse;
+ if (index > 0)
+ {
+ noError = (aSearchResult.iDistances[index-1].iDistance == aSearchResult.iDistances[index].iDistance);
+ }
+ if (index < aSearchResult.iDistances.Count() && !noError)
+ {
+ noError = (aSearchResult.iDistances[index+1].iDistance == aSearchResult.iDistances[index].iDistance);
+ }
+ if (!noError)
+ {
+ _LIT(KUnexpectedItemId, "Unexpected item id");
+ _LIT(KExpected, "Expected item id: %d");
+ _LIT(KReturned, "Returned item id: %d");
+ TBuf<100> info;
+ info.Format(KExpected, aSearchResult.iDistances[index].iId);
+ iLog->Log(info);
+ info.Format(KReturned, id);
+ iLog->Log(info);
+
+ TBuf<800> info2;
+ aSearchResult.Print(info2);
+ iLog->Log(info2);
+
+
+ iLog->Log(KUnexpectedItemId);
+ User::Leave(-1);
+
+ }
+ }
+ _LIT(KReturned, "Returned id: %d or id: %d");
+ TBuf<100> info;
+ info.Format(KReturned, aSearchResult.iDistances[index].iId, id);
+ //iLog->Log(info);
+
+ id = iter->NextL();
+ index++;
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp35::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ TCoordinate coord(iNearestSearchResults[KIndex]->iLatitude, iNearestSearchResults[KIndex]->iLongitude);
+
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, iNearestSearchResults[KIndex]->iUseCoverageRadius);
+
+ iLandmarkSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ iNearestSearchResults[KIndex]->Redefined()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarkSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ iNearestSearchResults[KIndex]->Redefined()));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ if (iter->NumOfItemsL() != iLandmarkSearch->NumOfMatches())
+ {
+ iLog->Log(_L("Iterators no. of items is not equal to LandmarksSearch no. matches"));
+ _LIT(KExpected, "Iter. of matches: %d");
+ _LIT(KReturned, "LandmarksSearch no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, iter->NumOfItemsL());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+
+ }
+
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancelled the operation = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+ // FrBo: No longer sure that result is returned when cancelling
+ //AssertTrueSecL(iter->NumOfItemsL() != 0, KCancelErr);
+ }
+
+ CleanupStack::PopAndDestroy(2, nearestCriteria);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp35::SearchWithSortOrderL()
+ {
+ // Only verifies that search does not fail when only landmarks with no name in the db
+
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed with a sortorder");
+
+ // Test search with one criteria which return all landmarks in db
+ const TInt KIndex=0;
+
+ TCoordinate coord(iNearestSearchResults[KIndex]->iLatitude, iNearestSearchResults[KIndex]->iLongitude);
+
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, iNearestSearchResults[KIndex]->iUseCoverageRadius);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ iLandmarkSearch->SetMaxNumOfMatches(KPosLmMaxNumOfMatchesUnlimited);
+
+ for (TInt i=0; i<4; i++)
+ {
+ if(i==0)
+ {
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ sortPref,
+ iNearestSearchResults[KIndex]->Redefined()));
+ }
+ else if (i==1)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ sortPref,
+ iNearestSearchResults[KIndex]->Redefined()));
+ }
+ //**** async
+ else if (i==2)
+ {
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ sortPref,
+ iNearestSearchResults[KIndex]->Redefined()));
+ }
+ else if (i==3)
+ {
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ RunAsyncOperationLD(iLandmarkSearch->StartLandmarkSearchL(
+ *nearestCriteria,
+ sortPref,
+ iNearestSearchResults[KIndex]->Redefined()));
+ }
+ AssertTrueSecL((TUint)iNearestSearchResults[KIndex]->iDistances.Count()== iLandmarkSearch->NumOfMatches(), KNumOfMatchesErr);
+ }
+
+ CleanupStack::PopAndDestroy(nearestCriteria);
+ }
+
+// ---------------------------------------------------------
+// CPosTp35::AppendAreaSearchResultsL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp35::AppendNearestSearchResultsL()
+ {
+ iNearestSearchResults.ResetAndDestroy();
+
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\lmDbNearestSearchResult.txt");
+
+ RFile file;
+ CleanupClosePushL(file);
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+
+ TInt row=0;
+ TBuf<KMaxNearestLineLength> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#' && lex.Peek() != '\t')
+ {
+ ++row;
+ //CNearestSearchResult* searchResult = CNearestSearchResult::NewL(line, row);
+ CNearestSearchResultTp35* searchResult = CNearestSearchResultTp35::NewL(line, row, iFileSession);
+ CleanupStack::PushL(searchResult);
+
+ User::LeaveIfError(iNearestSearchResults.Append(searchResult));
+ CleanupStack::Pop(searchResult);
+
+ }
+ }
+ CleanupStack::PopAndDestroy(&file);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::NewL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//CNearestSearchResult* CNearestSearchResult::NewL(const TDesC& aDes, const TInt& aIndex)
+CNearestSearchResultTp35* CNearestSearchResultTp35::NewL(
+ const TDesC& aDes,
+ const TInt& aIndex,
+ RFs& aFileSession)
+ {
+ CNearestSearchResultTp35* self = new(ELeave) CNearestSearchResultTp35( aFileSession );
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes, aIndex);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+
+CNearestSearchResultTp35::CNearestSearchResultTp35(RFs& aFileSession)
+: iFileSession( aFileSession )
+ {
+ TRealX nan;
+ nan.SetNaN();
+ iMaxDistance = nan;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::CounstructL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CNearestSearchResultTp35::ConstructL(const TDesC& aDes, const TInt& aIndex)
+ {
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0, useCoverageRadius;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ELatitude:
+ val.Val(iLatitude, TChar(','));
+ break;
+ case ELongitude:
+ val.Val(iLongitude, TChar(','));
+ break;
+ case EUseCoverageRadius:
+ val.Val(useCoverageRadius);
+ if (useCoverageRadius == 1)
+ {
+ iUseCoverageRadius = ETrue;
+ }
+ break;
+ case EMaxDistance:
+ val.Val(iMaxDistance);
+ break;
+ case EErrorCode:
+ val.Val(iErrorCode);
+ break;
+ case ESearchResult:
+ ParseSearchResult(token);
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iRedefined = ETrue;
+ }
+ break;
+ case EMaxSearchResult:
+ val.Val(iMaxSearchResult);
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ AppendDistancesL(aIndex);
+
+ }
+ }
+
+
+// Destructor
+
+CNearestSearchResultTp35::~CNearestSearchResultTp35()
+ {
+ iDistances.Close();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::AppendDistancesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CNearestSearchResultTp35::AppendDistancesL(const TInt& aIndex)
+ {
+ iDistances.Reset();
+
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\lmDbNearestSearch.txt");
+
+ RFile file;
+ CleanupClosePushL(file);
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+
+ TInt row=0;
+ TBuf<KMaxNearestLineLength> line;
+ while (CLandmarkTestProcedureBase::ReadLn(file, line) != KErrEof)
+ {
+ ParseDistanceL(line, aIndex, row);
+ ++row;
+ }
+
+ SortDistances();
+
+ CleanupStack::PopAndDestroy(&file);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::ParseDistancesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CNearestSearchResultTp35::ParseDistanceL(const TDesC& aDes,
+ const TInt& aIndex,
+ const TPosLmItemId& aId)
+ {
+
+ const TInt KStartIndex = 5;
+
+ TLex line(aDes);
+ line.Mark();
+ TInt index = 0;
+ TReal64 dist=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t' || line.Peek() == '\n' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+
+ if (index == (KStartIndex + aIndex))
+ {
+ TLex val(token);
+ val.Val(dist, TChar(','));
+
+ if (iUseCoverageRadius)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aId);
+
+ TReal32 aCoverageRadius;
+ if (lm->GetCoverageRadius(aCoverageRadius) == KErrNone)
+ {
+ dist -= aCoverageRadius;
+ if (dist < 0)
+ {
+ dist = 0;
+ }
+ }
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ if (Math::IsNaN(iMaxDistance) || dist <= iMaxDistance)
+ {
+ if (dist != -1)
+ {
+ TSearchResultTp35 searchResult(aId, TReal32(dist));
+ iDistances.Append(searchResult);
+ }
+ }
+
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ }
+// ---------------------------------------------------------
+// CNearestSearchResult::Latitude
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+//TReal64 CNearestSearchResult::Latitude() const
+TReal64 CNearestSearchResultTp35::Latitude() const
+ {
+ return iLatitude;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::Latitude
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+//TReal64 CNearestSearchResult::Longitude() const
+TReal64 CNearestSearchResultTp35::Longitude() const
+ {
+ return iLongitude;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::UseCoverageRadius
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+//TBool CNearestSearchResult::UseCoverageRadius() const
+TBool CNearestSearchResultTp35::UseCoverageRadius() const
+ {
+ return iUseCoverageRadius;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::MaxDistance
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+TReal32 CNearestSearchResultTp35::MaxDistance() const
+ {
+ return iMaxDistance;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::ErrorCode
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+//TInt CNearestSearchResult::ErrorCode() const
+TInt CNearestSearchResultTp35::ErrorCode() const
+ {
+ return iErrorCode;
+ }
+
+// ---------------------------------------------------------
+// InternalLandmarksSortL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt InternalSort(const TSearchResultTp35& aSource, const TSearchResultTp35& aTarget)
+ {
+ // zero, if the two objects are equal
+ // a negative value, if the first object is less than the second.
+ // a positive value, if the first object is greater than the second.
+
+ if ( aSource.Distance() == aTarget.Distance())
+ {
+ return 0;
+ }
+ else if (aSource.Distance() < aTarget.Distance())
+ {
+ return -1;
+ }
+
+ return 1;
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::ErrorCode
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CNearestSearchResultTp35::SortDistances()
+ {
+ TLinearOrder<TSearchResultTp35> order(InternalSort);
+ iDistances.Sort(order);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::Print
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CNearestSearchResultTp35::Print(TDes& aPrint)
+ {
+ _LIT(KPosInfo, "Latitude=%g, Longitude=%g");
+ TChar del(',');
+
+ TBuf<KMaxFieldLength> info;
+ info.Format(KPosInfo, iLatitude, iLongitude);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KUseCoverageRadius, "UseCoverageRadius=%d");
+ info.Format(KUseCoverageRadius, iUseCoverageRadius);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ if (!Math::IsNaN(iMaxDistance))
+ {
+ _LIT(KMaxDistance, "MaxDistance=%g");
+ info.Format(KMaxDistance, iMaxDistance);
+ aPrint.Append(info);
+ aPrint.Append(del);
+ }
+
+ _LIT(KErrorCode, "ErrorCode = %d");
+ info.Format(KErrorCode, iErrorCode);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KRedefined, "Redefined=%d");
+ info.Format(KRedefined, iRedefined);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ _LIT(KMaxSearchResult, "MaxSearchResult=%d");
+ info.Format(KMaxSearchResult, iMaxSearchResult);
+ aPrint.Append(info);
+ aPrint.Append(del);
+
+ PrintDistances(aPrint);
+ }
+
+// ---------------------------------------------------------
+// CNearestSearchResult::PrintDistances
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CNearestSearchResultTp35::PrintDistances(TDes& aPrint)
+ {
+ TBuf<KDistanceFieldLength> info2;
+ TChar del(':');
+ aPrint.Append(_L("Distances: "));
+
+ for (TInt j=0; j<iDistances.Count(); j++)
+ {
+ _LIT(KDistance, "%g,%d");
+ info2.Format(KDistance, iDistances[j].Distance(), iDistances[j].Id());
+ aPrint.Append(info2);
+ aPrint.Append(del);
+ }
+ }
+
+// ---------------------------------------------------------
+// TSearchResult::TSearchResult
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TSearchResultTp35::TSearchResultTp35()
+ {
+ TRealX nan;
+ nan.SetNaN();
+ iDistance=nan;
+ iId=0;
+ }
+
+TSearchResultTp35::TSearchResultTp35(const TPosLmItemId& aId, const TReal32& aDistance) :
+ iDistance(aDistance),
+ iId(aId)
+ {
+ }
+
+// ---------------------------------------------------------
+// TSearchResult::Distance
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal64 TSearchResultTp35::Distance() const
+ {
+ return iDistance;
+ }
+
+// ---------------------------------------------------------
+// TSearchResult::Id
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPosLmItemId TSearchResultTp35::Id() const
+ {
+ return iId;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp36.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp36.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp36::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp36::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iArray.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp36::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp36::StartL()
+ {
+ TTime startTime;
+ TTime stopTime;
+
+ startTime.UniversalTime();
+
+ // Delete "c:\\system\\data\\eposlm.ldb"
+ RemoveDefaultDbL();
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // we should not find any uncategorized landmarks since every landmark in the db
+ // belongs to a category
+ iLog->Log(_L("Searching async"));
+ DoTestL(ETrue, 0, 0);
+ DoTestL(ETrue, 1, 0);
+ DoTestL(ETrue, 2, 0);
+ DoTestL(ETrue, 3, 0);
+
+ iLog->Log(_L("Searching sync"));
+ DoTestL(EFalse, 0, 0);
+ DoTestL(EFalse, 1, 0);
+ DoTestL(EFalse, 2, 0);
+ DoTestL(EFalse, 3, 0);
+
+ iLog->Log(_L("Should leave with KErrArgument"));
+ TRAPD(err, DoSearchForCategoryL(ETrue));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Should leave with KErrArgument"));
+ User::Leave(err);
+ }
+ else iLog->Log(_L("Function correctly leaved with KErrArgument"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Should leave with KErrArgument"));
+ TRAP(err, DoSearchForCategoryL(EFalse));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Should leave with KErrArgument"));
+ User::Leave(err);
+
+ }
+ else iLog->Log(_L("Function correctly leaved with KErrArgument"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ TInt maxNr = GetNrOfLandmarksL();
+
+ TBuf<100> buf;
+ buf.Format(_L("Nr of landmarks: %d"), maxNr);
+ iLog->Log(buf);
+
+ // Remove categories from some landmarks
+ RemoveCategoriesFromLandmarksL(5);
+ // Check that correct number of uncategorized landmarks are found
+ DoTestL(EFalse, 0, 5);
+ DoTestL(EFalse, 1, 5);
+ DoTestL(EFalse, 2, 5);
+ DoTestL(EFalse, 3, 5);
+ // Remove categories from some landmarks
+ RemoveCategoriesFromLandmarksL(6);
+ // Check that correct number of uncategorized landmarks are found
+ DoTestL(EFalse, 0, 11);
+ DoTestL(EFalse, 1, 11);
+ DoTestL(EFalse, 2, 11);
+ DoTestL(EFalse, 3, 11);
+
+ // Remove categories from some landmarks
+ RemoveCategoriesFromLandmarksL(43);
+ // Check that correct number of uncategorized landmarks are found
+ DoTestL(EFalse, 0, 54);
+ DoTestL(EFalse, 1, 54);
+ DoTestL(EFalse, 2, 54);
+ DoTestL(EFalse, 3, 54);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ buf.Zero();
+ buf.Format(_L("TP36 took %d seconds"), resse);
+ iLog->Log(buf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp36::DoTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp36::DoTestL(TBool aSync, TInt aTestNr, TInt aNrOfHits)
+ {
+ TBuf<150> buf;
+ buf.Format(_L("DoTestL part: %d"), aTestNr);
+ iLog->Log(buf);
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // Specified in header file EPos_CPosLmCategoryCriteria.h says that
+ // SetCategoryItemId(KPosLmNullItemId) should return uncategorized landmarks and that
+ // SetGlobalCategory(KPosLmNullGlobalCategory) should return uncategorized landmarks and that
+ // SetCategoryNameL(KNullDesC) should return uncategorized landmarks
+ if (aTestNr == 0)
+ {
+ }
+ else if (aTestNr == 1)
+ {
+ catSearchCriteria->SetCategoryItemId(KPosLmNullItemId);
+ }
+ else if (aTestNr == 2)
+ {
+ catSearchCriteria->SetGlobalCategory(KPosLmNullGlobalCategory);
+ }
+ else if (aTestNr == 3)
+ {
+ catSearchCriteria->SetCategoryNameL(KNullDesC);
+ }
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria);
+
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt nr = iter->NumOfItemsL();
+ if (nr != aNrOfHits)
+ {
+ buf.Format(_L("Wrong number of landmarks returned when searching for uncategorized landmarks, found: %d should found %d"), nr, aNrOfHits);
+
+ iLog->Log(buf);
+ User::Leave(-1);
+
+ }
+
+ buf.Format(_L("Found %d nr of landmarks when searching GlobaCategories"), nr);
+ iLog->Log(buf);
+ TPosLmItemId id = iter->NextL();
+ TInt res = 0;
+ if (nr != 0)
+ {
+ while (id != KPosLmNullItemId)
+ {
+ TInt found = iArray.Find(id);
+ if (found == KErrNotFound)
+ {
+
+ iLog->Log(_L("Not found"));
+ }
+ else
+ {
+ res++;
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* landmark2 = iDatabase->ReadLandmarkLC(iArray[found]);
+
+ CompareLandmarksL(*landmark, *landmark2);
+
+ CleanupStack::PopAndDestroy(landmark2);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+ id = iter->NextL();
+ }
+
+ if (res != nr)
+ {
+
+ iLog->Log(_L("The correct landmark was never found"));
+ User::Leave(-1);
+
+ }
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp36::DoSearchForCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp36::DoSearchForCategoryL(TBool aSync)
+ {
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+
+ // This method should leave
+ iOperation = iLandmarkSearch->StartCategorySearchL(*catSearchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+ CleanupStack::PopAndDestroy(catSearchCriteria);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp36::RemoveCategoriesFromLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp36::RemoveCategoriesFromLandmarksL(TInt aNrOfLandmarks)
+ {
+ // Use this method to remove the category from a specified number of landmarks
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(_L("*"));
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ textCriteria->SetAttributesToSearch(attr);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter=0;
+
+ // Remove the category from aNrOfLandmarks nr of landmarks
+ while ((id != KPosLmNullItemId) && (counter <aNrOfLandmarks))
+ {
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(id);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ landmark->GetCategoriesL(categories);
+ TPtrC landmarkName;
+ landmark->GetLandmarkName(landmarkName);
+ TBuf<50> buf;
+
+ TInt size = categories.Count();
+ if (size != 0)
+ {
+ buf.Format(_L("Removing from landmark: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ iArray.Append(id);
+
+ for (TInt j=0;j<size;j++)
+ {
+ // Remove category from landmark
+ landmark->RemoveCategory(categories[j]);
+ }
+ iDatabase->UpdateLandmarkL(*landmark);
+ counter++;
+ }
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(landmark);
+ id = iter->NextL();
+ if (id == KPosLmNullItemId) iLog->Log(_L("KPosLmNullItemId"));
+ }
+ iter->Reset();
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp36::GetNrOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp36::GetNrOfLandmarksL()
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(_L("*"));
+ TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
+ textCriteria->SetAttributesToSearch(attr);
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ TInt nrOfMatches = iLandmarkSearch->NumOfMatches();
+
+ CleanupStack::PopAndDestroy(textCriteria);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ return nrOfMatches;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp37.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,541 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp37.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp37::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp37::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp37::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp37::StartL()
+ {
+ TTime startTime;
+ TTime stopTime;
+
+ startTime.UniversalTime();
+ // Delete "c:\\system\\data\\eposlm.ldb"
+ RemoveDefaultDbL();
+
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ TInt err = KErrNone;
+
+ TRAP(err, DoErrorTestL(0));
+ if (err != KErrArgument) {iLog->Log(_L("Wrong error1"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+ TRAP(err, DoErrorTestL(1));
+ if (err != KErrNotSupported) {iLog->Log(_L("Wrong error2")); iErrorsFound++;};
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+ TRAP(err, DoErrorTestL(2));
+ if (err != KErrNotSupported) {iLog->Log(_L("Wrong error3"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+
+ TRAP(err, DoErrorTest3L(0));
+ if (err != KErrArgument) {iLog->Log(_L("Wrong error5"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+ TRAP(err, DoErrorTest3L(1));
+ if (err != KErrNotSupported) {iLog->Log(_L("Wrong error6"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+ TRAP(err, DoErrorTest3L(2));
+ if (err != KErrArgument) {iLog->Log(_L("Wrong error7"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+ TRAP(err, DoErrorTest3L(3));
+ if (err != KErrNotSupported) {iLog->Log(_L("Wrong error8"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+
+ TRAP(err, DoErrorTest3L(4));
+ if (err != KErrArgument) {iLog->Log(_L("Wrong error9"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+
+ TRAP(err, DoErrorTest4L(0));
+ if (err != KErrArgument) {iLog->Log(_L("Wrong error10"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+
+ TRAP(err, DoErrorTest4L(1));
+ if (err != KErrNotSupported) {iLog->Log(_L("Wrong error11"));iErrorsFound++;}
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ err = KErrNone;
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ TBuf<100> buf;
+ buf.Format(_L("TP37 took %d seconds"), resse);
+ iLog->Log(buf);
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP37"));
+ User::Leave(-1);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp37::DoErrorTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp37::DoErrorTestL(TInt aTestNr)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("DoErrorTestL %d"), aTestNr);
+ iLog->Log(buf);
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmCompositeCriteria::TCompositionType type = composite->CompositionType();
+ if (type != CPosLmCompositeCriteria::ECompositionAND)
+ {
+ iLog->Log( _L("Error1: Wrong type returned"));
+ User::Leave(-1);
+ }
+
+ TInt nr = composite->NumOfArguments();
+ if (nr != 0)
+ {
+ iLog->Log(_L("Wrong number of arguments returned"));
+ User::Leave(-1);
+
+ }
+
+ if (aTestNr == 0)
+ {
+ // Test that it is not possible to perform a composite search without any search arguments attached to
+ // the composite object
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (aTestNr == 1)
+ {
+ // Test that it is not possible to perform a composite search without any search arguments attached to
+ // the composite object
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (aTestNr == 2)
+ {
+ // Test that it is not possible to attach a category search attribute to
+ // a composite object
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("Wrong error when adding CPosLmCatNameCriteria to composite"));
+ User::Leave(err);
+ }
+ User::Leave(KErrNotSupported);
+ }
+
+
+ iLog->Log(_L("Did not leave!!!"));
+ User::Leave(-1);
+
+ iLog->Log(_L("ClearArguments"));
+ composite->ClearArguments();
+ iLog->Log(_L("PopAndDestroy"));
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp37::DoErrorTest3L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp37::DoErrorTest3L(TInt aTestNr)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("DoErrorTest3L %d"), aTestNr);
+ iLog->Log(buf);
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ TInt err = KErrNone;
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ if (aTestNr == 0)
+ {
+ // add empty ID List
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ err = composite->AddArgument(idList);
+ CleanupStack::Pop(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (aTestNr == 1)
+ {
+ // add empty ID List
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ TInt err = composite->AddArgument(idList);
+ CleanupStack::Pop(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+
+ }
+
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+
+ }
+ else if (aTestNr == 2)
+ {
+ // Test with list that contain items
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ list.Append(0);
+ list.Append(1);
+ list.Append(2);
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ CleanupStack::Pop(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+
+ CleanupStack::PopAndDestroy(&list);
+ }
+ else if (aTestNr == 3)
+ {
+ // Test with list that contain items
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ list.Append(0);
+ list.Append(1);
+ list.Append(2);
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ CleanupStack::Pop(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+
+ CleanupStack::PopAndDestroy(&list);
+ }
+ else if (aTestNr == 4)
+ {
+ // Test with list that contain valid and invalid items
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L(""));
+
+ err = composite->AddArgument(textCriteria);
+ CleanupStack::Pop(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+ }
+
+ list.Append(1);
+ list.Append(2);
+ list.Append(2000);
+ list.Append(2001);
+
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ CleanupStack::Pop(idList);
+ CleanupStack::PopAndDestroy(&list);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+ }
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ ExecuteAndDeleteLD(iOperation);
+ // We should never come here
+ iLog->Log(_L("Should leave here"));
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+ CleanupStack::PopAndDestroy(iter);
+ }
+ else
+ {
+
+ iLog->Log(_L("Error in testcode, we should never come here"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp37::DoErrorTest4L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp37::DoErrorTest4L(TInt aTestNr)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("DoErrorTest4L %d"), aTestNr);
+ iLog->Log(buf);
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ if (aTestNr == 0)
+ {
+ // Test with several lists
+ RArray<TPosLmItemId> list1;
+ CleanupClosePushL(list1);
+
+ list1.Append(0);
+ list1.Append(1);
+ list1.Append(2);
+
+ RArray<TPosLmItemId> list2;
+ CleanupClosePushL(list2);
+
+ list2.Append(3);
+ list2.Append(4);
+ list2.Append(5);
+
+ CPosLmIdListCriteria* idList1 = CPosLmIdListCriteria::NewLC();
+ CPosLmIdListCriteria* idList2 = CPosLmIdListCriteria::NewLC();
+
+ idList1->SetLandmarkIdsL(list1);
+ idList2->SetLandmarkIdsL(list2);
+ TInt err = composite->AddArgument(idList2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList2);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(idList2);
+ err = composite->AddArgument(idList1);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList2);"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(idList1);
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else if (aTestNr == 1)
+ {
+ // Test with several lists
+ RArray<TPosLmItemId> list1;
+ CleanupClosePushL(list1);
+
+ list1.Append(0);
+ list1.Append(1);
+ list1.Append(2);
+
+ RArray<TPosLmItemId> list2;
+ CleanupClosePushL(list2);
+
+ list2.Append(3);
+ list2.Append(4);
+ list2.Append(5);
+
+ CPosLmIdListCriteria* idList1 = CPosLmIdListCriteria::NewLC();
+ CPosLmIdListCriteria* idList2 = CPosLmIdListCriteria::NewLC();
+
+ idList1->SetLandmarkIdsL(list1);
+ idList2->SetLandmarkIdsL(list2);
+
+ TInt err = composite->AddArgument(idList2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList2);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(idList2);
+ err = composite->AddArgument(idList1);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList2);"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(idList1);
+
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+ iLog->Log(_L("Should leave here"));
+ ExecuteAndDeleteLD(iOperation);
+ }
+ else
+ {
+
+ iLog->Log(_L("Error in testcode, we should never come here"));
+ User::Leave(-1);
+
+ }
+
+
+ iLog->Log(_L("Did not leave!!!"));
+ User::Leave(-1);
+
+
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp37::TestCompositeAndCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp37::TestCompositeAndCategoryL(TInt /*aTestNr*/)
+ {
+ iLog->Log(_L("TestCompositeAndCategoryL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // Test with list that contain items
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ list.Append(0);
+ list.Append(1);
+ list.Append(2);
+
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ idList->SetLandmarkIdsL(list);
+ TInt err = composite->AddArgument(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(idList);"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(idList);
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ err = composite->AddArgument(nameCriteria);
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("Wrong error from AddArgument(nameCriteria); should be KErrNotSupported"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(nameCriteria);
+ User::Leave(KErrNotSupported);
+
+
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iLog->Log(_L("Done"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp38.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1452 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp38.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCompositeCriteria.h>
+#include <EPos_CPosLmCategoryCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLmNearestCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmIdListCriteria.h>
+#include "FT_LandmarkConstants.h"
+
+#include "FT_CCompositeSearchResult.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp38::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::StartL()
+ {
+ TTime startTime;
+ TTime stopTime;
+ startTime.UniversalTime();
+
+ iDatabase = UseCompositeLandmarksDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ StartLandmarksCompositeTestL();
+
+ TestCompositeInCompositeL();
+
+ TestSeveralTextArgumentsL();
+
+ TestSeveralTextArgumentsWithORL();
+
+ TestSortOrderWithORL();
+
+ TestWithSortOrderLandmarksL();
+
+ TestWithSortOrderNearestL();
+
+ TestTwoLmCategoryCriteriaL();
+
+ TestAddAndRemoveL();
+
+ TInt err = KErrNone;
+ TRAP(err, TestWithNoPreviousResultL(0));
+ if (err != KErrArgument)
+
+ {
+ iLog->Log(_L("Searching with no previous result should cause StartLandmarkL to leave with KErrArgument"));
+ User::Leave(err);
+ }
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ SearchAndCancelL(EFalse);
+ SearchAndCancelL(ETrue);
+
+ // Since category and composite is no longer allowed, no need to test this
+ //TestWithSortOrderCategoriesL();
+ //TestCategoryCompositeSearchL();
+
+ stopTime.UniversalTime();
+ TTimeIntervalMicroSeconds executionTime =
+ stopTime.MicroSecondsFrom(startTime);
+
+ TInt resse = executionTime.Int64()/1000000;
+ TBuf<100> buf;
+ buf.Format(_L("TP38 took %d seconds"), resse);
+ iLog->Log(buf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithSortOrderCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithSortOrderCategoriesL()
+ {
+ iLog->Log(_L("TestWithSortOrderCategoriesL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria)"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ CPosLmCategoryManager::TCategorySortPref sortPref;
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ TInt i=0;
+ TInt j=0;
+ for (j=0;j<2;j++)
+ {
+ if (j==0)
+ {
+ iLog->Log(_L("Sorting Ascending"));
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ }
+ else
+ {
+ iLog->Log(_L("Sorting Descending"));
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+ }
+
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, sortPref);
+
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ // Create a sorted list out of the search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+
+ for (i=1;i<27;i++) {searchResults.Append(i);}
+
+ CategoriesSortL(searchResults, sortPref);
+
+ TPosLmItemId id = iter->NextL();
+ TInt counter=0;
+ while (id != KPosLmNullItemId)
+ {
+ // Check that sort order is correct
+ AssertTrueSecL(searchResults[counter] == id, _L("Error in sorting"));
+ id = iter->NextL();
+ counter++;
+ }
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(iter);
+ }
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithSortOrderNearestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithSortOrderNearestL()
+ {
+
+ iLog->Log(_L("TestWithSortOrderNearestL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // Then create a nearest criteria same coordinate as landmark itemid=3 God
+ TCoordinate coord(45, 45);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNone)
+
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+ // Then add an IdList
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ // Use these four landmarks
+ list.Append(6);
+ list.Append(7);
+ list.Append(3);
+ list.Append(10);
+
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ if (err != KErrNone)
+
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(&list);
+ CleanupStack::Pop(idList);
+
+ // Create search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+ // This is the correct distance sorted array
+ searchResults.Append(3);
+ searchResults.Append(7);
+ searchResults.Append(6);
+ searchResults.Append(10);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ if (id != (searchResults)[ii])
+ {
+ // Check if same name then don't leave, there are three landmarks with same name, Mölndal
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ TInt sourceId = source->LandmarkId();
+ target->GetLandmarkName(targetName);
+ TInt targetId = target->LandmarkId();
+
+
+ AssertTrueSecL(sourceName.CompareC(targetName) == KErrNone,_L("Wrong sortorder"), id);
+ CleanupStack::PopAndDestroy(2, source);
+ }
+
+ id = iter->NextL();
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestTwoLmCategoryCriteriaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestTwoLmCategoryCriteriaL()
+ {
+ iLog->Log(_L("TestTwoLmCategoryCriteriaL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // Create a cat search criteria
+ CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();
+ iLog->Log(_L("SetCategoryItemId"));
+ catSearchCriteria->SetCategoryItemId(14);
+ composite->AddArgument(catSearchCriteria);
+ CleanupStack::Pop(catSearchCriteria);
+
+ // Create another cat search criteria
+ CPosLmCategoryCriteria* catSearchCriteria2 = CPosLmCategoryCriteria::NewLC();
+ iLog->Log(_L("SetCategoryNameL"));
+ catSearchCriteria2->SetCategoryNameL(_L("McDonalds"));
+ composite->AddArgument(catSearchCriteria2);
+ CleanupStack::Pop(catSearchCriteria2);
+
+ // Should find id7=Billigt and id27=LOG9
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ // Create search result
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ // This is the correct result list
+ searchResults.Append(27);
+ searchResults.Append(7);
+
+ TInt size = iter->NumOfItemsL();
+ if (size != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong result returned from iterator"));
+ User::Leave(-1);
+
+ }
+
+ TInt found = 0;
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ for (ii=0;ii<size;ii++)
+ {
+ if (id == (searchResults)[ii])
+ {
+ found++;
+ }
+ }
+ id = iter->NextL();
+ }
+
+ if (found != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong result returned from iterator1"));
+ User::Leave(-1);
+
+ }
+
+ // Now refine search with another CPosLmCategoryCriteria
+ // Create another cat search criteria
+ CPosLmCategoryCriteria* catSearchCriteria3 = CPosLmCategoryCriteria::NewLC();
+ iLog->Log(_L("SetCategoryItemId"));
+ catSearchCriteria3->SetCategoryItemId(11);
+ composite->AddArgument(catSearchCriteria3);
+ CleanupStack::Pop(catSearchCriteria3);
+
+ // Should find id27=LOG9
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, ETrue);
+ ExecuteAndDeleteLD(iOperation);
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ searchResults.Reset();
+ searchResults.Append(27);
+ found=0;
+ size = iter->NumOfItemsL();
+ id = iter->NextL();
+ if (size != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong result returned from iterator"));
+ User::Leave(-1);
+
+ }
+
+ while (id != KPosLmNullItemId)
+ {
+ for (ii=0;ii<size;ii++)
+ {
+ if (id == (searchResults)[ii])
+ {
+ found++;
+ }
+ }
+ id = iter->NextL();
+ }
+
+ if (found != searchResults.Count())
+
+ {
+ iLog->Log(_L("Wrong items returned from iterator2"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithSortOrderLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithSortOrderLandmarksL()
+ {
+ iLog->Log(_L("TestWithSortOrderLandmarksL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ TInt i=0;
+ TInt j=0;
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // Then create a nearest criteria
+ TCoordinate coord(12.123, -20,123);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+ // Then add an IdList
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+ for (i=1;i<106;i++) {list.Append(i);}
+ idList->SetLandmarkIdsL(list);
+ err = composite->AddArgument(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(&list);
+ CleanupStack::Pop(idList);
+
+ // Create search result of all landmark ids: 1-105
+ RArray<TPosLmItemId> searchResults;
+ CleanupClosePushL(searchResults);
+ for (i=1;i<106;i++) {searchResults.Append(i);}
+
+ for (j=0;j<2;j++)
+ {
+ if (j==0)
+ {
+ iLog->Log(_L("Sorting Ascending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ }
+ else
+ {
+ iLog->Log(_L("Sorting Descending"));
+ sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ }
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, sortPref, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt size = iter->NumOfItemsL();
+
+ LandmarksSortL(searchResults, sortPref);
+
+ TInt ii=0;
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ if (id != (searchResults)[ii])
+ {
+ // Check if same name then don't leave, there are three landmarks with same name, Mölndal
+
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ CPosLandmark* target = iDatabase->ReadLandmarkLC((searchResults)[ii]);
+ TPtrC sourceName, targetName;
+ source->GetLandmarkName(sourceName);
+ TInt sourceId = source->LandmarkId();
+ target->GetLandmarkName(targetName);
+ TInt targetId = target->LandmarkId();
+
+ AssertTrueSecL(sourceName.CompareC(targetName) == KErrNone,_L("Wrong sortorder"), id);
+
+ CleanupStack::PopAndDestroy(2, source);
+ }
+
+ id = iter->NextL();
+ ++ii;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ CleanupStack::PopAndDestroy(&searchResults);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestCompositeInCompositeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestCompositeInCompositeL()
+ {
+ iLog->Log(_L("TestCompositeInCompositeL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-48, 5, -5, 20);
+
+ err = composite->AddArgument(areaCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(areaCriteria);
+
+ //Create composite object that should be used as argument to the first composite object
+ CPosLmCompositeCriteria* composite2 = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+
+ textCriteria2->SetTextL(_L("TE,*"));
+
+ err = composite2->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Add a IdList
+ RArray<TPosLmItemId> list;
+ CleanupClosePushL(list);
+
+ CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC();
+
+ for (TInt i=0;i<100;i++)
+ {
+ list.Append(i);
+ }
+ idList->SetLandmarkIdsL(list);
+
+ err = composite2->AddArgument(idList);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument4"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(idList);
+ CleanupStack::PopAndDestroy(&list);
+
+ // Nested composite is not allowed
+ err = composite->AddArgument(composite2);
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("Wrong error code when adding composite to a composite"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(composite2);
+
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::StartLandmarksCompositeTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::StartLandmarksCompositeTestL()
+ {
+ iLog->Log(_L("StartTestL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ CCompositeSearchResult* res = CCompositeSearchResult::NewL(iLog);
+ CleanupStack::PushL(res);
+
+ TInt index=0;
+ TInt errorsFound = KErrNone;
+
+ TBuf<100> buf;
+ buf.Format(_L(">>>>>>>Test round %d <<<<<<<"), index);
+
+ while (!res->GetCompositeSearchResultsL(*composite))
+ {
+ PrintCompositeInfo(composite);
+
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, res->Redefined());
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ TInt expMatches = res->iResultIds.Count();
+
+ buf.Format(_L("nr of matches: %d nr of exp matches: %d"), matches, expMatches);
+ iLog->Log(buf);
+
+ while (id != KPosLmNullItemId)
+ {
+ buf.Format(_L("Result from iterator id: %d"), id);
+ iLog->Log(buf);
+ TInt idde = res->iResultIds.Find(id);
+ if (idde == KErrNotFound)
+ {
+ iLog->Log(_L("MyError: Could not find id!!!"));
+ errorsFound++;
+ }
+ else
+ {
+ // Remove so that we dont find the same id again
+ res->iResultIds.Remove(idde);
+ }
+ id = iter->NextL();
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+
+ if (expMatches != matches)
+ {
+ iLog->Log(_L("MyError: Wrong number of matches"));
+ errorsFound++;
+ }
+ }
+
+ if (errorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP38"));
+ User::Leave(-1);
+
+ }
+ iLog->Log(_L("----Done---"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ CleanupStack::PopAndDestroy(res);
+ CleanupStack::PopAndDestroy(composite);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp38::TestSeveralTextArgumentsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestSeveralTextArgumentsL()
+ {
+ iLog->Log(_L("TestSeveralTextArgumentsL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Stockholm"));
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Should find landmark id: 63 name: "Nokia, Stockholm"
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 1)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+
+ if (id != 63)
+ {
+
+ iLog->Log(_L("Wrong landmark found, should find landmark with id 63"));
+ User::Leave(-1);
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestSeveralTextArgumentsWithORL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestSeveralTextArgumentsWithORL()
+ {
+ iLog->Log(_L("TestSeveralTextArgumentsWithORL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionOR);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Eriksberg"));
+ textCriteria2->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ //Create nearest criteria instance and try adding it to composite criteria,should leave with KErrNotSupported since ORcomposition
+ // is supported only for text criteria
+ TCoordinate coord(45, 45);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNotSupported)
+
+ {
+ iLog->Log(_L("Error,should not support any other criteria except Text criteria"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+
+
+
+
+ // Should find landmark ids 48,55,62 & 63 with name:"Nokia","TE Eriksberg","Nokia Copenhagen" "Nokia, Stockholm"
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> idArray;
+ iter->GetItemIdsL(idArray, 0, iter->NumOfItemsL());
+
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 4)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+
+ for(int i=0; i<idArray.Count(); i++ )
+ {
+ if(idArray[i] != 48 && idArray[i] != 55 && idArray[i] != 62 && idArray[i] != 63)
+ {
+ iLog->Log(_L("Wrong landmark found, should find landmark with id 48, 55, 62 & 63"));
+ User::Leave(-1);
+ }
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp38::TestSortOrderWithORL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestSortOrderWithORL()
+ {
+
+
+
+ iLog->Log(_L("TestSeveralTextArgumentsWithORL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionOR);
+
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Nokia*"));
+ textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // First create a textcriteria
+ CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC();
+ textCriteria2->SetTextL(_L("*Eriksberg"));
+ textCriteria2->SetAttributesToSearch(CPosLandmark::ELandmarkName);
+ err = composite->AddArgument(textCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria2);
+
+ // Should find landmark ids 48,55,62 & 63 with name:"Nokia","TE Eriksberg","Nokia Copenhagen" "Nokia, Stockholm"
+ iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL"));
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite,sortPref, EFalse);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> idArray;
+ iter->GetItemIdsL(idArray, 0, iter->NumOfItemsL());
+
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 4)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+
+//Check if the landmarks are in ascending order i.e "Nokia","Nokia Copenhagen","Nokia Stockholm","TE Eriksberg"
+
+
+ if(idArray[0] != 48 || idArray[1] != 62 || idArray[2] != 63 || idArray[3] != 55)
+ {
+ iLog->Log(_L("Wrong landmark found, should find landmark with id 48, 55, 62 & 63"));
+ User::Leave(-1);
+ }
+
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestCategoryCompositeSearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestCategoryCompositeSearchL()
+ {
+ iLog->Log(_L("TestCategoryCompositeSearchL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // Use differen text pattern
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ CPosLmCatNameCriteria* nameCriteria2 = CPosLmCatNameCriteria::NewLC();
+ nameCriteria2->SetSearchPatternL(_L("*kontor"));
+ err = composite->AddArgument(nameCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria2);
+
+ // Should find category id: 13 name "Nokia Kontor" and id: 14 name: "TietoEnator kontor"
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 2)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+ }
+ else iLog->Log(_L("Found 2 nr of matches"));
+
+ TPosLmItemId id1 = iter->NextL();
+ TPosLmItemId id2 = iter->NextL();
+
+ if ((id1 == 13 && id2 != 14) || (id1 == 14 && id2 != 13)
+ || (id2 == 13 && id1 != 14) || (id2 == 14 && id1 != 13))
+ {
+ iLog->Log(_L("Wrong landmark found"));
+ User::Leave(-1);
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+
+ // Use same text pattern
+ nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("TietoEnator*"));
+ err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ nameCriteria2 = CPosLmCatNameCriteria::NewLC();
+ nameCriteria2->SetSearchPatternL(_L("TietoEnator*"));
+ err = composite->AddArgument(nameCriteria2);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nameCriteria2);
+
+ // Should find category id: 14 name "TietoEnator Kontor"
+ iLog->Log(_L("iLandmarkSearch->StartCategorySearchL"));
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ ExecuteAndDeleteLD(iOperation);
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ matches = iLandmarkSearch->NumOfMatches();
+ if (matches != 1)
+ {
+ iLog->Log(_L("Wrong number of matches"));
+ User::Leave(-1);
+
+ }
+ else iLog->Log(_L("Found 1 nr of matches"));
+
+ id1 = iter->NextL();
+
+ if (id1 != 14)
+ {
+ iLog->Log(_L("Wrong landmark found"));
+ User::Leave(-1);
+ }
+
+ iter->Reset();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestAddAndRemoveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestAddAndRemoveL()
+ {
+ iLog->Log(_L("TestAddAndRemoveL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ // 1) Add a text criteria
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // 2) Add a text criteria
+ textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Natur*"));
+ err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument2"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(textCriteria);
+
+ // 3) Add an area criteria
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-12.23, 34.4, -2.05, 45.5);
+ err = composite->AddArgument(areaCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(areaCriteria);
+
+ // 4) Add a category criteria
+ CPosLmCategoryCriteria* catCriteria = CPosLmCategoryCriteria::NewLC();
+ catCriteria->SetCategoryNameL(_L("Museum"));
+ err = composite->AddArgument(catCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(catCriteria);
+
+ // 5) Add a nearest criteria
+ TCoordinate cord(12.23, 12);
+ CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(cord, ETrue);
+ err = composite->AddArgument(nearestCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+
+ }
+ CleanupStack::Pop(nearestCriteria);
+
+ if (composite->NumOfArguments() != 5)
+ {
+ iLog->Log(_L("Error when adding argument1"));
+ User::Leave(-1);
+
+ }
+
+ // Remove (3) area criteria
+ CPosLmSearchCriteria* obj1 = composite->RemoveArgument(2);
+ delete obj1;
+ obj1 = NULL;
+
+ // Remove (5) nearest criteria (after 3 removed it has id 4)
+ CPosLmSearchCriteria* obj2 = composite->RemoveArgument(3);
+ delete obj2;
+ obj2 = NULL;
+
+ // Should find landmark with id: 87 name: "Naturhistoriska"
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite);
+ ExecuteAndDeleteLD(iOperation);
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt nr = iter->NumOfItemsL();
+ TBuf<100> buf;
+ buf.Format(_L("Found %d nr of landmarks after removing two arguments "), nr);
+ iLog->Log(buf);
+
+ TPosLmItemId id = iter->NextL();
+ if (id != 87)
+ {
+ iLog->Log(_L("Wrong landmark found"));
+ User::Leave(-1);
+
+ }
+ iter->Reset();
+
+ // Remove (1) first text criteria
+ CPosLmSearchCriteria* obj4 = composite->RemoveArgument(0);
+ delete obj4;
+ obj4 = NULL;
+
+ // Remove (2) the second text criteria
+ CPosLmSearchCriteria* obj3 = composite->RemoveArgument(0);
+ delete obj3;
+ obj3 = NULL;
+
+ CleanupStack::PopAndDestroy(iter);
+
+ // Should find six landmarks belonging to category "museum",
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite);
+ ExecuteAndDeleteLD(iOperation);
+
+ iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ nr = iter->NumOfItemsL();
+ if (nr != 6)
+ {
+ iLog->Log(_L("Wrong number of landmarks returned"));
+ User::Leave(-1);
+ }
+ buf.Format(_L("Found %d nr of landmarks after removing two more arguments"), nr);
+ iLog->Log(buf);
+
+ iter->Reset();
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLog->Log(_L("Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::SearchAndCancelL(const TBool& aInCallback)
+ {
+ iLog->Log(_L("SearchAndCancelL"));
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when adding argument3"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL(
+ *composite, EFalse));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarkSearch->StartLandmarkSearchL(
+ *composite, EFalse));
+ }
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ if (aInCallback)
+ {
+ _LIT(KExpected, "Iter. of matches: %d");
+ _LIT(KReturned, "LandmarksSearch no. of matches: %d");
+ TBuf<100> info;
+ info.Format(KExpected, iter->NumOfItemsL());
+ iLog->Log(info);
+ info.Format(KReturned, iLandmarkSearch->NumOfMatches());
+ iLog->Log(info);
+
+ TBuf<100> info2;
+ _LIT(KNof, "No. of matches found before cancel = %d");
+ info2.Format(KNof, iter->NumOfItemsL());
+ iLog->Log(info2);
+
+
+ }
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(composite);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::TestWithNoPreviousResultL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::TestWithNoPreviousResultL(TInt aTestNr)
+ {
+ iLog->Log(_L("TestWithNoPreviousResultL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND);
+
+ if (aTestNr == 0)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("*"));
+
+ TInt err = composite->AddArgument(textCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(textCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(textCriteria);
+
+ iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, ETrue);
+ ExecuteAndDeleteLD(iOperation);
+ iLog->Log(_L("ERROR: Should leave here"));
+
+ iLog->Log(_L("Should never come here in the code"));
+ User::Leave(-1);
+
+ }
+ else if (aTestNr == 1)
+ {
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(_L("*kontor"));
+ TInt err = composite->AddArgument(nameCriteria);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from AddArgument(nameCriteria);"));
+ User::Leave(err);
+ }
+ CleanupStack::Pop(nameCriteria);
+
+ iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone, ETrue);
+ ExecuteAndDeleteLD(iOperation);
+ iLog->Log(_L("ERROR: Should leave here"));
+
+ iLog->Log(_L("Should never come here in the code"));
+ User::Leave(-1);
+
+ }
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp38::PrintCompositeInfo
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp38::PrintCompositeInfo(CPosLmCompositeCriteria* aComposite)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("PrintCompositeInfo() NrOfArg %d"), aComposite->NumOfArguments());
+ iLog->Log(buf);
+
+ for (TUint i=0;i<aComposite->NumOfArguments();i++)
+ {
+
+ CPosLmSearchCriteria& comp = aComposite->Argument(i);
+ TInt type = comp.CriteriaType();
+
+ if (type == CPosLmSearchCriteria::ECriteriaArea)
+ {
+ iLog->Log(_L("Arg Area found"));
+
+ CPosLmAreaCriteria& tt = static_cast<CPosLmAreaCriteria&>(comp);
+
+ TReal64 southLat;
+ TReal64 northLat;
+ TReal64 westLong;
+ TReal64 eastLong;
+
+ tt.GetSearchArea(southLat, northLat, westLong, eastLong);
+
+ buf.Format(_L("SouthL %f NorthL: %f WestL :%f EastL: %f"), (TReal)southLat, (TReal)northLat, (TReal)westLong, (TReal)eastLong);
+ iLog->Log(buf);
+
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaText)
+ {
+ iLog->Log(_L("Arg Text found:"));
+ CPosLmTextCriteria& tt = static_cast<CPosLmTextCriteria&>(comp);
+ iLog->Log(tt.Text());
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaComposite)
+ {
+ iLog->Log(_L("Arg Composite found"));
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaCategory)
+ {
+ iLog->Log(_L("Arg Category found"));
+
+ CPosLmCategoryCriteria& tt = static_cast<CPosLmCategoryCriteria&>(comp);
+ iLog->Log(tt.CategoryName());
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaFindNearest)
+ {
+ CPosLmNearestCriteria& tt = static_cast<CPosLmNearestCriteria&>(comp);
+ TCoordinate cord;
+ tt.GetCoordinate(cord);
+ iLog->Log(_L("Arg Nearest found"));
+ buf.Format(_L("Latitude %f Longitude: %f MaxDist:%f"), (TReal)cord.Latitude(), (TReal)cord.Longitude(), (TReal)tt.MaxDistance());
+ iLog->Log(buf);
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaIdList)
+ {
+ iLog->Log(_L("Arg Idlist found"));
+ CPosLmIdListCriteria& tt = static_cast<CPosLmIdListCriteria&>(comp);
+
+ RArray<TPosLmItemId> result;
+ CleanupClosePushL(result);
+ tt.GetLandmarkIdsL(result);
+
+ buf.Format(_L("Nr of Ids: %d"), result.Count());
+ iLog->Log(buf);
+
+ for (TInt i=0;i<result.Count();i++)
+ {
+ buf.Format(_L("ID%d: %d"), i, result[i]);
+
+ }
+ CleanupStack::PopAndDestroy(&result);
+
+ }
+ else if (type == CPosLmSearchCriteria::ECriteriaCategoryByName)
+ {
+ // Should never come here, ECriteriaCategoryByName not supported in composite objects
+ iLog->Log(_L("Arg Categorybyname found"));
+ }
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp39.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,579 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp39.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <e32std.h>
+#include <ss_std.h>
+#include <bautils.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KNoListeners=5;
+const TInt KMaxQueueSize = 5;
+const TInt KLmServerMaxHeapSize = 40000;
+
+_LIT(KLandmarkServerName, "eposlmserver*");
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp39::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP39 - Heap Usage (Goofy)");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::StartL()
+ {
+ _LIT(KMultipleErr, "Error %d when multiple clients listen for events");
+ _LIT(KEventErr, "%d Error(s) when multiple clients listen for events");
+ MakeSurePanicDebugFileExistsL();
+ iUseLogFromThreadIsDisabled = ETrue;
+
+ _LIT(KCanceledErr, "Test canceled");
+ _LIT(KStartGoofy, "Start up Goofy and start a test (Options->Test->Start).");
+
+ RemoveDefaultDbL();
+
+#ifndef __WINS__
+ TUtfwUserAnswer answer;
+ answer = iUserInfo->ShowDialog(KStartGoofy, EUtfwDialogTypeOkCancel, EFalse);
+ AssertTrueSecL(answer == EUtfwUserAnswerOk, KCanceledErr, KErrCancel);
+#endif
+
+ RemoveDefaultDbL();
+
+ SetupGlobalCategoriesL();
+
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ delete database;
+
+ TFixedArray<TRequestStatus, KNoListeners+1> statuses;
+
+ CreateThreadsL();
+
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+ for (TInt j=0; j<iThreads.Count(); j++)
+ {
+ User::WaitForRequest(statuses[j]);
+ }
+
+ for (TInt t=0; t<iThreads.Count(); t++)
+ {
+ TInt exitReason = iThreads[t].ExitReason();
+
+ AssertTrueSecL(exitReason == KErrNone, KMultipleErr, exitReason);
+ }
+
+ if (iErrors > 0)
+ {
+ TBuf<100> info;
+ info.Format(KEventErr, iErrors);
+ LogErrorAndLeave(iErrorLog);
+ }
+
+
+#ifndef __WINS__
+
+ TInt heapSize, stackSize=0;
+
+ TBuf<127> info;
+ TInt err = GetHeapSizeL(KLandmarkServerName, heapSize, stackSize);
+ if (err)
+ {
+ info.Format(_L("GetHeapSizeL error, %d"), err);
+ LogErrorAndLeave(info);
+ }
+
+ info.Format(_L("LandmarkServer Heap: %d LandmarkServer Stack:"), heapSize, stackSize);
+ iLog->Put(info);
+
+ if (heapSize > KLmServerMaxHeapSize)
+ {
+ LogErrorAndLeave(_L("The memory consumption for the LandmarkServer is too high!"));
+ }
+#endif
+
+/*
+ _LIT(KCatId, "category_id = %d;");
+ _LIT(KCatName, "category_name = \"%S\";");
+
+ // 201-300
+ _LIT(KName, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901%d");
+
+ for (TInt i=201; i<=300; i++)
+ {
+ iLog->Put(_L("POS_LM_CATEGORY_INFO"));
+ iLog->Put(_L("{"));
+
+ TBuf<150> info;
+
+ info.Format(KCatId, (i+1));
+
+ iLog->Put(info);
+
+ info.Format(KName, i);
+
+ HBufC* name = info.Alloc();
+
+ info.Format(KCatName, name);
+ iLog->Put(info);
+ iLog->Put(_L("},"));
+ }
+*/
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::CloseTest()
+ {
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+ iUseLogFromThreadIsDisabled = EFalse;
+
+ RemoveGlobalCategoriesL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::SetupGlobalCategoriesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::SetupGlobalCategoriesL()
+ {
+ #ifdef __WINS__
+ _LIT(KGlobalCategoryResFile, "z:\\system\\test\\testdata\\EPOSLMGLOBALCATEGORIES.R03");
+ #else
+ _LIT(KGlobalCategoryResFile, "c:\\system\\test\\testdata\\EPOSLMGLOBALCATEGORIES.R03");
+ #endif
+ //_LIT(KGlobalCategoryResPath, "c:\\system\\data\\");
+ //_LIT(KGlobalCategoryResFileOld, "c:\\system\\data\\EPOSLMGLOBALCATEGORIES.R03");
+ //_LIT(KGlobalCategoryResFileNew, "c:\\system\\data\\EPOSLMGLOBALCATEGORIES.R01");
+
+ _LIT(KGlobalCategoryResFileOld, "c:\\resource\\EPOSLMGLOBALCATEGORIES.R03");
+ _LIT(KGlobalCategoryResFileNew, "c:\\resource\\EPOSLMGLOBALCATEGORIES.R01");
+ _LIT(KGlobalCategoryResPath, "c:\\resource\\");
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ //check if landmark is flashed
+ if (!BaflUtils::FileExists(fs, KGlobalCategoryResFileROM))
+ {
+ iLog->Put(_L("Landmark is NOT flashed, rename global categories"));
+ //Landmark is not flashed rename the file before copy a own defiend file.
+ //since landmark is not flashed the file should exist hence leaving if it is not found!
+ User::LeaveIfError(fileMan->Rename(KGlobalCategoryResFileWINS, KGlobalCategoryResFileCOPY, CFileMan::EOverWrite));
+ }
+ else
+ {
+ iLog->Put(_L("Landmark is flashed, copy global categories"));
+ }
+
+ User::LeaveIfError(fileMan->Copy(KGlobalCategoryResFile, KGlobalCategoryResPath, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Rename(KGlobalCategoryResFileOld, KGlobalCategoryResFileNew, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::RunReceiveEventTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::RunEventsListenerL(TAny* aData)
+ {
+ CPosTp39* self = reinterpret_cast<CPosTp39*>(aData);
+
+ CEventObserverTp39* eventObserver = CEventObserverTp39::NewL(self, ++self->iThreadIndex);
+ CleanupStack::PushL(eventObserver);
+ eventObserver->Start();
+
+ eventObserver->StartTimer();
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(eventObserver);
+ }
+
+LOCAL_C TInt ReceiveEventsThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp39::RunEventsListenerL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::CreateEventsTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::RunEventsGeneratorL(TAny* /*aData*/)
+ {
+ //CPosTp39* self = reinterpret_cast<CPosTp39*>(aData);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ /////////////////////////////////////////////
+ // Add one landmark #1
+ //////////////////////////////////////////////
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("TP39"));
+ lmd->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ /////////////////////////////////////////////
+ // Add 5 categories #2
+ /////////////////////////////////////////////
+
+ _LIT(KCategoryName, "TP39 Category %d");
+ for (TInt j =0; j < KMaxQueueSize; j++)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName, j);
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(name);
+ cm->AddCategoryL(*category);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ CleanupStack::PopAndDestroy(2, lmd);
+ }
+
+LOCAL_C TInt CreateEventsThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp39::RunEventsGeneratorL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::CreateThreadsL()
+ {
+ _LIT(KThreadName, "TP39 thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TInt i=0; i<=KNoListeners; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1+iThreads.Count());
+
+ TInt err;
+ if (i==KNoListeners)
+ {
+ err = thread.Create(name, CreateEventsThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+ }
+ else
+ {
+ err = thread.Create(name, ReceiveEventsThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+ }
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::LogError
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::LogError(const TDesC& aError)
+ {
+ iErrorLog.Append(aError);
+ iErrors++;
+ }
+
+// ---------------------------------------------------------
+// CEventObserverTp39::CheckEventL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp39::CheckEvent(const TInt aThreadIndex,
+ const TPosLmEventType aExpectedEventType,
+ const TPosLmEventType aEventType,
+ const TPosLmItemId aExpectedItemId,
+ const TPosLmItemId aItemId)
+ {
+ if (aExpectedEventType != aEventType)
+ {
+ _LIT(KError,"Thread %d received an unexpected eventtype. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aThreadIndex, aExpectedEventType, aEventType);
+ LogError(error);
+ }
+ if (aExpectedItemId != aItemId)
+ {
+ _LIT(KError,"Thread %d received an unexpected item id. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aThreadIndex, aExpectedItemId, aItemId);
+ LogError(error);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp39::GetHeapSizeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp39::GetHeapSizeL(const TDesC& aThreadName, TInt& aHeapSize, TInt& aStackSize)
+ {
+ RThread thread;
+ TFindThread findThread(aThreadName);
+
+ TFullName fullName;
+
+ TInt err = findThread.Next(fullName);
+
+ if (err)
+ {
+ iLog->Put(_L("Thread not found"));
+ return err;
+ }
+ err = thread.Open(fullName);
+ if (err)
+ {
+ iLog->Put(_L("Thread could not be opened"));
+ return err;
+ }
+
+ // FrBo Commented since not supported on ARMV5 (on SDK Series60_30_2005_wk02_incl_LBSpre4)
+ //err = thread.GetRamSizes(aHeapSize, aStackSize);
+ // Use below for now
+ err =KErrNone;aHeapSize=-1;aStackSize=-1;
+
+ if (err)
+ {
+ iLog->Put(_L("GetRameSize fails"));
+ thread.Close();
+ return err;
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CEventObserverTp39::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CEventObserverTp39* CEventObserverTp39::NewL(CPosTp39* aTp39, TInt aThreadIndex)
+ {
+ CEventObserverTp39* self = new(ELeave) CEventObserverTp39(aTp39, aThreadIndex);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CEventObserverTp39::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CEventObserverTp39::ConstructL()
+ {
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ iPeriodicTimer = CPeriodic::NewL(EPriorityNormal);
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ }
+
+// C++ Constructor
+CEventObserverTp39::CEventObserverTp39(CPosTp39* aTp39, TInt aThreadIndex) :
+ CActive(EPriorityNormal),
+ iTp39(aTp39),
+ iThreadIndex(aThreadIndex),
+ iCallback(StopEventNotification, this)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// C++ destructor
+CEventObserverTp39::~CEventObserverTp39()
+ {
+ Cancel();
+ delete iDatabase;
+ iDatabase = NULL;
+ if (iPeriodicTimer)
+ {
+ iPeriodicTimer->Cancel();
+ }
+ delete iPeriodicTimer;
+ iPeriodicTimer = NULL;
+ }
+
+// ---------------------------------------------------------
+// CEventObserverTp39::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserverTp39::Start()
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+
+//---------------------------------------------------------
+// CEventObserverTp39::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserverTp39::DoCancel()
+ {
+ iDatabase->CancelNotifyDatabaseEvent();
+ }
+
+//---------------------------------------------------------
+// CEventObserverTp39::StartTimer
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserverTp39::StartTimer()
+ {
+ iPeriodicTimer->Start(10000000, 10000000, TCallBack(StopEventNotification, this));
+ }
+
+//---------------------------------------------------------
+// CPosEventObserverTp39::TimeoutCheck
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CEventObserverTp39::StopEventNotification(TAny* aSelf)
+ {
+ CEventObserverTp39* self = reinterpret_cast<CEventObserverTp39*>(aSelf);
+
+ self->Cancel();
+ self->iPeriodicTimer->Cancel();
+ CActiveScheduler::Stop();
+
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPosEventObserver::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CEventObserverTp39::RunL()
+ {
+ iEventNumber++;
+
+ switch (iEventNumber)
+ {
+ case 1:
+ iTp39->CheckEvent(iThreadIndex,
+ EPosLmEventLandmarkCreated,
+ iEvent.iEventType,
+ iEventNumber,
+ iEvent.iLandmarkItemId);
+ // Don't renew the event notification so the server will have to start queueing the events
+ break;
+ default:
+ iTp39->LogError(_L("Test logic error, no more events should be received since the queue on the server should be filled"));
+ iPeriodicTimer->Cancel();
+ Cancel();
+ CActiveScheduler::Stop();
+ break;
+ }
+ //iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ //SetActive();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp4.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp4.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLmDatabaseManager.h>
+#include "FT_LandmarkConstants.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp4::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp4::StartL()
+ {
+ TestCompactL(ESynchronous);
+
+ TestCompactL(EAsynchronous);
+
+ TestCompactL(EWaitForRequest);
+ }
+
+// ---------------------------------------------------------
+// CPosTp4::TestCompactL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp4::TestCompactL(TExecutionMode aExecutionMode)
+ {
+ _LIT(KFileSizeErr, "Returned file size is incorrect");
+ _LIT(KUsageErr, "Returned usage is incorrect");
+ _LIT(KFileSizeAfterCompactErr, "The file size after compact is not less than the file size before compact");
+ _LIT(KUsageAfterCompactErr, "The usage is equal or less than before compact");
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // Create new test db
+ HPosLmDatabaseInfo* dbInfoDefault = HPosLmDatabaseInfo::NewLC(KTp4TestDb);
+ manager->CreateDatabaseL(*dbInfoDefault);
+ CleanupStack::PopAndDestroy(dbInfoDefault);
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp4TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ CPosLandmarkDatabase* tmp = CPosLandmarkDatabase::OpenL(); // Make sure default database is created
+ CleanupStack::PushL(tmp);
+ if (tmp->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(tmp->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(tmp);
+
+ RFile file;
+ User::LeaveIfError(file.Open(iFileSession, KLmTp4DefaultDbPath, EFileRead));
+ TInt fileSize=0;
+ file.Size(fileSize);
+ file.Close();
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ CPosLandmarkDatabase::TSize size = lmd->SizeL();
+
+ AssertTrueSecL(size.iFileSize == fileSize, KFileSizeErr);
+ AssertTrueSecL(size.iUsage >= 0.0 && size.iUsage <= 1.0, KUsageErr); // For now, when compact is supported should usage be 100%
+
+ CPosLmOperation* op = lmd->CompactL();
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(op);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(op); //*** async
+ break;
+ case EWaitForRequest:
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ break;
+ default:
+
+ break;
+ }
+
+ CPosLandmarkDatabase::TSize sizeAfterCompact = lmd->SizeL();
+
+ AssertTrueSecL(sizeAfterCompact.iFileSize < size.iFileSize, KFileSizeAfterCompactErr);
+
+ AssertTrueSecL(sizeAfterCompact.iUsage >= size.iUsage, KUsageAfterCompactErr);
+
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp40.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp40.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmTextCriteria.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp40::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp40::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp40 - Verify KErrLocked not returned, etc");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp40::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp40::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+// ---------------------------------------------------------
+// CPosTp40::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp40::StartL()
+ {
+ RemoveDefaultDbL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL()); // Synchronous since no argument
+ }
+
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ // Test error report ESLI-5ZYMPM
+ TestPart1L();
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ // Test error report ESLI-62FGEV, (debug panic, only raised on WINS (not on target))
+ TestPart2L();
+
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+// ---------------------------------------------------------
+// CPosTp40::TestPart1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp40::TestPart1L()
+ {
+ //
+ // Testing error report ESLI-5ZYMPM
+ // Landmarks - KErrLocked returned on write operations even if no operations are outstanding.
+ //
+ iLog->Put(_L("TestPart1L"));
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Library*"));
+
+ CPosLmOperation* operation = landmarkSearch->StartLandmarkSearchL(*textCriteria);
+ RArray<TPosLmItemId> arr1;
+ CleanupClosePushL(arr1);
+ TPosLmItemId id1(1);
+ TPosLmItemId id2(2);
+ arr1.Append(id1);
+ arr1.Append(id2);
+ operation -> ExecuteL();
+
+ CPosLmOperation* operationPartial = iDatabase -> PreparePartialLandmarksL(arr1);
+ CleanupStack::PushL(operationPartial);
+ delete operation; //if this is moved to before PreparePartial... everything works
+ operation = NULL;
+ operationPartial->ExecuteL();
+
+ iDatabase -> RemoveLandmarkL(1); //Before leaved with -22 here -> ERROR
+ CleanupStack::PopAndDestroy(operationPartial);
+ CleanupStack::PopAndDestroy(&arr1);
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ iLog->Put(_L("TestPart1L completed successfully"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp40::TestPart2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp40::TestPart2L()
+ {
+ //
+ // Testing error report ESLI-62FGEV
+ // Landmarks - TPosLmItemId array with 0 value and PreparePartialLandmarksL
+ //
+ iLog->Put(_L("TestPart2L"));
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CleanupStack::PushL(landmarkSearch);
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("Library*"));
+
+ CPosLmOperation* operation = landmarkSearch->StartLandmarkSearchL(*textCriteria);
+ RArray<TPosLmItemId> arr1;
+ CleanupClosePushL(arr1);
+ TPosLmItemId id1(0); // Is actually not allowed to have a 0 value
+ TPosLmItemId id2(1);
+ arr1.Append(id1);
+ arr1.Append(id2);
+ operation -> ExecuteL();
+
+ // When passing an array with 0 value method should leave with error,
+ // instead the operationPartial->ExecuteL() method panics with -2
+ CPosLmOperation* operationPartial = iDatabase -> PreparePartialLandmarksL(arr1);
+ CleanupStack::PushL(operationPartial);
+ delete operation;
+ operation = NULL;
+ // This method Panics (debug panic only on WINS) with -2
+ operationPartial->ExecuteL();
+
+ CleanupStack::PopAndDestroy(operationPartial);
+ CleanupStack::PopAndDestroy(&arr1);
+ CleanupStack::PopAndDestroy(textCriteria);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ iLog->Put(_L("TestPart2L completed successfully"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp41.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,263 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp41.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_TPosLMSortPref.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp41::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp41::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp41 - Empty Landmark Name and Descriptor");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp41::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp41::StartL()
+ {
+ RemoveDefaultDbL();
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ VerifyEmptyLandmarksL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp41::CloseTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp41::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp41::VerifyEmptyLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp41::VerifyEmptyLandmarksL()
+ {
+ _LIT(KLmName, "LmTp41 - %d");
+ _LIT(KLmDescription, "LmTp41Description - %d");
+
+ _LIT(KCompareNameErr, "Landmark names are not equal");
+ _LIT(KCompareDescErr, "Landmark descriptions are not equal");
+
+ _LIT(KNameErr, "GetLandmarkName returned wrong");
+ _LIT(KDescErr, "GetLandmarkDescription returned wrong");
+
+ // 1) Create landmark with name and descriptor
+ TBuf<100> lmName;
+ lmName.Format(KLmName,1);
+ TBuf<100> lmDesc;
+ lmDesc.Format(KLmDescription,1);
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ landmark->SetLandmarkDescriptionL(lmDesc);
+ TPosLmItemId id = iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+
+ // Read landmark from local landmark
+ TPtrC sourceDesc;
+ TPtrC sourceName;
+ TInt sourceErr = landmark->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNone, KNameErr);
+ sourceErr = landmark->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNone, KDescErr);
+
+ AssertTrueSecL(sourceName.Compare(lmName) == KErrNone, KCompareNameErr);
+ AssertTrueSecL(sourceDesc.Compare(lmDesc) == KErrNone, KCompareDescErr);
+
+ CleanupStack::PopAndDestroy(landmark);
+ // Read landmark from landmark db
+ CheckLandmarkL(id, lmName, lmDesc);
+ lmName.Zero();
+ lmDesc.Zero();
+
+ // 2) Create landmark with name and and empty descriptor
+ lmName.Format(KLmName,2);
+ lmDesc.Append(_L(""));
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ landmark->SetLandmarkDescriptionL(lmDesc);
+ id = iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+
+ // Read landmark from local landmark
+ sourceErr = landmark->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNone, KNameErr);
+ sourceErr = landmark->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNone, KDescErr);
+
+ AssertTrueSecL(sourceName.Compare(lmName) == KErrNone, KCompareNameErr);
+ AssertTrueSecL(sourceDesc.Compare(lmDesc) == KErrNone, KCompareDescErr);
+
+ CleanupStack::PopAndDestroy(landmark);
+ // Read landmark from landmark db
+ CheckLandmarkL(id, lmName, lmDesc);
+ lmName.Zero();
+ lmDesc.Zero();
+
+ // 3) Create landmark with name and and no descriptor set
+ lmName.Format(KLmName, 2);
+ lmDesc.Append(_L(""));
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ id = iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+
+ // Read landmark from local landmark, GetLandmarkDescription should return KErrNotFound since it is not set
+ sourceErr = landmark->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNone, KNameErr);
+ sourceErr = landmark->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNotFound, KDescErr);
+
+ AssertTrueSecL(sourceName.Compare(lmName) == KErrNone, KCompareNameErr);
+
+ CleanupStack::PopAndDestroy(landmark);
+ // Read landmark from landmark db
+ CheckLandmarkL(id, lmName, lmDesc);
+ lmName.Zero();
+ lmDesc.Zero();
+
+ // 4) Create landmark with empty name and no description set
+ lmName.Append(_L(""));
+ lmDesc.Append(_L(""));
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ id = iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+
+ // Read landmark from local landmark, GetLandmarkDescription
+ // should return KErrNotFound since it is not set
+ sourceErr = landmark->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNone, KNameErr);
+ sourceErr = landmark->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNotFound, KDescErr);
+
+ AssertTrueSecL(sourceName.Compare(lmName) == KErrNone, KCompareNameErr);
+
+ CleanupStack::PopAndDestroy(landmark);
+ // Read landmark from landmark db
+ CheckLandmarkL(id, lmName, lmDesc);
+ lmName.Zero();
+ lmDesc.Zero();
+
+ // 5) Create landmark with no name set but with description
+ lmName.Append(_L(""));
+ lmDesc.Format(KLmDescription,2);
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkDescriptionL(lmDesc);
+ id = iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+
+ // Read landmark from local landmark, GetLandmarkName
+ // should return KErrNotFound since it is not set
+ sourceErr = landmark->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNotFound, KNameErr);
+ sourceErr = landmark->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNone, KDescErr);
+ AssertTrueSecL(sourceDesc.Compare(lmDesc) == KErrNone, KCompareDescErr);
+
+ CleanupStack::PopAndDestroy(landmark);
+ // Read landmark from landmark db
+ CheckLandmarkL(id, lmName, lmDesc);
+ lmName.Zero();
+ lmDesc.Zero();
+
+ // 6) Create empty landmark
+ landmark = CPosLandmark::NewLC();
+ id = iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+ lmName.Append(_L(""));
+ lmDesc.Append(_L(""));
+
+ // Read landmark from local landmark, GetLandmarkName and GetLandmarkDescription
+ // should return KErrNotFound since it is not set
+ sourceErr = landmark->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNotFound, KNameErr);
+ sourceErr = landmark->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNotFound, KDescErr);
+
+ CleanupStack::PopAndDestroy(landmark);
+ // Read landmark from landmark db
+ CheckLandmarkL(id, lmName, lmDesc);
+ lmName.Zero();
+ lmDesc.Zero();
+ }
+
+// ---------------------------------------------------------
+// CPosTp41::InternalGet
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp41::CheckLandmarkL(TPosLmItemId aId, TDesC& aName, TDesC& aDesc)
+ {
+ iLog->Put(_L("CheckLandmarkL"));
+ _LIT(KNameErr2, "lm->GetLandmarkName returned wrong");
+ _LIT(KDescErr2, "lm->GetLandmarkDescription returned wrong");
+
+ _LIT(KCompareNameErr, "Landmark names are not equal");
+ _LIT(KCompareDescErr, "Landmark descriptions are not equal");
+
+ TPtrC sourceDesc;
+ TPtrC sourceName;
+
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aId);
+
+ TInt sourceErr = lm->GetLandmarkName(sourceName);
+ AssertTrueSecL(sourceErr == KErrNone, KNameErr2);
+
+ AssertTrueSecL(sourceName.Compare(aName) == KErrNone, KCompareNameErr);
+ sourceErr = lm->GetLandmarkDescription(sourceDesc);
+ AssertTrueSecL(sourceErr == KErrNone, KDescErr2);
+ AssertTrueSecL(sourceDesc.Compare(aDesc) == KErrNone, KCompareDescErr);
+
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp42.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,613 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp42.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <bautils.h>
+
+// CONSTANTS
+_LIT(KTraceDir, "c:\\documents\\");
+_LIT(KFileTrace, "c:\\documents\\TP42_File%d.xml");
+_LIT(KFileTraceWild, "c:\\documents\\TP42_File*.xml");
+
+_LIT( KDump, "%02d: '%S'" );
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp42::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp42::CloseTest()
+ {
+ iDataToRecognize.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp42::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp42::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KFileTrace );
+
+ iErrorsFound = 0;
+ // Test reading from buffer
+ iLog->Log(_L("**************BUFFER***************"));
+ TestWithBufferL();
+
+ iLog->Log(_L("**************FILE***************"));
+ //Test reading from file and filehandle
+ TestWithFileL();
+
+ iLog->Log(_L("**************EMPTY FILE***************"));
+ //Test reading from empty file
+ TestWithEmptyFileL();
+
+ iLog->Log(_L("**************LARGE FILE***************"));
+
+ //Test reading from large file
+ TestWithLargeFilesL(_L("<?xml *?><lala:lmx xmlns:n=\"http://www.nokia.com/schemas/location/landmarks\""), CApaDataRecognizerType::ECertain);
+ TestWithLargeFilesL(_L("<?xml k?> < *:lmx*>"), CApaDataRecognizerType::EProbable);
+
+ iDataToRecognize.ResetAndDestroy();
+
+ if (iErrorsFound != KErrNone)
+ {
+ TBuf<64> buf;
+ buf.Format(_L("%d Errors were found in TP42"), iErrorsFound );
+ iLog->Log(buf);
+ User::Leave(-1);
+ }
+ }
+
+
+// ---------++++++++++++++------------------------------------------------
+// CPosTp42::TestWithBufferL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp42::TestWithEmptyFileL()
+ {
+ // Create empty file
+ RFile file;
+ TBuf<100> buf;
+ _LIT(KFileName, "c:\\documents\\DummyFile.txt");
+
+ TInt err = file.Open(iFileSession, KFileName , EFileWrite);
+ if (err != KErrNone && err != KErrAlreadyExists)
+ {
+ if (err == KErrNotFound)
+ {
+ User::LeaveIfError(file.Create(iFileSession, KFileName, EFileWrite));
+ }
+ else
+ {
+ buf.Format(_L("Error %d when creating empty file"), err);
+ iLog->Log(buf);
+ }
+ }
+
+ file.Close();
+ TBuf8<1> kalle;
+
+ RApaLsSession lsSession;
+ CleanupClosePushL(lsSession);
+ User::LeaveIfError(lsSession.Connect());
+ TDataRecognitionResult recognizerResultFromFile;
+ TDataRecognitionResult recognizerResultFromFileHandle;
+
+ // Check file
+ err = lsSession.RecognizeData(KFileName, kalle , recognizerResultFromFile);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from lsSession.RecognizeData"));
+ User::Leave(err);
+ }
+ iLog->Log(recognizerResultFromFile.iDataType.Des());
+ TInt expCode = CApaDataRecognizerType::EProbable;
+
+ if (recognizerResultFromFile.iDataType.Des() != _L("text/plain"))
+ {
+
+ iLog->Log(_L("datatype from recognizer"));
+ }
+
+ if (recognizerResultFromFile.iConfidence != expCode)
+ {
+
+ iLog->Log(_L(" confidence from recognizer"));
+ }
+
+ // Check filehandle
+ User::LeaveIfError(iFileSession.ShareProtected());
+
+ RFile fileHandle;
+ CleanupClosePushL(fileHandle);
+ err = fileHandle.Open(iFileSession, KFileName, EFileRead | EFileShareAny);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from file.Open"));
+ User::Leave(err);
+
+ }
+ err = lsSession.RecognizeData(fileHandle, recognizerResultFromFileHandle);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from lsSession.RecognizeData"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(&fileHandle);
+ iLog->Log(recognizerResultFromFileHandle.iDataType.Des());
+
+ if (recognizerResultFromFileHandle.iDataType.Des() != _L("text/plain"))
+ {
+ iLog->Log(_L(" datatype from recognizer"));
+ }
+
+ if (recognizerResultFromFileHandle.iConfidence != expCode)
+ {
+ iLog->Log(_L("confidence from recognizer"));
+ }
+
+ CleanupStack::PopAndDestroy(&lsSession);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp42::TestWithBufferL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp42::TestWithBufferL()
+ {
+ //start reading the file line by line and create objects.
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmRecognizerData.txt");
+
+ RFile file;
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+ CleanupClosePushL(file);
+
+ TBuf<500> line; //declarera som en konstant tack
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if ( lex.Peek() != '#' )
+ {
+ CRecognizerData* recognizerData = CRecognizerData::NewL(line);
+ CleanupStack::PushL(recognizerData);
+
+ User::LeaveIfError(iDataToRecognize.Append(recognizerData));
+ CleanupStack::Pop(recognizerData);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+
+ RApaLsSession lsSession;
+ CleanupClosePushL(lsSession);
+ User::LeaveIfError(lsSession.Connect());
+ TDataRecognitionResult recognizerResult;
+ TBuf<10> dummy; //dummy
+
+ TInt numberOfResults = iDataToRecognize.Count();
+ for (TInt i = 0; i < numberOfResults; i++)
+ {
+ CRecognizerData* data = iDataToRecognize[i];
+ TBuf8<200> kalle;
+ kalle.Copy((data -> RecognizerData()));
+
+ // Check buffer
+ User::LeaveIfError(lsSession.RecognizeData(dummy, kalle , recognizerResult));
+
+ const TDataRecognitionResult expected = data->ExpectedResult();
+
+ TBuf<512> buf;
+ TPtrC content( data->RecognizerData() );
+ buf.Format( KDump, i+1, &content );
+ iLog->Log( buf );
+
+ CheckResultL(expected, recognizerResult);
+ }
+
+ CleanupStack::PopAndDestroy(&lsSession);
+ iDataToRecognize.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp42::TestWithFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp42::TestWithFileL()
+ {
+ //start reading the file line by line and create objects.
+ _LIT(KFileTestValues, "c:\\system\\test\\testdata\\LmRecognizerDataFile.txt");
+
+ RFile file;
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+ // Delete all old files
+ TInt err = fileMan->Delete(KFileTraceWild);
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Error from CFileMan::Delete"));
+ CleanupStack::PopAndDestroy(fileMan);
+
+ CleanupClosePushL(file);
+ User::LeaveIfError(file.Open(iFileSession, KFileTestValues, EFileRead));
+
+ TBuf<500> line;
+ while (ReadLn(file, line) != KErrEof)
+ {
+ TLex lex(line);
+ if (lex.Peek() != '#')
+ {
+ CRecognizerData* recognizerData = CRecognizerData::NewL(line);
+ CleanupStack::PushL(recognizerData);
+
+ User::LeaveIfError(iDataToRecognize.Append(recognizerData));
+ CleanupStack::Pop(recognizerData);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+
+ //start comparing
+ RApaLsSession lsSession;
+ CleanupClosePushL(lsSession);
+ User::LeaveIfError(lsSession.Connect());
+ TDataRecognitionResult recognizerResultFromFile;
+ TDataRecognitionResult recognizerResultFromFileHandle;
+ TBuf<40> fileName; //dummy
+
+ TInt numberOfResults = iDataToRecognize.Count();
+ for (TInt i = 0; i < numberOfResults; i++)
+ {
+ CRecognizerData* data = iDataToRecognize[i];
+
+ TBuf8<512> buf8;
+ buf8.Copy( data->RecognizerData() );
+
+ RFile file;
+ TFileName fileName;
+ TInt err = file.Temp( iFileSession, KTraceDir, fileName, EFileWrite );
+ if ( err )
+ {
+ iLog->Log(_L("Failed to create temp file, %d"), err);
+ User::Leave( err );
+ }
+ file.Write( buf8 );
+ _LIT8( KCrLf, "\n" );
+ file.Write( KCrLf );
+ file.Close();
+
+ const TDataRecognitionResult expected = data->ExpectedResult();
+
+ TBuf<512> buf;
+ TPtrC content( data->RecognizerData() );
+ buf.Format( KDump, i+1, &content );
+ iLog->Log( buf );
+
+ // Check file
+ recognizerResultFromFile.Reset();
+ buf8.Zero();
+ lsSession.RecognizeData( fileName, buf8, recognizerResultFromFile );
+ CheckResultL(expected, recognizerResultFromFile);
+
+ // Check FileHandle
+
+ RFs fileSessionNew;
+ User::LeaveIfError(fileSessionNew.Connect());
+ CleanupClosePushL(fileSessionNew);
+
+ //iLog->Log(_L("Check filehandle"));
+ err = fileSessionNew.ShareProtected();
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from file.ShareProtected"));
+ User::Leave(err);
+ }
+
+ RFile fileHandle;
+ CleanupClosePushL(fileHandle);
+ err = fileHandle.Open(fileSessionNew, fileName, EFileRead | EFileShareAny);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from file.open"));
+ User::Leave(err);
+ }
+ err = lsSession.RecognizeData(fileHandle, recognizerResultFromFileHandle);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from lsSession.RecognizeData"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(&fileHandle);
+ CleanupStack::PopAndDestroy(&fileSessionNew);
+ CheckResultL(expected, recognizerResultFromFileHandle);
+
+ iFileSession.Delete( fileName );
+ }
+
+ CleanupStack::PopAndDestroy(&lsSession);
+
+ iDataToRecognize.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp42::TestWithLargeFilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp42::TestWithLargeFilesL(const TDesC& msg, TInt aExpCode)
+ {
+ RApaLsSession lsSession;
+ CleanupClosePushL(lsSession);
+ User::LeaveIfError(lsSession.Connect());
+
+ TDataRecognitionResult recognizerResultFromFile;
+ TDataRecognitionResult recognizerResultFromFileHandle;
+
+ const TInt KBufSize = 400;
+ TBuf8<KBufSize> tmp1;
+ TBuf8<KBufSize> tmp;
+ TBuf8<1> kalle;
+
+ _LIT(KEnd,"\n");
+
+ RFile file;
+ TFileName fileName;
+ file.Temp( iFileSession, KTraceDir, fileName, EFileWrite );
+ CleanupClosePushL(file);
+
+ for (TInt i=0;i<10;i++)
+ {
+ tmp1.Append(_L(" \n\t "));
+ }
+
+ tmp.Append(tmp1);
+ tmp.Append(msg);
+ tmp.Append(KEnd);
+ tmp.Append(tmp1);
+ tmp.Append(KEnd);
+ file.Write(tmp);
+
+ CleanupStack::PopAndDestroy(&file);
+
+ lsSession.RecognizeData(fileName, kalle , recognizerResultFromFile);
+ iLog->Log(recognizerResultFromFile.iDataType.Des());
+
+ if (recognizerResultFromFile.iDataType.Des() != _L("application/vnd.nokia.landmarkcollection+xml"))
+ {
+ iLog->Log(_L("datatype from recognizer"));
+ }
+
+ if (recognizerResultFromFile.iConfidence != aExpCode)
+ {
+ iLog->Log(_L(" confidence from recognizer"));
+ }
+
+ // Check FileHandle
+ iLog->Log(_L("Check filehandle"));
+
+ RFs fs;
+ CleanupClosePushL(fs);
+ User::LeaveIfError(fs.Connect());
+ User::LeaveIfError(fs.ShareProtected());
+
+ RFile fileHandle;
+ CleanupClosePushL(fileHandle);
+ TInt err = fileHandle.Open(fs, fileName, EFileRead | EFileShareAny);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from file.Open"));
+ User::Leave(err);
+ }
+ err = lsSession.RecognizeData(fileHandle, recognizerResultFromFileHandle);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error from lsSession.RecognizeData"));
+ User::Leave(err);
+ }
+ CleanupStack::PopAndDestroy(&fileHandle);
+
+ if (recognizerResultFromFileHandle.iDataType.Des() != _L("application/vnd.nokia.landmarkcollection+xml"))
+ {
+ iLog->Log(_L("datatype from recognizer"));
+ }
+
+ if (recognizerResultFromFileHandle.iConfidence != aExpCode)
+ {
+ iLog->Log(_L("confidence from recognizer"));
+ }
+
+ iFileSession.Delete( fileName );
+ CleanupStack::PopAndDestroy(&fs);
+ CleanupStack::PopAndDestroy(&lsSession);
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CPosTp42::CheckResultL(TDataRecognitionResult aExpectedResult, TDataRecognitionResult aResult)
+ {
+ _LIT(KExpected, "Expect: '%S' (%d)");
+ _LIT(KActual, "Actual: '%S' (%d)");
+
+ TBuf<256> exp, act;
+ TPtrC expMime( aExpectedResult.iDataType.Des() );
+ TPtrC actMime( aResult.iDataType.Des() );
+
+ exp.Format(KExpected, &expMime, aExpectedResult.iConfidence );
+ act.Format(KActual, &actMime, aResult.iConfidence );
+
+ if ( aExpectedResult.iConfidence == NOLANDMARKNUMBER ) // Magic number for not any landmark
+ {
+ _LIT8(KLmxType, "application/vnd.nokia.landmarkcollection+xml");
+ _LIT8(KGpxType, "application/gps+xml");
+
+ if ( aResult.iDataType.Des8().Compare( KLmxType ) == 0 ||
+ aResult.iDataType.Des8().Compare( KGpxType ) == 0 )
+ {
+ iLog->Log(_L( "ERR: landmark detected when it shouldn't be" ));
+ iLog->Log(exp);
+ iLog->Log(act);
+ iErrorsFound++;
+ }
+ }
+ else //if (aExpectedResult.iConfidence == CApaDataRecognizerType::ECertain) //a landmark buffer is expected
+ {
+ if ( aExpectedResult.iDataType != aResult.iDataType )
+ {
+ iLog->Log(_L( "ERR: datatype mismatch" ));
+ iLog->Log(exp);
+ iLog->Log(act);
+ iErrorsFound++;
+ }
+ if ( aExpectedResult.iConfidence != aResult.iConfidence )
+ {
+ iLog->Log(_L("ERR: confidence mismatch"));
+ iLog->Log(exp);
+ iLog->Log(act);
+ iErrorsFound++;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+// Implementation of the supporter class
+CRecognizerData* CRecognizerData::NewL(const TDesC& aDes)
+ {
+ CRecognizerData* self = new(ELeave) CRecognizerData;
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+CRecognizerData::CRecognizerData()
+ {
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+CRecognizerData::~CRecognizerData()
+ {
+ delete iRecognizerData;
+ iRecognizerData = NULL;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+TPtrC CRecognizerData::RecognizerData() const
+ {
+ return *iRecognizerData;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+const TDataRecognitionResult& CRecognizerData::ExpectedResult() const
+ {
+ return iExpectedResult;
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CRecognizerData::ConstructL(const TDesC& aDes)
+ {
+ _LIT( KDelim, "#" );
+ TInt delim = aDes.Find( KDelim );
+ iRecognizerData = aDes.Left( delim ).AllocL();
+ iRecognizerData->Des().TrimRight();
+
+ TLex line( aDes.Mid( delim + 1 ) );
+
+ ParseResult( line.NextToken() );
+ ParseType( line.NextToken() );
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CRecognizerData::ParseResult(const TDesC& aDes)
+ {
+ _LIT(KECertain, "ECertain");
+ _LIT(KEProbable, "EProbable");
+ if (aDes.CompareF(KECertain) == 0)
+ {
+ iExpectedResult.iConfidence = CApaDataRecognizerType::ECertain;
+ }
+ else if (aDes.CompareF(KEProbable) == 0)
+ {
+ iExpectedResult.iConfidence = CApaDataRecognizerType::EProbable;
+ }
+ else
+ {
+ iExpectedResult.iConfidence = NOLANDMARKNUMBER;
+ }
+ }
+
+// ---------------------------------------------------------
+// ---------------------------------------------------------
+//
+void CRecognizerData::ParseType(const TDesC& aDes)
+ {
+ _LIT8(KLmxType, "application/vnd.nokia.landmarkcollection+xml");
+ _LIT8(KGpxType, "application/gps+xml");
+ _LIT(KGpx, "gpx");
+ _LIT(KLmx, "lmx");
+
+ TDataType dataLmx(KLmxType);
+ TDataType dataGpx(KGpxType);
+
+ if (aDes.CompareF(KGpx) == 0)
+ {
+ iExpectedResult.iDataType = dataGpx;
+ }
+ else if (aDes.CompareF(KLmx) == 0)
+ {
+ iExpectedResult.iDataType = dataLmx;
+ }
+ else
+ {
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp43.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1665 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp43.h"
+
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+
+// CONST
+_LIT(KFileName, "c:\\documents\\Tp43EncodeOutput.xml");
+_LIT(KFileName2, "c:\\documents\\Tp43EncodeOutputIncMode.xml");
+_LIT(KFileName3, "c:\\documents\\Tp43EncodeOutputCollectionData1.xml");
+_LIT(KFileName4, "c:\\documents\\Tp43EncodeOutputCollectionData2.xml");
+_LIT(KFileEmptyCollectionData, "c:\\documents\\Tp43EncodeOutputEmptyCollectionData.xml");
+_LIT(KFileEmptyCollectionData2, "c:\\documents\\Tp43EncodeOutputEmptyCollectionData2.xml");
+_LIT(KFileLongCollectionFieldName, "c:\\documents\\Tp43EncodeOutputLongCollectionField.xml");
+
+// Filename with 260 characters
+_LIT(KLongFileName, "c:\\File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File12");
+_LIT(KEmptyFileName, "");
+_LIT8(KLongMimeType, "application/vnd.nokia.landmarkcollection+xmlFile123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File12");
+
+_LIT(KFileNameCorrect, "c:\\system\\test\\TestData\\Tp43EncodeOutput_Correct.xml");
+_LIT(KFileName2Correct, "c:\\system\\test\\TestData\\Tp43EncodeOutputIncMode_Correct.xml");
+_LIT(KFileName3Correct, "c:\\system\\test\\TestData\\Tp43EncodeOutputCollectionData1_Correct.xml");
+_LIT(KFileName4Correct, "c:\\system\\test\\TestData\\Tp43EncodeOutputCollectionData2_Correct.xml");
+_LIT(KFileEmptyCollectionDataCorrect, "c:\\system\\test\\TestData\\Tp43EncodeOutputEmptyCollectionData_Correct.xml");
+_LIT(KFileEmptyCollectionData2Correct, "c:\\system\\test\\TestData\\Tp43EncodeOutputEmptyCollectionData2_Correct.xml");
+_LIT(KFileLongCollectionFieldNameCorrect, "c:\\system\\test\\TestData\\Tp43EncodeOutputLongCollectionField_Correct.xml");
+_LIT(KErrorScenario4FileCorrect, "c:\\system\\test\\TestData\\Tp43EncodeOutputErrorScenario4_Correct.xml");
+_LIT(KErrorScenario5FileCorrect, "c:\\system\\test\\TestData\\Tp43EncodeOutputErrorScenario5_Correct.xml");
+
+_LIT(KErrorTestFileName, "c:\\documents\\Tp43EncodeOutputErrorTest.xml");
+_LIT(KErrorScenario4File, "c:\\documents\\Tp43EncodeOutputErrorScenario4.xml");
+_LIT(KErrorScenario5File, "c:\\documents\\Tp43EncodeOutputErrorScenario5.xml");
+
+// This number must be updated if any more landmarks are added
+const TInt KNrOfAddedLandmarks = 7;
+
+const TInt KBufSize = 1024;
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp43::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KFileName );
+
+ DeleteFileL(KFileName);
+ DeleteFileL(KFileName2);
+ DeleteFileL(KFileName3);
+ DeleteFileL(KFileName4);
+ DeleteFileL(KFileEmptyCollectionData);
+ DeleteFileL(KFileEmptyCollectionData2);
+
+
+ RemoveAllLmDatabasesL();
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+
+ // 2) Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KFileName);
+ CreateEncoderPartsL();
+
+ // 13 Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ // Check data
+ HBufC8* emptyBuffer=NULL;
+ ParseAndCheckDataFromEncoderL(KFileName, _L(""), _L(""), *emptyBuffer);
+
+ // Repeate step 2-12, finalize with incremental mode and monitor progress
+ iLandmarkEncoder->SetOutputFileL(KFileName2);
+ CreateEncoderPartsL();
+
+ // 15 Finalize encoding with incremental mode and monitor progress
+ iOperation = iLandmarkEncoder->FinalizeEncodingL();
+
+ CActiveLmOperation* activeLmOperation = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation);
+
+ // Progress is monitored in CLandmarkTestProcedureBase class
+ activeLmOperation->Start(iOperation);
+ CActiveScheduler::Start();
+
+ // Check for no errors
+ iLog->Log(_L("CheckOperationL"));
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+
+ ParseAndCheckDataFromEncoderL(KFileName2, _L(""), _L(""), *emptyBuffer);
+
+ CleanupStack::PopAndDestroy(activeLmOperation);
+
+ // 16 Repeat step 3-15, use buffer
+ CBufBase* myEncoderBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer);
+
+ // 17a Repeat step 3-15, use buffer
+ iLog->Log(_L("Part 17a Repeat step 3-15 use buffer"));
+ CreateEncoderPartsL();
+
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ HBufC8* filecontent = HBufC8::NewLC(myEncoderBuffer->Size());
+ TPtr8 ptr = filecontent->Des();
+ myEncoderBuffer->Read(0, ptr, myEncoderBuffer->Size());
+ ParseAndCheckDataFromEncoderL(KNullDesC, _L(""), _L(""), *filecontent);
+ myEncoderBuffer->Reset();
+ CleanupStack::PopAndDestroy(filecontent);
+ CleanupStack::PopAndDestroy(myEncoderBuffer);
+
+ // 17b Repeat step 3-15 use buffer, finalize with incremental mode and monitor progress
+ iLog->Log(_L("Part 17b Repeat step 3-15 use buffer"));
+ CBufBase* myEncoderBuffer2 = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer2);
+
+ CreateEncoderPartsL();
+ iOperation = iLandmarkEncoder->FinalizeEncodingL();
+
+ activeLmOperation = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation);
+
+ // Progress is monitored in CLandmarkTestProcedureBase class
+ activeLmOperation->Start(iOperation);
+ CActiveScheduler::Start();
+
+ // Check for no errors
+ iLog->Log(_L("CheckOperationL"));
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+
+ HBufC8* filecontent2 = HBufC8::NewLC(myEncoderBuffer2->Size());
+ TPtr8 ptr2 = filecontent2->Des();
+ myEncoderBuffer2->Read(0, ptr2, myEncoderBuffer2->Size());
+
+ ParseAndCheckDataFromEncoderL(KNullDesC, _L(""), _L(""), *filecontent2);
+
+ myEncoderBuffer2->Reset();
+ CleanupStack::PopAndDestroy(filecontent2);
+ CleanupStack::PopAndDestroy(activeLmOperation);
+ CleanupStack::PopAndDestroy(myEncoderBuffer2);
+
+ // 18 Use file when encoding, set output file
+ iLog->Log(_L("Part 18 Use file when encoding, set output file"));
+ iLandmarkEncoder->SetOutputFileL(KFileName3);
+
+ // 19 Add collection data to the encoder, name and description set
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP43CollectionDataNameFile1"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("TP43CollectionDataDescriptionFile1"));
+
+ CreateEncoderPartsL();
+
+ // Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ // Check data
+ ParseAndCheckDataFromEncoderL(KFileName3, _L("TP43CollectionDataNameFile1"), _L("TP43CollectionDataDescriptionFile1"), *emptyBuffer);
+
+ // 20a Repeat step 3-17 Use file when encoding, set output file, finalize with incremental mode and monitor progress
+ iLog->Log(_L("Part 20a "));
+ iLandmarkEncoder->SetOutputFileL(KFileName4);
+
+ // Add collection data to the encoder, name and description set
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP43CollectionDataNameFile2"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("TP43CollectionDataDescriptionFile2"));
+
+ CreateEncoderPartsL();
+
+ // finalize with incremental mode and monitor progress
+ iOperation = iLandmarkEncoder->FinalizeEncodingL();
+
+ activeLmOperation = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation);
+
+ // Progress is monitored in CLandmarkTestProcedureBase class
+ activeLmOperation->Start(iOperation);
+ CActiveScheduler::Start();
+
+ // Check for no errors
+ iLog->Log(_L("CheckOperationL"));
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+ CleanupStack::PopAndDestroy(activeLmOperation);
+
+ // Check data
+ ParseAndCheckDataFromEncoderL(KFileName4, _L("TP43CollectionDataNameFile2"), _L("TP43CollectionDataDescriptionFile2"), *emptyBuffer);
+
+ // 20b Use buffer when encoding
+ iLog->Log(_L("Part 20b "));
+ CBufBase* myEncoderBuffer3 = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer3);
+
+ // Add collection data to the encoder, name and description set
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP43CollectionDataNameBuffer1"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("TP43CollectionDataDescriptionBuffer1"));
+ CreateEncoderPartsL();
+
+ // Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ HBufC8* filecontent3 = HBufC8::NewLC(myEncoderBuffer3->Size());
+ TPtr8 ptr3 = filecontent3->Des();
+ myEncoderBuffer3->Read(0, ptr3, myEncoderBuffer3->Size());
+ ParseAndCheckDataFromEncoderL(KNullDesC, _L("TP43CollectionDataNameBuffer1"), _L("TP43CollectionDataDescriptionBuffer1"), *filecontent3);
+ myEncoderBuffer3->Reset();
+ CleanupStack::PopAndDestroy(filecontent3);
+ CleanupStack::PopAndDestroy(myEncoderBuffer3);
+
+
+ // 20c Repeat step 3-17 Use buffer when encoding, set output file, finalize with incremental mode and monitor progress
+ iLog->Log(_L("Part 20c "));
+ CBufBase* myEncoderBuffer4 = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer4);
+
+ // Add collection data to the encoder, name and description set
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP43CollectionDataNameBuffer2"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("TP43CollectionDataDescriptionBuffer2"));
+
+ CreateEncoderPartsL();
+
+ // finalize with incremental mode and monitor progress
+ iOperation = iLandmarkEncoder->FinalizeEncodingL();
+
+ activeLmOperation = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation);
+
+ // Progress is monitored in CLandmarkTestProcedureBase class
+ activeLmOperation->Start(iOperation);
+ CActiveScheduler::Start();
+
+ // Check for no errors
+ iLog->Log(_L("CheckOperationL"));
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+
+ HBufC8* filecontent4 = HBufC8::NewLC(myEncoderBuffer4->Size());
+ TPtr8 ptr4 = filecontent4->Des();
+ myEncoderBuffer4->Read(0, ptr4, myEncoderBuffer4->Size());
+ ParseAndCheckDataFromEncoderL(KNullDesC, _L("TP43CollectionDataNameBuffer2"), _L("TP43CollectionDataDescriptionBuffer2"), *filecontent4);
+ myEncoderBuffer4->Reset();
+ CleanupStack::PopAndDestroy(filecontent4);
+
+ CleanupStack::PopAndDestroy(activeLmOperation);
+ CleanupStack::PopAndDestroy(myEncoderBuffer4);
+
+ // 21 Use file when encoding, set output file
+ iLog->Log(_L("Part 21 "));
+ iLandmarkEncoder->SetOutputFileL(KFileEmptyCollectionData);
+ // 22 Add collection data to the encoder, but without specifying name and description
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L(""));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L(""));
+
+ CreateEncoderPartsL();
+
+ // Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ // Check data
+ ParseAndCheckDataFromEncoderL(KFileEmptyCollectionData, _L(""), _L(""), *emptyBuffer);
+
+ // 23a Repeat step 3-17 Use file when encoding, set output file, finalize with incr. mode
+ iLog->Log(_L("Part 23a "));
+ iLandmarkEncoder->SetOutputFileL(KFileEmptyCollectionData2);
+ // Add collection data to the encoder, but without specifying name and description
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L(""));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L(""));
+
+ CreateEncoderPartsL();
+
+ // finalize with incremental mode and monitor progress
+ iOperation = iLandmarkEncoder->FinalizeEncodingL();
+
+ activeLmOperation = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation);
+
+ // Progress is monitored in CLandmarkTestProcedureBase class
+ activeLmOperation->Start(iOperation);
+ CActiveScheduler::Start();
+
+ // Check for no errors
+ iLog->Log(_L("CheckOperationL"));
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+ CleanupStack::PopAndDestroy(activeLmOperation);
+
+ // Check data
+ ParseAndCheckDataFromEncoderL(KFileEmptyCollectionData, _L(""), _L(""), *emptyBuffer);
+
+ // 23b Repeat step 3-17 Use buffer when encoding
+ iLog->Log(_L("Part 23b "));
+ CBufBase* myEncoderBuffer5 = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer5);
+
+ // Add collection data to the encoder, name and description set
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP43CollectionDataNameBuffer3"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("TP43CollectionDataDescriptionBuffer3"));
+ CreateEncoderPartsL();
+
+ // Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ // Check data here
+ HBufC8* filecontent5 = HBufC8::NewLC(myEncoderBuffer5->Size());
+ TPtr8 ptr5 = filecontent5->Des();
+ myEncoderBuffer5->Read(0, ptr5, myEncoderBuffer5->Size());
+ ParseAndCheckDataFromEncoderL(KNullDesC, _L("TP43CollectionDataNameBuffer3"), _L("TP43CollectionDataDescriptionBuffer3"), *filecontent5);
+ myEncoderBuffer5->Reset();
+ CleanupStack::PopAndDestroy(filecontent5);
+ CleanupStack::PopAndDestroy(myEncoderBuffer5);
+
+ // 23c Repeat step 3-17 Use buffer when encoding, finalize with incremental mode and monitor progress
+ iLog->Log(_L("Part 23c "));
+ CBufBase* myEncoderBuffer6 = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer6);
+
+ // Add collection data to the encoder, name and description set
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP43CollectionDataNameBuffer4"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("TP43CollectionDataDescriptionBuffer4"));
+ CreateEncoderPartsL();
+
+ // finalize with incremental mode and monitor progress
+ iOperation = iLandmarkEncoder->FinalizeEncodingL();
+
+ activeLmOperation = new(ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(activeLmOperation);
+
+ // Progress is monitored in CLandmarkTestProcedureBase class
+ activeLmOperation->Start(iOperation);
+ CActiveScheduler::Start();
+
+ // Check for no errors
+ iLog->Log(_L("CheckOperationL"));
+ activeLmOperation->CheckOperationL();
+ delete iOperation;
+ iOperation = NULL;
+ CleanupStack::PopAndDestroy(activeLmOperation);
+
+ // Check data here
+ HBufC8* filecontent6 = HBufC8::NewLC(myEncoderBuffer6->Size());
+ TPtr8 ptr6 = filecontent6->Des();
+ myEncoderBuffer6->Read(0, ptr6, myEncoderBuffer6->Size());
+ ParseAndCheckDataFromEncoderL(KNullDesC, _L("TP43CollectionDataNameBuffer4"), _L("TP43CollectionDataDescriptionBuffer4"), *filecontent6);
+ myEncoderBuffer6->Reset();
+ CleanupStack::PopAndDestroy(filecontent6);
+ CleanupStack::PopAndDestroy(myEncoderBuffer6);
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ DeleteFileL(KFileLongCollectionFieldName);
+ // Test with file
+ TestLongCollectionFieldsL(ETrue);
+ // Test with buffer
+ TestLongCollectionFieldsL(EFalse);
+
+ // Check that all created XML files are correct by comparing to saved files
+ iLog->Log(_L("Comparing files..."));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KFileNameCorrect, filename );
+ CompareTwoFilesL(filename, KFileName);
+
+ CreateCorrectXmlFileL( KFileName2Correct, filename );
+ CompareTwoFilesL(filename, KFileName2);
+
+ CreateCorrectXmlFileL( KFileName3Correct, filename );
+ CompareTwoFilesL(filename, KFileName3);
+
+ CreateCorrectXmlFileL( KFileName4Correct, filename );
+ CompareTwoFilesL(filename, KFileName4);
+
+ CreateCorrectXmlFileL( KFileEmptyCollectionDataCorrect, filename );
+ CompareTwoFilesL(filename, KFileEmptyCollectionData);
+
+ CreateCorrectXmlFileL( KFileEmptyCollectionData2Correct, filename );
+ CompareTwoFilesL(filename, KFileEmptyCollectionData2);
+
+ CreateCorrectXmlFileL( KFileLongCollectionFieldNameCorrect, filename );
+ CompareTwoFilesL(filename, KFileLongCollectionFieldName);
+
+ // Test for correct leave codes
+ TestErrorScenariosL();
+
+ // check for correct output
+ CreateCorrectXmlFileL( KErrorScenario4FileCorrect, filename );
+ CompareTwoFilesL(filename, KErrorScenario4File);
+
+ CreateCorrectXmlFileL( KErrorScenario5FileCorrect, filename );
+ CompareTwoFilesL(filename, KErrorScenario5File);
+
+ // Test to encode to file with long filename (more than 255 characters)
+ TestWithLongFileNameL();
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP43"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::CreateEncoderPartsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::CreateEncoderPartsL()
+ {
+ iLog->Log(_L("CreateEncoderPartsL"));
+ // 3 Add one landmark to be encoded (id7 name "Billigt" in categories 1-3,14-17)
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(7);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ // Remove field 408 which is not exported
+ lm1->RemovePositionField(408);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+ // 4 Add one more landmark to be encoded (id27 "LOG9" in categories 11-17)
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(27);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 5 Add one category to the latest added landmark
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(1);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ // 6 Add one more landmark to be encoded (id52 "Kalles Hundgård" in category 19)
+ lm2 = iDatabase->ReadLandmarkLC(52);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 7 Add several global and local categories to the latest added landmark
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ landmarkCategory = categoryManager->ReadCategoryLC(26);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ landmarkCategory = categoryManager->ReadCategoryLC(25);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ TPosLmItemId globalCategoryId = categoryManager->GetGlobalCategoryL(3000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found1"));
+ User::Leave(-1);
+ }
+
+ //globalCategoryId = categoryManager->GetGlobalCategoryL(6000);
+ globalCategoryId = categoryManager->GetGlobalCategoryL(15000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found2"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ // 8 Add one landmark (not containing any categories), id=11 "MLFW"
+ lm2 = iDatabase->ReadLandmarkLC(11);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 9 Add one more landmark (not containing any categories), id=56 "TE, Lund"
+ lm2 = iDatabase->ReadLandmarkLC(56);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 10 Add one category to the latest added landmark
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ landmarkCategory = categoryManager->ReadCategoryLC(18);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ // 11 Add one landmark (not containing any categories), id=43 "asdf"
+ lm2 = iDatabase->ReadLandmarkLC(43);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 12 Add several local and global categories to the latest added landmark
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ landmarkCategory = categoryManager->ReadCategoryLC(23);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ landmarkCategory = categoryManager->ReadCategoryLC(17);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(24000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found3"));
+ User::Leave(-1);
+ }
+
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(27000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ // 13) Add a landmark with fields that are encoded to XML set
+ lm1 = CreateXMLLandmarkLC(_L("TP43LandmarkWithAllXMLFields"));
+ AddAllXMLFieldsL(lm1);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ // 13) Add one global category (Garage) to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(36000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found3"));
+ User::Leave(-1);
+ }
+
+ // 14) Add one global category (Bus stop) to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(39000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ // 15) Add one category (BurgerKing) to the latest added landmark
+ landmarkCategory = categoryManager->ReadCategoryLC(17);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("CreateEncoderParts Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::PrintLandmarkIdFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::PrintLandmarkIdFieldsL(const CPosLandmark& aLandmark)
+ {
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+ TBuf<150> buf;
+ TInt err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ TReal vertAcc(loc.VerticalAccuracy());
+ TReal horAcc(loc.HorizontalAccuracy());
+ TReal alt(loc.Altitude());
+ TReal lon = loc.Longitude();
+ TReal lat = loc.Latitude();
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ buf.Format(_L("LM: Long %f Lat %f vertAcc %f horAcc %f alt %f srcRadius %f"), lon, lat, vertAcc, horAcc, alt, sourceR);
+ }
+ else
+ {
+ buf.Format(_L("LM: Long %f Lat %f vertAcc %f horAcc %f alt %f "), lon, lat, vertAcc, horAcc, alt);
+ }
+ //iLog->Log(buf);
+ }
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+ buf.Format(_L("IdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ //iLog->Log(buf);
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::PrintParsedDataFromEncoderL(const TDesC& aFile, const TDesC8& aBuffer)
+ {
+ iLog->Log(_L("PrintParsedDataFromEncoderL"));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ iLog->Log(_L("----->Using FILE<-------"));
+ iLandmarkParser->SetInputFileL(aFile);
+ }
+ else
+ {
+ iLog->Log(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ while (status == KPosLmOperationNotComplete)
+ {
+ //iLog->Log(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ TBuf<150> buf;
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[i]);
+
+ if (category->GlobalCategory()) buf.Append(_L("Global category: "));
+ else buf.Append(_L("Local category: "));
+ category->GetCategoryName(catName);
+ buf.Append(catName);
+ //iLog->Log(buf);
+ CleanupStack::PopAndDestroy(category);
+ }
+ PrintLandmarkIdFieldsL(*lm);
+ //iLog->Log(_L("---------->"));
+ PrintLandmarkIdFieldsL(*iLandmarks[number]);
+ //iLog->Log(_L("<----------"));
+ number++;
+ // CPosLmOperation::NextStep call will parse a new landmark.
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ //iLog->Log(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ //iLog->Log(_L("----->CollectionData"));
+
+ TBuf<100> buf;
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ buf.Format(_L("Collectiond Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ //iLog->Log(buf);
+ }
+ //else iLog->Log(_L("No collection data found 1"));
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ buf.Format(_L("Collectiond Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ //iLog->Log(buf);
+ }
+ //else iLog->Log(_L("No collection data found 2"));
+ }
+
+ //iLog->Log(_L("<-----CollectionData"));
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("PrintParsedDataFromEncoderL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::ParseAndCheckDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::ParseAndCheckDataFromEncoderL(const TDesC& aFile , const TDesC& aCollectionName,
+ const TDesC& aCollectiondDescription, const TDesC8& aBuffer)
+ {
+ iLog->Log(_L("ParseAndCheckDataFromEncoderL"));
+
+ PrintParsedDataFromEncoderL(aFile, aBuffer);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ //iLog->Log(_L("----->Using FILE<-------"));
+ iLandmarkParser->SetInputFileL(aFile);
+ }
+ else
+ {
+ //iLog->Log(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iLog->Log(_L("ParseContentL"));
+ iOperation = iLandmarkParser->ParseContentL();
+ iLog->Log(_L("ParseContentL Done"));
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ // 1) Get the first landmark, "Billigt", no categories
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 0, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ // 2) Get LOG9, included category Pizzeria
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 1, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(1);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+ CleanupStack::PopAndDestroy(lm);
+
+ // 3) Get Kalles Hundgård, included categories sjukhus, läkare, global Restaurant, Shop
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ if (array.Count()!=4)
+ {
+ iLog->Log(_L("ERROR: Wrong number of landmark categories"));
+ iErrorsFound++;
+ }
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+
+ category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ cat = categoryManager->ReadCategoryLC(26);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ category = iLandmarkParser->LandmarkCategoryLC(array[1]);
+ cat = categoryManager->ReadCategoryLC(25);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=1 Restaurant" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[2]);
+ cat = categoryManager->ReadCategoryLC(27);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=5 Shop" here
+ if (array.Count()== 4)
+ {
+ category = iLandmarkParser->LandmarkCategoryLC(array[3]);
+ cat = categoryManager->ReadCategoryLC(31);//28
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ CleanupStack::PopAndDestroy(lm);
+
+ // 4) Get MLFW, no categories
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 0, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ // 5) Get Te, Lund category Frisör
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 1, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+
+ category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ cat = categoryManager->ReadCategoryLC(18);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+ CleanupStack::PopAndDestroy(lm);
+
+ // 6) Get asdf, category Dagis, Burger King and global hotel, car park
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 4, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+
+ category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ cat = categoryManager->ReadCategoryLC(23);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ category = iLandmarkParser->LandmarkCategoryLC(array[1]);
+ cat = categoryManager->ReadCategoryLC(17);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=4 Hotel" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[2]);
+ cat = categoryManager->ReadCategoryLC(34);//39
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=9 Car Park" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[3]);
+ cat = categoryManager->ReadCategoryLC(35);//30
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+ CleanupStack::PopAndDestroy(lm);
+
+ // 7) Get TP43LandmarkWithAllXMLFields, category Burger King and global Garage, Bus stop
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 3, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+
+ //Check global category "id=4 Garage" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ cat = categoryManager->ReadCategoryLC(38);//31
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=10 Bus Stop" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[1]);
+ cat = categoryManager->ReadCategoryLC(39);//34
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ // Check local category here, burger king
+ category = iLandmarkParser->LandmarkCategoryLC(array[2]);
+ cat = categoryManager->ReadCategoryLC(17);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ CleanupStack::PopAndDestroy(lm);
+
+ // Check that correct number of landmarks has been parsed
+ if (number != KNrOfAddedLandmarks)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != KNrOfAddedLandmarks)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(&array);
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+ // Check that collection data and name is correct
+ if (lmId == EPosLmCollDataCollectionName)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ if (aCollectionName != first)
+ {
+
+ iLog->Log(_L("CollectionName does not match"));
+ User::Leave(-1);
+ }
+ }
+ else if (lmId == EPosLmCollDataNone)
+ {
+ if (aCollectionName != KNullDesC)
+ {
+ iLog->Log(_L("ERROR: CollectionName should be defined"));
+ iErrorsFound++;
+ }
+ }
+ else
+ {
+ iLog->Log(_L("Wrong order of collection data1"));
+ User::Leave(-1);
+ }
+
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+
+ if (lmId == EPosLmCollDataCollectionDescription)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ if (aCollectiondDescription != first)
+ {
+
+ iLog->Log(_L("CollectionDescription does not match"));
+ User::Leave(-1);
+ }
+ }
+ else if (lmId == EPosLmCollDataNone)
+ {
+ if (aCollectiondDescription != KNullDesC)
+ {
+
+ iLog->Log(_L(" CollectionDescription should be defined"));
+ User::Leave(KErrNone);
+ }
+ }
+ else
+ {
+ iLog->Log(_L("Wrong order of collection data2 "));
+ User::Leave(-1);
+ }
+
+ // Test with some non existing ids
+ lmId = iLandmarkParser->NextCollectionDataId((TPosLmCollectionDataId)66700);
+ if (lmId != EPosLmCollDataNone)
+ {
+ iLog->Log(_L("ERROR: No collection data should be found"));
+ iErrorsFound++;
+ }
+
+ TPtrC empty = iLandmarkParser->CollectionData((TPosLmCollectionDataId)66700);
+ if (empty != KNullDesC)
+ {
+ iLog->Log(_L("ERROR: CollectionData should be emtpy"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLandmarks.ResetAndDestroy();
+
+ iLog->Log(_L("ParseAndCheckDataFromEncoderL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::CompareTwoFilesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::CompareTwoFilesL(const TDesC16& aCorrectFile, const TDesC16& aFile)
+{
+ iLog->Log(_L("ComparingTwoFilesL"));
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ TBuf<150> buf;
+ buf.Append(_L("Comparing files "));
+ buf.Append(aCorrectFile);
+ buf.Append(_L(" and "));
+ buf.Append(aFile);
+ iLog->Log(buf);
+
+ CleanupClosePushL(correctFile);
+ CleanupClosePushL(file);
+ TInt err = KErrNone;
+ err = correctFile.Open(iFileSession, aCorrectFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L(" Problem with correct file"));
+ User::Leave(err);
+ }
+ err = file.Open(iFileSession, aFile, EFileRead);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L(" Problem with encoded XML file"));
+ User::Leave(err);
+ }
+
+ TBuf<KBufSize> correctLine;
+ TBuf<KBufSize> line;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if (err == KErrEof) done = ETrue;
+
+ if (correctLine.CompareC(line) != KErrNone)
+ {
+ TBuf<50> buffe;
+ buffe.Format(_L("ERROR in XML file on line %d: "), lineNr);
+ iLog->Log(buffe);
+ iLog->Log(correctLine);
+ iLog->Log(line);
+ iErrorsFound++;
+ }
+ }
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::TestLongCollectionFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::TestLongCollectionFieldsL(TBool aUseFile)
+ {
+ iLog->Log(_L("TestLongCollectionFieldsL"));
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ CBufBase* myEncoderBuffer = NULL;
+ HBufC8* filecontent = NULL;
+
+ if (aUseFile)
+ {
+ // 2) Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KFileLongCollectionFieldName);
+ }
+ else
+ {
+ // 2) Use buffer for encoding
+ myEncoderBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ CleanupStack::PushL(myEncoderBuffer);
+ }
+
+ // 300 characters
+ _LIT(KLongFieldName, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
+ _LIT(KLongFieldDescription, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
+
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, KLongFieldName);
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, KLongFieldDescription);
+
+ iLog->Log(_L("Create Data..."));
+ // 3) Add one landmark to be encoded (id7 name "Billigt" in categories 1-3,14-17)
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(7);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ // Remove field 408 which is not exported
+ lm1->RemovePositionField(408);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+ // 4) Add one more landmark to be encoded (id27 "LOG9" in categories 11-17)
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(27);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 5) Add one category (pizzeria) to the latest added landmark
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(1);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ // 6) Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ // Check data
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+ if (aUseFile)
+ {
+ iLog->Log(_L("----->Using FILE<-------"));
+ iLandmarkParser->SetInputFileL(KFileLongCollectionFieldName);
+ }
+ else
+ {
+ iLog->Log(_L("----->Using BUFFER<-------"));
+ filecontent = HBufC8::NewLC(myEncoderBuffer->Size());
+ TPtr8 ptr = filecontent->Des();
+ myEncoderBuffer->Read(0, ptr, myEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*filecontent);
+ ptr.Zero();
+ }
+
+ iLog->Log(_L("ParseContentL"));
+ iOperation = iLandmarkParser->ParseContentL();
+ iLog->Log(_L("ParseContentL Done"));
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ // 1) Get the first landmark, "Billigt", no categories
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 0, _L("Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ iLog->Log(_L("----->CollectionData"));
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+ // First should be name
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ if (first.Compare(KLongFieldName) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong name!!"));
+ iErrorsFound++;
+ }
+
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ TPtrC next = iLandmarkParser->CollectionData(lmId);
+ if (next.Compare(KLongFieldDescription) != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Wrong description!!"));
+ iErrorsFound++;
+ }
+
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ iLog->Log(_L("ERROR: Wrong description!!"));
+ iErrorsFound++;
+ }
+
+
+ iLog->Log(_L("<-----CollectionData"));
+ CleanupStack::PopAndDestroy(&array);
+ if (!aUseFile)
+ {
+ CleanupStack::PopAndDestroy(filecontent);
+ myEncoderBuffer->Reset();
+ CleanupStack::PopAndDestroy(myEncoderBuffer);
+ }
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLog->Log(_L("TestLongCollectionFieldsL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::TestErrorScenariosL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::TestErrorScenariosL()
+ {
+ iLog->Log(_L("TestErrorScenariosL"));
+
+ TInt err = KErrNone;
+ TRAP(err, ErrorScenario1L());
+ if (err != KErrAlreadyExists) //LogErrorAndLeave(_L("ErrorScenario1L did not leave with error KErrAlreadyExists"));
+ {
+ iLog->Log(_L(" ErrorScenario1L did not leave with error KErrAlreadyExists"));
+ User::Leave(err);
+ }
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ DeleteFileL(KErrorTestFileName);
+
+ ErrorScenario2L();
+ DeleteFileL(KErrorTestFileName);
+
+ TRAP(err, ErrorScenario3L());
+ if (err != KErrAlreadyExists)// LogErrorAndLeave(_L("ErrorScenario3L did not leave with error KErrAlreadyExists"));
+ {
+ iLog->Log(_L(" ErrorScenario3L did not leave with error KErrAlreadyExists"));
+ User::Leave(err);
+ }
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ DeleteFileL(KErrorTestFileName);
+
+ TRAP(err, ErrorScenario4L());
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("ERROR: Adding meta data \"out-of-range\" should be silently ignored, instead leave error"));
+ iErrorsFound++;
+ }
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ DeleteFileL(KErrorTestFileName);
+
+ ErrorScenario5L();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp43::ErrorScenario1L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::ErrorScenario1L()
+ {
+ iLog->Log(_L("ErrorScenario1L"));
+
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+
+ RFile file;
+ CleanupClosePushL(file);
+
+ // Make sure that file exist
+ TInt err = file.Replace(iFileSession, KErrorTestFileName, EFileShareAny);
+ if (err != KErrNone)
+ {
+ iLog->Log(_L("Error when replacing file "));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+
+ // 2) Use file for encoding, set output file should leave
+ iLandmarkEncoder->SetOutputFileL(KErrorTestFileName);
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+}
+
+// ---------------------------------------------------------
+// CPosTp43::ErrorScenario2L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::ErrorScenario2L()
+ {
+ iLog->Log(_L("ErrorScenario2L"));
+
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // 2) Use file for encoding, set output file
+ DeleteFileL(KErrorTestFileName);
+ iLandmarkEncoder->SetOutputFileL(KErrorTestFileName);
+
+ RFile file;
+ CleanupClosePushL(file);
+
+ // Make sure that file exist
+ TInt err = file.Open(iFileSession, KErrorTestFileName, EFileShareAny);
+ if (err != KErrInUse) //LogErrorAndLeave(_L("File should not be able to open"));
+ {
+ iLog->Log(_L("File should not be able to open"));
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(&file);
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+}
+
+// ---------------------------------------------------------
+// CPosTp43::ErrorScenario3L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::ErrorScenario3L()
+ {
+ iLog->Log(_L("ErrorScenario3L"));
+
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // 2) Use file for encoding, set output file
+ DeleteFileL(KErrorTestFileName);
+ iLandmarkEncoder->SetOutputFileL(KErrorTestFileName);
+
+ // AddCollectionDataL(id) with same id twice should leave
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("A yada yada collextion of landmarks"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("Another yada yada collextion of landmarks"));
+
+ // We should never get here
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+}
+
+// ---------------------------------------------------------
+// CPosTp43::ErrorScenario4L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::ErrorScenario4L()
+ {
+ iLog->Log(_L("ErrorScenario4L"));
+
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // 2) Use file for encoding, set output file
+ DeleteFileL(KErrorScenario4File);
+ iLandmarkEncoder->SetOutputFileL(KErrorScenario4File);
+
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("A yada yada name for landmarks"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("A yada yada description for landmarks"));
+
+ // Will be silently ignored
+ iLandmarkEncoder->AddCollectionDataL((TPosLmCollectionDataId)5, _L("A dummy string"));
+
+ TInt pos = EPosLmCollDataContentSpecificDataBegin;
+ _LIT(KFormatString, "Dummmmmmmmmmmy string: %d");
+ TBuf<100> buf;
+
+ for (TInt i=0;i<10;i++)
+ {
+ buf.Format(KFormatString, pos);
+ iLog->Log(buf);
+ // Will be silently ignored
+ iLandmarkEncoder->AddCollectionDataL((TPosLmCollectionDataId)pos, buf);
+ pos++;
+ }
+
+ // Will be silently ignored
+ iLog->Log(_L("Adding the last meta data collection allowed"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataLast, _L("The last dummy string"));
+ iLog->Log(_L("After adding the last meta data collection allowed"));
+
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(7);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+}
+
+// ---------------------------------------------------------
+// CPosTp43::ErrorScenario5L
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::ErrorScenario5L()
+ {
+ iLog->Log(_L("ErrorScenario5L"));
+
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // 2) Use file for encoding, set output file
+ DeleteFileL(KErrorScenario5File);
+ iLandmarkEncoder->SetOutputFileL(KErrorScenario5File);
+
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("A yada yada name for landmarks"));
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("</lm:lmx>"));
+
+ CPosLandmark* lm1 = CreateXMLLandmarkLC(_L("</lm:lmx>"));
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+
+ lm1 = CreateXMLLandmarkLC(_L("</lm:lmx>"));
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ CleanupStack::PopAndDestroy(lm1);
+
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+}
+
+// ---------------------------------------------------------
+// CPosTp43::TestWithLongFileNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp43::TestWithLongFileNameL()
+ {
+ iLog->Log(_L("TestWithLongFileNameL"));
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ TInt errorsFound = KErrNone;
+
+ // 2) Set file with long filename (more than 255 characters)
+ TRAPD(err, iLandmarkEncoder->SetOutputFileL(KLongFileName));
+
+
+
+ if ( err != KErrBadName )
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ERROR: SetInputFileL should leave with KErrBadName, instead err: %d"), err);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+
+
+ // 3) Set file to 0 characters
+ TRAP(err, iLandmarkEncoder->SetOutputFileL(KEmptyFileName));
+ if (err != KErrBadName)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ERROR: SetOutputFileL(KEmptyFileName) should leave with KErrBadName, instead err: %d"), err);
+ iLog->Log(buf);
+ errorsFound++;
+ }
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ // Try to create an encoder with the long file name, should leave with KErrNotSupported
+ TRAP(err, CPosLandmarkEncoder::NewL(KLongMimeType));
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("CPosLandmarkEncoder::NewL should leave with KErrNotSupported"));
+ User::Leave(err);
+ }
+
+ if (errorsFound != KErrNone)
+ {
+ iLog->Log(_L("SetOutputFileL leaved with wrong error code"));
+ User::Leave(-1);
+
+ }
+
+
+
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp44.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,730 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp44.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <e32std.h>
+#include <bautils.h>
+
+_LIT8(KNonExistingMimeType1, "Application/vnd.nokia.landmarkcollection+xml");
+_LIT8(KNonExistingMimeType2, "application/vnd.nokia.kokoibollen");
+_LIT8(KEmptyMimeType, "");
+_LIT(KFileName, "c:\\documents\\SomeDummyFile.xml");
+_LIT(KFileName2, "c:\\documents\\SomeDummyFile2.xml");
+_LIT(KFileName3, "c:\\documents\\SomeDummyFile3.xml");
+_LIT(KFileName4, "c:\\documents\\SomeDummyFile4.xml");
+_LIT(KFileName5, "c:\\documents\\SomeDummyFile5.xml");
+_LIT(KFileName6, "c:\\documents\\SomeDummyFile6.xml");
+_LIT(KFileName7, "c:\\documents\\SomeDummyFile7.xml");
+_LIT(KFileName8, "c:\\documents\\SomeDummyFile8.xml");
+_LIT(KFileName9, "c:\\documents\\SomeDummyFile9.xml");
+_LIT(KFileName9a, "c:\\documents\\SomeDummyFile9a.xml");
+_LIT(KFileName10, "c:\\documents\\SomeDummyFile10.xml");
+_LIT(KFileName11, "c:\\documents\\SomeDummyFile11.xml");
+_LIT(KFileName12, "c:\\documents\\SomeDummyFile12.xml");
+_LIT(KFileName13, "c:\\documents\\SomeDummyFile13.xml");
+_LIT(KFileName14, "c:\\documents\\SomeDummyFile14.xml");
+_LIT(KFileName15, "c:\\documents\\SomeDummyFile15.xml");
+_LIT(KFileName16, "c:\\documents\\SomeDummyFile16.xml");
+_LIT(KFileName17, "c:\\documents\\SomeDummyFile17.xml");
+_LIT(KFileName18, "c:\\documents\\SomeDummyFile18.xml");
+
+
+
+// More than 255 characters
+_LIT(KLongFileName, "c:\\SomeDummeFilewithVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongVeryLongFileName.xml");
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp44::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp44::StartL()
+ {
+
+ BaflUtils::EnsurePathExistsL( iFileSession, KFileName );
+
+ MakeSurePanicDebugFileExistsL();
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ // <<<<<<<<<<<<<<Panic testing below>>>>>>>>>>>>>>>>>>>
+ iLog->Log(_L(">>>>>>>Start Panic test<<<<<<<<<"));
+
+ iExpectedExitType = ExitPanic;
+ // Add collection data after landmarks has been added to encoder
+ iLog->Log(_L("Panic test 1"));
+// DeleteFileL(KFileName);
+ iTestCase = 1;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ ResumeThreadAndVerifyExit();
+
+ // Add collection data after landmarks has been added to encoder
+ iLog->Log(_L("Panic test 2"));
+ //DeleteFileL(KFileName);
+ iTestCase = 2;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ ResumeThreadAndVerifyExit();
+
+ // Try to use encoder after finalization
+ iLog->Log(_L("Panic test 3"));
+ //DeleteFileL(KFileName);
+ iTestCase = 3;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ ResumeThreadAndVerifyExit();
+
+ // 4 The client deletes the operation object before the encoding has been
+ // finalized and then tries to use the encoder object.Should cause Panic and FileLock should have been released
+ iLog->Log(_L("Panic test 4"));
+ //DeleteFileL(KFileName);
+ iTestCase = 4;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ ResumeThreadAndVerifyExit();
+ // Check that fileLock has been released
+ RFile file;
+ CleanupClosePushL(file);
+ // Make sure that file exist
+ TInt err = file.Open(iFileSession, KFileName, EFileShareAny);
+ if (err != KErrNone) //LogErrorAndLeave(_L("File should be able to open"));
+ {
+ iLog->Log(_L("File should be able to open"));
+ User::Leave(err);
+
+ }
+ CleanupStack::PopAndDestroy(&file);
+ iLog->Log(_L("FileLock has been released"));
+
+ // 5 The client tries to specify a collection id already added. Should cause a leave with -11
+ iLog->Log(_L("Leave test 5"));
+// DeleteFileL(KFileName);
+ iTestCase = 5;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrAlreadyExists;
+ ResumeThreadAndVerifyExit();
+
+ // 6 The client tries to specify a mime type that does not exist. Should cause a leave with KErrNotSupported
+ iLog->Log(_L("Leave test 6"));
+// DeleteFileL(KFileName);
+ iTestCase = 6;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrNotSupported;
+ ResumeThreadAndVerifyExit();
+
+ // 7 The client tries to specify a output file that already exists. Shoule leave with KErrAlreadyExists
+ iLog->Log(_L("Leave test 7"));
+ iTestCase = 7;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrAlreadyExists;
+ ResumeThreadAndVerifyExit();
+
+ // 8 The client only specifies a collection and then finalize the encoding.
+ iLog->Log(_L("Panic test 8"));
+// DeleteFileL(KFileName);
+ iTestCase = 8;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ ResumeThreadAndVerifyExit();
+
+ // 9a Export landmark with nonexisting id (positive id), should leave with KErrNotFound
+ iLog->Log(_L("Panic test 9a"));
+// DeleteFileL(KFileName);
+ iTestCase = 9;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrNotFound;
+ ResumeThreadAndVerifyExit();
+
+ // 9b Export landmark with nonexisting id (negative id), should leave with KErrNotFound
+ iLog->Log(_L("Leave test 9b"));
+// DeleteFileL(KFileName);
+ iTestCase = 10;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrNotFound;
+ ResumeThreadAndVerifyExit();
+
+ // 10 Delete export object before completion and then finalize
+ iLog->Log(_L("Leave test 10"));
+// DeleteFileL(KFileName);
+ iTestCase = 11;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrNone;
+ ResumeThreadAndVerifyExit();
+
+ // 11 The client creates an encoder and by using the Landmark API
+ // tries to export landmarks with invalid transfer option. Should cause Panic
+ iLog->Log(_L("Panic test 11"));
+// DeleteFileL(KFileName);
+ iTestCase = 12;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosLmInvalidArgument;
+ ResumeThreadAndVerifyExit();
+
+ // 12 The client creates an encoder by using the file option and
+ // adds some landmarks but instead of finalizing the encoding a new file is set.
+ iLog->Log(_L("Leave test 12"));
+// DeleteFileL(KFileName);
+// DeleteFileL(KFileName2);
+ iTestCase = 13;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrNone;
+ ResumeThreadAndVerifyExit();
+
+ // 13 The client creates an encoder by using the file option and
+ // adds a collection data with EPosLmCollDataNone, should Panic with EPosLmInvalidArgument
+ iLog->Log(_L("Leave test 13"));
+// DeleteFileL(KFileName);
+// DeleteFileL(KFileName2);
+ iTestCase = 14;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosLmInvalidArgument;
+ ResumeThreadAndVerifyExit();
+
+ // 14 The client tries to specify a mime type that does not exist. Should cause a leave with KErrNotSupported
+ // the mime type name is similar to KLmxMimeType but contains capital letters
+ iLog->Log(_L("Leave test 14"));
+// DeleteFileL(KFileName);
+ iTestCase = 15;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrNotSupported;
+ ResumeThreadAndVerifyExit();
+
+ // 15 The client creates an encoder and by using the Landmark API
+ // tries to export landmarks with invalid transfer option. Should cause Panic
+ iLog->Log(_L("Panic test 15"));
+// DeleteFileL(KFileName);
+ iTestCase = 16;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosLmInvalidArgument;
+ ResumeThreadAndVerifyExit();
+
+ // 16 Export landmark with empty subset of ids, should leave with KErrArgument
+ iLog->Log(_L("Leave test 16"));
+// DeleteFileL(KFileName);
+ iTestCase = 17;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrArgument;
+ ResumeThreadAndVerifyExit();
+
+#if 0
+ // 17 Try to create encoder with empty mime type
+ // TE: the REComSession::CreateImplementationL( leaves with KErrArgument which I think is acceptable
+ // Nokia: This is not part of API definition, case removed
+ iLog->Log(_L("Leave test 17"));
+// DeleteFileL(KFileName);
+ iTestCase = 18;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrArgument;
+ ResumeThreadAndVerifyExit();
+#endif
+
+#ifdef __WINS__
+ // 18 Try to create encoder with a very long file name and export one landmark
+ iLog->Log(_L("Leave test 18"));
+ iTestCase = 19;
+
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrBadName;
+
+ ResumeThreadAndVerifyExit();
+#endif
+ iLog->Log(_L(">>>>>>>Panic test Done<<<<<<<<<"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp44::ResumeThreadAndVerifyExit
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp44::ResumeThreadAndVerifyExit()
+ {
+ iLog->Log(_L("ResumeThreadAndVerifyExit"));
+ _LIT(KPanicErr, "Method didn't Panic when expected");
+ _LIT(KPanicCodeErr, "Paniced with unexpected panic code");
+ _LIT(KLeaveErr, "Method didn't end correctly");
+ _LIT(KLeaveCodeErr, "Unexpected leave error");
+
+ CreateThreadL();
+ TRequestStatus status;
+ iThread.Logon(status);
+ iThread.Resume();
+ User::WaitForRequest(status);
+
+
+ // Used for debugging
+ TBuf<100> buf;
+ buf.Format(_L("ExitType %d Exit reason %d"), iThread.ExitType(), iThread.ExitReason());
+ iLog->Log(buf);
+
+ if (iExpectedExitType == ExitPanic)
+ {
+ AssertTrueSecL(iThread.ExitType() == EExitPanic, KPanicErr);
+ AssertTrueSecL(iThread.ExitReason() == iExpectedErrorCode, KPanicCodeErr);
+ }
+ else if (iExpectedExitType == ExitLeave)
+ {
+ AssertTrueSecL(iThread.ExitType() == EExitKill, KLeaveErr);
+ AssertTrueSecL(iThread.ExitReason() == iExpectedErrorCode, KLeaveCodeErr);
+ }
+
+ iThread.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp44::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp44::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iThread.Close();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp44::DeleteEncoderCallback
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp44::DeleteEncoderCallback(TAny* aSelf)
+ {
+ CPosLandmarkEncoder* encoder = static_cast<CPosLandmarkEncoder*>(aSelf);
+ delete encoder;
+ return 0;
+ }
+
+// ---------------------------------------------------------
+// CPosTp44::RunPanicTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp44::RunPanicTestL(TAny* aData)
+ {
+ CPosTp44* self = reinterpret_cast<CPosTp44*>(aData);
+
+ if (self->iTestCase == 1)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder *landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName);
+ // Add landmark to be encoded
+ CPosLandmark* lm = database->ReadLandmarkLC(1);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ // Add one more landmark to be encoded
+ lm = database->ReadLandmarkLC(2);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ // Add collection data after that landmarks has been added, should cause Panic
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 2)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName3);
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*database);
+ CleanupStack::PushL(categoryManager);
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(1);
+ // Add one category when no landmark has been addded , should cause Panic
+ landmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+ else if (self->iTestCase == 3)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName4);
+ // Add landmark to be encoded
+ CPosLandmark* lm = database->ReadLandmarkLC(1);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ // Finalize
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ // Try to use encoder after finalization, should cause Panic
+ lm = database->ReadLandmarkLC(2);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else if (self->iTestCase == 4)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName5);
+ // Add landmark to be encoded
+ CPosLandmark* lm = database->ReadLandmarkLC(1);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ // Finalize
+ CPosLmOperation* op = landmarkEncoder->FinalizeEncodingL();
+ delete op;
+ op = NULL;
+ // Try to use encoder after deletion of object, should cause Panic
+ lm = database->ReadLandmarkLC(2);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else if (self->iTestCase == 5)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName6);
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ // Add same collection data again, should cause leave
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName2"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 6)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create encoder with invalid MIME type, should leave with KErrNotSupported
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KNonExistingMimeType2);
+ landmarkEncoder->SetOutputFileL(KFileName7);
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 7)
+ {
+ RFs fs;
+ RFile file;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ CleanupClosePushL(file);
+
+ // Make sure that file exist
+ TInt err = file.Create(fs, KFileName8, EFileShareAny);
+ // Should never happen
+ if (err != KErrNone) User::Leave(666);
+
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&fs);
+
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use same file for encoding, set output file should leave
+ landmarkEncoder->SetOutputFileL(KFileName8);
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 8)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName9);
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ // Finalize without adding any landmarks, should cause panic
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 9 || self->iTestCase == 10)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ if(self->iTestCase == 9)
+ landmarkEncoder->SetOutputFileL(KFileName9a);
+ if(self->iTestCase == 10)
+ landmarkEncoder->SetOutputFileL(KFileName10);
+
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ arr.Append(1);
+ arr.Append(15);
+ arr.Append(21);
+ arr.Append(38);
+ arr.Append(32);
+ arr.Append(12);
+
+ if (self->iTestCase == 9)
+ {
+ // 9a
+ // Should never exist
+ arr.Append(666);
+ }
+ else if (self->iTestCase == 10)
+ {
+ // 9b
+ // Should never exist,
+ TInt dummy = -666;
+ arr.Append(dummy);
+ }
+ // Should leave with KErrNotFound
+ ExecuteAndDeleteLD(database->ExportLandmarksL(*landmarkEncoder, arr, CPosLandmarkDatabase::EDefaultOptions));
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 11)
+ {
+ // Delete export object before completion and then finalize
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName11);
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ arr.Append(1);
+ arr.Append(15);
+ arr.Append(21);
+ arr.Append(38);
+ arr.Append(32);
+ arr.Append(12);
+
+ // Delete encoder from callback
+ TCallBack callback(DeleteEncoderCallback, landmarkEncoder);
+ CPeriodic* periodicTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ CleanupStack::PushL(periodicTimer);
+ periodicTimer->Start(1, 1, callback);
+
+ ExecuteAndDeleteLD(database->ExportLandmarksL(*landmarkEncoder, arr, CPosLandmarkDatabase::EDefaultOptions));
+ // Try to FinalizeEncodingL
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+
+ CleanupStack::PopAndDestroy(periodicTimer);
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 12)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName12);
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ arr.Append(1);
+ arr.Append(15);
+ arr.Append(21);
+ arr.Append(38);
+ arr.Append(32);
+ arr.Append(12);
+
+ // Export with invalid transfer options, should panic
+ ExecuteAndDeleteLD(database->ExportLandmarksL(*landmarkEncoder, arr, 666));
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 13)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ CleanupStack::PushL(landmarkEncoder);
+ landmarkEncoder->SetOutputFileL(KFileName13);
+ // Add landmark to be encoded
+ CPosLandmark* lm = database->ReadLandmarkLC(1);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ // Set new output file instead of finalization
+ landmarkEncoder->SetOutputFileL(KFileName2);
+
+ // Check that filelock has been released
+ RFs fs;
+ RFile file;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+ CleanupClosePushL(file);
+ // Make sure that file exist
+ TInt err = file.Open(fs, KFileName13, EFileShareAny);
+ if (err != KErrNone) User::Leave(667);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&fs);
+
+ // Add landmark to be encoded
+ lm = database->ReadLandmarkLC(11);
+ landmarkEncoder->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+ // Finalize
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 14)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ CleanupStack::PushL(landmarkEncoder);
+ landmarkEncoder->SetOutputFileL(KFileName14);
+ // Add collection data of type EPosLmCollDataNone, should panic
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataNone, _L("TP44CollectionDataName"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 15)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create encoder with invalid MIME type, should leave with KErrNotSupported
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KNonExistingMimeType1);
+ landmarkEncoder->SetOutputFileL(KFileName15);
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 16)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName16);
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+ arr.Append(1);
+ arr.Append(15);
+ arr.Append(21);
+ arr.Append(38);
+ arr.Append(32);
+ arr.Append(12);
+
+ // Export with invalid transfer options, should panic
+ ExecuteAndDeleteLD(database->ExportLandmarksL(*landmarkEncoder, arr, 0x04));
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 17)
+ {
+ // Export with empty landmark array
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName17);
+ // Add collection data
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+
+ RArray<TPosLmItemId> arr;
+ CleanupClosePushL(arr);
+
+ ExecuteAndDeleteLD(database->ExportLandmarksL(*landmarkEncoder, arr, CPosLandmarkDatabase::EDefaultOptions));
+ ExecuteAndDeleteLD(landmarkEncoder->FinalizeEncodingL());
+ CleanupStack::PopAndDestroy(&arr);
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 18)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create encoder with empty MIME type, should leave with KErrArgument
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KEmptyMimeType);
+ landmarkEncoder->SetOutputFileL(KFileName18);
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 19)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create encoder with long file name, should leave with KErrBadName
+ CPosLandmarkEncoder* landmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Should leave here
+ landmarkEncoder->SetOutputFileL(KLongFileName);
+ landmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("TP44CollectionDataName"));
+ CleanupStack::PopAndDestroy(landmarkEncoder);
+ CleanupStack::PopAndDestroy(database);
+ }
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp44::RunPanicTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp44::CreateThreadL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp44::CreateThreadL()
+ {
+ _LIT(KThreadName, "Tp44testthread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+ TBuf<100> buf;
+ buf.Format(KThreadName, iTestCase);
+
+ TInt err=0;
+ err = iThread.Create(buf, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp45.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,805 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp45.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <bautils.h>
+
+
+// CONSTANTS
+const TInt KNoCategoriesTp45 = 100;
+// Filename with 260 characters
+_LIT(KLongFileName, "c:\\File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File12");
+// Filename with 264 characters
+_LIT(KLongFileName2, "c:\\File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File12.txt");
+
+_LIT(KDefaultOptions, "c:\\system\\test\\testdata\\TP45-DefOptions.xml");
+_LIT(KInclCategories, "c:\\system\\test\\testdata\\TP45-IncCategories.xml");
+_LIT(KExclCategories, "c:\\system\\test\\testdata\\TP45-ExcCategories.xml");
+_LIT(KOneLandmark, "c:\\system\\test\\testdata\\TP45-OneLandmark.xml");
+_LIT(KTwoLandmarks, "c:\\system\\test\\testdata\\TP45-TwoLandmarks.xml");
+_LIT(KTwoLandmarksWithColData, "c:\\system\\test\\testdata\\TP45-TwoLandmarksWithCollData.xml");
+
+_LIT(KFileSync, "c:\\documents\\TP45-DefOptions.xml");
+_LIT(KFileInc, "c:\\documents\\TP45-DefOptionsInc.xml");
+_LIT(KFileWait4Req, "c:\\documents\\TP45-DefOptionsWait4Req.xml");
+_LIT(KBufferSync, "c:\\documents\\TP45-DefOptionsBuffer.xml");
+_LIT(KBufferInc, "c:\\documents\\TP45-DefOptionsBufferInc.xml");
+_LIT(KBufferWait4Req, "c:\\documents\\TP45-DefOptionsBufferWait4Req.xml");
+
+_LIT(KFileSync2, "c:\\documents\\TP45-IncCategories.xml");
+_LIT(KFileInc2, "c:\\documents\\TP45-IncCategoriesInc.xml");
+_LIT(KFileWait4Req2, "c:\\documents\\TP45-IncCategoriesWait4Req.xml");
+_LIT(KBufferSync2, "c:\\documents\\TP45-IncCategoriesBuffer.xml");
+_LIT(KBufferInc2, "c:\\documents\\TP45-IncCategoriesBufferInc.xml");
+_LIT(KBufferWait4Req2, "c:\\documents\\TP45-IncCategoriesBufferWait4Req.xml");
+
+_LIT(KFileSync3, "c:\\documents\\TP45-ExcCategories.xml");
+_LIT(KFileInc3, "c:\\documents\\TP45-ExcCategoriesInc.xml");
+_LIT(KFileWait4Req3, "c:\\documents\\TP45-ExcCategoriesWait4Req.xml");
+_LIT(KBufferSync3, "c:\\documents\\TP45-ExcCategoriesBuffer.xml");
+_LIT(KBufferInc3, "c:\\documents\\TP45-ExcCategoriesBufferInc.xml");
+_LIT(KBufferWait4Req3, "c:\\documents\\TP45-ExcCategoriesBufferWait4Req.xml");
+
+_LIT(KFileSync4, "c:\\documents\\TP45-OneLandmark.xml");
+_LIT(KFileInc4, "c:\\documents\\TP45-OneLandmarkInc.xml");
+_LIT(KFileWait4Req4, "c:\\documents\\TP45-OneLandmarkWait4Req.xml");
+
+_LIT(KFileSync5, "c:\\documents\\TP45-TwoLandmarks.xml");
+_LIT(KFileInc5, "c:\\documents\\TP45-TwoLandmarksInc.xml");
+_LIT(KFileWait4Req5, "c:\\documents\\TP45-TwoLandmarksWait4Req.xml");
+
+_LIT(KFileSync6, "c:\\documents\\TP45-TwoLandmarksWithCollData.xml");
+
+_LIT(KFileCancelled, "c:\\documents\\TP45-Cancelled.xml");
+
+_LIT(KFileCancelledInCallback, "c:\\documents\\TP45-CancelledInCallback.xml");
+
+_LIT(KTmpFile, "c:\\documents\\TMP.xml");
+
+//const TPosLmItemId KGlobalCategoryId = 2;
+//const TPosLmItemId KGlobalCategoryId2 = 4;
+const TPosLmItemId KGlobalCategoryId = 5;
+const TPosLmItemId KGlobalCategoryId2 = 9;
+
+const TPosLmItemId KLandmarkId = 3;
+const TPosLmItemId KLandmarkId2 = 1;
+
+const TInt KMaxCancelled = 10;
+
+const TInt KMaxCancelledInCallback = 50;
+
+_LIT(KCollectionName, "TP45-CollectionName");
+_LIT(KCollectionDes, "TP45-Description");
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp45::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iDatabase;
+ delete iLandmarkEncoder;
+ delete iBuffer;
+
+ // Added for BC testing
+ delete iCategoryManager;
+ iGlobalCategoryIds.Close();
+ iGlobalCategoryNames.Close();
+ iGlobalCategoryTestNames.Close();
+
+ iCategories.ResetAndDestroy();
+ iCategories.Close();
+ RemoveGlobalCategoriesL();
+ }
+// ---------------------------------------------------------
+// CPosTp45::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KTmpFile );
+
+ RemoveDefaultDbL();
+ RemoveGlobalCategoriesL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ // Setup global category info
+ SetupGlobalCategoriesL();
+
+ AddLandmarksL();
+ AddCategoriesL();
+
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+
+ TestErrorCodesL();
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ iLogToFile = ETrue;
+ TBool useWaitForRequest = ETrue;
+
+// Exporting all landmarks to file
+ iLog->Log(_L("Exporting all landmarks syncronously to file"));
+ ExportLandmarksL(KFileSync, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+
+ iLog->Log(_L("Exporting all landmarks incrementally to file"));
+ ExportLandmarksIncL(KFileInc, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, !useWaitForRequest);
+
+ iLog->Log(_L("Exporting all landmarks incrementally using User::WaitForRequest() to file"));
+ ExportLandmarksIncL(KFileWait4Req, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, useWaitForRequest);
+
+ RenameGlobalCategoryL();
+
+// Exporting with global cateogries to file
+ iLog->Log(_L("Exporting all landmarks with global categories names syncronously to file"));
+ ExportLandmarksL(KFileSync2, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories |
+ CPosLandmarkDatabase::EIncludeGlobalCategoryNames);
+
+ iLog->Log(_L("Exporting all landmarks with global categories names incrementally to file"));
+ ExportLandmarksIncL(KFileInc2, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories |
+ CPosLandmarkDatabase::EIncludeGlobalCategoryNames,
+ !useWaitForRequest);
+
+ iLog->Log(_L("Exporting all landmarks with global categories names incrementally using User::WaitForRequest() to file"));
+ ExportLandmarksIncL(KFileWait4Req2, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories |
+ CPosLandmarkDatabase::EIncludeGlobalCategoryNames,
+ useWaitForRequest);
+
+// Exporting without global cateogries to file
+ iLog->Log(_L("Exporting all landmarks with categories exc. global categories syncronously to file"));
+ ExportLandmarksL(KFileSync3, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories);
+
+ iLog->Log(_L("Exporting all landmarks with categories exc. global categories incrementally to file"));
+ ExportLandmarksIncL(KFileInc3, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories, !useWaitForRequest);
+
+ iLog->Log(_L("Exporting all landmarks with categories exc. global categories incrementally using User::WaitForRequest() to file"));
+ ExportLandmarksIncL(KFileWait4Req3, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories, useWaitForRequest);
+
+ iLogToFile = EFalse;
+
+// Exporting all landmarks to buffer
+ iLog->Log(_L("Exporting all landmarks syncronously to buffer"));
+ ExportLandmarksL(KBufferSync, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+
+ iLog->Log(_L("Exporting all landmarks incrementally to buffer"));
+ ExportLandmarksIncL(KBufferInc, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, !useWaitForRequest);
+
+ iLog->Log(_L("Exporting all landmarks incrementally using User::WaitForRequest() to buffer"));
+ ExportLandmarksIncL(KBufferWait4Req, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, useWaitForRequest);
+
+// Exporting all landmarks with global categories to buffer
+ iLog->Log(_L("Exporting all landmarks with global categories names syncronously to buffer"));
+ ExportLandmarksL(KBufferSync2, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories |
+ CPosLandmarkDatabase::EIncludeGlobalCategoryNames);
+
+ iLog->Log(_L("Exporting all landmarks with global categories names incrementally to buffer"));
+ ExportLandmarksIncL(KBufferInc2, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories |
+ CPosLandmarkDatabase::EIncludeGlobalCategoryNames,
+ !useWaitForRequest);
+
+ iLog->Log(_L("Exporting all landmarks with global categories names incrementally using User::WaitForRequest() to buffer"));
+ ExportLandmarksIncL(KBufferWait4Req2, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories |
+ CPosLandmarkDatabase::EIncludeGlobalCategoryNames,
+ useWaitForRequest);
+
+// Exporting all landmarks with global categories to buffer
+ iLog->Log(_L("Exporting all landmarks with categories exc. global categories syncronously to buffer"));
+ ExportLandmarksL(KBufferSync3, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories);
+
+ iLog->Log(_L("Exporting all landmarks with categories exc. global categories incrementally to buffer"));
+ ExportLandmarksIncL(KBufferInc3, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories, !useWaitForRequest);
+
+ iLog->Log(_L("Exporting all landmarks with categories exc. global categories incrementally using User::WaitForRequest() to buffer"));
+ ExportLandmarksIncL(KBufferWait4Req3, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories, useWaitForRequest);
+
+ iLogToFile = ETrue;
+ CleanupStack::PopAndDestroy(iter);
+ arrayOfIds.Reset();
+
+// Exporting one landmark to file
+ arrayOfIds.Append(KLandmarkId);
+ iLog->Log(_L("Exporting one landmark syncronously to file"));
+ ExportLandmarksL(KFileSync4, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+
+ iLog->Log(_L("Exporting one landmark syncronously to file incrementally"));
+ ExportLandmarksIncL(KFileInc4, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, !useWaitForRequest);
+
+ iLog->Log(_L("Exporting one landmark syncronously to file incrementally using User::WaitForRequest()"));
+ ExportLandmarksIncL(KFileWait4Req4, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, useWaitForRequest);
+
+// Exporting two landmarks to file
+ arrayOfIds.Append(KLandmarkId2);
+ iLog->Log(_L("Exporting two landmark syncronously to file"));
+ ExportLandmarksL(KFileSync5, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+
+ iLog->Log(_L("Exporting two landmark syncronously to file incrementally"));
+ ExportLandmarksIncL(KFileInc5, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, !useWaitForRequest);
+
+ iLog->Log(_L("Exporting two landmark syncronously to file incrementally using User::WaitForRequest()"));
+ ExportLandmarksIncL(KFileWait4Req5, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions, useWaitForRequest);
+
+// Exporting landmarks with collection data
+ iLog->Log(_L("Exporting landmarks with collection data added to the encoder"));
+ ExportWithCollectionDataL(arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+
+ iLog->Log(_L("Compares the created XML files with saved correct ones"));
+
+ TInt errors = 0;
+
+ errors += CompareL(KDefaultOptions, KFileSync);
+ errors += CompareL(KDefaultOptions, KFileInc);
+ errors += CompareL(KDefaultOptions, KFileWait4Req);
+ errors += CompareL(KDefaultOptions, KBufferSync);
+ errors += CompareL(KDefaultOptions, KBufferInc);
+ errors += CompareL(KDefaultOptions, KBufferWait4Req);
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KInclCategories, filename );
+ errors += CompareL(filename, KFileSync2);
+ errors += CompareL(filename, KFileInc2);
+ errors += CompareL(filename, KFileWait4Req2);
+ errors += CompareL(filename, KFileInc2);
+ errors += CompareL(filename, KBufferSync2);
+ errors += CompareL(filename, KBufferInc2);
+ errors += CompareL(filename, KBufferWait4Req2);
+
+ CreateCorrectXmlFileL( KExclCategories, filename );
+ errors += CompareL(filename, KFileSync3);
+ errors += CompareL(filename, KFileInc3);
+ errors += CompareL(filename, KFileWait4Req3);
+ errors += CompareL(filename, KBufferSync3);
+ errors += CompareL(filename, KBufferInc3);
+ errors += CompareL(filename, KBufferWait4Req3);
+
+ errors += CompareL(KOneLandmark, KFileSync4);
+ errors += CompareL(KOneLandmark, KFileInc4);
+ errors += CompareL(KOneLandmark, KFileWait4Req4);
+
+ errors += CompareL(KTwoLandmarks, KFileSync5);
+ errors += CompareL(KTwoLandmarks, KFileInc5);
+ errors += CompareL(KTwoLandmarks, KFileWait4Req5);
+
+ errors += CompareL(KTwoLandmarksWithColData, KFileSync6);
+
+ if (errors > 0)
+ {
+ errors = errors / KErrGeneral;
+ }
+
+ AssertTrueSecL(errors == 0, _L("%d file(s) are not equal"), errors);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L("Exports landmarks and cancels the operation"));
+ ExportAndCancelL(KFileCancelled, EFalse, CPosLandmarkDatabase::EDefaultOptions);
+
+ iLog->Log(_L("Exports landmarks and cancels the operation in a callback"));
+ ExportAndCancelL(KFileCancelledInCallback, ETrue, CPosLandmarkDatabase::EDefaultOptions);
+
+ VerifyCancelL(KFileCancelled, KMaxCancelled);
+
+ VerifyCancelL(KFileCancelledInCallback, KMaxCancelledInCallback);
+
+ CleanupStack::PopAndDestroy(&arrayOfIds);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::ExportLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::ExportLandmarksL(const TDesC& aFileName,
+ RArray<TPosLmItemId>& aArrayOfIds,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions)
+ {
+ iLog->Log(_L("ExportLandmarksL"));
+ TBuf<100> file;
+ file.Append(aFileName);
+
+ if (iLogToFile)
+ {
+ DeleteFile(file);
+ iLandmarkEncoder->SetOutputFileL(file);
+ }
+ else
+ {
+ iBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ }
+
+ CPosLmOperation* op = iDatabase->ExportLandmarksL(*iLandmarkEncoder, aArrayOfIds, aTransferOptions);
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+
+ op = iLandmarkEncoder->FinalizeEncodingL();
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+
+ if (!iLogToFile)
+ {
+ WriteBufferToFileL(iBuffer, file);
+ delete iBuffer;
+ iBuffer = NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::ExportLandmarksIncL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::ExportLandmarksIncL(const TDesC& aFileName,
+ RArray<TPosLmItemId>& aArrayOfIds,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions,
+ TBool aUseWaitForRequest)
+ {
+ iLog->Log(_L("ExportLandmarksIncL"));
+ TBuf<100> file;
+ file.Append(aFileName);
+
+ if (iLogToFile)
+ {
+ DeleteFile(file);
+ iLandmarkEncoder->SetOutputFileL(file);
+ }
+ else
+ {
+ iBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ }
+
+ CPosLmOperation* op = iDatabase->ExportLandmarksL(*iLandmarkEncoder, aArrayOfIds, aTransferOptions);
+ if (aUseWaitForRequest)
+ {
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ else
+ {
+ RunAsyncOperationLD(op);
+ }
+
+ op = iLandmarkEncoder->FinalizeEncodingL();
+ if (aUseWaitForRequest)
+ {
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+ }
+ else
+ {
+ RunAsyncOperationLD(op);
+ }
+
+ if (!iLogToFile)
+ {
+ WriteBufferToFileL(iBuffer, file);
+ delete iBuffer;
+ iBuffer = NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::ExportWithCollectionDataL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::ExportWithCollectionDataL(RArray<TPosLmItemId>& aArrayOfIds,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions)
+ {
+ iLog->Log(_L("ExportWithCollectionDataL"));
+ TBuf<100> file;
+ //file.Append(KTargetPath);
+ file.Append(KFileSync6);
+
+ DeleteFile(file);
+ iLandmarkEncoder->SetOutputFileL(file);
+
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, KCollectionName);
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, KCollectionDes);
+
+ CPosLmOperation* op = iDatabase->ExportLandmarksL(*iLandmarkEncoder, aArrayOfIds, aTransferOptions);
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+
+ op = iLandmarkEncoder->FinalizeEncodingL();
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+ iLog->Log(_L("ExportWithCollectionDataL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::ExportAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::ExportAndCancelL(const TDesC& aFileName,
+ const TBool& aInCallback,
+ CPosLandmarkDatabase::TTransferOptions aTransferOptions)
+ {
+ iLog->Log(_L("ExportAndCancelL"));
+ TBuf<100> file;
+ //file.Append(KTargetPath);
+ file.Append(aFileName);
+
+ DeleteFile(file);
+ iLandmarkEncoder->SetOutputFileL(file);
+
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iDatabase->ExportLandmarksL(*iLandmarkEncoder, arrayOfIds, aTransferOptions));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iDatabase->ExportLandmarksL(*iLandmarkEncoder, arrayOfIds, aTransferOptions));
+ }
+
+ CPosLmOperation* op = iLandmarkEncoder->FinalizeEncodingL();
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+
+ CleanupStack::PopAndDestroy(3, iter);
+ iLog->Log(_L("ExportAndCancelL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::VerifyCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::VerifyCancelL(const TDesC& aFileName, const TInt aMaxExported)
+ {
+ iLog->Log(_L("VerifyCancelL"));
+ TBuf<100> file;
+ file.Append(aFileName);
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(KLmxMimeType);
+ CleanupStack::PushL(parser);
+
+ parser->SetInputFileL(file);
+
+ CPosLmOperation* op = parser->ParseContentL();
+ CleanupStack::PushL(op);
+
+ op->ExecuteL();
+
+ TInt parsed = parser->NumOfParsedLandmarks();
+ AssertTrueSecL(aMaxExported > parsed , _L("More than %d landmarks have been exported when cancelled"), aMaxExported);
+
+ CleanupStack::PopAndDestroy(2, parser);
+ iLog->Log(_L("VerifyCancelL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::TestErrorCodesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::TestErrorCodesL()
+ {
+ iLog->Log(_L("TestErrorCodesL"));
+ _LIT(KNotFoundErr, "Incorrect error code %d returned from ExecuteL when executed with Lm id not in db");
+
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ arrayOfIds.Append(666);
+
+ DeleteFile( KTmpFile );
+
+ iLog->Log(_L("SetOutputFileL"));
+ iLandmarkEncoder->SetOutputFileL( KTmpFile );
+ iLog->Log(_L("After SetOutputFileL"));
+
+ CPosLmOperation* op = iDatabase->ExportLandmarksL(*iLandmarkEncoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+
+ TRAPD(err, op->ExecuteL());
+ delete op;
+
+ CleanupStack::PopAndDestroy(2, iter);
+
+ AssertTrueSecL(err == KErrNotFound, KNotFoundErr, err);
+
+ iLog->Log(_L("TestErrorCodesL Done"));
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp45::AddLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::AddLandmarksL()
+ {
+ iLog->Log(_L("AddLandmarksL"));
+ CPosLandmark* lm = CreateXMLLandmarkLC(_L("TP45 - LM with all fields set"));
+ AddAllXMLFieldsL(lm);
+ iDatabase->AddLandmarkL(*lm);
+
+ CPosLandmark* lm2 = CPosLandmark::NewLC();
+ lm2->SetLandmarkNameL(_L("TP45 - LM, only name set"));
+ iDatabase->AddLandmarkL(*lm2);
+
+ CPosLandmark* lm3 = CreateLandmarkLC(_L("TP45 - LM with categories"));
+ iDatabase->AddLandmarkL(*lm3);
+
+ CPosLandmark* lm4 = CPosLandmark::NewLC();
+ lm4->SetLandmarkNameL(_L("TP45 - LM with Global categories"));
+ lm4->AddCategoryL(KGlobalCategoryId);
+ lm4->AddCategoryL(KGlobalCategoryId2);
+ iDatabase->AddLandmarkL(*lm4);
+
+ CleanupStack::PopAndDestroy(4, lm);
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::RenameGlobalCategoryL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::RenameGlobalCategoryL()
+ {
+ /*
+ * Rename a global category
+ */
+
+ TBuf<150>info;
+ // Get sample global category info
+ TPosLmItemId catId(0);
+
+ CPosLandmarkCategory* category = NULL;
+ catId = iCategoryManager->GetGlobalCategoryL( KAccommodation );
+ category = iCategoryManager->ReadCategoryLC( catId );
+ category->SetCategoryNameL(_L("TP45 - Renamed global"));
+ iCategoryManager->UpdateCategoryL( *category );
+
+ CleanupStack::PopAndDestroy( category );
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::ExportToFileWithLongFileNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::ExportToFileWithLongFileNameL()
+ {
+ iLog->Log(_L("ExportToFileWithLongFileNameL"));
+
+#ifndef __WINS__
+ DeleteFileL(KLongFileName);
+ DeleteFileL(KLongFileName2);
+#endif
+
+ // 1) Create an encoder object
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+
+ TInt errorsFound=KErrNone;
+
+ // 2) Set file with long filename (more than 255 characters)
+ TRAPD(err, iLandmarkEncoder->SetOutputFileL(KLongFileName));
+ TInt expErr;
+
+#ifdef __WINS__
+ expErr = KErrBadName;
+ if (err != KErrBadName)
+#else
+ expErr = KErrNone;
+ if (err != KErrNone)
+#endif
+ {
+ TBuf<100> buf;
+ buf.Format(_L("SetOutputFileL should leave with %d, instead err:%d"),expErr, err);
+ errorsFound++;
+ iLog->Log(buf);
+ }
+
+ // 3) Set file with long filename (more than 255 characters)
+ TRAP(err, iLandmarkEncoder->SetOutputFileL(KLongFileName2));
+#ifdef __WINS__
+ expErr = KErrBadName;
+ if (err != KErrBadName)
+#else
+ expErr = KErrAlreadyExists;
+ if (err != KErrAlreadyExists)
+#endif
+ {
+ TBuf<100> buf;
+ buf.Format(_L("SetOutputFileL(2) should leave with %d, instead err:%d"), expErr, err);
+ //LogErrorAndLeave(buf);
+ errorsFound++;
+ iLog->Log(buf);
+ }
+
+ if (errorsFound != KErrNone)
+ {
+ iLog->Log(_L("Wrong error code from SetOutputFileL"));
+ User::Leave(-1);
+ }
+
+ iLog->Log(_L("ExportToFileWithLongFileNameL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::DeleteFile
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::DeleteFile(const TDesC& aFile)
+ {
+ TInt err = iFileSession.Delete(aFile);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("Delete of file %S failed with error %d"), &aFile, err);
+ iLog->Log(buf);
+ }
+ }
+
+
+void CPosTp45::MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr )
+ {
+
+ CPosLmOperation* operation1 = aLdb.RemoveAllLandmarksL();
+ //Remove all landmarks from default db : Sync call
+ ExecuteAndDeleteLD( operation1 );
+
+ RArray<TPosLmItemId> catArray;
+ CleanupClosePushL( catArray );
+
+ // Get all the categories from the database and delete them if necessary
+ CPosLmItemIterator* iter = aCatMgr.CategoryIteratorL();
+ CleanupStack::PushL( iter );
+
+ TUint count = iter->NumOfItemsL();
+ if ( count > 0 )
+ { // can only be called if there are some items
+ iter->GetItemIdsL( catArray, 0, count );
+ }
+
+ // Remove all the categories here Sync call
+ ExecuteAndDeleteLD(aCatMgr.RemoveCategoriesL( catArray ));
+ CleanupStack::PopAndDestroy( 2 ); // catArray, iter
+ }
+
+void CPosTp45::AddCategoriesL()
+ {
+ _LIT(KName, "CategoryTP45 - %d");
+ TInt err=KErrLocked;
+ for (TInt i=0; i<KNoCategoriesTp45; i++)
+ {
+ TBuf<100> categoryName;
+ categoryName.Format(KName,i);
+
+ CPosLandmarkCategory* lmc = CPosLandmarkCategory::NewLC();
+ lmc->SetCategoryNameL(categoryName);
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iCategoryManager->AddCategoryL(*lmc));
+ }
+
+ iCategories.Append(lmc);
+ CleanupStack::Pop(lmc);
+ }
+ iLog->Log(_L("Adding categories to database done "));
+ }
+
+// ---------------------------------------------------------
+// CPosTp45::SetupGlobalCategoriesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp45::SetupGlobalCategoriesL()
+ {
+ // Testing with only 3 global categories
+ iGlobalCategoryNames.Append(_L("Accommodation"));
+ iGlobalCategoryIds.Append(3000);
+
+ /*iGlobalCategoryNames.Append(_L("Business"));
+ iGlobalCategoryIds.Append(6000);
+
+ iGlobalCategoryNames.Append(_L("Communication"));
+ iGlobalCategoryIds.Append(9000);*/
+
+ iGlobalCategoryNames.Append(_L("Entertainment"));
+ iGlobalCategoryIds.Append(15000);
+
+ iGlobalCategoryNames.Append(_L("People"));
+ iGlobalCategoryIds.Append(27000);
+
+ iGlobalCategoryTestNames.Append(_L("Housing"));
+ iGlobalCategoryTestNames.Append(_L("Movie"));
+ iGlobalCategoryTestNames.Append(_L("Society"));
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp46.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp46.h"
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkParser.h>
+
+
+
+#include <LbsPosition.h>
+#include <e32std.h>
+#include <ss_std.h>
+
+const TInt KNoMultipleClients = 10;
+_LIT(KExportFileIndex, "c:\\TP46-ExportedFileFromThread%d.xml");
+
+#ifdef __WINS__
+ _LIT(KImportFile, "z:\\system\\test\\testdata\\TP45-DefOptions.xml");
+#else
+ _LIT(KImportFile, "c:\\system\\test\\testdata\\TP45-DefOptions.xml");
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp46::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP46 - Multiple export operations");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp46::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::CloseTest()
+ {
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iUseLogFromThreadIsDisabled = EFalse;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp46::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::StartL()
+ {
+ // Make sure no logging from thread (causes crash)
+ iUseLogFromThreadIsDisabled = ETrue;
+
+ MakeSurePanicDebugFileExistsL();
+
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ RemoveFilesL();
+
+ iLog->Put(_L("Export landmarks syncronously simultaneously"));
+ iTestStep=0;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ iLog->Put(_L("Export landmarks incrementally simultaneously"));
+ ++iTestStep;
+ RemoveFilesL();
+ StartMultipleClientsL(KNoMultipleClients);
+
+ iLog->Put(_L("Export landmarks after import operation has taken write lock"));
+ ++iTestStep;
+ RemoveFilesL();
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(KMimeType);
+ CleanupStack::PushL(parser);
+ parser->SetInputFileL(KImportFile);
+ // Take write lock
+ CPosLmOperation* op = iDatabase->ImportLandmarksL(*parser, CPosLandmarkDatabase::EDefaultOptions);
+ CleanupStack::PushL(op);
+ // Try to export
+ StartMultipleClientsL(KNoMultipleClients);
+ CleanupStack::PopAndDestroy(2, parser);
+
+ // ESLI-64LLU3 - read/write lock only affects the same database instance.
+ parser = CPosLandmarkParser::NewL(KMimeType);
+ CleanupStack::PushL(parser);
+ parser->SetInputFileL(KImportFile);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ op = iDatabase->ImportLandmarksL(*parser, CPosLandmarkDatabase::EDefaultOptions);
+ CleanupStack::PushL(op);
+
+ TRAPD(err, CleanupStack::PopAndDestroy(lmd->ReadLandmarkLC(1)));
+ AssertTrueSecL(err == KErrLocked, _L("Didn't get KErrLocked but %d"), err);
+
+ TRAP(err, CleanupStack::PopAndDestroy(iDatabase->ReadLandmarkLC(1)));
+ AssertTrueSecL(err == KErrLocked, _L("Didn't get KErrLocked but %d"), err);
+
+ // Lock should prevent export threads to complete successfully
+ StartMultipleClientsL(KNoMultipleClients);
+
+ // Release lock - export threads should complete successfully
+ CleanupStack::PopAndDestroy(op);
+ iTestStep = ESync;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ CleanupStack::PopAndDestroy(lmd);
+ CleanupStack::PopAndDestroy(parser);
+ }
+
+// ---------------------------------------------------------
+// CPosTp46::RemoveFiles
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::RemoveFilesL()
+ {
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ for (TInt i=1; i <= KNoMultipleClients; i++)
+ {
+ TBuf<100> fileName;
+ fileName.Format(KExportFileIndex, i);
+ fs.Delete(fileName);
+ }
+ fs.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp46::StartMultipleClientsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::StartMultipleClientsL(const TUint aNoClients)
+ {
+ _LIT(KMultipleErr, "Error %d from thread %d");
+ _LIT(KPanicErr, "Thread %d has panicked or is alive");
+
+ _LIT(KSuccess, "Threads %d is successful");
+
+ CreateThreadsL(aNoClients);
+
+ RArray<TRequestStatus> statuses;
+ CleanupClosePushL(statuses);
+
+ for (TUint j=0; j<aNoClients; j++)
+ {
+ TRequestStatus status;
+ statuses.Append(status);
+ }
+
+ TUint i=0;
+ for (i=0; i<aNoClients; i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+
+ for (i=0; i<aNoClients; i++)
+ {
+ User::WaitForRequest(statuses[i]);
+ }
+
+ TUint errors=0;
+ for (i=0; i<aNoClients; i++)
+ {
+ TInt exitReason = iThreads[i].ExitReason();
+ TBuf<100> info;
+
+ if (exitReason != KErrNone)
+ {
+ errors++;
+ info.Format(KMultipleErr, exitReason, i+1);
+ }
+ else
+ {
+ info.Format(KSuccess, i+1);
+ }
+ iLog->Put(info);
+
+ AssertTrueSecL(iThreads[i].ExitType() == EExitKill, KPanicErr, i+1);
+ AssertTrueSecL(exitReason == KErrNone || exitReason == KErrLocked, info);
+ }
+
+ if (iTestStep != EImportStarted)
+ {
+ AssertTrueSecL(errors == 0, _L("No thread should leave with error, all should be able to read from the db"));
+ }
+ else
+ {
+ AssertTrueSecL(errors == aNoClients, _L("All threads should leave with error, none should be able to read from the db"));
+ }
+
+
+ for (i=0; i<aNoClients; i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreadIndex=0;
+ iThreads.Close();
+ CleanupStack::PopAndDestroy(&statuses);
+ }
+
+// ---------------------------------------------------------
+// CPosTp46::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::RunTestL(TAny* aData)
+ {
+ CPosTp46* self = reinterpret_cast<CPosTp46*>(aData);
+ TInt index = ++self->iThreadIndex;
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ /*
+ _LIT(KInfo, "Thread %d");
+ TBuf<100> info;
+ info.Format(KInfo, index);
+ RDebug::Print(info);
+ */
+
+ CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KMimeType);
+ CleanupStack::PushL(encoder);
+
+ CPosLmItemIterator* iter = lmd->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ TBuf<100> fileName;
+ fileName.Format(KExportFileIndex, index);
+ encoder->SetOutputFileL(fileName);
+
+ switch (self->iTestStep)
+ {
+ //case self->ESync:
+ case 0:
+ //case self->EImportStarted:
+ case 2:
+ {
+ CPosLmOperation* op = lmd->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories);
+
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+
+ op = encoder->FinalizeEncodingL();
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+ break;
+ }
+ //case self->EInc:
+ case 1:
+ {
+ CPosLmOperation* op2 = lmd->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories);
+ self->RunAsyncOperationLD(op2);
+
+ op2 = encoder->FinalizeEncodingL();
+ self->RunAsyncOperationLD(op2);
+ break;
+ }
+ }
+ /*
+ _LIT(KInfo3, "Thread %d after execute");
+ info.Format(KInfo3, index);
+ RDebug::Print(info);
+ */
+ CleanupStack::PopAndDestroy(4, lmd);
+ }
+
+
+// ---------------------------------------------------------
+// ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp46::RunTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp46::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp46::CreateThreadsL(const TUint aNoThreads)
+ {
+ _LIT(KThreadName, "TP46 test thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TUint i=0; i<aNoThreads; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1+iThreads.Count());
+
+ TInt err;
+ err = thread.Create(name, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp47.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1876 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+// INCLUDES
+#include "FT_CPosTp47.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <LbsPosition.h>
+#include <e32math.h>
+#include <bautils.h>
+#include <utf.h>
+#include <xml/xmlparsererrors.h>
+
+// CONSTANTS
+_LIT(KFileName, "c:\\documents\\Tp47Data.xml");
+_LIT(KFileTrace, "c:\\documents\\LandmarksTP47Trace.txt");
+
+// See \epoc32\include\xml\XmlParserErrors.h for error codes
+
+
+_LIT(KCorrectFile, "c:\\system\\test\\TestData\\CorrectFileFor_LandmarksTP47Trace.txt");
+
+_LIT(KMimeWithNameAndTimeStampFile, "c:\\system\\test\\TestData\\Tp47Data_With_MIME_Name.xml");
+_LIT(KErronousXMLFile, "c:\\system\\test\\TestData\\Tp47ErrounousXMLData.xml");
+
+_LIT(KErronousXMLFileDataMissing1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields1.xml");
+_LIT(KErronousXMLFileDataMissing2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields2.xml");
+_LIT(KErronousXMLFileDataMissing3, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields3.xml");
+
+_LIT(KErronousXMLFileWrongOrder1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataWrongOrder1.xml");
+_LIT(KErronousXMLFileWrongOrder2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataWrongOrder2.xml");
+_LIT(KErronousXMLFileWrongOrder3, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataWrongOrder3.xml");
+
+_LIT(KErronousXMLFileRepeatedTag, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataRepeatedTag.xml");
+_LIT(KErronousXMLFileUnclosedTag1, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataUnclosedTag1.xml");
+//_LIT(KErronousXMLFileUnclosedTag2, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataUnclosedTag2.xml");
+
+_LIT(KUnknownTags, "c:\\system\\test\\TestData\\Tp47UnknownTags.xml");
+_LIT(KUnknownTrees, "c:\\system\\test\\TestData\\Tp47UnknownTrees.xml");
+
+_LIT(KNoEndTag1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLNoEndTag1.xml");
+_LIT(KNoEndTag2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLNoEndTag2.xml");
+
+_LIT(KNoXMLFile1, "c:\\system\\test\\TestData\\Tp47ErronousFileNoXML1.xml");
+_LIT(KNoXMLFile2, "c:\\system\\test\\TestData\\Tp47ErronousFileNoXML2.xml");
+
+_LIT(KTestXMLInput1, "c:\\system\\test\\TestData\\Tp47XMLDataTestInput1.xml");
+
+_LIT(KXMLFileWithLongCategoryName, "c:\\system\\test\\TestData\\Tp47XMLWithLongCategoryName.xml");
+_LIT(KXMLFileWithLongLandmarkName, "c:\\system\\test\\TestData\\Tp47XMLWithLongName.xml");
+_LIT(KXMLFileWithLongLatitudeField, "c:\\system\\test\\TestData\\Tp47XMLWithLongLatitudeField.xml");
+
+_LIT(KXMLFileWithEmptyCollection, "c:\\system\\test\\TestData\\Tp47ErronousXMLFileEmptyCollection.xml");
+
+_LIT(KXMLFileWithXMLTagAsDataField1, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField1.xml");
+_LIT(KXMLFileWithXMLTagAsDataField2, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField2.xml");
+_LIT(KXMLFileWithXMLTagAsDataField3, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField3.xml");
+
+_LIT(KErronousXMLFileTagInTag, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataTagInTag1.xml");
+//_LIT(KErronousXMLFileMissingLMPrefix, "c:\\system\\test\\TestData\\Tp47ErronousXMLDataMissingLMPrefix.xml");
+
+_LIT(KXMLFileUTF8, "c:\\system\\test\\TestData\\Tp47DataUTF8.xml");
+_LIT(KXMLFileUTF16, "c:\\system\\test\\TestData\\Tp47DataUTF16.xml");
+
+_LIT(KXML_UTF_16_BE, "c:\\system\\test\\TestData\\TP47_UTF-16-bigEndian.xml");
+_LIT(KXML_UTF_16_LE, "c:\\system\\test\\TestData\\TP47_UTF-16-littleEndian.xml");
+_LIT(KXML_UTF_8, "c:\\system\\test\\TestData\\TP47_UTF-8.xml");
+_LIT(KXML_UTF_CHINESE, "c:\\system\\test\\TestData\\TP47_UTF-Chinese.xml");
+
+_LIT(KXMLFileWithEmptyMedialink, "c:\\system\\test\\TestData\\Tp47EmptyMediaLink.xml");
+_LIT(KXMLFileWithEmptyCoordinates, "c:\\system\\test\\TestData\\Tp47EmptyCoordinates.xml");
+_LIT(KXMLFileWithEmptyAdresseInfo, "c:\\system\\test\\TestData\\Tp47EmptyAdresseInfo.xml");
+
+_LIT(KXMLFileWithErronousTextInTag1, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag1.xml");
+_LIT(KXMLFileWithErronousTextInTag2, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag2.xml");
+_LIT(KXMLFileWithErronousTextInTag3, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag3.xml");
+_LIT(KXMLFileWithErronousTextInTag4, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag4.xml");
+_LIT(KXMLFileWithErronousTextInTag5, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag5.xml");
+_LIT(KXMLFileWithErronousTextInTag6, "c:\\system\\test\\TestData\\Tp47ErronousTextInTag6.xml");
+
+//KML test files
+_LIT(KKMLFile, "c:\\system\\test\\TestData\\Tp47KML.kml");
+_LIT(KKMLFile1, "c:\\system\\test\\TestData\\Tp47KMLfile1.kml");
+_LIT(KKMLFile2, "c:\\system\\test\\TestData\\Tp47KMLfile2.kml");
+_LIT(KKMLFile3, "c:\\system\\test\\TestData\\Tp47KMLfile3.kml");
+
+_LIT(KKMLLongName, "c:\\system\\test\\TestData\\Tp47KMLlongName.kml");
+_LIT(KKMLNameCaps, "c:\\system\\test\\TestData\\Tp47KMLNameCaps.kml");
+_LIT(KKMLErroneousNameTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousNameTag.kml");
+_LIT(KKMLErroneousNameTagPosition1, "c:\\system\\test\\TestData\\Tp47KMLErroneousNameTagPosition1.kml");
+_LIT(KKMLErroneousNameTagPosition2, "c:\\system\\test\\TestData\\Tp47KMLErroneousNameTagPosition2.kml");
+_LIT(KKMLEmptyName, "c:\\system\\test\\TestData\\Tp47KMLEmptyName.kml");
+_LIT(KKMLMissingNameTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingNameTag1.kml");
+_LIT(KKMLMissingNameTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingNameTag2.kml");
+_LIT(KKMLNameWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLNameWithSpecialCharacters1.kml");
+_LIT(KKMLNameWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLNameWithSpecialCharacters2.kml");
+
+_LIT(KKMLEmptyPhoneNumber, "c:\\system\\test\\TestData\\Tp47KMLEmptyPhoneNumber.kml");
+_LIT(KKMLErroneousPhoneNumberTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousPhoneNumberTag.kml");
+_LIT(KKMLErroneousPhoneNumberTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousPhoneNumberTagPosition.kml");
+_LIT(KKMLLongPhoneNumer, "c:\\system\\test\\TestData\\Tp47KMLLongPhoneNumer.kml");
+_LIT(KKMLMissingPhoneTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingPhoneTag1.kml");
+_LIT(KKMLMissingPhoneTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingPhoneTag2.kml");
+_LIT(KKMLPhoneNumberCaps, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberCaps.kml");
+_LIT(KKMLPhoneNumberWithText, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberWithText.kml");
+_LIT(KKMLPhoneNumberWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberWithSpecialCharacters1.kml");
+_LIT(KKMLPhoneNumberWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLPhoneNumberWithSpecialCharacters2.kml");
+
+_LIT(KKMLEmptyPoint, "c:\\system\\test\\TestData\\Tp47KMLEmptyPoint.kml");
+_LIT(KKMLErroneousPointTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousPointTag.kml");
+_LIT(KKMLErroneousPointTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousPointTagPosition.kml");
+_LIT(KKMLMissingPointTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingPointTag1.kml");
+_LIT(KKMLMissingPointTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingPointTag2.kml");
+_LIT(KKMLPointCaps, "c:\\system\\test\\TestData\\Tp47KMLPointCaps.kml");
+_LIT(KKMLPointTag1, "c:\\system\\test\\TestData\\Tp47KMLPointTag1.kml");
+_LIT(KKMLPointTag2, "c:\\system\\test\\TestData\\Tp47KMLPointTag2.kml");
+_LIT(KKMLPointTag3, "c:\\system\\test\\TestData\\Tp47KMLPointTag3.kml");
+
+_LIT(KKMLEmptyDescription, "c:\\system\\test\\TestData\\Tp47KMLEmptyDescription.kml");
+_LIT(KKMLDescriptionWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLDescriptionWithSpecialCharacters1.kml");
+_LIT(KKMLDescriptionWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLDescriptionWithSpecialCharacters2.kml");
+_LIT(KKMLDescriptionCaps, "c:\\system\\test\\TestData\\Tp47KMLDescriptionCaps.kml");
+_LIT(KKMLLongDescription, "c:\\system\\test\\TestData\\Tp47KMLLongDescription.kml");
+_LIT(KKMLErroneousDescriptionTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousDescriptionTag.kml");
+_LIT(KKMLErroneousDescriptionTagposition, "c:\\system\\test\\TestData\\Tp47KMLErroneousDescriptionTagposition.kml");
+_LIT(KKMLMissingDescriptionTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingDescriptionTag1.kml");
+_LIT(KKMLMissingDescriptionTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingDescriptionTag2.kml");
+_LIT(KKMLDescriptionWithCDATA, "c:\\system\\test\\TestData\\Tp47KMLDescriptionWithCDATA.kml");
+
+_LIT(KKMLErroneousFolderTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousFolderTag.kml");
+_LIT(KKMLFolderCaps, "c:\\system\\test\\TestData\\Tp47KMLFolderCaps.kml");
+_LIT(KKMLMissingFolderTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingFolderTag1.kml");
+_LIT(KKMLMissingFolderTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingFolderTag2.kml");
+_LIT(KKMLEmptyFolderName, "c:\\system\\test\\TestData\\Tp47KMLEmptyFolderName.kml");
+_LIT(KKMLLongFolderName, "c:\\system\\test\\TestData\\Tp47KMLLongFolderName.kml");
+_LIT(KKMLFolderNameWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLFolderNameWithSpecialCharacters1.kml");
+_LIT(KKMLFolderNameWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLFolderNameWithSpecialCharacters2.kml");
+
+_LIT(KKMLDocumentNameWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLDocumentNameWithSpecialCharacters1.kml");
+_LIT(KKMLDocumentNameWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLDocumentNameWithSpecialCharacters2.kml");
+_LIT(KKMLEmptyDocumentName, "c:\\system\\test\\TestData\\Tp47KMLEmptyDocumentName.kml");
+_LIT(KKMLLongDocumentName, "c:\\system\\test\\TestData\\Tp47KMLLongDocumentName.kml");
+_LIT(KKMLDocumentCaps, "c:\\system\\test\\TestData\\Tp47KMLDocumentCaps.kml");
+_LIT(KKMLErroneousDocumentTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousDocumentTag.kml");
+_LIT(KKMLMissingDocumentTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingDocumentTag1.kml");
+_LIT(KKMLMissingDocumentTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingDocumentTag2.kml");
+
+_LIT(KKMLAddressCaps, "c:\\system\\test\\TestData\\Tp47KMLAddressCaps.kml");
+_LIT(KKMLAddressWithSpecialCharacters1, "c:\\system\\test\\TestData\\Tp47KMLAddressWithSpecialCharacters1.kml");
+_LIT(KKMLAddressWithSpecialCharacters2, "c:\\system\\test\\TestData\\Tp47KMLAddressWithSpecialCharacters2.kml");
+_LIT(KKMLEmptyAddress1, "c:\\system\\test\\TestData\\Tp47KMLEmptyAddress1.kml");
+_LIT(KKMLEmptyAddress2, "c:\\system\\test\\TestData\\Tp47KMLEmptyAddress2.kml");
+_LIT(KKMLLongAddress1, "c:\\system\\test\\TestData\\Tp47KMLLongAddress1.kml");
+_LIT(KKMLLongAddress2, "c:\\system\\test\\TestData\\Tp47KMLLongAddress2.kml");
+_LIT(KKMLLongAddress3, "c:\\system\\test\\TestData\\Tp47KMLLongAddress3.kml");
+_LIT(KKMLErroneousAddressTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousAddressTag.kml");
+_LIT(KKMLErroneousAddressTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousAddressTagPosition.kml");
+_LIT(KKMLMissingAddressTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingAddressTag1.kml");
+_LIT(KKMLMissingAddressTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingAddressTag2.kml");
+
+_LIT(KKMLCoordinateCaps, "c:\\system\\test\\TestData\\Tp47KMLCoordinateCaps.kml");
+_LIT(KKMLMoreCoordinates, "c:\\system\\test\\TestData\\Tp47KMLMoreCoordinates.kml");
+_LIT(KKMLErroneousCoordinateTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinateTag.kml");
+_LIT(KKMLErroneousCoordinateTagPosition, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinateTagPosition.kml");
+_LIT(KKMLCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLCoordinates1.kml");
+_LIT(KKMLCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLCoordinates2.kml");
+_LIT(KKMLCoordinates3, "c:\\system\\test\\TestData\\Tp47KMLCoordinates3.kml");
+_LIT(KKMLCoordinates4, "c:\\system\\test\\TestData\\Tp47KMLCoordinates4.kml");
+_LIT(KKMLCoordinates5, "c:\\system\\test\\TestData\\Tp47KMLCoordinates5.kml");
+_LIT(KKMLCoordinates6, "c:\\system\\test\\TestData\\Tp47KMLCoordinates6.kml");
+_LIT(KKMLLongCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLLongCoordinates1.kml");
+_LIT(KKMLLongCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLLongCoordinates2.kml");
+_LIT(KKMLMissingCoordinateTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingCoordinateTag1.kml");
+_LIT(KKMLMissingCoordinateTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingCoordinateTag2.kml");
+_LIT(KKMLEmptyCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates1.kml");
+_LIT(KKMLEmptyCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates2.kml");
+_LIT(KKMLEmptyCoordinates3, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates3.kml");
+_LIT(KKMLEmptyCoordinates4, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates4.kml");
+_LIT(KKMLEmptyCoordinates5, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates5.kml");
+_LIT(KKMLEmptyCoordinates6, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates6.kml");
+_LIT(KKMLEmptyCoordinates7, "c:\\system\\test\\TestData\\Tp47KMLEmptyCoordinates7.kml");
+_LIT(KKMLErroneousCoordinates1, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates1.kml");
+_LIT(KKMLErroneousCoordinates2, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates2.kml");
+_LIT(KKMLErroneousCoordinates3, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates3.kml");
+_LIT(KKMLErroneousCoordinates4, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates4.kml");
+_LIT(KKMLErroneousCoordinates5, "c:\\system\\test\\TestData\\Tp47KMLErroneousCoordinates5.kml");
+_LIT(KKMLNegativeCoordinates, "c:\\system\\test\\TestData\\Tp47KMLNegativeCoordinates.kml");
+
+_LIT(KKMLErroneousTextWithinPlacemark, "c:\\system\\test\\TestData\\Tp47KMLErroneousTextWithinPlacemark.kml");
+_LIT(KKMLEmptyfile1, "c:\\system\\test\\TestData\\Tp47KMLEmptyfile1.kml");
+_LIT(KKMLEmptyfile2, "c:\\system\\test\\TestData\\Tp47KMLEmptyfile2.kml");
+_LIT(KKMLInvalidfile, "c:\\system\\test\\TestData\\Tp47KMLInvalidfile.kml");
+
+_LIT(KKMLPlacemarkCaps, "c:\\system\\test\\TestData\\Tp47KMLPlacemarkCaps.kml");
+_LIT(KKMLErroneousPlacemarkTag, "c:\\system\\test\\TestData\\Tp47KMLErroneousPlacemarkTag.kml");
+_LIT(KKMLMissingPlacemarkTag1, "c:\\system\\test\\TestData\\Tp47KMLMissingPlacemarkTag1.kml");
+_LIT(KKMLMissingPlacemarkTag2, "c:\\system\\test\\TestData\\Tp47KMLMissingPlacemarkTag2.kml");
+_LIT(KKMLEmptyPlacemarkTag, "c:\\system\\test\\TestData\\Tp47KMLEmptyPlacemarkTag.kml");
+
+_LIT(KKMLGandhiMuseum, "c:\\system\\test\\TestData\\Tp47KMLGandhi Museum.kml");
+_LIT(KKMLIndusHeritageCentreIndia, "c:\\system\\test\\TestData\\Tp47KMLIndus Heritage Centre, India.kml");
+_LIT(KKMLHiltonHotels, "c:\\system\\test\\TestData\\Tp47KMLhilton hotels near new york (1 - 10).kml");
+
+_LIT(KKMLFile4, "c:\\system\\test\\TestData\\Tp47KMLfile4.kml");
+_LIT(KKMLFile5, "c:\\system\\test\\TestData\\Tp47KMLfile5.kml");
+_LIT(KKMLFile6, "c:\\system\\test\\TestData\\Tp47KMLfile6.kml");
+_LIT(KKMLFile7, "c:\\system\\test\\TestData\\Tp47KMLfile7.kml");
+_LIT(KKMLFile8, "c:\\system\\test\\TestData\\Tp47KMLfile8.kml");
+_LIT(KKMLFile9, "c:\\system\\test\\TestData\\Tp47KMLfile9.kml");
+
+
+
+
+
+
+
+// Maxmimum size for each line in trace file
+const TInt KBufSize = 5000;
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp47::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ if (err != KErrNone && err != KErrNotFound)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log( buffer );
+
+ CleanupStack::PopAndDestroy( buf );
+ }
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KFileName );
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Delete the trace file
+ DeleteFileL(KFileTrace);
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ HBufC8* emptyBuffer=NULL;
+
+ CreateXMLData(ETrue);
+
+ PrintParsedDataFromEncoderL(KFileName, *emptyBuffer, KErrNone, KLmxMimeType );
+
+ CheckXMLData(ETrue);
+
+ // Use buffer instead of file
+ CreateXMLData(EFalse);
+ CheckXMLData(EFalse);
+
+ iLandmarks.ResetAndDestroy();
+
+
+
+ iLog->Log(_L("Mime With Name and Stamp"));
+ PrintParsedDataFromEncoderL(KMimeWithNameAndTimeStampFile, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KMimeWithNameAndTimeStampFile, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Several Landmark File"));
+ // XXX PrintParsedDataFromEncoderL(KSeveralLandmarkFile, *emptyBuffer, KErrPosLmUnknownFormat);
+
+ iLog->Log(_L("Erronous XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFile, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFile, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Several LandmarkCollection File"));
+ // XXX PrintParsedDataFromEncoderL(KSeveralLandmarkCollectionFile, *emptyBuffer, KErrPosLmUnknownFormat);
+
+ iLog->Log(_L("1) Wrong Order in XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder1, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder1, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("2) Wrong Order in XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("3) Wrong Order in XML File"));
+ // AdresseInfo can be sorted randomly without any error
+ PrintParsedDataFromEncoderL(KErronousXMLFileWrongOrder3, *emptyBuffer, KErrNone, KLmxMimeType );
+ // N/A for GPX
+
+ iLog->Log(_L("1) Data missing in XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing1, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing1, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("2) Data missing in XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing2, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing2, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("3) Data missing in XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing3, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileDataMissing3, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Unknown tags in XML File"));
+ PrintParsedDataFromEncoderL(KUnknownTags, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KUnknownTags, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Unknown trees in XML File"));
+ PrintParsedDataFromEncoderL(KUnknownTrees, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KUnknownTrees, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("No End landmarkCollection tag in XML File"));
+ PrintParsedDataFromEncoderL(KNoEndTag1, *emptyBuffer, -993, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KNoEndTag1, *emptyBuffer, -993, KGpxMimeType );
+
+ iLog->Log(_L("No End landmark tag in XML File"));
+ PrintParsedDataFromEncoderL(KNoEndTag2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KNoEndTag2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with different input formats in XML File"));
+ PrintParsedDataFromEncoderL(KTestXMLInput1, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KTestXMLInput1, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with repeated tag XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileRepeatedTag, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileRepeatedTag, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with unclosed tag XML File"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag1, *emptyBuffer, -993, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag1, *emptyBuffer, -993, KGpxMimeType );
+
+// Incorrect test
+// iLog->Log(_L("Test with unclosed tag XML File"));
+// PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+// PrintParsedDataFromEncoderL(KErronousXMLFileUnclosedTag2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with a non XML File 1"));
+ PrintParsedDataFromEncoderL(KNoXMLFile1, *emptyBuffer, -982, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KNoXMLFile1, *emptyBuffer, -982, KGpxMimeType );
+
+ iLog->Log(_L("Test with a non XML File 2"));
+ PrintParsedDataFromEncoderL(KNoXMLFile2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType ); //temporarily changed KErrPosLmUnknownFormat to KErrNone
+ PrintParsedDataFromEncoderL(KNoXMLFile2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType ); //temporarily KErrPosLmUnknownFormat to KErrNone
+
+ iLog->Log(_L("Test with a XML UTFW8 File"));
+ PrintParsedDataFromEncoderL(KXMLFileUTF8, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileUTF8, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML UTFW16 File"));
+ PrintParsedDataFromEncoderL(KXMLFileUTF16, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileUTF16, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with long category names"));
+ PrintParsedDataFromEncoderL(KXMLFileWithLongCategoryName, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithLongCategoryName, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with long landmark name"));
+ PrintParsedDataFromEncoderL(KXMLFileWithLongLandmarkName, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithLongLandmarkName, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with long latitude field"));
+ PrintParsedDataFromEncoderL(KXMLFileWithLongLatitudeField, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithLongLatitudeField, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with empty collection"));
+ PrintParsedDataFromEncoderL(KXMLFileWithEmptyCollection, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ // N/A for GPX
+
+ iLog->Log(_L("Test with a XML File with Landmark Tag in Landmark Tag"));
+ PrintParsedDataFromEncoderL(KErronousXMLFileTagInTag, *emptyBuffer, EXmlRecursiveEntity, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KErronousXMLFileTagInTag, *emptyBuffer, EXmlRecursiveEntity, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with XML Tag as data field 1"));
+ PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField1, *emptyBuffer, -993, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField1, *emptyBuffer, -993, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with XML Tag as data field 2"));
+ PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField2, *emptyBuffer, -993, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField2, *emptyBuffer, -993, KGpxMimeType );
+
+ iLog->Log(_L("Test with a XML File with XML Tag as data field 3"));
+ PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField3, *emptyBuffer, -993, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithXMLTagAsDataField3, *emptyBuffer, -993, KGpxMimeType );
+
+// Incorrect test
+// iLog->Log(_L("Test with a XML File with missing LM prefix"));
+// PrintParsedDataFromEncoderL(KErronousXMLFileMissingLMPrefix, *emptyBuffer, EXmlRecursiveEntity, KLmxMimeType );
+// PrintParsedDataFromEncoderL(KErronousXMLFileMissingLMPrefix, *emptyBuffer, EXmlRecursiveEntity, KGpxMimeType );
+//
+ iLog->Log(_L("Test with UTF-16-bigEndian.xml"));
+ PrintParsedDataFromEncoderL(KXML_UTF_16_BE, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXML_UTF_16_BE, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with UTF-16-littleEndian.xml"));
+ PrintParsedDataFromEncoderL(KXML_UTF_16_LE, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXML_UTF_16_LE, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with UTF-8.xml"));
+ PrintParsedDataFromEncoderL(KXML_UTF_8, *emptyBuffer, KErrNone, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXML_UTF_8, *emptyBuffer, KErrNone, KGpxMimeType );
+
+ iLog->Log(_L("Test with UTF-Chinese.xml"));
+ PrintParsedDataFromEncoderL(KXML_UTF_CHINESE, *emptyBuffer, -982, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXML_UTF_CHINESE, *emptyBuffer, -982, KGpxMimeType );
+
+
+
+ //testing kml files
+ iLog->Log(_L("Test with Tp47KML.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLfile1.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLfile2.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLfile3.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile3, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ //testing the name tag related cases
+ iLog->Log(_L("Test with Tp47KMLlongName.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongName, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLNameCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLNameCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousNameTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousNameTag, *emptyBuffer, -993, KKmlMimeType ); //EXmlTagMismatch = -993
+
+ iLog->Log(_L("Test with Tp47KMLErroneousNameTagPosition1.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousNameTagPosition1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousNameTagPosition2.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousNameTagPosition2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyName.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyName, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingNameTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingNameTag1, *emptyBuffer, -993, KKmlMimeType ); //EXmlTagMismatch = -993
+
+ iLog->Log(_L("Test with Tp47KMLMissingNameTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingNameTag2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLNameWithSpecialCharacters1.kml"));
+ PrintParsedDataFromEncoderL(KKMLNameWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType ); // EXmlInvalidToken = -996
+
+ iLog->Log(_L("Test with Tp47KMLNameWithSpecialCharacters2.kml"));
+ PrintParsedDataFromEncoderL(KKMLNameWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ //testing the PhoneNumber tag related cases
+ iLog->Log(_L("Test with Tp47KMLEmptyPhoneNumber.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyPhoneNumber, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousPhoneNumberTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousPhoneNumberTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousPhoneNumberTagPosition.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousPhoneNumberTagPosition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongPhoneNumer.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongPhoneNumer, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingPhoneTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingPhoneTag1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingPhoneTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingPhoneTag2, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPhoneNumberCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLPhoneNumberCaps, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPhoneNumberWithText.kml"));
+ PrintParsedDataFromEncoderL(KKMLPhoneNumberWithText, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPhoneNumberWithSpecialCharacters1.kml"));
+ PrintParsedDataFromEncoderL(KKMLPhoneNumberWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPhoneNumberWithSpecialCharacters2.kml"));
+ PrintParsedDataFromEncoderL(KKMLPhoneNumberWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ //testing the point tag related test cases
+ iLog->Log(_L("Test with Tp47KMLEmptyPoint.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyPoint, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousPointTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousPointTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousPointTagPosition.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousPointTagPosition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingPointTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingPointTag1, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingPointTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingPointTag2, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPointCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLPointCaps, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPointTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLPointTag1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPointTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLPointTag2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLPointTag3.kml"));
+ PrintParsedDataFromEncoderL(KKMLPointTag3, *emptyBuffer, KErrNone, KKmlMimeType );
+
+
+ //testing the description tag related cases
+ iLog->Log(_L("Test with Tp47KMLEmptyDescription.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyDescription, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLDescriptionWithSpecialCharacters1.kml"));
+ PrintParsedDataFromEncoderL(KKMLDescriptionWithSpecialCharacters1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLDescriptionWithSpecialCharacters2.kml"));
+ PrintParsedDataFromEncoderL(KKMLDescriptionWithSpecialCharacters2, *emptyBuffer, -996, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLDescriptionCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLDescriptionCaps, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongDescription.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongDescription, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousDescriptionTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousDescriptionTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousDescriptionTagposition.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousDescriptionTagposition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingDescriptionTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingDescriptionTag1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingDescriptionTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingDescriptionTag2, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLDescriptionWithCDATA.kml"));
+ PrintParsedDataFromEncoderL(KKMLDescriptionWithCDATA, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ //testing the folder tag related cases
+ iLog->Log(_L("Test with Tp47KMLErroneousFolderTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousFolderTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFolderCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLFolderCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingFolderTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingFolderTag1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingFolderTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingFolderTag2, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyFolderName.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyFolderName, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongFolderName.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongFolderName, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFolderNameWithSpecialCharacters1.kml"));
+ PrintParsedDataFromEncoderL(KKMLFolderNameWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFolderNameWithSpecialCharacters2.kml"));
+ PrintParsedDataFromEncoderL(KKMLFolderNameWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+
+ //testing the document tag related cases
+ iLog->Log(_L("Test with Tp47KMLDocumentNameWithSpecialCharacters1.kml"));
+ PrintParsedDataFromEncoderL(KKMLDocumentNameWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLDocumentNameWithSpecialCharacters2.kml"));
+ PrintParsedDataFromEncoderL(KKMLDocumentNameWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyDocumentName.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyDocumentName, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongDocumentName.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongDocumentName, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLDocumentCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLDocumentCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousDocumentTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousDocumentTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingDocumentTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingDocumentTag1, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingDocumentTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingDocumentTag2, *emptyBuffer, -993, KKmlMimeType );
+
+
+ //testing the address tag related cases
+ iLog->Log(_L("Test with Tp47KMLAddressCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLAddressCaps, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLAddressWithSpecialCharacters1.kml"));
+ PrintParsedDataFromEncoderL(KKMLAddressWithSpecialCharacters1, *emptyBuffer, -996, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLAddressWithSpecialCharacters2.kml"));
+ PrintParsedDataFromEncoderL(KKMLAddressWithSpecialCharacters2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyAddress1.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyAddress1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyAddress2.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyAddress2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongAddress1.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongAddress1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongAddress2.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongAddress2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongAddress3.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongAddress3, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousAddressTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousAddressTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousAddressTagPosition.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousAddressTagPosition, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingAddressTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingAddressTag1, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingAddressTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingAddressTag2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ //testing the coordinate tag related cases
+ iLog->Log(_L("Test with Tp47KMLCoordinateCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinateCaps, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMoreCoordinates.kml"));
+ PrintParsedDataFromEncoderL(KKMLMoreCoordinates, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinateTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinateTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinateTagPosition.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinateTagPosition, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLCoordinates1.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinates1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLCoordinates2.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinates2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLCoordinates3.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinates3, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLCoordinates4.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinates4, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLCoordinates5.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinates5, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLCoordinates6.kml"));
+ PrintParsedDataFromEncoderL(KKMLCoordinates6, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongCoordinates1.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongCoordinates1, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLLongCoordinates2.kml"));
+ PrintParsedDataFromEncoderL(KKMLLongCoordinates2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingCoordinateTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingCoordinateTag1, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingCoordinateTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingCoordinateTag2, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates1.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates2.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates2, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates3.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates3, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates4.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates4, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates5.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates5, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates6.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates6, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyCoordinates7.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyCoordinates7, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinates1.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinates1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinates2.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinates2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinates3.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinates3, *emptyBuffer, KErrOverflow, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinates4.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinates4, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousCoordinates5.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousCoordinates5, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLNegativeCoordinates.kml"));
+ PrintParsedDataFromEncoderL(KKMLNegativeCoordinates, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ //testing some invalid cases
+ iLog->Log(_L("Test with Tp47KMLErroneousTextWithinPlacemark.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousTextWithinPlacemark, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyfile1.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyfile1, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyfile2.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyfile2, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLInvalidfile.kml"));
+ PrintParsedDataFromEncoderL(KKMLInvalidfile, *emptyBuffer, -983, KKmlMimeType ); //EXmlMisplacedPi = -983
+
+ //testing the Placemark tag related cases
+ iLog->Log(_L("Test with Tp47KMLPlacemarkCaps.kml"));
+ PrintParsedDataFromEncoderL(KKMLPlacemarkCaps, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLErroneousPlacemarkTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLErroneousPlacemarkTag, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingPlacemarkTag1.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingPlacemarkTag1, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLMissingPlacemarkTag2.kml"));
+ PrintParsedDataFromEncoderL(KKMLMissingPlacemarkTag2, *emptyBuffer, -993, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLEmptyPlacemarkTag.kml"));
+ PrintParsedDataFromEncoderL(KKMLEmptyPlacemarkTag, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ //testing with kml files downloaded from google earth
+ iLog->Log(_L("Test with Tp47KMLGandhi Museum.kml"));
+ PrintParsedDataFromEncoderL(KKMLGandhiMuseum, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLIndus Heritage Centre, India.kml"));
+ PrintParsedDataFromEncoderL(KKMLIndusHeritageCentreIndia, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLhilton hotels near new york (1 - 10).kml"));
+ PrintParsedDataFromEncoderL(KKMLHiltonHotels, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFile4.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile4, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFile5.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile5, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFile6.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile6, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFile7.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile7, *emptyBuffer, KErrNone, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFile8.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile8, *emptyBuffer, KErrPosLmUnknownFormat, KKmlMimeType );
+
+ iLog->Log(_L("Test with Tp47KMLFile9.kml"));
+ PrintParsedDataFromEncoderL(KKMLFile9, *emptyBuffer, -993, KKmlMimeType );
+
+ // Now compare tha trace file against the correct one
+ RFile correctFile;
+ RFile file;
+
+ iLog->Log(_L(">>>>>>>Comparing files<<<<<"));
+
+ TFileName filename;
+ CreateCorrectXmlFileL( KCorrectFile, filename );
+
+ User::LeaveIfError(correctFile.Open(iFileSession, filename, EFileRead));
+ CleanupClosePushL(correctFile);
+ User::LeaveIfError(file.Open(iFileSession, KFileTrace, EFileRead));
+ CleanupClosePushL(file);
+
+ HBufC* correctLinebuffer = HBufC::NewLC( KBufSize );
+ TPtr correctLine = correctLinebuffer->Des();
+ HBufC* linebuffer = HBufC::NewLC( KBufSize );
+ TPtr line = linebuffer->Des();
+
+ TInt err = KErrNone;
+ TBool done = EFalse;
+ TInt lineNr = 0;
+
+ while (ReadLn(correctFile, correctLine) != KErrEof && !done)
+ {
+ lineNr++;
+ err = ReadLn(file, line);
+ if ( err == KErrEof )
+ {
+ done = ETrue;
+ }
+ correctLine.Trim();
+ line.Trim();
+ if (correctLine.Compare(line) != KErrNone)
+ {
+ HBufC* buf = HBufC::NewLC( 128 );
+ TPtr buffer = buf->Des();
+
+ buffer.Format(_L("ERROR in TraceFile on line %d: "), lineNr);
+
+ iLog->Log( buffer );
+ iLog->Log( correctLine );
+ iLog->Log( line );
+ iErrorsFound++;
+ CleanupStack::PopAndDestroy( buf );
+ }
+ }
+ CleanupStack::PopAndDestroy(linebuffer);
+ CleanupStack::PopAndDestroy(correctLinebuffer);
+ CleanupStack::PopAndDestroy(&file);
+ CleanupStack::PopAndDestroy(&correctFile);
+
+ // EOF for trace file was reach before EOF in the correct file
+ if (done)
+ {
+ iLog->Log(_L("ERROR: EOF for Trace file was reached to early"));
+ iErrorsFound++;
+ }
+
+ iLog->Log(_L("Test with Empty MediaLink"));
+ PrintParsedDataFromEncoderL(KXMLFileWithEmptyMedialink, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithEmptyMedialink, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Empty Coordinates"));
+ PrintParsedDataFromEncoderL(KXMLFileWithEmptyCoordinates, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithEmptyCoordinates, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Empty AdresseInfo"));
+ PrintParsedDataFromEncoderL(KXMLFileWithEmptyAdresseInfo, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ // N/A for GPX
+
+ iLog->Log(_L("Test with Erronous Text in Tag1"));
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag1, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag1, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Erronous Text in Tag2"));
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag2, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag2, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Erronous Text in Tag3"));
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag3, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag3, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Erronous Text in Tag4"));
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag4, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag4, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Erronous Text in Tag5"));
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag5, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag5, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ iLog->Log(_L("Test with Erronous Text in Tag6"));
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag6, *emptyBuffer, KErrPosLmUnknownFormat, KLmxMimeType );
+ PrintParsedDataFromEncoderL(KXMLFileWithErronousTextInTag6, *emptyBuffer, KErrPosLmUnknownFormat, KGpxMimeType );
+
+ CheckIndexNotSupportedL();
+
+ DoCancelTestL();
+
+ if (iErrorsFound != KErrNone)// LogErrorAndLeave(_L("Errors found in TP47"));
+ {
+ iLog->Log(_L("Errors found in TP47"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::CheckIndexNotSupportedL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::CheckIndexNotSupportedL()
+ {
+ iLog->Log(_L("CheckIndexNotSupportedL"));
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+ iLandmarkParser->SetInputFileL(KFileName);
+
+ // This function should leave with KErrNotSupported
+ TRAPD(err, iOperation = iLandmarkParser->ParseContentL(ETrue));
+
+ delete iOperation;
+ iOperation = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ParseContentL(ETrue) did not leave with KErrNotSupported"));
+ User::Leave(err);
+ }
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KGpxMimeType);
+ iLandmarkParser->SetInputFileL(KFileName);
+
+ // This function should leave with KErrNotSupported
+ TRAP(err, iOperation = iLandmarkParser->ParseContentL(ETrue));
+
+ delete iOperation;
+ iOperation = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ if (err != KErrNotSupported)
+ {
+ iLog->Log(_L("ParseContentL(ETrue) (GPX) did not leave with KErrNotSupported"));
+ User::Leave(err);
+ }
+
+ iLog->Log(_L("CheckIndexNotSupportedL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::DoCancelTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::DoCancelTestL()
+ {
+ iLog->Log(_L("DoCancelTestL"));
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+ iLandmarkParser->SetInputFileL(KFileName);
+
+ iOperation = iLandmarkParser->ParseContentL();
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // 1 ) Cancel parse function by deleting iOperation
+ delete iOperation;
+ iOperation = NULL;
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAPD(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ // 1 ) Cancel parse function by changing input
+ iOperation = iLandmarkParser->ParseContentL();
+
+ // Get the first landmark
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 1)
+ {
+ iLog->Log(_L("One landmark should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // Change input
+ iLandmarkParser->SetInputFileL(KFileName);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != 0)
+ {
+ iLog->Log(_L("No landmarks should be found"));
+ User::Leave(KErrNone);
+ }
+
+ // No landmark should be found
+ TRAP(err, iLandmarkParser->LandmarkLC());
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: No Landmark should be found"));
+ iErrorsFound++;
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("DoCancelTestL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::CreateXMLData
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::CreateXMLData(TBool aUseFile)
+ {
+ iLog->Log(_L("CreateXMLData"));
+ // 1) Create an encoder object
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ if (aUseFile)
+ {
+ DeleteFileL(KFileName);
+ // 2) Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KFileName);
+ }
+ else
+ {
+ // 2) Use buffer for encoding
+ iEncoderBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ }
+
+ // 300 characters
+ _LIT(KLongFieldName, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
+ _LIT(KLongFieldDescription, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890");
+ _LIT(KLongFieldDescriptionExtra, "A________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________BA________B");
+ _LIT(KLongFieldDescriptionExtra2, "Extra Extra Extra Extra Extra Extra Extra Extra Extra Extra Extra Extra");
+
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionName, KLongFieldName);
+ iLandmarkEncoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, KLongFieldDescription);
+ iLandmarkEncoder->AddCollectionDataL((TPosLmCollectionDataId)(EPosLmCollDataContentSpecificDataBegin), KLongFieldDescriptionExtra);
+ iLandmarkEncoder->AddCollectionDataL((TPosLmCollectionDataId)(EPosLmCollDataContentSpecificDataBegin + 1), KLongFieldDescriptionExtra2);
+
+ iLog->Log(_L("Create Data..."));
+
+ // 3) Add one landmark with all fields set to be encoded
+ CPosLandmark* lm1 = CreateXMLLandmarkLC(_L("TP47Landmark1"));
+ AddAllXMLFieldsL(lm1);
+
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ // 4) Add one more landmark to be encoded (id27 "LOG9" in categories 11-17)
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(27);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 5) Add one category (pizzeria) to the latest added landmark
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(1);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ // 6) Add one landmark to be encoded (id=18 "enat?r" in category 18)
+ lm1 = iDatabase->ReadLandmarkLC(18);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ // Remove field 408 which is not exported
+ lm1->RemovePositionField(408);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ // 7) Add one category (Frisör) to the latest added landmark
+ landmarkCategory = categoryManager->ReadCategoryLC(18);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ // 8 ) Add one global category (Entertainment) to the latest added landmark
+
+ TPosLmItemId globalCategoryId = categoryManager->GetGlobalCategoryL(15000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found1"));
+ User::Leave(-1);
+ }
+
+ // 9 ) Add one global category (People) to the latest added landmark
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(27000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found2"));
+ User::Leave(-1);
+ }
+ // 11) Add one landmark with all fields set to empty (_L(""))
+ lm1 = CreateXMLLandmarkLC(_L("TP47LandmarkEmpty"));
+ AddAllEmptyXMLFieldsL(lm1);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ // Remove field 402 (EPositionFieldCountryCode) which is not exported when empty
+ lm1->RemovePositionField(402);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ // 12) Add one landmark with all fields set to be encoded
+ lm1 = CreateXMLLandmarkLC(_L("TP47Landmark2"));
+ AddAllXMLFieldsL(lm1);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ // 13) Add one global category (Shopping) to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(36000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found3"));
+ User::Leave(-1);
+ }
+
+ // 14) Add one global category (Sports) to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(42000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ // ) Finalize encoding
+ iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ iLog->Log(_L("FinalizeEncodingL Done"));
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::CheckXMLData
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::CheckXMLData(TBool aUseFile)
+ {
+ iLog->Log(_L("CheckXMLData"));
+
+ // This number must be updated if any more landmarks are added
+ const TInt KNrOfAddedLandmarks = 5;
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ HBufC8* bufferContent = NULL;
+
+ if (aUseFile)
+ {
+ iLog->Log(_L("----->Using FILE<-------"));
+ iLandmarkParser->SetInputFileL(KFileName);
+ }
+ else
+ {
+ iLog->Log(_L("----->Using BUFFER<-------"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ // 1) Get the first landmark, "TP47Landmark1", no categories
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 0, _L("1) Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != number)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+
+ // 2) Get landmark, "LOG9", local category Pizzeria
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 1, _L("2) Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(1);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+ CleanupStack::PopAndDestroy(lm);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != number)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+
+ // 3) Get landmark, "enato?r", local categories Frisör, Hunddagis and global categories Sports Ground, Gas Station
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 3, _L("3) Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+
+ // check local category Frisör here
+ category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ cat = categoryManager->ReadCategoryLC(18);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ // check global category Sports Ground globalid=7 (id=33) here
+ category = iLandmarkParser->LandmarkCategoryLC(array[1]);
+ // cat = categoryManager->ReadCategoryLC(33);
+ cat = categoryManager->ReadCategoryLC(31);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=3 Gas station" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[2]);
+ //cat = categoryManager->ReadCategoryLC(29);
+ cat = categoryManager->ReadCategoryLC(35);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ CleanupStack::PopAndDestroy(lm);
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != number)// LogErrorAndLeave(_L("Wrong number of landmarks parsed"));
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+
+ // 4) Get landmark, TP47LandmarkEmpty, no categories
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 0, _L("4) Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != number)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+
+ // 5) Get landmark, TP47Landmark2, local categories Burger King and global categories Garage, Bus Stop
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ // Get last parsed landmark
+ lm = iLandmarkParser->LandmarkLC();
+ lm->GetCategoriesL(array);
+ AssertTrueSecL(array.Count() == 2, _L("5) Wrong number of landmark categories"));
+ iErrorsFound += CompareXMLLandmarksL(*iLandmarks[number++], *lm);
+
+ // check global category Garage globalid=8 (id=34) here
+ category = iLandmarkParser->LandmarkCategoryLC(array[0]);
+ //cat = categoryManager->ReadCategoryLC(34);
+ cat = categoryManager->ReadCategoryLC(38);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+
+ //Check global category "id=10 Bus Stop" here
+ category = iLandmarkParser->LandmarkCategoryLC(array[1]);
+ // cat = categoryManager->ReadCategoryLC(36);
+ cat = categoryManager->ReadCategoryLC(40);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *category);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(category);
+ CleanupStack::PopAndDestroy(lm);
+
+ // Check that correct number of landmarks has been parsed
+ if (number != KNrOfAddedLandmarks)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+ nr = iLandmarkParser->NumOfParsedLandmarks();
+ if ((TInt)nr != KNrOfAddedLandmarks)
+ {
+ iLog->Log(_L("Wrong number of landmarks parsed"));
+ User::Leave(-1);
+ }
+
+ if (!aUseFile) CleanupStack::PopAndDestroy(bufferContent);
+
+ CleanupStack::PopAndDestroy(&array);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ // iEncoderBuffer was allocated in CreateXMLData
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLog->Log(_L("CheckXMLData Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::PrintParsedDataFromEncoderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::PrintParsedDataFromEncoderL(
+ const TDesC& aFile,
+ const TDesC8& aBuffer,
+ TInt aExpectedStatusCode,
+ const TDesC8& aMimeType)
+ {
+ iLog->Log(_L("===== PrintParsedDataFromEncoderL ======="));
+
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+
+ if (aFile != KNullDesC)
+ {
+ TFileName file( aFile );
+ if ( aMimeType == KGpxMimeType )
+ {
+ TInt pos = file.Find( KXmlFileExt );
+ file.Replace( pos, KXmlFileExt().Length(), KGpxFileExt );
+ }
+ iLog->Log(_L("FILE (%S)"), &file );
+ TraceL(_L("----->Using FILE<-------"));
+ iLog->Log(_L("Calling TraceL"));
+ TraceL(file);
+ iLog->Log(_L("Input file to be set"));
+ iLandmarkParser->SetInputFileL(file);
+ iLog->Log(_L("Input file set"));
+ }
+ else
+ {
+ iLog->Log(_L("BUFFER (size %d)"), aBuffer.Size() );
+ TraceL(_L("----->Using BUFFER<-------"));
+ iLandmarkParser->SetInputBuffer(aBuffer);
+ }
+
+ iOperation = iLandmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+ TInt number = 0;
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+ iLog->Log(_L("Parse begin"));
+ while (status == KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("--- Parsing ---------------------------"));
+ TraceL(_L("------------------------------"));
+ iOperation->NextStep(status, progress);
+
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ if (status != KPosLmOperationNotComplete && status != KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 128);
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tStatus %d"), status.Int());
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ if ( iLandmarkParser->NumOfParsedLandmarks() )
+ {
+ // Get last parsed landmark
+ CPosLandmark* lm = iLandmarkParser->LandmarkLC();
+ TPtrC lmName;
+ TPtrC catName;
+ lm->GetLandmarkName(lmName);
+ lm->GetCategoriesL(array);
+ //iLog->Log(lmName);
+ for (TInt i=0;i<array.Count();i++)
+ {
+ CPosLandmarkCategory* category = iLandmarkParser->LandmarkCategoryLC(array[i]);
+ category->GetCategoryName( catName );
+
+ HBufC* buffer = HBufC::NewLC( 128 + catName.Length());
+ TPtr buf = buffer->Des();
+
+ if ( category->GlobalCategory())
+ {
+ buf.Append(_L("\tGlobal category: "));
+ }
+ else
+ {
+ buf.Append(_L("\tLocal category: "));
+ }
+ buf.Append(catName);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy(buffer);
+ buffer = NULL;
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ if ( aMimeType == KKmlMimeType )
+ {
+ PrintLandmarkFieldsWithDescriptionL(*lm, ETrue);
+ }
+ else
+ {
+ PrintLandmarkFieldsL(*lm, ETrue);
+ }
+
+ number++;
+ CleanupStack::PopAndDestroy(lm);
+ }
+ }
+ }
+
+ iLog->Log(_L("--- Parsing end ---------------------------"));
+ TraceL(_L("------------------------------"));
+ CleanupStack::PopAndDestroy(&array);
+
+ if (status.Int() != aExpectedStatusCode)
+ {
+ HBufC* buffer = HBufC::NewLC( 128 );
+ TPtr buf = buffer->Des();
+
+ buf.Format(_L("\tERROR: Wrong status returned, was %d, should be %d"), status.Int(), aExpectedStatusCode);
+ iLog->Log( buf );
+ iErrorsFound++;
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ TUint32 nr = iLandmarkParser->NumOfParsedLandmarks();
+ HBufC* buffer = HBufC::NewLC( 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tNr of Parsed landmarks %d, should be %d"), nr, number);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ if (nr != (TUint32)number)
+ {
+ iLog->Log(_L("\tERROR: Wrong number of landmarks parsed returned!"));
+ iErrorsFound++;
+ }
+
+ TPosLmCollectionDataId lmId = iLandmarkParser->FirstCollectionDataId();
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(1)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 1"));
+ }
+
+ while (lmId != EPosLmCollDataNone)
+ {
+ lmId = iLandmarkParser->NextCollectionDataId(lmId);
+ if (lmId != EPosLmCollDataNone)
+ {
+ TPtrC first = iLandmarkParser->CollectionData(lmId);
+
+ HBufC* buffer = HBufC::NewLC( first.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Zero();
+ buf.Format(_L("\t(2)Collection Id: %d CollectionData: "), lmId);
+ buf.Append(first);
+ iLog->Log(buf);
+ TraceL(buf);
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+ else
+ {
+ iLog->Log(_L("\tNo collection data found 2"));
+ }
+ }
+
+ iLog->Log(_L("--- CollectionData ---"));
+ TraceL(_L("--- CollectionData ---"));
+
+
+ delete iOperation;
+ iOperation = NULL;
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("====== PrintParsedDataFromEncoderL Done ========\n"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp47::PrintLandmarkFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::PrintLandmarkFieldsL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+ TInt err;
+ TPtrC landmarkName;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+
+ buf.Append( _L(" \tLandmark Name: "));
+ buf.Append( landmarkName );
+ iLog->Log( buf );
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy(buffer);
+ }
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy( buffer );
+ }
+ }
+
+
+ // ---------------------------------------------------------
+// CPosTp47::PrintLandmarkFieldsWithDescriptionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::PrintLandmarkFieldsWithDescriptionL(const CPosLandmark& aLandmark, TBool aTraceFlag)
+ {
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+
+
+ TInt err;
+ TPtrC landmarkName;
+ TPtrC landmarkDescription;
+ err = aLandmark.GetLandmarkName(landmarkName);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkName.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Append(_L("\tLandmark Name: "));
+ buf.Append(landmarkName);
+ iLog->Log(buf);
+ if( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( 1024 );
+ TPtr buf = buffer->Des();
+ TRealFormat format( 12, KRealFormatFixed );
+ format.iPoint = TChar('.');
+ format.iTriLen = KDoNotUseTriads;
+ format.iPlaces = 6;
+
+ TBuf<20> sLon, sLat, sVacc, sHacc, sAlt, sRad;
+ sLon.Num( loc.Longitude(), format );
+ sLat.Num( loc.Latitude(), format );
+ sAlt.Num( loc.Altitude(), format );
+ sVacc.Num( loc.VerticalAccuracy(), format );
+ sHacc.Num( loc.HorizontalAccuracy(), format );
+ buf.Format(
+ _L("\tLM: Long %S Lat %S vertAcc %S horAcc %S alt %S "),
+ &sLon, &sLat, &sVacc, &sHacc, &sAlt);
+
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ sRad.Num( sourceR, format );
+ buf.AppendFormat(_L("srcRadius %S"), &sRad);
+ }
+ iLog->Log(buf);
+ if (aTraceFlag) TraceL(buf);
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+ //Get landmark description
+ err = aLandmark.GetLandmarkDescription(landmarkDescription);
+ if (err == KErrNone)
+ {
+ HBufC* buffer = HBufC::NewLC( landmarkDescription.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tLandmark Description: "));
+ buf.Append(landmarkDescription);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+
+ CleanupStack::PopAndDestroy( buffer );
+ buffer = NULL;
+ }
+
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+
+ HBufC* buffer = HBufC::NewLC( sourceValue.Length() + 256 );
+ TPtr buf = buffer->Des();
+ buf.Format(_L("\tIdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ if ( aTraceFlag )
+ {
+ TraceL( buf );
+ }
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+
+ CleanupStack::PopAndDestroy(buffer);
+ }
+}
+// ---------------------------------------------------------
+// CPosTp47::TraceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp47::TraceL(const TDesC& msg)
+ {
+ _LIT8( KEnd, "\r\n" );
+
+ RFile file;
+ TInt err = file.Open(iFileSession, KFileTrace, EFileWrite);
+ if (err == KErrNotFound)
+ {
+ file.Create(iFileSession, KFileTrace, EFileWrite);
+ }
+
+ HBufC8* line8 = CnvUtfConverter::ConvertFromUnicodeToUtf8L( msg );
+
+ TInt pos( 0 );
+ file.Seek( ESeekEnd, pos );
+ file.Write( *line8 );
+ file.Write( KEnd );
+ file.Close();
+
+ delete line8;
+ }
+
+void CPosTp47::MakeEmptyLmDatabaseL( CPosLandmarkDatabase& aLdb,
+ CPosLmCategoryManager& aCatMgr )
+ {
+
+ CPosLmOperation* operation1 = aLdb.RemoveAllLandmarksL();
+ //Remove all landmarks from default db : Sync call
+ ExecuteAndDeleteLD( operation1 );
+
+ RArray<TPosLmItemId> catArray;
+ CleanupClosePushL( catArray );
+
+ // Get all the categories from the database and delete them if necessary
+ CPosLmItemIterator* iter = aCatMgr.CategoryIteratorL();
+ CleanupStack::PushL( iter );
+
+ TUint count = iter->NumOfItemsL();
+ if ( count > 0 )
+ { // can only be called if there are some items
+ iter->GetItemIdsL( catArray, 0, count );
+ }
+
+ // Remove all the categories here Sync call
+ ExecuteAndDeleteLD(aCatMgr.RemoveCategoriesL( catArray ));
+ CleanupStack::PopAndDestroy( 2 ); // catArray, iter
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp48.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1442 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp48.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <LbsPosition.h>
+#include <bautils.h>
+
+// CONSTANTS
+_LIT(KXMLFile, "c:\\documents\\Tp48.xml");
+// Filename with 260 characters
+_LIT(KLongFileName, "c:\\File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File123456File12");
+_LIT(KEmptyFileName1, "c:\\");
+_LIT(KEmptyFileName2, "");
+_LIT(KNonExistingFileName, "c:\\NonExistingFile.xml");
+
+_LIT(KNewGlobalCategory, "OutSight");
+
+const TInt KOrigGlobalCategoryId = 45000;// "Transport"
+
+//#define DEBUG EFalse
+#define DEBUG ETrue
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp48::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iOperation;
+ iOperation = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::StartL()
+ {
+ BaflUtils::EnsurePathExistsL( iFileSession, KXMLFile );
+
+ TInt lang = User::Language();
+ iLog->Log(_L("StartL"));
+
+ // Use file
+ DoTestL(ETrue, EFalse);
+
+ // Use buffer
+ DoTestL(EFalse, EFalse);
+
+ // Use file, parse XML content before import
+ DoTestL(ETrue, ETrue);
+
+ // Use buffer, parse XML content before import
+ DoTestL(EFalse, ETrue);
+
+ // Use file, cancel before complete
+ iLog->Log(_L("Use file, cancel before complete"));
+ DoTestL(ETrue, EFalse, EFalse, ETrue);
+
+ iLog->Log(_L("Use buffer, cancel before complete"));
+ // Use buffer, cancel before complete
+ DoTestL(EFalse, EFalse, EFalse, ETrue);
+
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ // Remove one global category
+ iLog->Log(_L("TC_Step10 Delete one global category"));
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ // Remove global category "Hotel global id=4"
+
+ TPosLmItemId id = categoryManager->GetGlobalCategoryL(39000);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(id));
+
+ //Verify removed
+
+ id = categoryManager->GetGlobalCategoryL(39000);
+ if (id != KPosLmNullItemId)
+ {
+ iLog->Log(_L("Global category has not been removed"));
+ User::Leave(-1);
+ }
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+ iLandmarkParser->SetInputFileL(KXMLFile);
+
+ iLog->Log(_L("TC_Step11 Import all landmarks"));
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::EIncludeCategories));
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ //Verify that global category has been added again, since it is predefined it should be
+ // imported as a global category (otherwise it should be a local category)
+
+ id = categoryManager->GetGlobalCategoryL(39000);
+ if (id == KPosLmNullItemId) iLog->Log(_L("Global category has not been added"));
+
+ CPosLandmarkCategory* catte = categoryManager->ReadCategoryLC(id);
+
+ if (catte->GlobalCategory() == KPosLmNullGlobalCategory) iLog->Log(_L(" Not global category"));
+
+ CleanupStack::PopAndDestroy(catte);
+
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ // Rename one global category
+ // Rename global category "Shop global id=5" to Nisses BilAffär
+ iLog->Log(_L("TC_Step12 Rename one global category"));
+ id = categoryManager->GetGlobalCategoryL(15000);
+ catte = categoryManager->ReadCategoryLC(id);
+ catte->SetCategoryNameL(_L("Nisses BilAffär"));
+ categoryManager->UpdateCategoryL(*catte);
+ CleanupStack::PopAndDestroy(catte);
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+ iLandmarkParser->SetInputFileL(KXMLFile);
+
+ iLog->Log(_L("TC_Step13 Import all landmarks"));
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::EIncludeCategories));
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ //Verify that global category has been added again, since it is predefined it should be
+ // imported as a global category (otherwise it should be a local category)
+
+ TPosLmItemId id1 = categoryManager->GetGlobalCategoryL(15000);
+ if (id1 == KPosLmNullItemId) iLog->Log(_L("Global category has not been added"));
+
+ TPosLmItemId id2 = categoryManager->GetCategoryL(_L("Nisses BilAffär"));
+ if (id2 == KPosLmNullItemId) iLog->Log(_L("Global category has not been added 2"));
+
+ if (id1 != id2)
+ {
+ iLog->Log(_L("Categories should have the same id"));
+ User::Leave(-1);
+ }
+
+ catte = categoryManager->ReadCategoryLC(id1);
+ if (catte->GlobalCategory() == KPosLmNullGlobalCategory) iLog->Log(_L("Nisses Bilaffär is no global category"));
+
+ id = categoryManager->GetCategoryL(_L("Shop"));
+ if (id != KPosLmNullItemId) iLog->Log(_L("Shop should not exist"));
+
+ CleanupStack::PopAndDestroy(catte);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ iLog->Log(_L("TC_Step14 Test import with long file name"));
+ ImportFromFileWithLongFileNameL();
+
+ iLog->Log(_L("TC_Step15 Change "));
+ DoTestChangeInputMethodL();
+
+ if (iErrorsFound != KErrNone)
+ {
+
+ iLog->Log(_L("Errors were found in TP48"));
+ User::Leave(-1);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::DoTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::DoTestL(TBool aFile, TBool aFullParse, TBool aDoParse, TBool aCancel)
+ {
+ iLog->Log(_L("DoTestL"));
+
+ // find localized name of needed category
+ HBufC* origGlobalCategory = GetGlobalCategoryFromResourceLC( KOrigGlobalCategoryId );
+
+ RArray<TUint> subset;
+ CleanupClosePushL(subset);
+
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+
+ HBufC8* bufferContent = NULL;
+
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ if (aFile)
+ {
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ }
+ else
+ {
+ // Use buffer for encoding
+ iEncoderBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+ }
+
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step2 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step2 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ iLog->Log(_L("TC_Step3 Import all landmarks Synchronously"));
+ ImportLandmarksL(ETrue, aFullParse, CPosLandmarkDatabase::EDefaultOptions, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step3 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step3 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ iLog->Log(_L("TC_Step3 Import all landmarks Asynchronously"));
+ ImportLandmarksL(EFalse, aFullParse, CPosLandmarkDatabase::EDefaultOptions, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step3 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step3 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ iLog->Log(_L("TC_Step3 Import all landmarks Synchronously"));
+ ImportLandmarksL(ETrue, aFullParse, CPosLandmarkDatabase::EDefaultOptions, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+
+ // Only import a subset of landmarks
+ iLog->Log(_L("TC_Step4 Only import a subset of landmarks, Sync"));
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step4 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step4 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ subset.Append(0);
+ subset.Append(1);
+ subset.Append(2);
+ subset.Append(3);
+
+ delete iLandmarks[7];
+ delete iLandmarks[6];
+ delete iLandmarks[5];
+ delete iLandmarks[4];
+
+ iLandmarks.Remove(7);
+ iLandmarks.Remove(6);
+ iLandmarks.Remove(5);
+ iLandmarks.Remove(4);
+
+ ImportLandmarksL(ETrue, aFullParse, CPosLandmarkDatabase::EDefaultOptions, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+ subset.Reset();
+
+ // Only import a subset of landmarks
+ iLog->Log(_L("TC_Step4 Only import a subset of landmarks, Async"));
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step4 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step4 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ subset.Append(0);
+ subset.Append(1);
+ subset.Append(2);
+ subset.Append(3);
+
+ delete iLandmarks[7];
+ delete iLandmarks[6];
+ delete iLandmarks[5];
+ delete iLandmarks[4];
+
+ iLandmarks.Remove(7);
+ iLandmarks.Remove(6);
+ iLandmarks.Remove(5);
+ iLandmarks.Remove(4);
+
+ ImportLandmarksL(EFalse, aFullParse, CPosLandmarkDatabase::EDefaultOptions, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+ subset.Reset();
+
+ iLog->Log(_L("TC_Step5 Only import a subset of landmarks, use EIncludeCategories, ASync"));
+ ResetLandmarksDbL();
+ subset.Reset();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ subset.Append(0);
+ subset.Append(1);
+ subset.Append(2);
+ subset.Append(3);
+ subset.Append(7);
+
+ delete iLandmarks[6];
+ delete iLandmarks[5];
+ delete iLandmarks[4];
+
+ iLandmarks.Remove(6);
+ iLandmarks.Remove(5);
+ iLandmarks.Remove(4);
+
+ ImportLandmarksL(EFalse, aFullParse, CPosLandmarkDatabase::EIncludeCategories, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+
+ iLog->Log(_L("TC_Step5 Only import a subset of landmarks, use EIncludeCategories, Sync"));
+ ResetLandmarksDbL();
+ subset.Reset();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ subset.Append(0);
+ subset.Append(1);
+ subset.Append(2);
+ subset.Append(3);
+ subset.Append(7);
+
+ delete iLandmarks[6];
+ delete iLandmarks[5];
+ delete iLandmarks[4];
+
+ iLandmarks.Remove(6);
+ iLandmarks.Remove(5);
+ iLandmarks.Remove(4);
+
+ ImportLandmarksL(ETrue, aFullParse, CPosLandmarkDatabase::EIncludeCategories, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+ // Since only EIncludeCategories was used, the global category should not have been overwritten
+ CheckGlobalCategoryExistL(*origGlobalCategory, KNewGlobalCategory);
+
+ // Now use EIncludeCategories | EIncludeGlobalCategoryNames which should cause the global cateory name to
+ // be overwritten
+ iLog->Log(_L("TC_Step5 Only import a subset of landmarks, use EIncludeCategories | EIncludeGlobalCategoryNames, Sync"));
+ subset.Reset();
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ subset.Append(0);
+ subset.Append(1);
+ subset.Append(2);
+ subset.Append(3);
+ subset.Append(4);
+ subset.Append(5);
+ subset.Append(6);
+ subset.Append(7);
+
+ ImportLandmarksL(ETrue, aFullParse, CPosLandmarkDatabase::EIncludeCategories | CPosLandmarkDatabase::EIncludeGlobalCategoryNames, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+ // Since EIncludeCategories| EIncludeGlobalCategoryNames was used, the global category should have been overwritten
+ // Dont do check if cancel was performed
+ if (!aCancel) CheckGlobalCategoryExistL(KNewGlobalCategory, *origGlobalCategory);
+
+ iLog->Log(_L("TC_Step5 Only import a subset of landmarks, use EIncludeCategories | EIncludeGlobalCategoryNames, Async"));
+ ResetLandmarksDbL();
+ DeleteFileL(KXMLFile);
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ // Use file for encoding, set output file
+ iLandmarkEncoder->SetOutputFileL(KXMLFile);
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ if (aFile)
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from XML File"));
+ iLandmarkParser->SetInputFileL(KXMLFile);
+ }
+ else
+ {
+ iLog->Log(_L("TC_Step5 Set input to be parsed from buffer"));
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+ }
+
+ ImportLandmarksL(EFalse, aFullParse, CPosLandmarkDatabase::EIncludeCategories | CPosLandmarkDatabase::EIncludeGlobalCategoryNames, subset, aDoParse, aCancel);
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ if (!aFile) CleanupStack::PopAndDestroy(bufferContent);
+ // Since EIncludeCategories| EIncludeGlobalCategoryNames was used, the global category should have been overwritten
+ // Dont do check if cancel was performed
+ if (!aCancel) CheckGlobalCategoryExistL(KNewGlobalCategory, *origGlobalCategory);
+
+ CleanupStack::PopAndDestroy(&subset);
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+ CleanupStack::PopAndDestroy( origGlobalCategory );
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::ImportLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::ImportLandmarksL(TBool aSync, TBool aFullParse, TUint aTransferOption, const RArray<TUint>& aLandmarkSubSet, TBool aDoParse, TBool aCancel)
+ {
+ iLog->Log(_L("ImportLandmarksL"));
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress = 0;
+
+ if (aFullParse)
+ {
+ // ParseContent before importing
+ ExecuteAndDeleteLD(iLandmarkParser->ParseContentL());
+ iLog->Log(_L("After ExecuteAndDeleteLD(iLandmarkParser->ParseContentL());"));
+ }
+
+ if (aDoParse)
+ {
+ // Do an "almost full" parsecontent before import
+ iOperation = iLandmarkParser->ParseContentL();
+
+
+ while (progress <0.7)
+ {
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ }
+ iLog->Log(_L("After aDoParse"));
+ delete iOperation;
+ iOperation = NULL;
+ }
+
+ if (aLandmarkSubSet.Count() == 0)
+ {
+ iOperation = iDatabase->ImportLandmarksL(*iLandmarkParser, aTransferOption);
+ }
+ else
+ {
+ // Import only a subset of the landmarks in parser
+ iOperation = iDatabase->ImportLandmarksL(*iLandmarkParser, aLandmarkSubSet, aTransferOption);
+ }
+
+ if (aSync)
+ {
+ // Synchronous
+ ExecuteAndDeleteLD(iOperation);
+ iOperation = NULL;
+ iLog->Log(_L("After aSync"));
+ }
+ else
+ {
+ // Asynchronous
+ // Progress us checked in test procedure base
+ if (aCancel)
+ {
+
+ // It is no more possible to do WaitForRequest after ImportLandmarksL
+ RunAsyncOperationAndCancelInCallbackLD(iOperation);
+ iOperation = NULL;
+ iLog->Log(_L("After aCancel"));
+ }
+ else
+ {
+ RunAsyncOperationLD(iOperation);
+ iOperation = NULL;
+ iLog->Log(_L("After RunAsyncOperationLD(iOperation);"));
+ }
+ }
+
+ if (!aCancel) CheckLandmarksDatabaseL(aTransferOption);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::ResetLandmarksDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::ListLandmarksDbL()
+ {
+ iLog->Log(_L("ListLandmarksDbL"));
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+
+ iLog->Log(_L("Landmarks:"));
+ TPosLmItemId id = iter->NextL();
+ TBuf<255> buffe;
+ while (id != KPosLmNullItemId)
+ {
+ TPtrC name;
+
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(id);
+ lm->GetLandmarkName(name);
+
+ buffe.Zero();
+ buffe.Append(name);
+ lm->GetCategoriesL(categories);
+
+ buffe.Append(_L(" With Categories: "));
+ iLog->Log(buffe);
+ for (TInt i=0;i<categories.Count();i++)
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(categories[i]);
+ cat->GetCategoryName(name);
+ buffe.Zero();
+ buffe.Append(name);
+ iLog->Log(buffe);
+ CleanupStack::PopAndDestroy(cat);
+ }
+ CleanupStack::PopAndDestroy(lm);
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(&categories);
+ CleanupStack::PopAndDestroy(iter);
+
+ iter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+
+ iLog->Log(_L("Categories:"));
+ id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ TPtrC name;
+ TBuf<255> buffe;
+
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(id);
+ cat->GetCategoryName(name);
+ buffe.Zero();
+ buffe.Append(name);
+ iLog->Log(buffe);
+ CleanupStack::PopAndDestroy(cat);
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::ResetLandmarksDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::ResetLandmarksDbL()
+ {
+ iLog->Log(_L("ResetLandmarksDbL"));
+
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ // Use same lm db as in composite search test
+ iDatabase = UseCompositeLandmarksDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ iLog->Log(_L("ResetLandmarksDbL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::DoTestChangeInputMethodL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::DoTestChangeInputMethodL()
+ {
+ iLog->Log(_L("DoTestChangeInputMethodL"));
+ ResetLandmarksDbL();
+
+ HBufC8* bufferContent = NULL;
+
+ iLandmarkEncoder = CPosLandmarkEncoder::NewL(KLmxMimeType);
+ iEncoderBuffer = iLandmarkEncoder->SetUseOutputBufferL();
+
+ CreateXMLDataL();
+ delete iLandmarkEncoder;
+ iLandmarkEncoder = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+
+ bufferContent = HBufC8::NewLC(iEncoderBuffer->Size());
+ TPtr8 ptr = bufferContent->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ iLandmarkParser->SetInputBuffer(*bufferContent);
+
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress = 0;
+
+ // Do an "almost full" parsecontent
+ iOperation = iLandmarkParser->ParseContentL();
+ while (progress <0.5)
+ {
+ iOperation->NextStep(status, progress);
+ // Wait for NextStep to complete
+ User::WaitForRequest(status);
+ }
+
+ delete iOperation;
+ iOperation = NULL;
+
+ // Change input method
+ iLandmarkParser->SetInputFileL(KXMLFile);
+
+ // Now import all XML data from file
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iLandmarkParser, CPosLandmarkDatabase::EDefaultOptions));
+ CheckLandmarksDatabaseL(CPosLandmarkDatabase::EDefaultOptions);
+
+ CleanupStack::PopAndDestroy(bufferContent);
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::ImportFromFileWithLongFileNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::ImportFromFileWithLongFileNameL()
+ {
+ iLog->Log(_L("ImportFromFileWithLongFileNameL"));
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ iLandmarkParser = CPosLandmarkParser::NewL(KLmxMimeType);
+ TRAPD(err, iLandmarkParser->SetInputFileL(KLongFileName));
+
+ // Error differs between winscw and target
+
+ if ( err != KErrBadName )
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ERROR: SetInputFileL should leave with KErrBadName, instead err: %d"), err);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+
+ // Also test empty filename here
+ TRAP(err, iLandmarkParser->SetInputFileL(KEmptyFileName1));
+ if (err != KErrBadName)
+ {
+ iLog->Log(_L("ERROR: SetInputFileL(KEmptyFileName1) should leave with KErrBadName"));
+ iErrorsFound++;
+ }
+
+ // Also test empty filename here
+ TRAP(err, iLandmarkParser->SetInputFileL(KEmptyFileName2));
+ if (err != KErrBadName)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("ERROR: SetInputFileL(KEmptyFileName2) should leave with KErrBadName, instead err: %d"), err);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+
+ // Also test non existing filen here
+ TRAP(err, iLandmarkParser->SetInputFileL(KNonExistingFileName));
+ if (err != KErrNotFound)
+ {
+ iLog->Log(_L("ERROR: SetInputFileL(KNonExistingFileName) should leave with KErrNotFound"));
+ iErrorsFound++;
+ }
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLog->Log(_L("ImportFromFileWithLongFileNameL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::CheckLandmarksDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::CheckLandmarksDatabaseL(TUint aTransferOption)
+ {
+ iLog->Log(_L("CheckLandmarksDatabaseL"));
+ iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ TUint attr = CPosLandmark::ELandmarkName;
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ RArray<TPosLmItemId> sourceArray;
+ CleanupClosePushL(sourceArray);
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ TInt nrOfLandmarks = iLandmarks.Count();
+ TPtrC lmName;
+
+ for (TInt i=0;i<nrOfLandmarks; i++)
+ {
+ iLandmarks[i]->GetLandmarkName(lmName);
+
+ textCriteria->SetAttributesToSearch(attr);
+ textCriteria->SetTextL(lmName);
+
+ ExecuteAndDeleteLD(iLandmarkSearch->StartLandmarkSearchL(*textCriteria));
+
+ CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ TUint nr = iLandmarkSearch->NumOfMatches();
+ iLog->Log(_L("****** Found %d nr of landmarks when looking for '%S'"),nr, &lmName);
+ TPosLmItemId id = iter->NextL();
+
+ if (nr > 1)
+ {
+ // The first landmark is the one existing in db before import,
+ // no need to check that one, only the one added from import (the second one)
+ id = iter->NextL();
+ }
+
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* source = iDatabase->ReadLandmarkLC(id);
+ TPtrC sourceName;
+ source->GetLandmarkName(sourceName);
+
+ iLog->Log(_L("Found landmark '%S'"), &sourceName);
+
+ TInt err = CompareXMLLandmarksL(*iLandmarks[i], *source, DEBUG);
+ if (err != KErrNone)
+ {
+ PrintLandmarkIdFieldsL(*iLandmarks[i]);
+ PrintLandmarkIdFieldsL(*source);
+ iLog->Log(_L("ERROR: CompareXMLLandmarksL returned error"));
+ iErrorsFound+=err;
+ }
+
+ source->GetCategoriesL(sourceArray);
+ iLandmarks[i]->GetCategoriesL(array);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ if (aTransferOption == CPosLandmarkDatabase::EDefaultOptions)
+ {
+ // No categories imported
+ if (sourceArray.Count() != 0)
+ {
+ iLog->Log(_L("ERROR: No categories should have been imported, found %d "), sourceArray.Count());
+ iErrorsFound++;
+ }
+ }
+ else
+ {
+ if (sourceArray.Count() != array.Count())
+ {
+ for (TInt j=0;j<sourceArray.Count();j++)
+ {
+ CPosLandmarkCategory* sourceCat = categoryManager->ReadCategoryLC(sourceArray[j]);
+ TPtrC sourceName;
+ sourceCat->GetCategoryName( sourceName );
+ iLog->Log(_L("Found category '%S'"), &sourceName);
+ }
+ iLog->Log(_L("ERROR: Nr of categories differ, was %d should be %d"), sourceArray.Count(), array.Count());
+ User::Leave(KErrNone);
+ }
+
+ for (TInt j=0;j<sourceArray.Count();j++)
+ {
+ iLog->Log(_L("Src Id: %d Id: %d"), sourceArray[j], array[j]);
+
+ CPosLandmarkCategory* sourceCat = categoryManager->ReadCategoryLC(sourceArray[j]);
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(array[j]);
+ TPtrC sourceName, name;
+ cat->GetCategoryName(name);
+ sourceCat->GetCategoryName(sourceName);
+ iLog->Log(_L("Found category, source cat '%S', cat '%S'"), &sourceName, &name);
+ iErrorsFound += CompareXMLCategoriesL(*cat, *sourceCat, DEBUG);
+ CleanupStack::PopAndDestroy(cat);
+ CleanupStack::PopAndDestroy(sourceCat);
+ }
+ }
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ CleanupStack::PopAndDestroy(source);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+ CleanupStack::PopAndDestroy(&array);
+ CleanupStack::PopAndDestroy(&sourceArray);
+ CleanupStack::PopAndDestroy(textCriteria);
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::RemoveCategoriesFromLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::RemoveCategoriesFromLandmarkL(CPosLandmark& aLandmark)
+ {
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+
+ aLandmark.GetCategoriesL(array);
+
+ for (TInt i=0;i<array.Count();i++)
+ {
+ aLandmark.RemoveCategory(array[i]);
+ }
+ CleanupStack::PopAndDestroy(&array);
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::CreateXMLDataL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::CreateXMLDataL()
+ {
+ iLog->Log(_L("CreateXMLDataL"));
+
+ // 3 Add one landmark to be encoded (id7 name "Billigt" in categories 1-3,14-17)
+ CPosLandmark* lm1 = iDatabase->ReadLandmarkLC(7);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+ // Remove field 408 which is not exported
+ lm1->RemovePositionField(408);
+ RemoveCategoriesFromLandmarkL(*lm1);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+ // 4 Add one more landmark to be encoded (id27 "LOG9" in categories 11-17)
+ CPosLandmark* lm2 = iDatabase->ReadLandmarkLC(27);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+
+ // 5 Create a new category and add to the latest added landmark
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(37);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ RemoveCategoriesFromLandmarkL(*lm2);
+ lm2->AddCategoryL(37);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 6 Add one more landmark to be encoded (id52 "Kalles Hundgård" in category 19)
+ lm2 = iDatabase->ReadLandmarkLC(52);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+
+ // 7 Add several global and local categories to the latest added landmark
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ landmarkCategory = categoryManager->ReadCategoryLC(26);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ landmarkCategory = categoryManager->ReadCategoryLC(25);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+
+ TPosLmItemId globalCategoryId = categoryManager->GetGlobalCategoryL(3000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found1"));
+ User::Leave(-1);
+ }
+
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(15000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found2"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ RemoveCategoriesFromLandmarkL(*lm2);
+ lm2->AddCategoryL(26);
+ lm2->AddCategoryL(25);
+ lm2->AddCategoryL(27);
+ lm2->AddCategoryL(31);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 8 Add one landmark (not containing any categories), id=11 "MLFW"
+ lm2 = iDatabase->ReadLandmarkLC(11);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+ RemoveCategoriesFromLandmarkL(*lm2);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 9 Add one more landmark (not containing any categories), id=56 "TE, Lund"
+ lm2 = iDatabase->ReadLandmarkLC(56);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+
+ // 10 Add one category to the latest added landmark
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ landmarkCategory = categoryManager->ReadCategoryLC(18);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ RemoveCategoriesFromLandmarkL(*lm2);
+ lm2->AddCategoryL(18);
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 11 Add one landmark (not containing any categories), id=43 "asdf"
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ lm2 = iDatabase->ReadLandmarkLC(43);
+ iLandmarkEncoder->AddLandmarkL(*lm2);
+ // Remove field 408 which is not exported
+ lm2->RemovePositionField(408);
+
+ // 12 Add several local and global categories to the latest added landmark
+ landmarkCategory = categoryManager->ReadCategoryLC(23);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ landmarkCategory = categoryManager->ReadCategoryLC(17);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(39000);
+
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found3"));
+ User::Leave(-1);
+ }
+
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(27000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ RemoveCategoriesFromLandmarkL(*lm2);
+ lm2->AddCategoryL(23);
+ lm2->AddCategoryL(17);
+ lm2->AddCategoryL(39);
+ lm2->AddCategoryL(35);
+
+ iLandmarks.Append(lm2);
+ CleanupStack::Pop(lm2);
+
+ // 13) Add a landmark with fields that are encoded to XML set
+ lm1 = CreateXMLLandmarkLC(_L("TP48LandmarkWithAllXMLFields"));
+ AddAllXMLFieldsL(lm1);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+
+ // 13) Add one global category (Garage) to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(24000);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ // 14) Add one global category (Bus stop) to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(42000);//30000
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ // 15) Add one category (BurgerKing) to the latest added landmark
+ landmarkCategory = categoryManager->ReadCategoryLC(17);
+
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ RemoveCategoriesFromLandmarkL(*lm1);
+ lm1->AddCategoryL(34);
+ lm1->AddCategoryL(40);
+ lm1->AddCategoryL(17);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ // 16 Create new landmark with empty fields
+ lm1 = CreateXMLLandmarkLC(_L("TP48Landmark With Empty XML Fields"));
+ AddAllEmptyXMLFieldsL(lm1);
+ iLandmarkEncoder->AddLandmarkL(*lm1);
+
+ // 17 Create a new category and add to the latest added landmark
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ //landmarkCategory = CPosLandmarkCategory::NewLC();
+ landmarkCategory = categoryManager->ReadCategoryLC(38);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+ // 18 Add global category "Outsight" which is "Sight" id=6 with changed name
+ // and add to the latest added landmark
+ globalCategoryId = categoryManager->GetGlobalCategoryL(KOrigGlobalCategoryId);
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ landmarkCategory->SetCategoryNameL(KNewGlobalCategory);
+ categoryManager->UpdateCategoryL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+
+
+ globalCategoryId = categoryManager->GetGlobalCategoryL(KOrigGlobalCategoryId);
+ if (globalCategoryId != KPosLmNullItemId)
+ {
+ landmarkCategory = categoryManager->ReadCategoryLC(globalCategoryId);
+ iLandmarkEncoder->AddCategoryForLatestLandmarkL(*landmarkCategory);
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ }
+ else
+ {
+ iLog->Log(_L("Global category was not found4"));
+ User::Leave(-1);
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ RemoveCategoriesFromLandmarkL(*lm1);
+ // The new category will have id=38
+ lm1->AddCategoryL(38);
+ lm1->AddCategoryL(globalCategoryId);
+ // Remove field 402 which is not included
+ lm1->RemovePositionField(402);
+ iLandmarks.Append(lm1);
+ CleanupStack::Pop(lm1);
+
+ // 13 Finalize encoding
+ //iLog->Log(_L("FinalizeEncodingL"));
+ ExecuteAndDeleteLD(iLandmarkEncoder->FinalizeEncodingL());
+ //iLog->Log(_L("FinalizeEncodingL Done"));
+
+ categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ //Change back name for this global category, needed to test use of TTransferOptions::EIncludeGlobalCategoryNames
+ // by resetting global categories
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ iLog->Log(_L("CreateXMLDataL Done"));
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp48::CheckGlobalCategoryExistL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::CheckGlobalCategoryExistL(const TDesC& aShouldExistName, const TDesC& aShouldNotExistName)
+ {
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ // Should be found
+ TPosLmItemId id1 = categoryManager->GetCategoryL(aShouldExistName);
+ // Should not be found
+ TPosLmItemId id2 = categoryManager->GetCategoryL(aShouldNotExistName);
+
+ if (id1 == KPosLmNullItemId)
+ {
+ iLog->Log(_L("ERROR: CheckGlobalCategoryExistL Global Category '%S' should be found"),
+ &aShouldExistName);
+ iErrorsFound++;
+ }
+
+ if (id2 != KPosLmNullItemId)
+ {
+ iLog->Log(_L("ERROR: CheckGlobalCategoryExistL Global Category '%S' should NOT be found"),
+ &aShouldNotExistName);
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp48::PrintLandmarkIdFieldsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp48::PrintLandmarkIdFieldsL(const CPosLandmark& aLandmark)
+ {
+ TPositionFieldId sourceFieldId = aLandmark.FirstPositionFieldId();
+ TLocality loc;
+ TBuf<150> buf;
+ TInt err = aLandmark.GetPosition(loc);
+ if (err == KErrNone)
+ {
+ TReal vertAcc(loc.VerticalAccuracy());
+ TReal horAcc(loc.HorizontalAccuracy());
+ TReal alt(loc.Altitude());
+ TReal lon = loc.Longitude();
+ TReal lat = loc.Latitude();
+ TReal32 sourceR;
+ err = aLandmark.GetCoverageRadius(sourceR);
+ if (err == KErrNone )
+ {
+ buf.Format(_L("LM: Long %f Lat %f vertAcc %f horAcc %f alt %f srcRadius %f"), lon, lat, vertAcc, horAcc, alt, sourceR);
+ }
+ else
+ {
+ buf.Format(_L("LM: Long %f Lat %f vertAcc %f horAcc %f alt %f "), lon, lat, vertAcc, horAcc, alt);
+ }
+ iLog->Log(buf);
+ }
+
+ while (sourceFieldId != EPositionFieldNone)
+ {
+ TPtrC sourceValue;
+ aLandmark.GetPositionField(sourceFieldId, sourceValue);
+ buf.Format(_L("IdField Id: %d Value:"), sourceFieldId);
+ buf.Append(sourceValue);
+ iLog->Log(buf);
+ sourceFieldId = aLandmark.NextPositionFieldId(sourceFieldId);
+ }
+ }
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp49.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,472 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp49.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <Xml/XmlParserErrors.h>
+
+// CONSTANTS
+#ifdef __WINS__
+_LIT(KFileWithCorrectSyntax, "z:\\system\\test\\testdata\\Tp49ImportInput.xml");
+_LIT(KFileWithSyntaxError, "z:\\system\\test\\testdata\\Tp49ImportInputSyntaxError.xml");
+#else
+_LIT(KFileWithCorrectSyntax, "c:\\system\\test\\testdata\\Tp49ImportInput.xml");
+_LIT(KFileWithSyntaxError, "c:\\system\\test\\testdata\\Tp49ImportInputSyntaxError.xml");
+#endif
+const TInt KNrOfImportedLandmarks = 7;
+
+#ifdef __WINS__
+const TInt KNrOfCorrectLandmarks = 3;
+#else
+const TInt KNrOfCorrectLandmarks = 4;
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp49::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP49 - Iterate imported landmarks");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::InitTestL()
+ {
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ SetupPreConditionsL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::CloseTest()
+ {
+ // Delete and set base class members to NULL
+ delete iOperation;
+ iOperation = NULL;
+ delete iIterator;
+ iIterator = NULL;
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iLandmarkParser;
+ iImportedLandmarkIds.Close();
+ iRemovedLandmarkIds.Close();
+
+ delete iLandmarkNames;
+ iLandmarkNames = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::NotifyProgress
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::NotifyProgress(TReal aProgress)
+ {
+ if (aProgress > iProgressInterruptLevel)
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::StartL()
+ {
+ // <<<<<<<<<<<<<< 1-2 Import unparsed landmarks >>>>>>>>>>>>>>>>>>>
+ RecreateParserL(KFileWithCorrectSyntax);
+ ImportAllLandmarksL();
+ FetchIteratorL();
+ VerifyImportedLandmarksL(KNrOfImportedLandmarks);
+
+ // <<<<<<<<<<<<<< 3-5 Import parsed landmarks >>>>>>>>>>>>>>>>>>>
+ RecreateParserL(KFileWithCorrectSyntax);
+ ParseLandmarksContentL();
+ ImportAllLandmarksL();
+ FetchIteratorL();
+ VerifyImportedLandmarksL(KNrOfImportedLandmarks);
+
+ // <<<<<<<<<<<<<< 6-8 Remove some imported landmarks >>>>>>>>>>>>>>>>>>>
+ RecreateParserL(KFileWithCorrectSyntax);
+ ImportAllLandmarksL();
+ FetchIteratorL();
+ RemoveThreeLandmarksL();
+ FetchIteratorL();
+ VerifyImportedLandmarksL(KNrOfImportedLandmarks);
+
+ // <<<<<<<<<<<<<< 9-10 Fetch iterator before import is ready >>>>>>>>>>>>>>>>>>>
+ iProgressInterruptLevel = 0.5; // Cancel the import operation when half ready.
+ TInt nrOfLandmarks = ImportSomeLandmarksL();
+ // Cancel import operation, otherwise db will be locked when verifying
+ delete iOperation; iOperation = NULL;
+ VerifyImportedLandmarksL(nrOfLandmarks);
+
+ // <<<<<<<<<<<<<< 11-12 Fetch iterator before import is started >>>>>>>>>>>>>>>>>>>
+ iProgressInterruptLevel = 0; // Cancel the import operation as fast as possible.
+ nrOfLandmarks = ImportSomeLandmarksL();
+ // Cancel import operation, otherwise db will be locked when verifying
+ delete iOperation; iOperation = NULL;
+ VerifyImportedLandmarksL(nrOfLandmarks);
+
+ // <<<<<<<<<<<<<< 13-14 Fetch iterator if import fails >>>>>>>>>>>>>>>>>>>
+ RecreateParserL(KFileWithSyntaxError);
+ StartImportLandmarksL();
+ ExecuteLmOpL(EXmlTagMismatch);
+ FetchIteratorL();
+ CreateNameArrayL(KNrOfCorrectLandmarks);
+ // We don't need to cancel operation since import operation failed. Hence
+ // it should release the database lock itself.
+ // delete iOperation; iOperation = NULL;
+ // Note: It seems that there is a difference between target and emulator in the number of imported
+ // landmarks in each next step, thus it differs in the number of imported lms before the incorrect xml-landmark
+ // is found
+ VerifyImportedLandmarksL(KNrOfCorrectLandmarks);
+
+ // <<<<<<<<<<<<<< 15 Test leave codes - nothing to do >>>>>>>>>>>>>>>>>>>
+ iLog->Put(_L("TP49 Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::ImportAllLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::ImportAllLandmarksL()
+ {
+ // Fetch nr of existing items before import
+ CPosLmItemIterator* iterator = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iterator);
+ TInt nrOfItems = iterator->NumOfItemsL();
+ CleanupStack::PopAndDestroy(iterator);
+
+ StartImportLandmarksL();
+ ExecuteLmOpL(KErrNone);
+ CreateNameArrayL(KNrOfImportedLandmarks);
+
+ // Check nr of landmarks in db after import
+ iterator = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iterator);
+ _LIT(KErrMsg, "Not all landmarks were imported to database!");
+ TInt nrOfImportedItems = iterator->NumOfItemsL() - nrOfItems;
+ AssertTrueSecL(
+ nrOfImportedItems == KNrOfImportedLandmarks, KErrMsg, KErrGeneral);
+ CleanupStack::PopAndDestroy(iterator);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::ImportSomeLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp49::ImportSomeLandmarksL()
+ {
+ RecreateParserL(KFileWithCorrectSyntax);
+ StartImportLandmarksL();
+ ExecuteLmOpL(KPosLmOperationNotComplete, ETrue);
+ FetchIteratorL();
+ CreateNameArrayL(iIterator->NumOfItemsL());
+ return iIterator->NumOfItemsL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::ParseLandmarksContentL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::ParseLandmarksContentL()
+ {
+ delete iOperation;
+ iOperation = NULL;
+ iOperation = iLandmarkParser->ParseContentL();
+ ExecuteLmOpL(KErrNone);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::RemoveThreeLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::RemoveThreeLandmarksL()
+ {
+ // It is important that the highest index is removed first.
+ TInt indexToRemove[] = {6, 5, 2};
+
+ const TInt KNrOfItemsToRemove = 3;
+ _LIT(KErrMsg, "Removed landmark exists in database!");
+
+ for (TInt i = 0; i < KNrOfItemsToRemove; i++)
+ {
+ User::LeaveIfError(
+ iRemovedLandmarkIds.Append(iImportedLandmarkIds[indexToRemove[i]]));
+ iLandmarkNames->Delete(indexToRemove[i]);
+ iDatabase->RemoveLandmarkL(iImportedLandmarkIds[indexToRemove[i]]);
+
+ // Verify landmark is removed
+ CPosLandmark* lm = NULL;
+ TRAPD(err, lm = iDatabase->ReadLandmarkLC(iImportedLandmarkIds[indexToRemove[i]]));
+ delete lm;
+ lm = NULL;
+ AssertTrueSecL(err == KErrNotFound, KErrMsg, KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::VerifyImportedLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::VerifyImportedLandmarksL(TInt aNrOfExpectedItems)
+ {
+ iLog->Put(_L("VerifyImportedLandmarksL"));
+ // Iterate through all imported landmarks
+ TInt i = 0;
+ TPosLmItemId id = iIterator->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = NULL;
+ if (iRemovedLandmarkIds.Find(id) == KErrNotFound)
+ {
+ // The landmark has not been removed from database.
+ // Try to read the imported landmark.
+ lm = iDatabase->ReadLandmarkLC(id);
+
+ // Verify that the landmark name exists in the name array.
+ _LIT(KErrMsg, "Unexpected landmark name");
+ _LIT(KErrMsg1, "GetLandmarkName returned KErrNotFound");
+ TPtrC name;
+ TInt res = lm->GetLandmarkName(name);
+ if (res == KErrNotFound)
+ {
+ // No name found at all
+ LogErrorAndLeave(KErrMsg1, KErrGeneral);
+ }
+ else
+ {
+ TInt index;
+ iLog->Put(name);
+ res = iLandmarkNames->Find(name, index);
+ if (res != KErrNone)
+ {
+ // Found name does not match any name in the array.
+ LogErrorAndLeave(KErrMsg, KErrGeneral);
+ }
+ }
+ CleanupStack::PopAndDestroy(lm);
+ }
+ else
+ {
+ // The landmark has been removed from db.
+ // Verify that landmark does not exist in database.
+ _LIT(KErrMsg, "Removed landmark exists in database!");
+ TRAPD(err, lm = iDatabase->ReadLandmarkLC(id));
+ delete lm;
+ lm = NULL;
+ AssertTrueSecL(err == KErrNotFound, KErrMsg, KErrGeneral);
+ }
+
+ i++;
+ id = iIterator->NextL();
+ }
+
+ // Verify that length of iterator is equal to the nr of imported landmarks.
+ _LIT(KErrMsg, "Nr of iterated landmarks did not match the nr of imported.");
+ AssertTrueSecL(i == aNrOfExpectedItems, KErrMsg, KErrGeneral);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::SetupPreConditionsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::SetupPreConditionsL()
+ {
+ // Precondition: A non-empty database exists
+ CPosLandmarkDatabase* db = OpenDatabaseLC();
+ CleanupStack::Pop(db);
+ iDatabase = db;
+
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ // Add one item to make it non-empty
+ CPosLandmark* dummy = CPosLandmark::NewLC();
+ iDatabase->AddLandmarkL(*dummy);
+ CleanupStack::PopAndDestroy(dummy);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::ExecuteLmOpL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::ExecuteLmOpL(TInt aExpectedResult, TBool aObserveProgress)
+ {
+ CActiveLmOperation* operationWrapper =
+ new (ELeave) CActiveLmOperation(iLog);
+ CleanupStack::PushL(operationWrapper);
+
+ if (aObserveProgress)
+ {
+ operationWrapper->Start(iOperation, this);
+ }
+ else
+ {
+ operationWrapper->Start(iOperation);
+ }
+
+ CActiveScheduler::Start();
+ if (aExpectedResult == KErrNone)
+ {
+ operationWrapper->CheckOperationL();
+ }
+ else
+ {
+ if (aExpectedResult != operationWrapper->Status())
+ {
+ _LIT(KErrMsg, "Expected result %d but got %d");
+ TBuf<50> msg;
+ msg.Format(KErrMsg, aExpectedResult, operationWrapper->Status());
+ LogErrorAndLeave(msg, KErrGeneral);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(operationWrapper);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::FetchIteratorL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::FetchIteratorL()
+ {
+ delete iIterator;
+ iIterator = NULL;
+ iIterator = iDatabase->ImportedLandmarksIteratorL(iOperation);
+ TBuf<100> buf;
+ iImportedLandmarkIds.Close();
+ TInt nrOfItems = (TInt) iIterator->NumOfItemsL();
+ buf.Format(_L("Retreving %d nr of ids from iterator"), nrOfItems);
+ iLog->Put(buf);
+ if (nrOfItems > 0)
+ {
+ iIterator->GetItemIdsL(iImportedLandmarkIds, 0, nrOfItems);
+ }
+ buf.Zero();
+ for (TInt i=0;i<iImportedLandmarkIds.Count();i++)
+ {
+ TBuf<15> idde;
+ idde.Format(_L(" Id:%d "), iImportedLandmarkIds[i]);
+ buf.Append(idde);
+ }
+ iLog->Put(buf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::RecreateParserL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::RecreateParserL(const TDesC& aFileName)
+ {
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+ iLandmarkParser = CPosLandmarkParser::NewL(KMimeType);
+ iLandmarkParser->SetInputFileL(aFileName);
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::StartImportLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::StartImportLandmarksL()
+ {
+ delete iOperation;
+ iOperation = NULL;
+ iLog->Put(_L("Innan ImportLandmarksL"));
+ iOperation = iDatabase->ImportLandmarksL(
+ *iLandmarkParser, CPosLandmarkDatabase::EDefaultOptions);
+ iLog->Put(_L("EfterImportLandmarksL"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp49::CreateNameArrayL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp49::CreateNameArrayL(TInt aNrOfItems)
+ {
+ _LIT(KName0, "Landmark 0");
+ _LIT(KName1, "Landmark 1");
+ _LIT(KName2, "Landmark 2");
+ _LIT(KName3, "Landmark 3");
+ _LIT(KName4, "Landmark 4");
+ _LIT(KName5, "Landmark 5");
+ _LIT(KName6, "Landmark 6");
+
+ const TDesC* names[] = {&KName0, &KName1, &KName2, &KName3, &KName4,
+ &KName5, &KName6};
+
+ // Create array of landmark names. Names match those specified in the
+ // import file.
+ delete iLandmarkNames;
+ iLandmarkNames = new (ELeave) CDesCArrayFlat(8);
+ for (TInt i = 0; i < aNrOfItems; i++)
+ {
+ iLandmarkNames->AppendL(*names[i]);
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp5.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,614 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp5.h"
+#include <EPos_CPosLandmark.h>
+#include <LbsPosition.h>
+#include <e32def.h>
+#include <e32std.h>
+#include <e32math.h>
+
+
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+// _LIT(KGetNameErr, "GetLandmarks name returns incorrect error code");
+_LIT(KNameErr, "Landmark name is incorrect");
+_LIT(KIdErr, "Landmark Id is incorrect");
+_LIT(KLongitudeErr, "Longitude is incorrect");
+
+_LIT(KLatitudeErr, "Latitude is incorrect");
+_LIT(KHorizontalAccErr, "Horizontal accuracy is incorrect");
+_LIT(KVerticalAccErr, "Vertical accuracy is incorrect");
+_LIT(KAltitudeErr, "Altitude is incorrect");
+_LIT(KNumOfAvailablePositionFieldsErr, "NumOfAvailablePositionFields is incorrect");
+_LIT(KNumOfategoriesErr, "Number of categories is incorrect");
+_LIT(KCoverageRadiusErr, "CoverageRadius is incorrect");
+_LIT(KIconIndexErr, "Icon index is incorrect");
+_LIT(KIconMaskIndexErr, "Icon MaskIndex is incorrect");
+_LIT(KMbmFileNameErr, "MbmFileName is incorrect");
+_LIT(KDescriptionErr, "Description is incorrect");
+_LIT(KPositionFieldErr, "Error in positions fields");
+
+_LIT(KNameTp5, "Lm-Tp5");
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp5::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::StartL()
+ {
+ _LIT(KNameTp5, "Lm-Tp5");
+ RemoveDefaultDbL();
+ CPosLandmark* landmark = CreateLandmarkLC(KNameTp5);
+
+ CheckGetMethodsL(landmark);
+
+ CheckRemoveMethodsL(landmark);
+
+ CheckFieldsMaxLengthL();
+
+ CleanupStack::PopAndDestroy(); // landmark
+
+ CheckNaNErrorL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp5::CheckGetMethods
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::CheckGetMethodsL(CPosLandmark* aLandmark)
+ {
+
+ TPtrC landmarkName;
+ aLandmark->GetLandmarkName(landmarkName);
+ AssertTrueSecL(landmarkName.Compare(KNameTp5) == KErrNone, KNameErr);
+ AssertTrueSecL(aLandmark->LandmarkId() == 0, KIdErr);
+
+ CPosLandmarkDatabase* lmd = OpenDatabaseLC();
+ TPosLmItemId id=lmd->AddLandmarkL(*aLandmark);
+ AssertTrueSecL(aLandmark->LandmarkId() == id, KIdErr);
+
+ TLocality loc2;
+ aLandmark->GetPosition(loc2);
+ AssertTrueSecL(loc2.Longitude() == KLongitude, KLongitudeErr);
+ AssertTrueSecL(loc2.Latitude() == KLatitude, KLatitudeErr);
+ AssertTrueSecL(loc2.HorizontalAccuracy() == KHorizontalAcc, KHorizontalAccErr);
+ AssertTrueSecL(loc2.VerticalAccuracy() == KVerticalAcc, KVerticalAccErr);
+ AssertTrueSecL(loc2.Altitude() == KAltitude, KAltitudeErr);
+
+ TReal32 r;
+ aLandmark->GetCoverageRadius(r);
+ AssertTrueSecL(r == KCoverageRadius, KCoverageRadiusErr);
+
+ TPtrC mbmFileName;
+ TInt index;
+ TInt indexMask;
+ aLandmark->GetIcon(mbmFileName, index, indexMask);
+ AssertTrueSecL(mbmFileName.Compare(KMbmFileName) == KErrNone, KMbmFileNameErr);
+ AssertTrueSecL(index == KIconIndex, KIconIndexErr);
+ AssertTrueSecL(indexMask == KIconMaskIndex, KIconMaskIndexErr);
+
+ TPtrC desc;
+ aLandmark->GetLandmarkDescription(desc);
+ AssertTrueSecL(desc.Compare(KDescription) == KErrNone, KDescriptionErr);
+ AssertTrueSecL(KNoPosFields == aLandmark->NumOfAvailablePositionFields(), KNumOfAvailablePositionFieldsErr);
+
+ TPositionFieldId posFieldId = aLandmark->FirstPositionFieldId();
+ for (TUint i=0; i<KNoPosFields-1; i++)
+ {
+ CheckPositionFieldL(*aLandmark, posFieldId);
+ posFieldId=aLandmark->NextPositionFieldId(posFieldId);
+ }
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ aLandmark->GetCategoriesL(categories);
+ AssertTrueSecL(categories.Count() == KNoCategories, KNumOfategoriesErr);
+ CleanupStack::PopAndDestroy(2,lmd);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp5::CheckRemoveMethodsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::CheckRemoveMethodsL(CPosLandmark* aLandmark)
+ {
+ aLandmark->RemoveLandmarkAttributes(CPosLandmark::ENoAttribute);
+ aLandmark->RemoveLandmarkAttributes(CPosLandmark::EPosition);
+ aLandmark->RemoveLandmarkAttributes(CPosLandmark::ECoverageRadius);
+ aLandmark->RemoveLandmarkAttributes(CPosLandmark::ECategoryInfo);
+ aLandmark->RemoveLandmarkAttributes(CPosLandmark::EIcon);
+ aLandmark->RemoveLandmarkAttributes(CPosLandmark::EDescription);
+
+ CheckRemovedL(aLandmark);
+ _LIT(KLandmarkName, "Nisse");
+ CPosLandmark* landmark = CreateLandmarkLC(KLandmarkName);
+ landmark->RemoveLandmarkAttributes(CPosLandmark::EAllAttributes);
+ CheckRemovedL(landmark);
+
+
+ TUint16 tmp = (TUint16)EPositionFieldMediaLinksStart;
+ landmark->RemovePositionField(EPositionFieldMediaLinksStart);
+ landmark->RemovePositionField(EPositionFieldCountry);
+ landmark->RemovePositionField(EPositionFieldHorizontalSpeed);
+ // FrBo Below has been removed
+
+ landmark->RemovePositionField(EPositionFieldMediaLinks);
+ landmark->RemovePositionField(EPositionFieldMediaLinksStart);
+ landmark->RemovePositionField(++tmp);
+ landmark->RemovePositionField(++tmp);
+ landmark->RemovePositionField(EPositionFieldIdLast);
+
+ TPtrC ptr;
+ AssertTrueSecL(landmark->GetPositionField(EPositionFieldMediaLinksStart, ptr) == KErrNotFound, KPositionFieldErr);
+ AssertTrueSecL(landmark->GetPositionField(EPositionFieldCountry, ptr) == KErrNotFound, KPositionFieldErr);
+ AssertTrueSecL(landmark->GetPositionField(EPositionFieldHorizontalSpeed, ptr) == KErrNotFound, KPositionFieldErr);
+ // FrBo Below has been removed
+
+ AssertTrueSecL(landmark->GetPositionField(EPositionFieldMediaLinks, ptr) == KErrNotFound, KPositionFieldErr);
+ AssertTrueSecL(landmark->GetPositionField(EPositionFieldMediaLinksStart, ptr) == KErrNotFound, KPositionFieldErr);
+ AssertTrueSecL(landmark->GetPositionField(++tmp, ptr) == KErrNotFound, KPositionFieldErr);
+ AssertTrueSecL(landmark->GetPositionField(++tmp, ptr) == KErrNotFound, KPositionFieldErr);
+ AssertTrueSecL(landmark->GetPositionField(EPositionFieldIdLast, ptr) == KErrNotFound, KPositionFieldErr);
+
+ // Remove some non-existing fields, nothing should happen
+ landmark->RemovePositionField(6000);
+ AssertTrueSecL(landmark->GetPositionField(6000, ptr) == KErrNotFound, KPositionFieldErr);
+ landmark->RemovePositionField(6001);
+ AssertTrueSecL(landmark->GetPositionField(6001, ptr) == KErrNotFound, KPositionFieldErr);
+
+ CleanupStack::PopAndDestroy(); // landmark
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp5::CheckRemovedL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::CheckRemovedL(CPosLandmark* aLandmark)
+ {
+ _LIT(KPositionRemovedErr, "GetPosition is not returning an error code when position is not set");
+ TLocality loc;
+ AssertTrueSecL(aLandmark->GetPosition(loc) == KErrNotFound, KPositionRemovedErr);
+
+ RArray<TPosLmItemId> categories;
+ CleanupClosePushL(categories);
+ aLandmark->GetCategoriesL(categories);
+ AssertTrueSecL(categories.Count() == 0, KNumOfategoriesErr);
+ CleanupStack::PopAndDestroy(&categories);
+
+ TReal32 r;
+ AssertTrueSecL(aLandmark->GetCoverageRadius(r) == KErrNotFound, KCoverageRadiusErr);
+
+ TPtrC mbmFileName;
+ TInt index;
+ TInt indexMask;
+ AssertTrueSecL(aLandmark->GetIcon(mbmFileName, index, indexMask) == KErrNotFound, KMbmFileNameErr);
+
+ TPtrC desc;
+ AssertTrueSecL(aLandmark->GetLandmarkDescription(desc) == KErrNotFound, KDescriptionErr);
+ }
+
+//---------------------------------------------------------
+// CPosTp5::CheckPositionFieldIdL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::CheckPositionFieldL(const CPosLandmark& aLandmark, const TUint16 aId)
+ {
+
+ _LIT(KPositionFieldIdErr, "PositionFieldId is incorrect");
+ _LIT(KComparePositionFieldValueErr, "PositionField value is different from set value");
+
+ TUint16 tmp = (TUint16)EPositionFieldMediaLinksStart;
+ TBuf<100> buf;
+ buf.Format(_L("Looking for id:%d "),aId);
+ iLog->Log(buf);
+
+ TPtrC value;
+ if (aId == EPositionFieldCountry)
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KCountry) == KErrNone, KComparePositionFieldValueErr);
+ }
+ else if (aId == EPositionFieldHorizontalSpeed)
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KHorizontalSpeed) == KErrNone, KComparePositionFieldValueErr);
+ }
+
+ else if (aId == EPositionFieldMediaLinks)
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KMediaLinks) == KErrNone, KComparePositionFieldValueErr);
+ }
+ else if (aId == EPositionFieldMediaLinksStart)
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KMediaLink1) == KErrNone, KComparePositionFieldValueErr);
+ iLog->Log(_L("EPositionFieldMediaLinksStart"));
+ }
+ else if (aId == EPositionFieldIdLast)
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KLast) == KErrNone, KComparePositionFieldValueErr);
+ }
+ else if (aId == (tmp+1))
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KMediaLink2) == KErrNone, KComparePositionFieldValueErr);
+ }
+ else if(aId == (tmp+2))
+ {
+ aLandmark.GetPositionField(aId, value);
+ AssertTrueSecL(value.Compare(KMediaLink3) == KErrNone, KComparePositionFieldValueErr);
+ }
+ else
+ {
+ buf.Format(_L("Looking for id: %d %d %d"), aId, (tmp+1), (tmp+2));
+ iLog->Log(buf);
+ iLog->Log(KPositionFieldIdErr);
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp5::CheckFieldsMaxLength
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::CheckFieldsMaxLengthL()
+ {
+
+ _LIT(K255Error, "Text field is not limited to 255 characters");
+ _LIT(K4095Error, "Description field is not limited to 4095 characters");
+ _LIT(KIconError, "Icon File Name field is not limited to correct nr of characters");
+
+ HBufC* hbuf = HBufC::NewLC(4096);
+ while(hbuf->Des().Length() < 255)
+ {
+ hbuf->Des().Append(_L("X"));
+ }
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(*hbuf);
+ landmark->SetLandmarkDescriptionL(*hbuf);
+ landmark->SetPositionFieldL(EPositionFieldCountry, *hbuf);
+ hbuf->Des().Append(_L("X"));
+
+ TRAPD(err, landmark->SetLandmarkNameL(*hbuf));
+ AssertTrueSecL(err == KErrArgument, K255Error);
+
+ landmark->SetLandmarkDescriptionL(*hbuf);
+
+ TRAP(err, landmark->SetPositionFieldL(EPositionFieldCountry, *hbuf));
+ AssertTrueSecL(err == KErrArgument, K255Error);
+
+ while(hbuf->Des().Length() < 4095)
+ {
+ hbuf->Des().Append(_L("X"));
+ }
+ landmark->SetLandmarkDescriptionL(*hbuf);
+ hbuf->Des().Append(_L("X"));
+ TRAP(err, landmark->SetLandmarkDescriptionL(*hbuf));
+ AssertTrueSecL(err == KErrArgument, K4095Error);
+
+ CleanupStack::PopAndDestroy(2, hbuf);
+
+ // Test setIconL
+ // KMaxFileName is defined in e32const.h
+ HBufC* icon = HBufC::NewLC(KMaxFileName+1);
+ while(icon->Des().Length() < KMaxFileName)
+ {
+ icon->Des().Append(_L("X"));
+ }
+
+ landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("SomeLandmarkName"));
+ landmark->SetLandmarkDescriptionL(_L("SomeLandmarkDescription"));
+ landmark->SetIconL(*icon, 1, KPosLmIconMaskNotUsed);
+
+ icon->Des().Append(_L("X"));
+
+ TRAP(err, landmark->SetIconL(*icon, 1, KPosLmIconMaskNotUsed));
+ AssertTrueSecL(err == KErrArgument, KIconError);
+ CleanupStack::PopAndDestroy(landmark);
+ CleanupStack::PopAndDestroy(icon);
+
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp5::CheckNaNErrorL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp5::CheckNaNErrorL()
+ {
+ iLog->Log(_L("CheckErrorL"));
+ CPosLandmarkDatabase* lmdb = OpenDatabaseLC();
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+
+ ExecuteAndDeleteLD(lmdb->CompactL());
+ TInt errorsFound = KErrNone;
+ TRealX NaN;
+ NaN.SetNaN();
+
+ // Used for testing SDK:
+ // This part should result in log:
+ // Not Equal1
+ // Not Equal2
+ TRealX pos1;
+ TRealX pos2;
+
+ iLog->Log(_L("Testing with NaN and 45"));
+ pos1.SetNaN();
+ pos2 = 45;
+
+ if (pos2 == pos1)
+ iLog->Log(_L("Equal1"));
+ else
+ iLog->Log(_L("Not Equal1"));
+
+ if (pos2 != pos1)
+ iLog->Log(_L("Not Equal2"));
+ else
+ iLog->Log(_L("Equal2"));
+
+
+ iLog->Log(_L("Testing with NaN and 0"));
+ pos1.SetNaN();
+ pos2 = 0;
+
+ if (pos2 == pos1)
+ iLog->Log(_L("Equal1"));
+ else
+ iLog->Log(_L("Not Equal1"));
+
+ if (pos2 != pos1)
+ iLog->Log(_L("Not Equal2"));
+ else
+ iLog->Log(_L("Equal2"));
+
+ iLog->Log(_L("Testing with NaN and NaN"));
+ pos1.SetNaN();
+ pos2.SetNaN();
+
+ if (pos2 == pos1)
+ iLog->Log(_L("Equal1"));
+ else
+ iLog->Log(_L("Not Equal1"));
+
+ if (pos2 != pos1)
+ iLog->Log(_L("Not Equal2"));
+ else
+ iLog->Log(_L("Equal2"));
+
+ landmark->SetLandmarkNameL(_L("TestingLandmarkError"));
+
+ // Only set position with Latitude and Longitude (thus Altitude and Accuracy is NaN)
+ TLocality loc;
+ loc.SetCoordinate(1,2);
+ landmark->SetPositionL(loc);
+
+ TPosLmItemId myId = lmdb->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ //////////////////////////////////////
+ // Test Altitude
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->GetPosition(loc);
+
+ loc.SetCoordinate(1,2, 123);
+ landmark->SetPositionL(loc);
+
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ TLocality loc3;
+ landmark->GetPosition(loc3);
+
+ if (TRealX(loc3.Altitude()).IsNaN())
+ {
+ iLog->Log(_L("Error: Altitude is Nan"));
+ errorsFound++;
+ }
+ else if (loc3.Altitude() != 123)
+ {
+ iLog->Log(_L("Error: Incorrect altitude returned"));
+ errorsFound++;
+ }
+
+ // Reset landmark
+ loc.SetCoordinate(1,2, NaN);
+ landmark->SetPositionL(loc);
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ //////////////////////////////////////
+ // Test Horizontal accuracy
+ landmark = lmdb->ReadLandmarkLC(myId);
+ loc.SetCoordinate(1,2, NaN);
+ loc.SetHorizontalAccuracy(12);
+ landmark->SetPositionL(loc);
+
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->GetPosition(loc3);
+
+ if (TRealX(loc3.HorizontalAccuracy()).IsNaN())
+ {
+ iLog->Log(_L("Error: Horizontal accuracy is Nan"));
+ errorsFound++;
+ }
+ else if (loc3.HorizontalAccuracy() != 12)
+ {
+ iLog->Log(_L("Error: Incorrect horizontal accuracy returned"));
+ errorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(landmark);
+
+ //////////////////////////////////////
+ // Test with NaN for hor acc
+ landmark = lmdb->ReadLandmarkLC(myId);
+ loc.SetCoordinate(1,2, NaN);
+ loc.SetHorizontalAccuracy(NaN);
+ landmark->SetPositionL(loc);
+
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->GetPosition(loc3);
+
+ if (TRealX(loc3.HorizontalAccuracy()).IsNaN())
+ {
+ iLog->Log(_L("Horizontal accuracy is correctly set to Nan"));
+ }
+ else
+ {
+ iLog->Log(_L("Error: Incorrect horizontal accuracy returned"));
+ errorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(landmark);
+
+ //////////////////////////////////////
+ // Test Vertical accuracy
+ landmark = lmdb->ReadLandmarkLC(myId);
+ loc.SetCoordinate(1,2, NaN);
+ loc.SetVerticalAccuracy(21);
+ landmark->SetPositionL(loc);
+
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->GetPosition(loc3);
+
+ if (TRealX(loc3.VerticalAccuracy()).IsNaN())
+ {
+ iLog->Log(_L("Error: Vertical accuracy is Nan"));
+ errorsFound++;
+ }
+ else if (loc3.VerticalAccuracy() != 21)
+ {
+ iLog->Log(_L("Error: Incorrect vertical accuracy returned"));
+ errorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(landmark);
+
+ //////////////////////////////////////
+ // Test landmark description
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->SetLandmarkDescriptionL(_L("TestingLandmarkErrorDescription"));
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ TPtrC des;
+ landmark->GetLandmarkDescription(des);
+ TInt res = des.CompareC(_L("TestingLandmarkErrorDescription"));
+
+ if (res != KErrNone)
+ {
+ iLog->Log(_L("Error: Incorrect description returned"));
+ errorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(landmark);
+
+ //////////////////////////////////////
+ // Test coverage radius
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->SetCoverageRadius(15);
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->GetPosition(loc3);
+ TReal32 radius;
+ landmark->GetCoverageRadius(radius);
+ if (TRealX(radius).IsNaN())
+ {
+ iLog->Log(_L("Error: Radius is Nan"));
+ errorsFound++;
+ }
+ else if (radius != 15)
+ {
+ iLog->Log(_L("Error: Incorrect radius returned"));
+ errorsFound++;
+ }
+ //////////////////////////////////////
+ CleanupStack::PopAndDestroy(landmark);
+ //////////////////////////////////////
+ // Test coverage radius, part2
+ // Set coverage radius to NaN
+ landmark = lmdb->ReadLandmarkLC(myId);
+ TRealX nan;
+ nan.SetNaN();
+ landmark->SetCoverageRadius(nan);
+ lmdb->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ landmark = lmdb->ReadLandmarkLC(myId);
+ landmark->GetPosition(loc3);
+
+ res = landmark->GetCoverageRadius(radius);
+ if (res != KErrNotFound)
+ {
+ iLog->Log(_L("Error: GetCoverageRadius should return KErrNotFound when set to NaN"));
+ errorsFound++;
+ }
+ //////////////////////////////////////
+ CleanupStack::PopAndDestroy(landmark);
+
+ CleanupStack::PopAndDestroy(lmdb);
+
+ if (errorsFound != KErrNone)
+ {
+
+ iLog->Log(_L("Errors found in part CheckNaNErrorL()"));
+ User::Leave(-1);
+ }
+
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp50.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,449 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp50.h"
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <LbsPosition.h>
+#include <e32std.h>
+#include <ss_std.h>
+
+
+const TInt KNoMultipleClients = 5;
+_LIT(KExportFile, "c:\\TP50-ExportedFile.xml");
+
+_LIT(KAllLandmarks, "c:\\TP50-AllLandmarks.xml");
+
+_LIT(KAllLandmarksIndex, "c:\\TP50-AllLandmarks%d.xml");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp50::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP50 - Multiple import operations");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::CloseTest()
+ {
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iUseLogFromThreadIsDisabled = EFalse;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::StartL()
+ {
+ MakeSurePanicDebugFileExistsL();
+
+ iDatabase = UseGeneratedDbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ ExportLandmarksL();
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ // We want an empty database
+ RemoveDefaultDbL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iUseLogFromThreadIsDisabled = ETrue;
+
+ iLog->Put(_L("Imports landmarks syncronously simultaneously"));
+ iTestStep=0;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ iLog->Put(_L("Imports landmarks incrementally simultaneously"));
+ ++iTestStep;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ iLog->Put(_L("A search is started but no step is executed"));
+ ++iTestStep;
+
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ textCriteria->SetTextL(_L("kalle"));
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CleanupStack::PushL(landmarkSearch);
+
+ CPosLmOperation* op = landmarkSearch->StartLandmarkSearchL(*textCriteria);
+ CleanupStack::PushL(op);
+
+ iLog->Put(_L("Imports landmarks syncronously simultaneously (all should fail)"));
+ StartMultipleClientsL(KNoMultipleClients);
+
+ iLog->Put(_L("The search is cancelled"));
+ CleanupStack::PopAndDestroy(op);
+
+ iLog->Put(_L("Imports landmarks syncronously simultaneously (at least one should succed)"));
+ ++iTestStep;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ CleanupStack::PopAndDestroy(2, textCriteria);
+
+ TestESLI_64LLU3L();
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::StartMultipleClientsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::StartMultipleClientsL(const TUint aNoClients)
+ {
+ _LIT(KMultipleErr, "Error %d from thread %d");
+ _LIT(KPanicErr, "Thread %d has panicked or is alive");
+ _LIT(KAllErr, "Wrong number of threads left with error");
+ _LIT(KSuccess, "Threads %d is successful");
+ _LIT(KAllNotFailedErr, "All imports haven't failed");
+
+ CreateThreadsL(aNoClients);
+
+ RArray<TRequestStatus> statuses;
+ CleanupClosePushL(statuses);
+
+ for (TUint j=0; j<aNoClients; j++)
+ {
+ TRequestStatus status;
+ statuses.Append(status);
+ }
+
+ TInt i=0;
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ User::WaitForRequest(statuses[i]);
+ }
+
+ TInt errors=0;
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ TInt exitReason = iThreads[i].ExitReason();
+ TBuf<100> info;
+
+ if (exitReason != KErrNone)
+ {
+ errors++;
+ info.Format(KMultipleErr, exitReason, i+1);
+ }
+ else
+ {
+ info.Format(KSuccess, i+1);
+ }
+ iLog->Put(info);
+
+ AssertTrueSecL(iThreads[i].ExitType() == EExitKill, KPanicErr, i+1);
+ AssertTrueSecL(exitReason == KErrNone || exitReason == KErrLocked, info);
+ }
+
+ if (iTestStep != EReadLockTaken)
+ {
+ AssertTrueSecL(errors == KNoMultipleClients - 1, KAllErr);
+ }
+ else
+ {
+ // All imports should have failed since the started search should have taken a read lock
+ AssertTrueSecL(errors == KNoMultipleClients, KAllNotFailedErr);
+ }
+
+ for (i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreadIndex=0;
+ iThreads.Close();
+ CleanupStack::PopAndDestroy(&statuses);
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::RunTestL(TAny* aData)
+ {
+ CPosTp50* self = reinterpret_cast<CPosTp50*>(aData);
+ TInt index = ++self->iThreadIndex;
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(KMimeType);
+ CleanupStack::PushL(parser);
+
+
+ TBuf<100> fileName;
+ fileName.Format(KAllLandmarksIndex, index);
+
+ parser->SetInputFileL(fileName);
+
+ _LIT(KInfo, "Thread %d");
+ TBuf<100> info;
+ info.Format(KInfo, index);
+ RDebug::Print(info);
+
+ CPosLmOperation* op = lmd->ImportLandmarksL(*parser, CPosLandmarkDatabase::EDefaultOptions);
+
+ _LIT(KInfo2, "Thread %d before execute");
+ info.Format(KInfo2, index);
+ RDebug::Print(info);
+
+ switch (self->iTestStep)
+ {
+ //case self->ESync:
+ case ESync:
+ //case self->EReadLockTaken:
+ case EReadLockTaken:
+ //case self->ESearchCancelled:
+ case ESearchCancelled:
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+ break;
+ //case self->EInc:
+ case EInc:
+ self->RunAsyncOperationLD(op);
+ break;
+ }
+
+ _LIT(KInfo3, "Thread %d after execute");
+ info.Format(KInfo3, index);
+ RDebug::Print(info);
+
+ CleanupStack::PopAndDestroy(parser);
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+
+// ---------------------------------------------------------
+// ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp50::RunTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::CreateThreadsL(const TUint aNoThreads)
+ {
+ _LIT(KThreadName, "TP50 test thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TUint i=0; i<aNoThreads; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, 1+iThreads.Count());
+
+ TInt err;
+ err = thread.Create(name, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::ExportAllLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::ExportLandmarksL()
+ {
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ fs.Delete(KAllLandmarks);
+
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KMimeType);
+ CleanupStack::PushL(encoder);
+
+ encoder->SetOutputFileL(KAllLandmarks);
+
+ CPosLmOperation* op = iDatabase->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+ CleanupStack::PopAndDestroy(op);
+
+ op = encoder->FinalizeEncodingL();
+ CleanupStack::PushL(op);
+ op->ExecuteL();
+
+ // Create a file to be used from each thread
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ for (TInt i=0; i<KNoMultipleClients; i++)
+ {
+ TBuf<100> fileName;
+ fileName.Format(KAllLandmarksIndex, i+1);
+ fs.Delete(fileName);
+
+ User::LeaveIfError(fileMan->Copy(KAllLandmarks, fileName, CFileMan::EOverWrite));
+ }
+
+ CleanupStack::PopAndDestroy(6, &fs);
+ }
+
+// ---------------------------------------------------------
+// CPosTp50::TestESLI_64LLU3L
+// ESLI-64LLU3 - read/write lock only affects the same database instance.
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp50::TestESLI_64LLU3L()
+ {
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ fs.Delete(KExportFile);
+ fs.Close();
+
+ // Create encoder that will take read lock
+ CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KMimeType);
+ CleanupStack::PushL(encoder);
+ encoder->SetOutputFileL(KExportFile);
+
+ // Create another db handle
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ // Create array of ids to export
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+ User::LeaveIfError(arrayOfIds.Append(1));
+ User::LeaveIfError(arrayOfIds.Append(2));
+ User::LeaveIfError(arrayOfIds.Append(3));
+
+ // Take read lock by starting exporting
+ CPosLmOperation* op = lmd->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions);
+ CleanupStack::PushL(op);
+
+ // Verify take write lock fails on db instance 2
+ TRAPD(err, lmd->RemoveLandmarkL(1));
+ AssertTrueSecL(err == KErrLocked, _L("Didn't get KErrLocked but %d"), err);
+
+ // Verify take write lock fails on db instance 1
+ TRAP(err, iDatabase->RemoveLandmarkL(1));
+ AssertTrueSecL(err == KErrLocked, _L("Didn't get KErrLocked but %d"), err);
+
+ // Lock should prevent import threads to complete successfully
+ iTestStep = EReadLockTaken;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ // Release lock - import threads should complete successfully
+ CleanupStack::PopAndDestroy(op);
+ iTestStep = ESync;
+ StartMultipleClientsL(KNoMultipleClients);
+
+ CleanupStack::PopAndDestroy(&arrayOfIds);
+ CleanupStack::PopAndDestroy(lmd);
+ CleanupStack::PopAndDestroy(encoder);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp51.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,654 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp51.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <e32std.h>
+//#include <ss_std.h>
+
+// CONSTANTS
+_LIT8(KNonExistingMimeType1, "APPLICATION/VND.NOKIA.LANDMARKCOLLECTION+XML");
+_LIT8(KNonExistingMimeType2, "application/vnd.nokia.kokoibollen");
+//_LIT8(KNonExistingMimeType3, "application/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollenapplication/vnd.nokia.kokoibollen");
+_LIT8(KEmptyMimeType, "");
+_LIT(KPosLandmarksServerName, "*eposlmserver*");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp51::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp51::StartL()
+ {
+ iErrorsFound = 0;
+ MakeSurePanicDebugFileExistsL();
+
+ RemoveDefaultDbL();
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ // <<<<<<<<<<<<<<Panic testing below>>>>>>>>>>>>>>>>>>>
+ iLog->Log(_L(">>>>>>>Start Panic test<<<<<<<<<"));
+
+ // 1 The client asks the API to parse XML content both synchronously
+ // and incrementally without specifying the input method.
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 1"));
+ iTestCase = 1;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 2"));
+ iTestCase = 2;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Import landmarks with an invalid transfer option
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 3"));
+ iTestCase = 3;
+ iExpectedErrorCode = EPosLmInvalidArgument;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Import landmarks with an invalid transfer option
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 9"));
+ iTestCase = 9;
+ iExpectedErrorCode = EPosLmInvalidArgument;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Import landmarks with an invalid transfer option
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 10"));
+ iTestCase = 10;
+ iExpectedErrorCode = EPosLmInvalidArgument;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Create a parser with incorrect MIME type, should leave
+ iExpectedExitType = ExitLeave;
+ iLog->Log(_L("Leave test 4"));
+ iTestCase = 4;
+ iExpectedErrorCode = KErrNotSupported;
+ ResumeThreadAndVerifyExitL();
+
+ // Create a parser with incorrect MIME (correct MIME type but with capital letters) type, should leave
+ iExpectedExitType = ExitLeave;
+ iLog->Log(_L("Leave test 5"));
+ iTestCase = 5;
+ iExpectedErrorCode = KErrNotSupported;
+ ResumeThreadAndVerifyExitL();
+
+ // Create a parser with incorrect MIME type, should leave
+ iExpectedExitType = ExitLeave;
+ iLog->Log(_L("Leave test 18"));
+ iTestCase = 18;
+ iExpectedErrorCode = KErrNotSupported;
+ ResumeThreadAndVerifyExitL();
+
+#if 0
+ // Create a parser with incorrect MIME type, should leave
+ // TE: the REComSession::CreateImplementationL( leaves with KErrArgument which I think is acceptable
+ // Nokia: This is not part of API definition, case removed
+ iExpectedExitType = ExitLeave;
+ iLog->Log(_L("Leave test 19"));
+ iTestCase = 19;
+ iExpectedErrorCode = KErrArgument;
+ ResumeThreadAndVerifyExitL();
+#endif
+
+ // Create a parser, parse inc. but change input method after one step
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Leave test 6"));
+ iTestCase = 6;
+ iExpectedErrorCode = EPosLmProtocolBreak;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+#ifndef __WINS__
+ // Fetch Import Iterator with NULL argument
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 7"));
+ iTestCase = 7;
+ iExpectedErrorCode = 3; // Kern-Exec 3
+ ResumeThreadAndVerifyExitL();
+ ListAllServers();
+ if (!ServerAlive(KPosLandmarksServerName))
+ {
+ iLog->Log(_L("Server not alive as expected(1)!"));
+ User::Leave(-1);
+
+ }
+
+ // Use a CPosLmOperation object from a compact operation as input to an
+ // ImportedLandmarksIteratorL function call
+ iExpectedExitType = ExitPanic;
+ iLog->Log(_L("Panic test 8"));
+ iTestCase = 8;
+ iExpectedErrorCode = 3; // Kern-Exec 3
+ ResumeThreadAndVerifyExitL();
+ ListAllServers();
+ if (!ServerAlive(KPosLandmarksServerName))
+ {
+ iLog->Log(_L("Server not alive as expected(2)!"));
+ User::Leave(-1);
+
+ }
+#endif
+
+ // Import subset of landmarks with non existing ids
+ iLog->Log(_L("Panic test 11"));
+ iTestCase = 11;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosInvalidIndex;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Import subset of landmarks with empty subset of ids
+ // should leave with KErrArgument
+ iLog->Log(_L("Panic test 12"));
+ iTestCase = 12;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrArgument;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Try to receive parsed landmark with invalid index
+ iLog->Log(_L("Panic test 13"));
+ iTestCase = 13;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = EPosInvalidIndex;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Try to ParseContentL from empty buffer
+ iLog->Log(_L("Panic test 14"));
+ iTestCase = 14;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrPosLmUnknownFormat;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Try toParseContentL from NULL input buffer
+ iLog->Log(_L("Panic test 15"));
+ iTestCase = 15;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = 3; // Kern-Exec 3
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Try to ImportLandmarks from empty buffer
+ iLog->Log(_L("Panic test 16"));
+ iTestCase = 16;
+ iExpectedExitType = ExitLeave;
+ iExpectedErrorCode = KErrPosLmUnknownFormat;
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ // Try to ImportLandmarks from NULL buffer
+ iLog->Log(_L("Panic test 17"));
+ iTestCase = 17;
+ iExpectedExitType = ExitPanic;
+ iExpectedErrorCode = 3; // Kern-Exec 3
+ iMimeType.Set( KLmxMimeType );
+ ResumeThreadAndVerifyExitL();
+ iMimeType.Set( KGpxMimeType );
+ ResumeThreadAndVerifyExitL();
+
+ iLog->Log(_L(">>>>>>>Panic test Done<<<<<<<<<"));
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors found in TP51"));
+ User::Leave(-2);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp51::ResumeThreadAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp51::ResumeThreadAndVerifyExitL()
+ {
+ iLog->Log(_L("ResumeThreadAndVerifyExitL"));
+ _LIT(KPanicErr, "ERROR: Method didn't panic, exit type %d");
+ _LIT(KPanicCodeErr, "ERROR: Unexpected panic code, actual %d, expected %d");
+ _LIT(KLeaveErr, "ERROR: Method didn't leave, exit type %d");
+ _LIT(KLeaveCodeErr, "ERROR: Unexpected leave error, actual %d, expected %d");
+
+ CreateThreadL();
+ TRequestStatus status;
+ iThread.Logon(status);
+ iThread.Resume();
+
+ User::WaitForRequest(status);
+
+ if (iExpectedExitType == ExitPanic)
+ {
+ if (iThread.ExitType() != EExitPanic )
+ {
+ iLog->Log( KPanicErr, iThread.ExitType() );
+ iErrorsFound++;
+ }
+ if ( iThread.ExitReason() != iExpectedErrorCode )
+ {
+ iLog->Log( KPanicCodeErr, iThread.ExitReason(), iExpectedErrorCode );
+ iErrorsFound++;
+ }
+ }
+ else if (iExpectedExitType == ExitLeave)
+ {
+ if (iThread.ExitType() != EExitKill )
+ {
+ iLog->Log( KLeaveErr, iThread.ExitType() );
+ iErrorsFound++;
+ }
+ if ( iThread.ExitReason() != iExpectedErrorCode )
+ {
+ iLog->Log( KLeaveCodeErr, iThread.ExitReason(), iExpectedErrorCode );
+ iErrorsFound++;
+ }
+ }
+ iThread.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp51::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp51::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iThread.Close();
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp51::RunPanicTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CPosTp51::RunPanicTestL(TAny* aData)
+ {
+ CPosTp51* self = reinterpret_cast<CPosTp51*>(aData);
+
+ _LIT(KXML1, "c:\\system\\test\\TestData\\TP47_UTF-16-bigEndian.xml");
+ _LIT(KXML2, "c:\\system\\test\\TestData\\TP47_UTF-16-littleEndian.xml");
+ _LIT(KXML3, "c:\\system\\test\\TestData\\TP47_UTF-16-bigEndian.gpx");
+ _LIT(KXML4, "c:\\system\\test\\TestData\\TP47_UTF-16-littleEndian.gpx");
+
+ if (self->iTestCase == 1)
+ {
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+
+ //Should Panic when no input is set, parse sync
+ ExecuteAndDeleteLD(landmarkParser->ParseContentL());
+ }
+ else if (self->iTestCase == 2)
+ {
+ // Create parser,
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ // Parse content, should panic when no input set, parse incrementally
+ CPosLmOperation* operation = landmarkParser->ParseContentL();
+ self->RunAsyncOperationLD(operation);
+ }
+ else if (self->iTestCase == 3)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ // Importlandmarks with invalid transfer option, should panic
+ ExecuteAndDeleteLD(database->ImportLandmarksL(*landmarkParser, 666));
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 4)
+ {
+ // Create parser with incorrect MIME type, should leave with KErrNotSupported
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(KNonExistingMimeType2);
+ CleanupStack::PushL(landmarkParser);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ }
+ else if (self->iTestCase == 5)
+ {
+ // Create parser with incorrect MIME (including capital letters) type, should leave with KErrNotSupported
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(KNonExistingMimeType1);
+ CleanupStack::PushL(landmarkParser);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ }
+ else if (self->iTestCase == 18)
+ {
+ // Create parser with incorrect MIME type (long string), should leave with KErrNotSupported
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(KNonExistingMimeType2);
+ CleanupStack::PushL(landmarkParser);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ }
+ else if (self->iTestCase == 19)
+ {
+ // Create parser with incorrect MIME (empty string) type, should leave with KErrNotSupported (or KErrArgument)
+ // however the REComSession::CreateImplementationL( leaves with KErrArgument which I think is acceptable
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(KEmptyMimeType);
+ CleanupStack::PushL(landmarkParser);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ }
+ else if (self->iTestCase == 6)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ landmarkParser->SetInputFileL(KXML1);
+ // Call ParseContentL
+ CPosLmOperation* operation = landmarkParser->ParseContentL();
+ TRequestStatus status = KPosLmOperationNotComplete;
+ TReal32 progress;
+
+ // Set new input method before first operation has completed
+ landmarkParser->SetInputFileL(KXML2);
+
+ // Use first operation object->should panic
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 7)
+ {
+ // <<<<<<<<<<<<<< Fetch iterator with CPosLmOperation == NULL >>>>>>>>>>>>>>>>>>>
+ CPosLandmarkDatabase* databasen = self->OpenDatabaseLC();
+ CPosLmItemIterator* iterator = databasen->ImportedLandmarksIteratorL(NULL);
+ delete iterator;
+ CleanupStack::PopAndDestroy(databasen);
+ }
+ else if (self->iTestCase == 8)
+ {
+ // <<<<<<<<<<<<<< Fetch iterator with CPosLmOperation != ImportLandmarksL() >>>>>>>>>>>>>>>>>>>
+ CPosLandmarkDatabase* databasen = self->OpenDatabaseLC();
+ CPosLmOperation* operation = databasen->CompactL();
+ CleanupStack::PushL(operation);
+ CPosLmItemIterator* iterator = databasen->ImportedLandmarksIteratorL(operation);
+ delete iterator;
+ CleanupStack::PopAndDestroy(2, databasen);
+ }
+ else if (self->iTestCase == 9)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ // Importlandmarks with invalid transfer option, should panic
+ ExecuteAndDeleteLD(database->ImportLandmarksL(*landmarkParser, 0x17));
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 10)
+ {
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ RArray<TUint> subset;
+ CleanupClosePushL(subset);
+ subset.Append(12);subset.Append(13);
+ // Importlandmarks with invalid transfer option, should panic
+ ExecuteAndDeleteLD(database->ImportLandmarksL(*landmarkParser, subset, 0x17));
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 11)
+ {
+ // Importlandmarks with non existing subset of ids, should panic
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ if ( self->iMimeType != KGpxMimeType )
+ {
+ landmarkParser->SetInputFileL(KXML1);
+ }
+ else
+ {
+ landmarkParser->SetInputFileL(KXML3);
+ }
+ RArray<TUint> subset;
+ CleanupClosePushL(subset);
+ subset.Append(1);subset.Append(2);subset.Append(1200);subset.Append(1300);
+ // Importlandmarks with non existing subset of ids, should panic
+ // Should it Panic with EPosInvalidIndex
+ ExecuteAndDeleteLD(database->ImportLandmarksL(*landmarkParser, subset, CPosLandmarkDatabase::EIncludeCategories));
+ CleanupStack::PopAndDestroy(&subset);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 12)
+ {
+ // Importlandmarks with empty subset of id, leaves with KErrArgument
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ landmarkParser->SetInputFileL(KXML1);
+ RArray<TUint> subset;
+ CleanupClosePushL(subset);
+ // Importlandmarks with empty subset of ids, should leave with KErrArgument
+ ExecuteAndDeleteLD(database->ImportLandmarksL(*landmarkParser, subset, CPosLandmarkDatabase::EIncludeCategories));
+ CleanupStack::PopAndDestroy(&subset);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 13)
+ {
+ // Retreive parsed landmark with index outside interval of parsed landmarks
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ if ( self->iMimeType != KGpxMimeType )
+ {
+ landmarkParser->SetInputFileL(KXML1);
+ }
+ else
+ {
+ landmarkParser->SetInputFileL(KXML3);
+ }
+
+ ExecuteAndDeleteLD(landmarkParser->ParseContentL());
+
+ // Should panic with EPosInvalidIndex
+ landmarkParser->LandmarkLC(2000);
+
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 14)
+ {
+ // ParseContentL from empty buffer
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ HBufC8* bufferContent = HBufC8::NewLC(0);
+ landmarkParser->SetInputBuffer(*bufferContent);
+
+ CPosLmOperation* operation = landmarkParser->ParseContentL();
+ ExecuteAndDeleteLD(operation);
+
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 15)
+ {
+ // ParseContentL from NULL input buffer
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ HBufC8* bufferContent = NULL;
+ landmarkParser->SetInputBuffer(*bufferContent);
+
+ ExecuteAndDeleteLD(landmarkParser->ParseContentL());
+
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 16)
+ {
+ // ImportLandmarks from empty buffer
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ HBufC8* bufferContent = HBufC8::NewLC(0);
+ landmarkParser->SetInputBuffer(*bufferContent);
+
+ CPosLmOperation* operation = database->ImportLandmarksL(*landmarkParser, CPosLandmarkDatabase::EIncludeCategories);
+ ExecuteAndDeleteLD(operation);
+
+ CleanupStack::PopAndDestroy(bufferContent);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ else if (self->iTestCase == 17)
+ {
+ // ImportLandmarks from NULL input buffer
+ CPosLandmarkDatabase* database = self->OpenDatabaseLC();
+ // Create parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(self->iMimeType);
+ CleanupStack::PushL(landmarkParser);
+ HBufC8* bufferContent = NULL;
+ landmarkParser->SetInputBuffer(*bufferContent);
+
+ CPosLmOperation* operation = database->ImportLandmarksL(*landmarkParser, CPosLandmarkDatabase::EIncludeCategories);
+ ExecuteAndDeleteLD(operation);
+ CleanupStack::PopAndDestroy(landmarkParser);
+ CleanupStack::PopAndDestroy(database);
+ }
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp51::RunPanicTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp51::ListAllServers
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp51::ListAllServers()
+ {
+ TFindServer find(_L("*"));
+ TFullName name;
+
+ iLog->Log(_L("ListAllServers"));
+
+ while (find.Next(name) == KErrNone)
+ {
+ iLog->Log(name);
+
+
+ }
+ iLog->Log(_L("--------------------"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp51::CreateThreadL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp51::CreateThreadL()
+ {
+ _LIT(KThreadName, "Tp51test%dthread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ TBuf<100> buf;
+ buf.Format(KThreadName, iTestCase, ++iThreadCounter);
+
+ TInt err=0;
+ err = iThread.Create(buf, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp52.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,451 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp52.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <Xml/XmlParserErrors.h>
+#include <LbsPosition.h>
+
+// CONSTANTS
+
+_LIT(KErronousXMLFile, "c:\\system\\test\\TestData\\Tp47ErrounousXMLData.xml");
+_LIT(KErronousXMLFileDataMissing1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields1.xml");
+_LIT(KErronousXMLFileDataMissing2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields2.xml");
+_LIT(KErronousXMLFileDataMissing3, "c:\\system\\test\\TestData\\Tp47ErrounousXMLDataMissingFields3.xml");
+_LIT(KUnknownTags, "c:\\system\\test\\TestData\\Tp47UnknownTags.xml");
+_LIT(KUnknownTrees, "c:\\system\\test\\TestData\\Tp47UnknownTrees.xml");
+_LIT(KNoEndTag1, "c:\\system\\test\\TestData\\Tp47ErrounousXMLNoEndTag1.xml");
+_LIT(KNoEndTag2, "c:\\system\\test\\TestData\\Tp47ErrounousXMLNoEndTag2.xml");
+_LIT(KXMLFileWithLongCategoryName, "c:\\system\\test\\TestData\\Tp47XMLWithLongCategoryName.xml");
+_LIT(KXMLFileWithLongLandmarkName, "c:\\system\\test\\TestData\\Tp47XMLWithLongName.xml");
+_LIT(KXMLFileWithLongLatitudeField, "c:\\system\\test\\TestData\\Tp47XMLWithLongLatitudeField.xml");
+_LIT(KXMLFileWithEmptyCollection, "c:\\system\\test\\TestData\\Tp47ErronousXMLFileEmptyCollection.xml");
+_LIT(KXMLFileWithXMLTagAsDataField1, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField1.xml");
+_LIT(KXMLFileWithXMLTagAsDataField2, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField2.xml");
+_LIT(KXMLFileWithXMLTagAsDataField3, "c:\\system\\test\\TestData\\Tp47UsingXMLTagAsDataField3.xml");
+_LIT(KXMLFileWithQuotedXMLTagAsDataField1, "c:\\system\\test\\TestData\\Tp52QuotedXMLTag1.xml");
+
+// ================= MEMBER FUNCTIONS =======================
+// ---------------------------------------------------------
+// CPosTp52::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp52::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+
+ iLog->Log(_L("CloseTest Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp52::StartL()
+ {
+ iLog->Log(_L("1)) *********************"));
+ DoTestL(KErronousXMLFile, KLmxMimeType, KErrPosLmUnknownFormat);
+ DoTestL(KErronousXMLFile, KGpxMimeType, KErrPosLmUnknownFormat);
+
+ iLog->Log(_L("2)) *********************"));
+ DoTestL(KUnknownTags, KLmxMimeType, KErrNone, 1);
+ DoTestL(KUnknownTags, KGpxMimeType, KErrNone, 1);
+
+ DoTestL(KUnknownTrees, KLmxMimeType, KErrNone, 1);
+ DoTestL(KUnknownTrees, KGpxMimeType, KErrNone, 1);
+
+ iLog->Log(_L("3)) *********************"));
+ DoTestL(KNoEndTag1, KLmxMimeType, EXmlTagMismatch, 0);
+ DoTestL(KNoEndTag1, KGpxMimeType, EXmlTagMismatch, 0);
+
+ iLog->Log(_L("4)) *********************"));
+ DoTestL(KNoEndTag2, KLmxMimeType, KErrPosLmUnknownFormat, 0);
+ DoTestL(KNoEndTag2, KGpxMimeType, KErrPosLmUnknownFormat, 0);
+
+ // Containing XML tags as data field
+ iLog->Log(_L("5)) *********************"));
+ DoTestL(KXMLFileWithXMLTagAsDataField1, KLmxMimeType, EXmlTagMismatch, 0);
+ DoTestL(KXMLFileWithXMLTagAsDataField1, KGpxMimeType, EXmlTagMismatch, 0);
+
+ // Containing XML tags as data field
+ iLog->Log(_L("6)) *********************"));
+ DoTestL(KXMLFileWithXMLTagAsDataField2, KLmxMimeType, EXmlTagMismatch, 0);
+ DoTestL(KXMLFileWithXMLTagAsDataField2, KGpxMimeType, EXmlTagMismatch, 0);
+
+ // Containing XML tags as data field
+ iLog->Log(_L("7)) *********************"));
+ DoTestL(KXMLFileWithXMLTagAsDataField3, KLmxMimeType, EXmlTagMismatch, 0);
+ DoTestL(KXMLFileWithXMLTagAsDataField3, KGpxMimeType, EXmlTagMismatch, 0);
+
+ iLog->Log(_L("8)) *********************"));
+ DoTestL(KXMLFileWithEmptyCollection, KLmxMimeType, KErrPosLmUnknownFormat, 0);
+ // N/A for GPX
+
+ iLog->Log(_L("9)) *********************"));
+ DoTestL(KXMLFileWithLongCategoryName, KLmxMimeType, KErrNone, 1);
+ CheckLongCategoryNameL(4);
+ DoTestL(KXMLFileWithLongCategoryName, KGpxMimeType, KErrNone, 1);
+ CheckLongCategoryNameL(1);
+
+ iLog->Log(_L("10)) *********************"));
+ DoTestL(KXMLFileWithLongLandmarkName, KLmxMimeType, KErrNone, 1);
+ CheckLongLandmarkNameL();
+ DoTestL(KXMLFileWithLongLandmarkName, KGpxMimeType, KErrNone, 1);
+ CheckLongLandmarkNameL();
+
+ iLog->Log(_L("11)) *********************"));
+ DoTestL(KXMLFileWithLongLatitudeField, KLmxMimeType, KErrNone, 1);
+ DoTestL(KXMLFileWithLongLatitudeField, KGpxMimeType, KErrNone, 1);
+
+ iLog->Log(_L("12)) *********************"));
+ DoTestL(KErronousXMLFileDataMissing1, KLmxMimeType, KErrPosLmUnknownFormat, 0);
+ DoTestL(KErronousXMLFileDataMissing1, KGpxMimeType, KErrPosLmUnknownFormat, 0);
+
+ iLog->Log(_L("13)) *********************"));
+ DoTestL(KErronousXMLFileDataMissing2, KLmxMimeType, KErrNone, 1);
+ DoTestL(KErronousXMLFileDataMissing2, KGpxMimeType, KErrNone, 1);
+
+ iLog->Log(_L("14)) *********************"));
+ DoTestL(KErronousXMLFileDataMissing3, KLmxMimeType, KErrNone, 1);
+ DoTestL(KErronousXMLFileDataMissing3, KGpxMimeType, KErrNone, 1);
+
+ iLog->Log(_L("15)) *********************"));
+ DoTestL(KXMLFileWithQuotedXMLTagAsDataField1, KLmxMimeType, KErrNone, 2);
+ DoTestL(KXMLFileWithQuotedXMLTagAsDataField1, KGpxMimeType, KErrNone, 2);
+
+ if (iErrorsFound != KErrNone)
+ {
+ iLog->Log(_L("Errors were found in Tp52"));
+ User::Leave(-1);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::DoTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp52::DoTestL(
+ const TDesC& aTestFile,
+ const TDesC8& aMimeType,
+ TInt aExpectedErrorCode,
+ TInt aExpNrImportedLandmarks )
+ {
+ TBuf<150> buf;
+ TInt nr=0;
+ ResetLandmarksDbL();
+
+ TFileName file( aTestFile );
+ if ( aMimeType == KGpxMimeType )
+ {
+ TInt pos = file.Find( KXmlFileExt );
+ file.Replace( pos, KXmlFileExt().Length(), KGpxFileExt );
+ }
+
+ iLog->Log(_L("FILE (%S)"), &file );
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+ iLandmarkParser->SetInputFileL(file);
+
+ TInt errorCode = 0;
+ // Test sync
+ errorCode = ImportLandmarksL(ETrue, CPosLandmarkDatabase::EIncludeCategories);
+
+ if (errorCode != aExpectedErrorCode)
+ {
+ buf.Format(_L("ERROR: Errorcode %d , should be %d when importing from "), errorCode, aExpectedErrorCode);
+ buf.Append(file);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+ else
+ {
+ buf.Format(_L("Correct errorcode %d returned when from "), errorCode);
+ buf.Append(file);
+ iLog->Log(buf);
+ }
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ nr = GetNrOfLandmarksL();
+ if (nr != aExpNrImportedLandmarks)
+ {
+ buf.Format(_L("ERROR: Found %d landmarks should found %d"), nr, aExpNrImportedLandmarks);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+
+ ResetLandmarksDbL();
+
+ iLandmarkParser = CPosLandmarkParser::NewL(aMimeType);
+ iLandmarkParser->SetInputFileL(file);
+
+ // Test async
+ errorCode = ImportLandmarksL(ETrue, CPosLandmarkDatabase::EIncludeCategories);
+
+ if (errorCode != aExpectedErrorCode)
+ {
+ buf.Format(_L("ERROR: Errorcode %d , should be %d when importing from "), errorCode, aExpectedErrorCode);
+ buf.Append(file);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+ else
+ {
+ buf.Format(_L("Correct errorcode %d returned when importing landmarks from file "), errorCode);
+ buf.Append(file);
+ iLog->Log(buf);
+ }
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ nr = GetNrOfLandmarksL();
+ if (nr != aExpNrImportedLandmarks)
+ {
+ buf.Format(_L("ERROR: Found %d landmarks should found %d"), nr, aExpNrImportedLandmarks);
+ iLog->Log(buf);
+ iErrorsFound++;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::ImportLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp52::ImportLandmarksL(TBool aSync, TUint aTransferOption)
+ {
+ iLog->Log(_L("ImportLandmarksL"));
+
+ //TRequestStatus status = KPosLmOperationNotComplete;
+ //TReal32 progress = 0;
+ TInt err = KErrNone;
+
+ CPosLmOperation* op;
+ op = iDatabase->ImportLandmarksL(*iLandmarkParser, aTransferOption);
+
+ CleanupStack::PushL(op);
+ // Import only a subset of the landmarks in parser
+ // iOperation = iDatabase->ImportLandmarksL(*iLandmarkParser, aLandmarkSubSet, aTransferOption);
+ if (aSync)
+ {
+ // Synchronous
+ TRAP(err, op->ExecuteL());
+ iOperation = NULL;
+ }
+ else
+ {
+ // Asynchronous
+ // Progress us checked in test procedure base
+ RunAsyncOperationLD(iDatabase->ImportLandmarksL(*iLandmarkParser, aTransferOption));
+ iOperation = NULL;
+ }
+ CleanupStack::PopAndDestroy(op);
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::ResetLandmarksDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp52::ResetLandmarksDbL()
+ {
+ iLog->Log(_L("ResetLandmarksDbL()"));
+
+ delete iLandmarkSearch;
+ iLandmarkSearch = NULL;
+
+ delete iLandmarkParser;
+ iLandmarkParser = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+
+ // Use an empty landmarks db in this test
+ RemoveDefaultDbL();
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ delete iDatabase;
+ iDatabase = NULL;
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ ExecuteAndDeleteLD(categoryManager->ResetGlobalCategoriesL());
+ CleanupStack::PopAndDestroy(categoryManager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::CheckLongLandmarkNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp52::CheckLongLandmarkNameL()
+ {
+ iLog->Log(_L("CheckLandmarkL"));
+ // Should only exist one landmark in db
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(1);
+
+ TPtrC lmname;
+ TInt res = lm->GetLandmarkName(lmname);
+
+ if (res != KErrNone) //LogErrorAndLeave(_L("Problem getting Landmark"));
+ {
+ iLog->Log(_L("Problem getting Landmark"));
+ User::Leave(-1);
+
+ }
+
+ _LIT(KLONGNAME, "Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landmark10Landm");
+ if (lmname.Compare(KLONGNAME) != 0)
+ {
+ iLog->Log(_L("Long landmark name does not match"));
+ iErrorsFound++;
+ }
+
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::CheckLongCategoryNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp52::CheckLongCategoryNameL(TInt aNumExpectedCategories )
+ {
+ iLog->Log(_L("CheckLongCategoryNameL"));
+ // Should only exist one landmark in db
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(1);
+
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+ lm->GetCategoriesL(array);
+ TInt nr = array.Count();
+ TPtrC name;
+
+ _LIT(KLONGNAME1, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
+ _LIT(KLONGNAME2, "Pizzeria10Pizzeria20Pizzeria30Pizzeria40Pizzeria50Pizzeria60Pizzeria70Pizzeria80Pizzeria90Pizzeria10Pizzeria10Pizzeria20Pizz");
+ _LIT(KLONGNAME3, "Gizzeria10Gizzeria20Gizzeria30Gizzeria40Gizzeria50Gizzeria60Gizzeria70Gizzeria80Gizzeria90Gizzeria10Gizzeria10Gizzeria20_ABC");
+ _LIT(KLONGNAME4, "Dizzeria10Dizzeria20Dizzeria30Dizzeria40Dizzeria50Dizzeria60Dizzeria70Dizzeria80Dizzeria90Dizzeria10Dizzeria10Dizzeria20_ABC");
+
+ const TInt numNames = 4;
+ const TPtrC names[] = { KLONGNAME1(), KLONGNAME2(), KLONGNAME3(), KLONGNAME4() };
+
+ if (nr != aNumExpectedCategories) //LogErrorAndLeave(_L("Wrong number of categories for landmark"));
+ {
+ iLog->Log(_L("Wrong number of categories for landmark"));
+ User::Leave(-1);
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ for ( TInt i = 0; i < aNumExpectedCategories; i++ )
+ {
+ CPosLandmarkCategory* cat = categoryManager->ReadCategoryLC(array[i]);
+
+ cat->GetCategoryName(name);
+ // Maximum size for category name is 124 characters
+ if (name.Length() != 124)
+ {
+ iLog->Log(_L("Category name has wrong size, should be 124"));
+ User::Leave(-1);
+
+ }
+ if (name.Compare(names[i]) != 0)
+ {
+ iLog->Log(_L("Long category name does not match"));
+ iErrorsFound++;
+ }
+ CleanupStack::PopAndDestroy(cat);
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ CleanupStack::PopAndDestroy(&array);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+// ---------------------------------------------------------
+// CPosTp52::GetNrOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosTp52::GetNrOfLandmarksL()
+ {
+ TInt nrOfLandmarks = 0;
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+ // Search pattern "*" should match all existing landmarks
+ textCriteria->SetTextL(_L("*"));
+
+ CPosLandmarkSearch* landmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
+ CleanupStack::PushL(landmarkSearch);
+
+ TPosLmSortPref sortAsc(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ ExecuteAndDeleteLD(landmarkSearch->StartLandmarkSearchL(
+ *textCriteria,
+ sortAsc,
+ EFalse));
+
+ CPosLmItemIterator* iter = landmarkSearch->MatchIteratorL();
+ CleanupStack::PushL(iter);
+
+ nrOfLandmarks = iter->NumOfItemsL();
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(landmarkSearch);
+ CleanupStack::PopAndDestroy(textCriteria);
+ return nrOfLandmarks;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp53.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,452 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp53.h"
+
+#include <EPos_CPosLandmarkParser.h>
+
+// CONSTANTS
+// const TInt KMaxQueueSize = 5;
+const TReal32 KCompactDbLevel = 0.75; // From ...landmarks\inernalServeices\resources\eposlmcompactdblevel.rss
+
+#ifdef __WINS__
+ _LIT(KImportFile, "z:\\system\\test\\testdata\\TP53-CategoriesNotInDb.xml");
+ _LIT(KImportFile2, "z:\\system\\test\\testdata\\TP53-OneLandmark.xml");
+ _LIT(KImportFile3, "z:\\system\\test\\testdata\\TP53-Categories.xml");
+ _LIT(KImportFile4, "z:\\system\\test\\testdata\\TP53-Category.xml");
+ _LIT(KImportFile5, "z:\\system\\test\\testdata\\TP53-GlobalCategory.xml");
+ _LIT(KImportFile6, "z:\\system\\test\\testdata\\TP53-LandmarksOneCategory.xml");
+ _LIT(KImportFile7, "z:\\system\\test\\testdata\\TP53-LandmarkCategories.xml");
+ _LIT(KImportFile8, "z:\\system\\test\\testdata\\TP53-LandmarksCategories.xml");
+
+ _LIT(KCompactImportFile, "z:\\system\\test\\testdata\\TP53-Compact.xml");
+#else
+ _LIT(KImportFile, "c:\\system\\test\\testdata\\TP53-CategoriesNotInDb.xml");
+ _LIT(KImportFile2, "c:\\system\\test\\testdata\\TP53-OneLandmark.xml");
+ _LIT(KImportFile3, "c:\\system\\test\\testdata\\TP53-Categories.xml");
+ _LIT(KImportFile4, "c:\\system\\test\\testdata\\TP53-Category.xml");
+ _LIT(KImportFile5, "c:\\system\\test\\testdata\\TP53-GlobalCategory.xml");
+ _LIT(KImportFile6, "c:\\system\\test\\testdata\\TP53-LandmarksOneCategory.xml");
+ _LIT(KImportFile7, "c:\\system\\test\\testdata\\TP53-LandmarkCategories.xml");
+ _LIT(KImportFile8, "c:\\system\\test\\testdata\\TP53-LandmarksCategories.xml");
+
+ _LIT(KCompactImportFile, "c:\\system\\test\\testdata\\TP53-Compact.xml");
+#endif
+
+_LIT(KCategoryName, "TP53Category1");
+_LIT(KCategoryName2, "TP53Category2");
+_LIT(KCategoryName3, "TP53Category3");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp53::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp53 - Events and compact during import");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp53::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+
+ delete iParser;
+ iParser = NULL;
+
+ RemoveGlobalCategoriesL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp53::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::StartL()
+ {
+ RemoveDefaultDbL();
+ RemoveGlobalCategoriesL();
+
+ iDatabase = UseGlobalCategoriesL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+
+ AddCategoriesL();
+
+ iActiveLmEvent = CActiveLmImportEvent::NewL(iLog);
+
+ iLog->Put(_L("Test events during import"));
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ LandmarkImportEventTestL();
+
+ iLog->Put(_L("Test compact during import"));
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ LandmarkImportCompactTestL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp53::LandmarkImportEventTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::LandmarkImportEventTestL()
+ {
+ iActiveLmEvent->Start();
+
+ iParser = CPosLandmarkParser::NewL(KMimeType);
+
+ /////////////////////////////////////////////
+ // Landmark created event #1
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile, CPosLandmarkDatabase::EDefaultOptions);
+
+ /////////////////////////////////////////////
+ // Landmark created event #2
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile2, CPosLandmarkDatabase::EIncludeCategories);
+
+ /////////////////////////////////////////////
+ // Landmark created event #3
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile3, CPosLandmarkDatabase::EIncludeCategories);
+
+ /////////////////////////////////////////////
+ // Landmark created event #4 and category created event #5
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile4, CPosLandmarkDatabase::EIncludeCategories);
+
+ /////////////////////////////////////////////
+ // Landmark created event #6 and category updated event #7
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile5, CPosLandmarkDatabase::EIncludeCategories | CPosLandmarkDatabase::EIncludeGlobalCategoryNames);
+
+ /////////////////////////////////////////////
+ // Unknown landmark changes event #8 and category created event #9
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile6, CPosLandmarkDatabase::EIncludeCategories);
+
+ /////////////////////////////////////////////
+ // Landmark created event #10 and Unknown category changes event #11
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile7, CPosLandmarkDatabase::EIncludeCategories);
+
+ /////////////////////////////////////////////
+ // Unknown changes event #12
+ /////////////////////////////////////////////
+ ImportLandmarksL(KImportFile8, CPosLandmarkDatabase::EIncludeCategories);
+
+
+ if (iActiveLmEvent->iGlobalErr != 0)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp53::ImportLandmarksL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::ImportLandmarksL(const TDesC& aFileName, CPosLandmarkDatabase::TTransferOptions aTransferOptions)
+ {
+ iParser->SetInputFileL(aFileName);
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*iParser, aTransferOptions));
+ CActiveScheduler::Start();
+ }
+
+// ---------------------------------------------------------
+// CPosTp53::AddCategoriesL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::AddCategoriesL()
+ {
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(cm);
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(KCategoryName);
+
+ CPosLandmarkCategory* category2 = CPosLandmarkCategory::NewLC();
+ category2->SetCategoryNameL(KCategoryName2);
+
+ CPosLandmarkCategory* category3 = CPosLandmarkCategory::NewLC();
+ category3->SetCategoryNameL(KCategoryName3);
+
+ cm->AddCategoryL(*category);
+ cm->AddCategoryL(*category2);
+ cm->AddCategoryL(*category3);
+
+ CleanupStack::PopAndDestroy(4, cm);
+ }
+
+// ---------------------------------------------------------
+// CPosTp53::LandmarkImportCompactTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp53::LandmarkImportCompactTestL()
+ {
+ CPosLandmarkParser* parser = CPosLandmarkParser::NewL(KMimeType);
+ CleanupStack::PushL(parser);
+
+ User::After(200000);
+ TReal32 usage = iDatabase->SizeL().iUsage;
+ TInt count=0;
+
+ while (usage > KCompactDbLevel)
+ {
+ TBuf<100> name;
+ name.Format(_L("LMTP53%d"), ++count);
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(name);
+ iDatabase->AddLandmarkL(*landmark);
+ User::After(200000);
+
+ CleanupStack::PopAndDestroy(landmark);
+
+ usage = iDatabase->SizeL().iUsage;
+ }
+
+ parser->SetInputFileL(KCompactImportFile);
+
+ iLog->Put(_L("importing..."));
+ ExecuteAndDeleteLD(iDatabase->ImportLandmarksL(*parser, CPosLandmarkDatabase::EDefaultOptions));
+ iLog->Put(_L("importing...Done"));
+ User::After(200000);
+
+ usage = iDatabase->SizeL().iUsage;
+
+ AssertTrueSecL(usage >= KCompactDbLevel, _L("Import operation haven't done compact on the database"));
+
+ CleanupStack::PopAndDestroy(parser);
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmImportEvent::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CActiveLmImportEvent* CActiveLmImportEvent::NewL(MUtfwLog* aLog)
+ {
+ CActiveLmImportEvent* self = new(ELeave) CActiveLmImportEvent(aLog);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmImportEvent::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CActiveLmImportEvent::ConstructL()
+ {
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmImportEvent::CActiveLmImportEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CActiveLmImportEvent::CActiveLmImportEvent(MUtfwLog* aLog) :
+ CActive(EPriorityNormal),
+ iLog(aLog)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Destructor
+CActiveLmImportEvent::~CActiveLmImportEvent()
+ {
+ Cancel();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CActiveLmImportEvent::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmImportEvent::Start()
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmImportEvent::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmImportEvent::RunL()
+ {
+ VerifyEvent();
+
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmImportEvent::DoCancel()
+ {
+ iDatabase->CancelNotifyDatabaseEvent();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmImportEvent::VerifyEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmImportEvent::VerifyEvent()
+ {
+ iEventNumber++;
+ switch (iEventNumber)
+ {
+ case 1:
+ case 2:
+ case 3:
+ AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iEventNumber, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ case 4:
+ AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iEventNumber, iEvent.iLandmarkItemId);
+ break;
+ case 5:
+ AssertCorrectEvent(EPosLmEventCategoryCreated, iEvent.iEventType, 14, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ case 6:
+ AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, 5, iEvent.iLandmarkItemId);
+ break;
+ case 7:
+ AssertCorrectEvent(EPosLmEventCategoryUpdated, iEvent.iEventType, 2, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ case 8:
+ AssertCorrectEvent(EPosLmEventCategoryCreated, iEvent.iEventType, 15, iEvent.iLandmarkItemId);
+ break;
+ case 9:
+ // Two landmarks added
+ AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ case 10:
+ AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, 8, iEvent.iLandmarkItemId);
+ break;
+ case 11:
+ AssertCorrectEvent(EPosLmEventCategoryUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ case 12:
+ AssertCorrectEvent(EPosLmEventUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ default:
+ iLog->Put(_L("Unexpected event received"));
+ ++iGlobalErr;
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+// ---------------------------------------------------------
+// CActiveLmImportEvent::AssertCorrectEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmImportEvent::AssertCorrectEvent(
+ TPosLmEventType aExpectedEventType,
+ TPosLmEventType aEventType,
+ TPosLmItemId aExpectedLandMarkItemId,
+ TPosLmItemId aLandMarkItemId)
+ {
+ if (aExpectedEventType != aEventType)
+ {
+ _LIT(KError,"Unexpected eventtype. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aExpectedEventType, aEventType);
+ iLog->Put(error);
+ iGlobalErr++;
+ }
+ else
+ {
+ TBuf<50> debug;
+ debug.Format(_L("Received event %d"), aEventType);
+ iLog->Put(debug);
+ }
+
+ if (aExpectedLandMarkItemId != aLandMarkItemId)
+ {
+ _LIT(KError,"Unexpected item id. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aExpectedLandMarkItemId, aLandMarkItemId);
+ iLog->Put(error);
+ iGlobalErr++;
+ }
+ else
+ {
+ TBuf<50> debug;
+ debug.Format(_L("Received item id %d"), aLandMarkItemId);
+ iLog->Put(debug);
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp56.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,373 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp56.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkEncoder.h>
+
+// CONSTANTS
+
+_LIT(KDbUri1, "file://c:eposlm.ldb");
+_LIT(KDbUri2, "c:eposlm.ldb");
+_LIT(KDbUri3, "eposlm.ldb");
+_LIT(KDbUri4, "file://eposlm.ldb");
+_LIT(KDbUri5, "testlm.ldb");
+
+// Will need to be changed to the secure dbms path when security is implemented
+_LIT(KDbUri6, "c:\\system\\data\\eposlm.ldb");
+// Will need to be changed to the secure dbms path when security is implemented
+_LIT(KDbUri7, "file://c:\\system\\data\\eposlm.ldb");
+
+_LIT(KDbUri8, "eposlm");
+_LIT(KDbUri9, "c:eposlm");
+_LIT(KDbUri10, "file://c:eposlm");
+
+_LIT(KDbUri11, "file://c:XXXX.ldb");
+_LIT(KDbUri12, "http://c:eposlm.ldb");
+_LIT(KDbUri13, "");
+
+_LIT(KDbUri14, "file://\\eposlm.ldb"); // UNC
+_LIT(KDbUri15, "\\eposlm.ldb");
+
+
+#ifdef __WINS__
+ _LIT(KTestDb, "z:\\system\\test\\TestData\\testlm.ldb");
+#else
+ _LIT(KTestDb, "c:\\system\\test\\TestData\\testlm.ldb");
+#endif
+
+ // Will need to be changed to the secure dbms path when security is implemented
+ _LIT(KLocalDbLocation, "c:\\system\\data\\");
+
+_LIT(KExportFileFullPath, "c:\\TP56-LandmarksFromThreeDatabases.xml");
+_LIT(KExportFile, "TP56-LandmarksFromThreeDatabases.xml");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp56::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP56 - Open specific db and multiple db export");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp56::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::StartL()
+ {
+ RemoveDefaultDbL();
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ delete lmd;
+
+ TestOpenSpecificDbL();
+
+ TestMultipleExportL();
+
+ TestLockedDatabaseL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp56::TestMultipleExportL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::TestMultipleExportL()
+ {
+ _LIT(KDb1, "eposlm1.ldb");
+ _LIT(KDb2, "eposlm2.ldb");
+ _LIT(KDb3, "eposlm3.ldb");
+
+ CreateDatabasesL();
+
+ CPosLandmarkDatabase* lmd1 = CPosLandmarkDatabase::OpenL(KDb1);
+ CleanupStack::PushL(lmd1);
+
+ CPosLandmarkDatabase* lmd2 = CPosLandmarkDatabase::OpenL(KDb2);
+ CleanupStack::PushL(lmd2);
+
+ CPosLandmarkDatabase* lmd3 = CPosLandmarkDatabase::OpenL(KDb3);
+ CleanupStack::PushL(lmd3);
+
+ CPosLandmark* lm = CreateXMLLandmarkLC(_L("TP56 - LM with all fields set"));
+ AddAllXMLFieldsL(lm);
+
+ lmd1->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(lm);
+
+ CPosLandmark* lm2 = CreateXMLLandmarkLC(_L("TP56 - LM2"));
+ lmd2->AddLandmarkL(*lm2);
+ CleanupStack::PopAndDestroy(lm2);
+
+
+ CPosLandmark* lm3 = CreateXMLLandmarkLC(_L("TP56 - LM3"));
+
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd3);
+ CleanupStack::PushL(cm);
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("category"));
+ TPosLmItemId id = cm->AddCategoryL(*category);
+ CleanupStack::PopAndDestroy(2, cm);
+
+ lm3->AddCategoryL(id);
+ lmd3->AddLandmarkL(*lm3);
+ CleanupStack::PopAndDestroy(lm3);
+
+ CPosLandmarkEncoder* encoder = CPosLandmarkEncoder::NewL(KMimeType);
+ CleanupStack::PushL(encoder);
+
+ encoder->SetOutputFileL(KExportFileFullPath);
+
+ CPosLmItemIterator* iter = lmd1->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ RArray<TPosLmItemId> arrayOfIds;
+ CleanupClosePushL(arrayOfIds);
+
+ TInt numberOfElements = iter->NumOfItemsL();
+ iter->GetItemIdsL(arrayOfIds, 0, (numberOfElements));
+
+ ExecuteAndDeleteLD(lmd1->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions));
+
+ RunAsyncOperationLD(lmd2->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EDefaultOptions));
+
+ ExecuteAndDeleteLD(lmd3->ExportLandmarksL(*encoder, arrayOfIds, CPosLandmarkDatabase::EIncludeCategories));
+
+ ExecuteAndDeleteLD(encoder->FinalizeEncodingL());
+
+ CleanupStack::PopAndDestroy(6, lmd1);
+
+ TInt err = CompareL(KExportFile);
+ AssertTrueSecL(err == KErrNone, _L("The exported file is not equal to file exported prevoius release"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp56::CreateDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::CreateDatabasesL()
+ {
+ // Paths will need to be changed to the secure dbms path when security is implemented
+
+ _LIT(KDefaultDbPath, "c:\\system\\data\\eposlm.ldb");
+
+ _LIT(KDb1Path, "c:\\system\\data\\eposlm1.ldb");
+ _LIT(KDb2Path, "c:\\system\\data\\eposlm2.ldb");
+ _LIT(KDb3Path, "c:\\system\\data\\eposlm3.ldb");
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy(lmd);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ fs.Delete(KExportFile);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ User::LeaveIfError(fileMan->Copy(KDefaultDbPath, KDb1Path, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Copy(KDefaultDbPath, KDb2Path, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Copy(KDefaultDbPath, KDb3Path, CFileMan::EOverWrite));
+
+
+ CleanupStack::PopAndDestroy(2, &fs);
+ }
+
+// ---------------------------------------------------------
+// CPosTp56::TestOpenSpecificDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::TestOpenSpecificDbL()
+ {
+ _LIT(KHttpErr, "http is not a supported protocol");
+ _LIT(KURIErr, "Not a valid URI");
+ _LIT(KArgumentErr, "An empty descr is not a valid URI");
+
+ TestOpenDbL(KDbUri1);
+ TestOpenDbL(KDbUri2);
+ TestOpenDbL(KDbUri3);
+ TestOpenDbL(KDbUri4);
+
+ CopyTestDbL();
+ TestOpenDbL(KDbUri5);
+
+ TRAPD(err, TestOpenDbL(KDbUri6));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri7));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri8));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri9));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri10));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri11));
+ AssertTrueSecL(err == KErrNotFound, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri12));
+ AssertTrueSecL(err == KErrNotSupported, KHttpErr);
+
+ TRAP(err, TestOpenDbL(KDbUri13))
+ AssertTrueSecL(err == KErrArgument, KArgumentErr);
+
+ TRAP(err, TestOpenDbL(KDbUri14));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+
+ TRAP(err, TestOpenDbL(KDbUri15));
+ AssertTrueSecL(err == KErrArgument, KURIErr);
+ }
+
+// ---------------------------------------------------------
+// CPosTp56::TestOpenDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::TestOpenDbL(const TDesC& aDbURI)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(aDbURI);
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+//---------------------------------------------------------
+// CPosTp56::CopTestDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::CopyTestDbL()
+ {
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ User::LeaveIfError(fileMan->Copy(KTestDb, KLocalDbLocation, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp56::TestLockedDatabaseL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp56::TestLockedDatabaseL()
+ {
+ CPosLandmarkDatabase* db1 = UseGeneratedDbFileL();
+ CleanupStack::PushL(db1);
+
+ // Take read lock
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ User::LeaveIfError(ids.Append(1));
+ User::LeaveIfError(ids.Append(3));
+ User::LeaveIfError(ids.Append(4));
+ User::LeaveIfError(ids.Append(6));
+ User::LeaveIfError(ids.Append(7));
+ User::LeaveIfError(ids.Append(9));
+ User::LeaveIfError(ids.Append(24));
+ User::LeaveIfError(ids.Append(14));
+ User::LeaveIfError(ids.Append(66));
+ User::LeaveIfError(ids.Append(61));
+ User::LeaveIfError(ids.Append(14));
+ CPosLmOperation* operation = db1->PreparePartialLandmarksL(ids);
+ CleanupStack::PushL(operation);
+ TReal32 progress(0);
+ TRequestStatus status;
+ while (progress < 0.4)
+ {
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ // Try to instantiate a new db handle
+ operation->NextStep(status, progress);
+ CPosLandmarkDatabase* db2 = CPosLandmarkDatabase::OpenL(KDbUri1);
+ delete db2;
+ User::WaitForRequest(status);
+
+ // Release read lock
+ CleanupStack::PopAndDestroy(operation);
+
+ // Take write lock
+ operation = db1->RemoveAllLandmarksL();
+ CleanupStack::PushL(operation);
+ progress = 0;
+ while (progress < 0.4)
+ {
+ operation->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+
+ // Try to instantiate a new db handle - should result in KErrLocked
+ operation->NextStep(status, progress);
+ db2 = NULL;
+ TRAPD(err, db2 = CPosLandmarkDatabase::OpenL(KDbUri1));
+ delete db2;
+ User::WaitForRequest(status);
+ AssertTrueSecL(err == KErrLocked, _L("OpenL() didn't result in KErrLocked but in %d"), err);
+
+ CleanupStack::PopAndDestroy(3, db1);
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp57.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,310 @@
+/*
+* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp57.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmAreaCriteria.h>
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp57::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp57::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP57 - Multiple db search");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp57::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp57::CloseTest()
+ {
+ iSearchResults.ResetAndDestroy();
+ }
+
+// ---------------------------------------------------------
+// CPosTp57::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp57::StartL()
+ {
+
+ iDatabase = UseGeneratedDbFileL();
+
+ CPosLandmark* lm = NULL;
+ TRAPD(err,
+ {
+ lm = iDatabase->ReadLandmarkLC(1);
+ CleanupStack::PopAndDestroy(lm);
+ }
+ );
+
+/* if (!err)
+ {
+ delete lm;
+ }
+ */
+
+
+ /*
+ CreateDatabasesL();
+
+ SearchWithTextCriteriaL();
+
+ SearchWithAreaCriteriaL();
+ */
+ }
+
+
+
+// ---------------------------------------------------------
+// CPosTp57::SearchWithTextCriteria
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp57::SearchWithTextCriteriaL()
+ {
+ AppendSearchResultsL();
+
+ for(TInt i=0; i<iSearchResults.Count(); i++)
+ {
+ CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();
+
+ textCriteria->SetTextL(iSearchResults[i]->TextCriteria());
+ textCriteria->SetAttributesToSearch(iSearchResults[i]->Attributes());
+
+ textCriteria->SetPositionFieldsToSearchL(iSearchResults[i]->PositionFields());
+
+
+
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp57::SearchWithAreaCriteriaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp57::SearchWithAreaCriteriaL()
+ {
+ AppendAreaSearchResultsL();
+
+
+ TBuf<255> info;
+ for (TInt i=0; i<iAreaSearchResults.Count(); i++)
+ {
+ CPosLmAreaCriteria* areaCriteria=NULL;
+ TRAPD(err, areaCriteria = CPosTp57::NewLmAreaCriteriaL(iAreaSearchResults[i]->SouthLat(),
+ iAreaSearchResults[i]->NorthLat(),
+ iAreaSearchResults[i]->WestLong(),
+ iAreaSearchResults[i]->EastLong()
+ ));
+ CleanupStack::PushL(areaCriteria);
+
+ if (err != iAreaSearchResults[i]->ErrorCode())
+ {
+ iLog->Put(_L("Unexpected error code returned"));
+ iLog->Put(_L("Area Search result read from file:"));
+
+ iAreaSearchResults[i]->Print(info);
+ iLog->Put(info);
+
+ _LIT(KReturned, "NewLmAreaCriteriaL error = %d");
+ info.Format(KReturned, err);
+ iLog->Put(info);
+ User::Leave(KErrGeneral);
+ }
+
+ if (!err)
+ {
+
+
+
+ }
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp57::NewLmAreaCriteriaL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLmAreaCriteria* CPosTp57::NewLmAreaCriteriaL(const TReal64 &aSouthLat,
+ const TReal64 &aNorthLat,
+ const TReal64 &aWestLong,
+ const TReal64 &aEastLong)
+ {
+ CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(aSouthLat,
+ aNorthLat,
+ aWestLong,
+ aEastLong
+ );
+ CleanupStack::Pop();
+
+ return areaCriteria;
+ }
+// ---------------------------------------------------------
+// CPosTp57::CreateDatabasesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp57::CreateDatabasesL()
+ {
+ /*
+ Very inefficient and time consuming method, maybe better to execute once and store the
+ created databases as testdata
+
+ Db name: Landmarks id:
+ eposlm1.ldb 1-10
+ eposlm2.ldb 11-20
+ eposlm3.ldb 21-30
+ eposlm4.ldb 31-40
+ eposlm5.ldb 41-50
+ eposlm6.ldb 51-60
+ eposlm7.ldb 61-70
+ eposlm8.ldb 71-80
+ eposlm9.ldb 81-90
+ eposlm10.ldb 91-100
+ eposlm11.ldb 101-105
+ */
+
+ // Paths will need to be changed to the secure dbms path when security is implemented
+ _LIT(KDefaultDbPath, "c:\\system\\data\\eposlm.ldb"); // Contains now no landmarks but the global categories
+ _LIT(KDbNamePath, "c:\\system\\data\\eposlm%d.ldb");
+
+ const TInt KLastId=105;
+ const TInt KNoDatabases=11;
+
+ RemoveDefaultDbL();
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(lmd);
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ // Create 11 databases
+ TInt i=0;
+ for (i=1; i <= KNoDatabases; i++)
+ {
+ TBuf<100> db;
+ db.Format(KDbNamePath, i);
+
+ fs.Delete(db);
+ User::LeaveIfError(fileMan->Copy(KDefaultDbPath, db, CFileMan::EOverWrite));
+ }
+ CleanupStack::PopAndDestroy(2, &fs);
+
+ iDatabase = UseGeneratedDbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ _LIT(KDbName, "eposlm%d.ldb");
+
+ TInt databaseNumber=1;
+ for (i=1; i <= KLastId; i++)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(i);
+
+ TBuf<100> name;
+ name.Format(KDbName, databaseNumber);
+
+ iLog->Put(name);
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(name);
+ CleanupStack::PushL(lmd);
+
+ lmd->AddLandmarkL(*lm);
+ CleanupStack::PopAndDestroy(2, lm);
+
+ if (i % 10 == 0)
+ {
+ ++databaseNumber;
+ }
+ }
+
+ // DEBUG
+ for (i=1; i <= KNoDatabases; i++)
+ {
+ TBuf<100> dbNo;
+ dbNo.Format(_L(" -------- Printing Db %d --------------"), i);
+ iLog->Put(dbNo);
+
+ TBuf<100> db;
+ db.Format(KDbName, i);
+ iLog->Put(db);
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(db);
+ CleanupStack::PushL(lmd);
+
+ CPosLmItemIterator* iter = lmd->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* lm = lmd->ReadLandmarkLC(id);
+
+ TBuf<255> info;
+ PrintLandmark(*lm, info);
+ iLog->Put(info);
+ CleanupStack::PopAndDestroy(lm);
+
+ id = iter->NextL();
+ }
+
+ CleanupStack::PopAndDestroy(2, lmd);
+ }
+ }
+
+// End of File
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp58.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,379 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp58.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+
+// CONSTANTS
+#ifdef __WINS__
+_LIT(KXMLFile, "z:\\system\\test\\testdata\\Tp49ImportInput.xml"); // re-use
+#else
+_LIT(KXMLFile, "c:\\system\\test\\testdata\\Tp49ImportInput.xml"); // re-use
+#endif
+_LIT(KTp58Panic, "Timeout Panic");
+const TInt KTp58PanicNumber = 58;
+
+// ================= LOCAL FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// LOCAL_C ImportThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ImportThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp58::RunImportTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C KillerThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt KillerThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp58::RunThreadKillerL(reinterpret_cast <RThread*> (aData)));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp58::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP58 - Import landmarks using User::WaitForRequest()");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::InitTestL()
+ {
+ MakeSurePanicDebugFileExistsL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::CloseTest()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::StartL()
+ {
+// Test Import all landmarks
+ iLog->Put(_L("Importing all landmarks"));
+ iTestCase = ETestImportAllLandmarks;
+ iExpectedErrorCode = KErrGeneral;
+ ResumeThreadsAndVerifyExitL();
+
+// Test Import subset of landmarks
+ iLog->Put(_L("Importing subset of all landmarks"));
+ iTestCase = ETestImportSubsetOfLandmarks;
+ iExpectedErrorCode = KErrGeneral;
+ ResumeThreadsAndVerifyExitL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::InitDbLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp58::InitDbLC()
+ {
+ RemoveDefaultDbL();
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+
+ if (database->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(database->InitializeL());
+ }
+
+ return database;
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::RunImportTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::RunImportTestL(TAny* aData)
+ {
+ CPosTp58* tp58 = reinterpret_cast <CPosTp58*> (aData);
+
+ switch (tp58->iTestCase)
+ {
+ case ETestImportAllLandmarks:
+ tp58->ImportLandmarksL(NULL);
+ break;
+ case ETestImportSubsetOfLandmarks:
+ {
+ RArray<TUint> subset;
+ CleanupClosePushL(subset);
+ subset.Append(5);
+ subset.Append(1);
+ subset.Append(9);
+ subset.Append(3);
+
+ tp58->ImportLandmarksL(&subset);
+
+ CleanupStack::PopAndDestroy(&subset);
+ }
+ break;
+ };
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::RunThreadKillerL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::RunThreadKillerL(RThread* aThread)
+ {
+ TTimeIntervalMicroSeconds32 oneMinute = 60 * 1000000;
+
+ // Enter a infinite loop. This reason to this is that I want to be sure
+ // that it is killed by the TP58-thread.
+ TBool forever = ETrue;
+ while (forever)
+ {
+ User::After(oneMinute);
+
+ // Panic importThread if it is still alive
+ if (aThread->ExitType() == EExitPending)
+ {
+ TRequestStatus status;
+ aThread->Logon(status);
+ aThread->Panic(KTp58Panic, KTp58PanicNumber);
+ User::WaitForRequest(status);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::ImportLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::ImportLandmarksL(const RArray<TUint>* aLandmarkSubSet)
+ {
+ CPosLandmarkDatabase* db = InitDbLC();
+
+ // Recreate parser
+ CPosLandmarkParser* landmarkParser = CPosLandmarkParser::NewL(KMimeType);
+ CleanupStack::PushL(landmarkParser);
+ landmarkParser->SetInputFileL(KXMLFile);
+
+ CPosLmOperation* operation = NULL;
+ if (aLandmarkSubSet)
+ {
+ // Import only a subset of the landmarks in parser
+ operation = db->ImportLandmarksL(
+ *landmarkParser,
+ *aLandmarkSubSet,
+ CPosLandmarkDatabase::EDefaultOptions);
+ }
+ else
+ {
+ operation = db->ImportLandmarksL(
+ *landmarkParser,
+ CPosLandmarkDatabase::EDefaultOptions);
+ }
+ TRequestStatus status(KPosLmOperationNotComplete);
+ TReal32 progress(0);
+ operation->NextStep(status, progress);
+
+ // Wait for NextStep to complete - should hang
+ User::WaitForRequest(status);
+
+ // Cancel the import operation
+ delete operation;
+
+ CleanupStack::PopAndDestroy(2, db);
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::ResumeThreadsAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp58::ResumeThreadsAndVerifyExitL()
+ {
+ iLog->Put(_L("ResumeThreadAndVerifyExitL"));
+ _LIT(KCreateThreadErr, "Creating thread failed with %d");
+
+ TBuf<100> threadName;
+ // Create import thread
+ RThread importThread;
+ CleanupClosePushL(importThread);
+ _LIT(KImportThreadName, "TP58 - Import thread, part %d");
+ threadName.Format(KImportThreadName, iTestCase);
+ iLog->Put(_L("Creating Import thread"));
+ //TInt err = importThread.Create(KImportThreadName, ImportThreadFunction,
+ TInt err = importThread.Create(threadName, ImportThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ // Create killer thread
+ RThread killerThread;
+ CleanupClosePushL(killerThread);
+ _LIT(KKillerThreadName, "TP58 - Killer thread, part %d");
+ threadName.Format(KKillerThreadName, iTestCase);
+ iLog->Put(_L("Creating Killer thread"));
+ err = killerThread.Create(threadName, KillerThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, &importThread);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ // Start threads and wait until either of them exits.
+ TRequestStatus importThreadStatus, killerThreadStatus;
+ importThread.Logon(importThreadStatus);
+ importThread.Resume();
+ killerThread.Logon(killerThreadStatus);
+ killerThread.Resume();
+ User::WaitForRequest(importThreadStatus, killerThreadStatus);
+
+ // Kill the thread that might still be alive
+ TExitType importThreadExitType = importThread.ExitType();
+ TExitCategoryName importThreadExitCategory = importThread.ExitCategory();
+ TInt importThreadExitReason = importThread.ExitReason();
+ if (importThreadExitType == EExitPending)
+ {
+ importThread.Kill(KErrCancel);
+ User::WaitForRequest(importThreadStatus);
+ }
+ TExitType killerThreadExitType = killerThread.ExitType();
+ TExitCategoryName killerThreadExitCategory = killerThread.ExitCategory();
+ TInt killerThreadExitReason = killerThread.ExitReason();
+ if (killerThreadExitType == EExitPending)
+ {
+ killerThread.Kill(KErrCancel);
+ User::WaitForRequest(killerThreadStatus);
+ }
+
+ // Log threads' exit results
+ TBuf<100> buf;
+ buf.Format(
+ _L("ImportThread ended with exit type: %d, exit reason: %d, exit category: %S"),
+ importThreadExitType, importThreadExitReason, &importThreadExitCategory);
+ iLog->Put(buf);
+ buf.Format(
+ _L("KillerThread ended with exit type: %d, exit reason: %d, exit category: %S"),
+ killerThreadExitType, killerThreadExitReason, &killerThreadExitCategory);
+ iLog->Put(buf);
+
+ // Verify thread exit results
+ TBool error = VerifyThreadExitResults(killerThreadExitType, importThreadExitType,
+ importThreadExitCategory, importThreadExitReason);
+ if (error)
+ {
+ User::Leave(KErrGeneral);
+ }
+
+ CleanupStack::PopAndDestroy(2, &importThread);
+ }
+
+// ---------------------------------------------------------
+// CPosTp58::VerifyThreadExitResults
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp58::VerifyThreadExitResults(
+ TExitType aKillerThreadExitType,
+ TExitType aImportThreadExitType,
+ const TExitCategoryName& aImportThreadExitCategory,
+ TInt aImportThreadExitReason)
+ {
+ TBool error = EFalse;
+
+ if (aImportThreadExitType != EExitPanic)
+ {
+ _LIT(KExitTypeErr, "Import thread was not panicked as expected.");
+ iLog->PutError(KExitTypeErr);
+ error = ETrue;
+ }
+ if (aImportThreadExitCategory != KTp58Panic)
+ {
+ _LIT(KPanicErr, "Import thread had unexpected panic category");
+ iLog->PutError(KPanicErr);
+ error = ETrue;
+ }
+ if (aImportThreadExitReason != KTp58PanicNumber)
+ {
+ _LIT(KPanicCodeErr, "Import thread had unexpected panic number");
+ iLog->PutError(KPanicCodeErr);
+ error = ETrue;
+ }
+ if (aKillerThreadExitType != EExitPending)
+ {
+ _LIT(KExitTypeErr, "Killer thread was not alive as expected.");
+ iLog->PutError(KExitTypeErr);
+ error = ETrue;
+ }
+
+ return error;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp6.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,266 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp6.h"
+
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLMCategoryManager.h>
+
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+// _LIT(KGetCategoryNameErr, "GetCategoryName returns incorrect error code");
+_LIT(KCategoryNameErr, "Category name is incorrect");
+_LIT(KCategoryIdErr, "Category Id is incorrect");
+_LIT(KGlobalCategoryIdErr, "Global Category Id is incorrect");
+_LIT(KCategoryIconIndexErr, "Category Icon index is incorrect");
+_LIT(KCategoryIconMaskIndexErr, "Category Icon Mask Index is incorrect");
+_LIT(KCategoryMbmFileNameErr, "Category MbmFileName is incorrect");
+_LIT(KAddCategoryErr, "AddCategory should return an error");
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp6::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::StartL()
+ {
+ iLog->Log(_L("In the StartL of FT_CPosTp6.h"));
+ RemoveDefaultDbL();
+
+ CPosLandmarkCategory* category = CreateCategoryLC(KCategoryName);
+ CPosLandmarkCategory* copy = CPosLandmarkCategory::NewLC(*category);
+
+ CheckGetMethodsL(category, KCategoryName);
+
+ copy->SetCategoryNameL(KCategoryName2);
+ CheckGetMethodsL(copy, KCategoryName2);
+
+ CheckRemoveMethodsL(category);
+ CheckRemoveMethodsL(copy);
+
+ CPosLandmarkDatabase* lmd = OpenDatabaseLC();
+ ExecuteAndDeleteLD(lmd->CompactL());
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+ User::After(1000000);
+ TRAPD(err, cm->AddCategoryL(*copy));
+ AssertTrueSecL(err == KErrArgument, KAddCategoryErr);
+
+ CheckFieldsMaxLengthL();
+
+ CheckEmptyCategoryNameL();
+
+ CheckSetIconL();
+
+ CleanupStack::PopAndDestroy(4); // category, copy, lmd, cm
+ }
+
+// ---------------------------------------------------------
+// CPosTp6::CheckGetmethods
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::CheckGetMethodsL(CPosLandmarkCategory* aCategory, const TDesC& aName)
+ {
+ TPtrC categoryName;
+
+ aCategory->GetCategoryName(categoryName);
+
+ AssertTrueSecL(categoryName.Compare(aName) == KErrNone, KCategoryNameErr);
+ AssertTrueSecL(aCategory->CategoryId() == 0, KCategoryIdErr);
+ AssertTrueSecL(aCategory->GlobalCategory() == 0, KGlobalCategoryIdErr);
+
+ TPtrC mbmFileName;
+ TInt index;
+ TInt indexMask;
+ aCategory->GetIcon(mbmFileName, index, indexMask);
+ AssertTrueSecL(mbmFileName.Compare(KMbmFileName) == KErrNone, KCategoryMbmFileNameErr);
+ AssertTrueSecL(index == KIconIndex, KCategoryIconIndexErr);
+ AssertTrueSecL(indexMask == KIconMaskIndex, KCategoryIconMaskIndexErr);
+
+ CPosLandmarkDatabase* lmd = OpenDatabaseLC();
+ CPosLmCategoryManager* cm = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(cm);
+
+ TPosLmItemId id1 = cm->AddCategoryL(*aCategory);
+ User::After(1000000);
+ TRAPD(err, cm->AddCategoryL(*aCategory));
+ AssertTrueSecL(err == KErrAlreadyExists, KAddCategoryErr);
+ AssertTrueSecL(id1 == aCategory->CategoryId(), KCategoryIdErr);
+
+ CleanupStack::PopAndDestroy(2); // lmd, cm
+ }
+
+// ---------------------------------------------------------
+// CPosTp6::CheckRemoveMethodsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::CheckRemoveMethodsL(CPosLandmarkCategory* aCategory)
+ {
+ aCategory->RemoveCategoryAttributes(CPosLandmarkCategory::ENoAttribute);
+ aCategory->RemoveCategoryAttributes(CPosLandmarkCategory::ECategoryName);
+ aCategory->RemoveCategoryAttributes(CPosLandmarkCategory::EIcon);
+
+ CheckRemovedL(aCategory);
+
+ CPosLandmarkCategory* category = CreateCategoryLC(KCategoryName);
+ category->RemoveCategoryAttributes(CPosLandmarkCategory::EAllAttributes);
+ CheckRemovedL(category);
+ CleanupStack::PopAndDestroy(category);
+
+ // Check with attributes outside defined interval
+ // since TAttributes is a TUint32 -1 is casted to EAllAttributes = 0xFFFF
+ category = CreateCategoryLC(_L("NewCategory"));
+ category->RemoveCategoryAttributes((CPosLandmarkCategory::TAttributes)-1);
+
+ TPtrC categoryName;
+ if (category->GetCategoryName(categoryName) == KErrNotFound) iLog->Log(_L("Category Name has been removed"));
+ TPtrC mbmFileName;
+ TInt index;
+ TInt indexMask;
+ if (aCategory->GetIcon(mbmFileName, index, indexMask) == KErrNotFound) iLog->Log(_L("Catgory Icon has been removed"));
+
+ CleanupStack::PopAndDestroy(category);
+
+ // Check with attributes outside defined interval
+ category = CreateCategoryLC(_L("NewCategory2"));
+ category->RemoveCategoryAttributes(0);
+ category->GetCategoryName(categoryName);
+ AssertTrueSecL(categoryName.CompareC(_L("NewCategory2")) == KErrNone, _L("Wrong category name returned after remove invalid attribute"));
+
+ CleanupStack::PopAndDestroy(category);
+ }
+
+// ---------------------------------------------------------
+// CPosTp6::CheckRemovedL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::CheckRemovedL(CPosLandmarkCategory* aCategory)
+ {
+ TPtrC name;
+ AssertTrueSecL(aCategory->GetCategoryName(name) == KErrNotFound, KCategoryNameErr);
+
+ TPtrC mbmFileName;
+ TInt index;
+ TInt indexMask;
+ AssertTrueSecL(aCategory->GetIcon(mbmFileName, index, indexMask) == KErrNotFound, KCategoryMbmFileNameErr);
+
+ }
+
+//---------------------------------------------------------
+// CPosTp6::CheckEmptyCategoryNameL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::CheckEmptyCategoryNameL()
+ {
+
+ iLog->Log(_L("CheckEmptyCategoryNameL"));
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+
+ // Set empty string as category name
+ // should not be accepted
+ TRAPD(err, category->SetCategoryNameL(_L("")));
+
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Empty category name should not be accepted"));
+ User::Leave(err);
+ }
+
+
+ CleanupStack::PopAndDestroy(category);
+ }
+
+//---------------------------------------------------------
+// CPosTp6::CheckSetIconL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::CheckSetIconL()
+ {
+ iLog->Log(_L("CheckSetIconL"));
+
+ _LIT(K124Error, "Icon name is not limited to 255 characters");
+
+
+ // Defined in KMaxFileName e32const.h
+ HBufC* hbuf = HBufC::NewLC(KMaxFileName+1);
+ while(hbuf->Des().Length() < KMaxFileName)
+ {
+ hbuf->Des().Append(_L("X"));
+ }
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetIconL(*hbuf, 0, KPosLmIconMaskNotUsed);
+
+ hbuf->Des().Append(_L("X"));
+
+ TRAPD(err, category->SetIconL(*hbuf, 0, KPosLmIconMaskNotUsed));
+ AssertTrueSecL(err == KErrArgument, K124Error);
+
+ CleanupStack::PopAndDestroy(2, hbuf);
+ }
+
+//---------------------------------------------------------
+// CPosTp6::CheckFieldsMaxLength
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp6::CheckFieldsMaxLengthL()
+ {
+ _LIT(K124Error, "Category name is not limited to 255 characters");
+
+ const TInt KMaxFileName = 124;
+ HBufC* hbuf = HBufC::NewLC(KMaxFileName+1);
+
+ while(hbuf->Des().Length() < KMaxFileName)
+ {
+ hbuf->Des().Append(_L("X"));
+ }
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(*hbuf);
+
+ hbuf->Des().Append(_L("X"));
+
+ TRAPD(err, category->SetCategoryNameL(*hbuf));
+ AssertTrueSecL(err == KErrArgument, K124Error);
+
+ CleanupStack::PopAndDestroy(2, hbuf);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp7.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp7.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLMCategoryManager.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <LbsPosition.h>
+#include <e32std.h>
+//#include <ss_std.h>
+#include "FT_LandmarkConstants.h"
+
+const TInt KShortDelayMicroSeconds = 10000; // 0.01 sec
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// CPosTp7::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp7::StartL()
+ {
+ _LIT(KMultipleErr, "Error %d when multiple clients access the landmarks db");
+ _LIT(KMultipleAddErr, "All Add request from multiple clients returns KErrLocked");
+ _LIT(KExitErr, "Thread was panicked or is still alive");
+
+ MakeSurePanicDebugFileExistsL();
+
+ RemoveDefaultDbL();
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+ if (lmd->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ }
+ CleanupStack::PopAndDestroy(lmd);
+
+ iOneSucces=EFalse;
+ TFixedArray<TRequestStatus, KNoMultipleClients> statuses;
+
+ CreateThreadsL();
+
+ iLog->Log(_L("Logon"));
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Logon(statuses[i]);
+ iThreads[i].Resume();
+ }
+
+ iLog->Log(_L("WaitForRequest"));
+ for (TInt j=0; j<iThreads.Count(); j++)
+ {
+ User::WaitForRequest(statuses[j]);
+ }
+
+ iLog->Log(_L("Checking Threads"));
+ for (TInt t=0; t<iThreads.Count(); t++)
+ {
+ TInt exitReason = iThreads[t].ExitReason();
+
+ AssertTrueSecL(exitReason == KErrNone, KMultipleErr, exitReason);
+ AssertTrueSecL(iThreads[t].ExitType() == EExitKill, KExitErr);
+ }
+
+ AssertTrueSecL(iOneSucces, KMultipleAddErr);
+ }
+
+// ---------------------------------------------------------
+// CPosTp7::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp7::CloseTest()
+ {
+ for (TInt i=0; i<iThreads.Count(); i++)
+ {
+ iThreads[i].Close();
+ }
+
+ iThreads.Close();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp7::RunTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp7::RunTestL(TAny* aData)
+ {
+ CPosTp7* self = reinterpret_cast<CPosTp7*>(aData);
+ TInt threadIndex = ++self->iThreadIndex;
+
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ TInt err = KErrLocked;
+ while ( ETrue )
+ {
+ TRAP( err, ExecuteAndDeleteLD(lmd->InitializeL()) );
+ if ( !err )
+ {
+ break;
+ }
+ else if ( err != KErrLocked )
+ {
+ RDebug::Print( _L("TP7: thread %d, db init failed with %d"),
+ threadIndex, err );
+ User::Leave( err );
+ }
+ else
+ {
+ RDebug::Print( _L("TP7: thread %d, db locked, can't init"),
+ threadIndex);
+ }
+ User::After( TTimeIntervalMicroSeconds32( KShortDelayMicroSeconds ) );
+ }
+ }
+
+ for ( TInt i = 0; i < KNoAddRequests; i++ )
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+
+ _LIT(KLmName, "Thread%d Lm %d");
+ TBuf<100> lmName;
+ lmName.Format(KLmName, threadIndex, i);
+ landmark->SetLandmarkNameL(lmName);
+
+ RDebug::Print( _L("TP7: thread %d, adding lm %d"), threadIndex, i );
+ TRAPD( err, lmd->AddLandmarkL( *landmark ) );
+ if ( err != KErrLocked && err != KErrNone && err != KErrInUse )
+ {
+ RDebug::Print( _L("TP7: thread %d, add lm %d failed with %d"), threadIndex, i, err );
+ User::Leave( err );
+ }
+ else if( err == KErrNone )
+ {
+ self->iOneSucces = ETrue; // At lest one add request should return KErrNone
+ }
+ else
+ {
+ RDebug::Print( _L("TP7: thread %d, db locked, can't add lm %d"), threadIndex, i );
+ }
+
+ CleanupStack::PopAndDestroy(landmark);
+ User::After( TTimeIntervalMicroSeconds32( KShortDelayMicroSeconds ) );
+ }
+ CleanupStack::PopAndDestroy(lmd);
+ }
+
+
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp7::RunTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// CPosTp7::CreateThreadsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp7::CreateThreadsL()
+ {
+ iLog->Log(_L("CreateThreadsL"));
+ _LIT(KThreadName, "TP7thread%d");
+ _LIT(KCreateThreadErr, "Create thread failed with %d");
+
+ for (TInt i=0; i<KNoMultipleClients; i++)
+ {
+ RThread thread;
+ TBuf<32> name;
+ name.Format(KThreadName, i + 1);
+
+ TInt err;
+ err = thread.Create(name, ThreadFunction, KDefaultStackSize, KMinHeapSize, KMaxHeapSize, reinterpret_cast<TAny*>(this));
+
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ iThreads.Append(thread);
+ }
+
+ iLog->Log(_L("CreateThreadsL Done"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp76.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,135 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp76.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include "FT_LandmarkConstants.h"
+
+//_LIT(KCopyFilePath, "c:\\system\\data\\EPOSLMGLOBALCATEGORIES.R01");
+_LIT(KCopyFilePath, "c:\\resource\\EPOSLMGLOBALCATEGORIES.R01");
+#ifdef __WINS__
+_LIT(KCORRUPTFILE, "z:\\system\\test\\testdata\\corrupt_EPOSLMGLOBALCATEGORIES.R06");
+#else
+_LIT(KCORRUPTFILE, "c:\\system\\test\\testdata\\corrupt_EPOSLMGLOBALCATEGORIES.R06");
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp76::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp76::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp76 - Corrupt Global Categories resource file");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp76::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp76::StartL()
+ {
+
+ // Test error report ESLI-65WADU
+ TestCorruptGlobalCategoriesFileL();
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp76::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp76::CloseTest()
+ {
+ iLog->Put(_L("CloseTest"));
+ // Delete "corrupt" global categories file
+ DeleteFileL(KCopyFilePath);
+
+ delete iOperation;
+ iOperation = NULL;
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp76::TestCorruptGlobalCategoriesFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp76::TestCorruptGlobalCategoriesFileL()
+ {
+ iLog->Put(_L("TestCorruptGlobalCategoriesFileL"));
+ RemoveDefaultDbL();
+
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ // use emtpy landmarks db as corrupt global categories file
+ //User::LeaveIfError(fileMan->Copy(KLandmarksEmptyDb, KCopyFilePath, CFileMan::EOverWrite));
+ User::LeaveIfError(fileMan->Copy(KCORRUPTFILE, KCopyFilePath, CFileMan::EOverWrite));
+
+ CleanupStack::PopAndDestroy(2, &fs);
+ iLog->Put(_L("Open Landmarksdb"));
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(lmd);
+
+ if (lmd->IsInitializingNeeded())
+ {
+ iLog->Put(_L("IsInitializingNeeded()"));
+ ExecuteAndDeleteLD(lmd->InitializeL());
+ iLog->Put(_L("After InitializeL()"));
+ }
+
+ // FrBo TBD below, what will happen below when error above is fixed
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*lmd);
+ CleanupStack::PushL(categoryManager);
+ // Make sure that global categories are included in lm db, use default global categories
+ iLog->Put(_L("categoryManager->ResetGlobalCategoriesL()"));
+
+ TRAPD(err, iOperation = categoryManager->ResetGlobalCategoriesL());
+
+ if (err == KErrNone) LogErrorAndLeave(_L("ResetGlobalCategoriesL should leave with errorcode"));
+ TBuf<100> buf;
+ buf.Format(_L("ResetGlobalCategoriesL leaved with code: %d"), err);
+ iLog->Put(buf);
+
+ delete iOperation;
+ iOperation = NULL;
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(lmd);
+
+ DeleteFileL(KCopyFilePath);
+ iLog->Put(_L("TestCorruptGlobalCategoriesFileL"));
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp77.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,604 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp77.h"
+#include <EPos_CPosLandmarkDatabase.h>
+
+// CONSTANTS
+// _LIT(KTp77Panic, "Timeout Panic");
+const TInt KTp77PanicNumber = 77;
+
+// ================= LOCAL FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// LOCAL_C BadThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt BadClientThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp77::RunBadClientTestL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ---------------------------------------------------------
+// LOCAL_C KillerThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt KillerThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TRAPD(err, CPosTp77::RunThreadKillerL(aData));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp77::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP77 - Bad server usage");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::InitTestL()
+ {
+ MakeSurePanicDebugFileExistsL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::CloseTest()
+ {
+ iBadThread.Close();
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::StartL()
+ {
+// Test multiple Notify Db events
+ iLog->Put(_L("1st part, testing multiple notify Db event"));
+ iTestCase = ETestNotifyDbEvent;
+ CPosLandmarkDatabase* db = InitDbLC();
+ iTimeToWait = 3000000;
+ ResumeThreadsAndVerifyExitL();
+ TBool errors = VerifyThreadExitResultsL(KTp77PanicNumber);
+ (errors) ?
+ VerifyLmServerIsAliveL(db) :
+ errors = VerifyLmServerIsAliveL(db);
+ CleanupStack::PopAndDestroy(db);
+
+// Test non terminated single Notify Db event
+ iLog->Put(_L("2nd part, testing non terminated sinlge notify Db event"));
+ iTestCase = ETestNotifyDbEvent2;
+ db = InitDbLC();
+ ResumeThreadsAndVerifyExitL();
+ (errors) ?
+ VerifyThreadExitResultsL(0) :
+ errors = VerifyThreadExitResultsL(0);
+ (errors) ?
+ VerifyLmServerIsAliveL(db) :
+ errors = VerifyLmServerIsAliveL(db);
+ CleanupStack::PopAndDestroy(db);
+
+// Test non terminated single InitializeL()
+ iLog->Put(_L("3rd part, testing non terminated single Initialize db operations"));
+ iTestCase = ETestInitialize;
+ RemoveDefaultDbL();
+ db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ ResumeThreadsAndVerifyExitL();
+ (errors) ?
+ VerifyThreadExitResultsL(0) :
+ errors = VerifyThreadExitResultsL(0);
+ CPosLmOperation* initOp = db->InitializeL();
+ CleanupStack::PushL(initOp);
+ TRAPD(err, initOp->ExecuteL());
+ if (err != KErrNone)
+ {
+ _LIT(KError, "Trying to initialize after badThread failed with %d");
+ iBuf.Format(KError, err);
+ iLog->PutError(iBuf);
+ errors = ETrue;
+ }
+ CleanupStack::PopAndDestroy(initOp);
+ (errors) ?
+ VerifyLmServerIsAliveL(db) :
+ errors = VerifyLmServerIsAliveL(db);
+ CleanupStack::PopAndDestroy(db);
+
+// Test non terminated multiple InitializeL()
+ iLog->Put(_L("4th part, testing non terminated multiple Initialize db operations"));
+ iTestCase = ETestInitialize2;
+ RemoveDefaultDbL();
+ db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ ResumeThreadsAndVerifyExitL();
+ (errors) ?
+ VerifyThreadExitResultsL(0) :
+ errors = VerifyThreadExitResultsL(0);
+ initOp = db->InitializeL();
+ CleanupStack::PushL(initOp);
+ TRAP(err, initOp->ExecuteL());
+ if (err != KErrNone)
+ {
+ _LIT(KError, "Trying to initialize after badThread failed with %d");
+ iBuf.Format(KError, err);
+ iLog->PutError(iBuf);
+ errors = ETrue;
+ }
+ CleanupStack::PopAndDestroy(initOp);
+ (errors) ?
+ VerifyLmServerIsAliveL(db) :
+ errors = VerifyLmServerIsAliveL(db);
+ CleanupStack::PopAndDestroy(db);
+
+// Test write lock on non terminated import operation
+ iLog->Put(_L("5th part, testing write lock on non terminated import operation"));
+ iTestCase = ETestWriteLock;
+ db = UseGeneratedDbFileL();
+ CleanupStack::PushL(db);
+ ResumeThreadsAndVerifyExitL();
+ (errors) ?
+ VerifyThreadExitResultsL(0) :
+ errors = VerifyThreadExitResultsL(0);
+ (errors) ?
+ VerifyLmServerIsAliveL(db) :
+ errors = VerifyLmServerIsAliveL(db);
+ CleanupStack::PopAndDestroy(db);
+
+// The test below should be successful. This is the case on WINS but not in THUMB. On
+// THUMB it runs for a while and then fails with KErrNoMemory. A duration test is needed!
+/*
+// Test RegisterUri (executed during OpenL())
+ iLog->Put(_L("2nd part, testing registering URI..."));
+ iTestCase = ETestRegisterUri;
+ db = InitDbLC();
+
+ TBool ready = EFalse;
+ TInt diff;
+ iTimeToWait = 3000000;
+ while (!ready)
+ {
+ diff = iTimeToWait.Int() - iLastTimeToWait.Int();
+ iLastTimeToWait = iTimeToWait;
+ ResumeThreadsAndVerifyExitL();
+ VerifyLmServerIsAliveL(db);
+ if (iBadThreadExitReason == KTp77PanicNumber &&
+ iBadThreadExitType == EExitKill)
+ {
+ // Increase iTimeToWait
+ iTimeToWait = iTimeToWait.Int() + Abs(diff / 2);
+ }
+ else if (iBadThreadExitReason == 0 &&
+ iBadThreadExitType == EExitKill)
+ {
+ // Decrease iTimeToWait
+ iTimeToWait = iTimeToWait.Int() - Abs(diff / 2);
+ }
+ else
+ {
+ LogErrorAndLeave(_L("Got unexpected exit code from badThread"));
+ }
+ ready = iTimeToWait == iLastTimeToWait;
+ }
+ iBuf.Format(_L("Estimated critical code after %d microseconds"), iTimeToWait.Int());
+ iLog->Put(buf);
+
+ // Execute vulnarable code
+ iTimeToWait = iTimeToWait.Int() - 3000;
+ diff = 20;
+ ready = EFalse;
+ TInt i = 0;
+ while (!ready)
+ {
+ iTimeToWait = iTimeToWait.Int() + diff;
+ ResumeThreadsAndVerifyExitL();
+ VerifyLmServerIsAliveL(db);
+ ready = iBadThreadExitReason != KTp77PanicNumber;
+ i++;
+ }
+
+ buf.Format(_L("Tested %d loops"), i);
+ iLog->Put(buf);
+
+ CleanupStack::PopAndDestroy(db);*/
+
+ if (errors)
+ {
+ User::Leave(KErrGeneral);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::InitDbLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp77::InitDbLC()
+ {
+ RemoveDefaultDbL();
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+
+ if (database->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(database->InitializeL());
+ }
+
+ return database;
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::RunBadClientTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::RunBadClientTestL(TAny* aData)
+ {
+ CPosTp77* tp77 = reinterpret_cast <CPosTp77*> (aData);
+ switch (tp77->iTestCase)
+ {
+ case ETestNotifyDbEvent:
+ {
+ TPosLmEvent event1, event2, event3, event4, event5;
+ TRequestStatus status1 = KErrNone;
+ TRequestStatus status2 = KErrNone;
+ TRequestStatus status3 = KErrNone;
+ TRequestStatus status4 = KErrNone;
+ TRequestStatus status5 = KErrNone;
+ TRequestStatus status[5] = {status1, status2, status3, status4, status5};
+
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db1);
+ CPosLandmarkDatabase* db2 = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db2);
+ CPosLandmarkDatabase* db3 = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db3);
+ CPosLandmarkDatabase* db4 = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db4);
+ CPosLandmarkDatabase* db5 = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db5);
+
+ db1->NotifyDatabaseEvent(event1, status[0]);
+ db2->NotifyDatabaseEvent(event2, status[1]);
+ db3->NotifyDatabaseEvent(event3, status[2]);
+ db4->NotifyDatabaseEvent(event4, status[3]);
+ db5->NotifyDatabaseEvent(event5, status[4]);
+
+ for (TInt i = 0; i < 5; i++)
+ {
+ User::WaitForRequest(status[i]);
+ }
+
+ CleanupStack::PopAndDestroy(5, db1);
+ }
+ break;
+
+ case ETestNotifyDbEvent2:
+ {
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL();
+
+ // Observe events
+ TPosLmEvent event1;
+ TRequestStatus status1;
+ db1->NotifyDatabaseEvent(event1, status1);
+ }
+ break;
+
+ case ETestInitialize:
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+
+ // Start to initialize db
+ CPosLmOperation* op = db->InitializeL();
+ TRequestStatus status;
+ TReal32 progress;
+ op->NextStep(status, progress);
+ }
+ break;
+
+ case ETestInitialize2:
+ {
+ TRequestStatus status1, status2, status3, status4, status5;
+ TReal32 progress1, progress2, progress3, progress4, progress5;
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL();
+ CPosLandmarkDatabase* db2 = CPosLandmarkDatabase::OpenL();
+ CPosLandmarkDatabase* db3 = CPosLandmarkDatabase::OpenL();
+ CPosLandmarkDatabase* db4 = CPosLandmarkDatabase::OpenL();
+ CPosLandmarkDatabase* db5 = CPosLandmarkDatabase::OpenL();
+
+ // Start to initialize db
+ CPosLmOperation* op1 = db1->InitializeL();
+ CPosLmOperation* op2 = db2->InitializeL();
+ CPosLmOperation* op3 = db3->InitializeL();
+ CPosLmOperation* op4 = db4->InitializeL();
+ CPosLmOperation* op5 = db5->InitializeL();
+ op1->NextStep(status1, progress1);
+ op2->NextStep(status2, progress2);
+ op3->NextStep(status3, progress3);
+ op4->NextStep(status4, progress4);
+ op5->NextStep(status5, progress5);
+ }
+ break;
+
+ case ETestWriteLock:
+ {
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ CPosLmOperation* removeOp = db->RemoveAllLandmarksL();
+ TReal32 progress(0);
+ TRequestStatus status;
+ while (progress < 0.4)
+ {
+ removeOp->NextStep(status, progress);
+ User::WaitForRequest(status);
+ }
+ CleanupStack::Pop(db);
+ }
+ break;
+
+ case ETestRegisterUri:
+ {
+ CPosLandmarkDatabase* db1 = CPosLandmarkDatabase::OpenL();
+ delete db1;
+ }
+ break;
+
+ };
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::RunThreadKillerL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::RunThreadKillerL(TAny* aData)
+ {
+ CPosTp77* tp77 = reinterpret_cast <CPosTp77*>(aData);
+
+ // Enter a infinite loop. This reason to this is that I want to be sure
+ // that it is killed by the TP77-thread.
+ TBool forever = ETrue;
+ while (forever)
+ {
+ // Panic badThread if it is still alive
+ if (tp77->iBadThread.ExitType() == EExitPending)
+ {
+ TRequestStatus status;
+ tp77->iBadThread.Logon(status);
+
+ switch (tp77->iTestCase)
+ {
+ case ETestNotifyDbEvent:
+ {
+ // Make sure that the badThread has started 5 observers of db events
+ User::After(tp77->iTimeToWait);
+
+ // Generate db event
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ db->AddLandmarkL(*lm);
+
+ // Kill Event observing thread
+ tp77->iBadThread.Kill(KTp77PanicNumber);
+ User::WaitForRequest(status);
+
+ CleanupStack::PopAndDestroy(2, db);
+ }
+ break;
+
+ case ETestNotifyDbEvent2:
+ case ETestInitialize:
+ case ETestInitialize2:
+ case ETestWriteLock:
+ {
+ // Do nothing
+ User::LeaveIfError(tp77->iBadThread.LogonCancel(status));
+ forever = EFalse;
+ }
+ break;
+
+ case ETestRegisterUri:
+ {
+ User::After(tp77->iTimeToWait);
+
+ // Kill Event observing thread
+ tp77->iBadThread.Kill(KTp77PanicNumber);
+ User::WaitForRequest(status);
+ }
+ break;
+
+ };
+ }
+ else
+ {
+ forever = EFalse;
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::ResumeThreadsAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp77::ResumeThreadsAndVerifyExitL()
+ {
+ _LIT(KCreateThreadErr, "Creating thread failed with %d");
+
+ // Create bad thread
+ _LIT(KBadThreadName, "TP77 - Bad thread");
+ iBadThread.Close();
+ TInt err = iBadThread.Create(KBadThreadName, BadClientThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ // Create killer thread
+ RThread killerThread;
+ CleanupClosePushL(killerThread);
+ _LIT(KKillerThreadName, "TP77 - Killer thread");
+ err = killerThread.Create(KKillerThreadName, KillerThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KMaxHeapSize, this);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+
+ // Start threads and wait until either of them exits.
+ TRequestStatus badThreadStatus, killerThreadStatus;
+ iBadThread.Logon(badThreadStatus);
+ iBadThread.Resume();
+ killerThread.Logon(killerThreadStatus);
+ killerThread.Resume();
+ User::WaitForRequest(badThreadStatus);
+ User::WaitForRequest(killerThreadStatus);
+
+ // Fetch exit data
+ iBadThreadExitType = iBadThread.ExitType();
+ iBadThreadExitCategory = iBadThread.ExitCategory();
+ iBadThreadExitReason = iBadThread.ExitReason();
+ iKillerThreadExitType = killerThread.ExitType();
+ iKillerThreadExitCategory = killerThread.ExitCategory();
+ iKillerThreadExitReason = killerThread.ExitReason();
+
+ // Log threads' exit results
+ iBuf.Format(
+ _L("BadThread ended with exit type: %d, exit reason: %d, exit category: %S"),
+ iBadThreadExitType, iBadThreadExitReason, &iBadThreadExitCategory);
+// iLog->Put(buf);
+ iBuf.Format(
+ _L("KillerThread ended with exit type: %d, exit reason: %d, exit category: %S"),
+ iKillerThreadExitType, iKillerThreadExitReason, &iKillerThreadExitCategory);
+// iLog->Put(buf);
+
+ CleanupStack::PopAndDestroy(&killerThread);
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::VerifyThreadExitResultsL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp77::VerifyThreadExitResultsL(TInt aBadThreadExitReason)
+ {
+ TBool error = EFalse;
+ _LIT(KKillCategory, "Kill");
+
+ if (iBadThreadExitType != EExitKill)
+ {
+ _LIT(KExitTypeErr, "BadThread was not killed as expected.");
+ iLog->PutError(KExitTypeErr);
+ error = ETrue;
+ }
+ if (iBadThreadExitCategory != KKillCategory)
+ {
+ _LIT(KPanicErr, "BadThread had unexpected exit category");
+ iLog->PutError(KPanicErr);
+ error = ETrue;
+ }
+ if (iBadThreadExitReason != aBadThreadExitReason)
+ {
+ _LIT(KPanicCodeErr, "BadThread had unexpected exit reason");
+ iLog->PutError(KPanicCodeErr);
+ error = ETrue;
+ }
+ if (iKillerThreadExitType != EExitKill)
+ {
+ _LIT(KExitTypeErr, "KillerThread was not killed as expected.");
+ iLog->PutError(KExitTypeErr);
+ error = ETrue;
+ }
+ if (iKillerThreadExitCategory != KKillCategory)
+ {
+ _LIT(KPanicErr, "KillerThread had unexpected exit category");
+ iLog->PutError(KPanicErr);
+ error = ETrue;
+ }
+ if (iKillerThreadExitReason != 0)
+ {
+ _LIT(KPanicCodeErr, "KillerThread had unexpected exit reason");
+ iLog->PutError(KPanicCodeErr);
+ error = ETrue;
+ }
+
+ return error;
+ }
+
+// ---------------------------------------------------------
+// CPosTp77::VerifyLmServerIsAliveL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CPosTp77::VerifyLmServerIsAliveL(CPosLandmarkDatabase* aDb)
+ {
+ TRAPD(err, aDb->RemoveLandmarkL(1));
+ TBool errorExists = err != KErrNone && err != KErrNotFound;
+ if (errorExists)
+ {
+ _LIT(KError, "Unable to use db instance. Using db failed with %d.");
+ iBuf.Format(KError, err);
+ iLog->PutError(iBuf);
+ }
+
+ return errorExists;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp78.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,815 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp78.h"
+#include <Lbs.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmark.h>
+
+// CONSTANTS
+const TInt KExectionTimeInMinutes = 60 * 10; // 10 hours
+
+// ================= LOCAL FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TThreadParam* params = reinterpret_cast<TThreadParam*> (aData);
+ TRAPD(err, (*params->iTestFunction)(params->iMessage));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+LOCAL_C void AddLandmarksL(
+ TInt aNrOfLmsToAdd,
+ const TDesC& aName,
+ CPosLandmarkDatabase* aDb,
+ RArray<TPosLmItemId>& aIdArray)
+ {
+ for (TInt i = 0; i < aNrOfLmsToAdd; i++)
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(aName);
+ landmark->SetPositionL(TLocality(TCoordinate(64, 85, 20), 25, 53));
+ landmark->SetCoverageRadius(18);
+ landmark->AddCategoryL(1);
+ landmark->SetIconL(_L("Icon"), 23, KPosLmIconMaskNotUsed);
+ landmark->SetLandmarkDescriptionL(_L("Desc"));
+ User::LeaveIfError(aIdArray.Append(aDb->AddLandmarkL(*landmark)));
+ CleanupStack::PopAndDestroy(landmark);
+ }
+ }
+
+LOCAL_C void VerifyErrorL(const TDesC& aFormat, TInt aErr, TDes* aMessage)
+ {
+ if (aErr != KErrNone && aErr != KErrLocked)
+ {
+ aMessage->Format(aFormat, aErr);
+
+ // Append time
+ _LIT(KTimeFormat, " %F%Y-%M-%D at %H.%T:%S");
+ TTime now;
+ now.HomeTime();
+ TBuf<50> time;
+ now.FormatL(time, KTimeFormat);
+ aMessage->Append(time);
+
+ User::Leave(aErr);
+ }
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp78::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP78 - CPosLandmarkDatabase duration tests");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::InitTestL()
+ {
+ MakeSurePanicDebugFileExistsL();
+ InitDbL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::CloseTest()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::StartL()
+ {
+// Test Open database duration test
+ ResumeThreadsAndVerifyExitL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::InitDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::InitDbL()
+ {
+ RemoveDefaultDbL();
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+
+ if (database->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(database->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy(database);
+
+ // Wait for LM server to die
+ User::After(2000000);
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::ResumeThreadsAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::ResumeThreadsAndVerifyExitL()
+ {
+ _LIT(KCreateThreadErr, "Creating thread failed with %d");
+ TInt nrOfThreads = 0;
+ RThread openDbThread, addRemoveLmThread, impExpLmThread, dbEventThread, readAndUpdateThread;
+ TThreadParam params1, params2, params3, params4, params5;
+ TBuf<200> threadMsg1, threadMsg2, threadMsg3, threadMsg4, threadMsg5;
+
+ // Create open database thread
+ _LIT(KOpenDatabase, "TP78 - Open database duration thread");
+ params1.iMessage = &threadMsg1;
+ params1.iTestFunction = RunOpenDbTestL;
+ TInt err = openDbThread.Create(KOpenDatabase, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KDefaultHeapSize, ¶ms1);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(openDbThread);
+ nrOfThreads++;
+
+ // Create add remove LMs thread
+ _LIT(KAddRemoveLandmarks, "TP78 - Add remove landmarks duration thread");
+ params2.iMessage = &threadMsg2;
+ params2.iTestFunction = RunAddRemoveLmTestL;
+ err = addRemoveLmThread.Create(KAddRemoveLandmarks, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, 5 * KDefaultHeapSize, ¶ms2);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(addRemoveLmThread);
+ nrOfThreads++;
+
+ // Create import/export LMs thread
+ _LIT(KImpExpLandmarks, "TP78 - Import/Export landmarks duration thread");
+ params3.iMessage = &threadMsg3;
+ params3.iTestFunction = RunImportExportLmTestL;
+ err = impExpLmThread.Create(KImpExpLandmarks, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, 5 * KDefaultHeapSize, ¶ms3);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(impExpLmThread);
+ nrOfThreads++;
+
+ // Create db event thread
+ _LIT(KDbEventThread, "TP78 - Database events duration thread");
+ params4.iMessage = &threadMsg4;
+ params4.iTestFunction = RunDbEventTestL;
+ err = dbEventThread.Create(KDbEventThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KDefaultHeapSize, ¶ms4);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(dbEventThread);
+ nrOfThreads++;
+
+ // Create read and update thread
+ _LIT(KReadAndUpdateThread, "TP78 - Read and update landmarks duration thread");
+ params5.iMessage = &threadMsg5;
+ params5.iTestFunction = RunReadAndUpdateTestL;
+ err = readAndUpdateThread.Create(KReadAndUpdateThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, 5 * KDefaultHeapSize, ¶ms5);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(readAndUpdateThread);
+ nrOfThreads++;
+
+ // Start threads.
+ RThread* threads[] = {&openDbThread, &addRemoveLmThread, &impExpLmThread, &dbEventThread, &readAndUpdateThread};
+ RPointerArray<CThreadMonitor> threadMonitors;
+ for (TInt j = 0; j < nrOfThreads; j++)
+ {
+ threadMonitors.Append(CThreadMonitor::NewL(threads[j]));
+ }
+
+ // Log time stamp
+ _LIT(KTimeFormat, "Threads started on %F%Y-%M-%D at %H.%T:%S");
+ TTime now;
+ now.HomeTime();
+ now.FormatL(iBuf, KTimeFormat);
+ iLog->Put(iBuf);
+
+ // Wait until any of the threads exits.
+ TDes* messages[] = {&threadMsg1, &threadMsg2, &threadMsg3, &threadMsg4, &threadMsg5};
+ TInt errors = KErrNone;
+ TBool allThreadsTerminated = EFalse;
+ while (!allThreadsTerminated && errors == KErrNone)
+ {
+ CActiveScheduler::Start();
+
+ // Assume all threads are terminated
+ allThreadsTerminated = ETrue;
+ for (TInt i = 0; i < nrOfThreads && errors == KErrNone; i++)
+ {
+ if (threadMonitors[i]->IsActive())
+ {
+ // Thread is still alive
+ allThreadsTerminated = EFalse;
+ }
+ else
+ {
+ // Thread is terminated, check exit codes
+ if (*messages[i] != KNullDesC)
+ {
+ iLog->Put(*(messages[i]));
+ }
+ if (threads[i]->ExitType() != EExitKill)
+ {
+ iBuf.Format(_L("Thread %i was not killed!"), i);
+ iLog->PutError(iBuf);
+ TExitCategoryName category = threads[i]->ExitCategory();
+ iBuf.Format(_L("Exit Category = %S %d"), &category, threads[i]->ExitReason());
+ iLog->Put(iBuf);
+ errors = KErrGeneral;
+ }
+ else
+ {
+ TInt exitReason = threads[i]->ExitReason();
+ if (exitReason != 0)
+ {
+ iBuf.Format(_L("Thread's exit reason wasn't 0 but %d."), exitReason);
+ iLog->PutError(iBuf);
+ errors = exitReason;
+ }
+ }
+ }
+ }
+ }
+
+ // Terminate all remaining threads
+ threadMonitors.ResetAndDestroy();
+
+ // Log time stamp
+ _LIT(KTimeFormat2, "Threads terminated on %F%Y-%M-%D at %H.%T:%S");
+ now.HomeTime();
+ now.FormatL(iBuf, KTimeFormat2);
+ iLog->Put(iBuf);
+
+
+ User::LeaveIfError(errors);
+
+ CleanupStack::PopAndDestroy(nrOfThreads, &openDbThread);
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::RunOpenDbTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::RunOpenDbTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+ CPosLandmarkDatabase* db = NULL;
+ TRAPD(err, db = CPosLandmarkDatabase::OpenL());
+ CleanupStack::PushL(db);
+ VerifyErrorL(_L("<-- OpenDbThread: CPosLandmarkDatabase::OpenL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ // Try to initialize the db
+ db->IsInitializingNeeded(); // don't care about the result. Init anyway
+ CPosLmOperation* operation = NULL;
+ TRAP(err, operation = db->InitializeL());
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- OpenDbThread: InitializeL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- OpenDbThread: ExecuteAndDeleteLD(InitializeL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(operation);
+ }
+ CleanupStack::PopAndDestroy(db);
+
+ // Let other threads get access to the database
+ User::After(10000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::RunAddRemoveLmTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::RunAddRemoveLmTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+ RArray<TPosLmItemId> dbItems;
+ CleanupClosePushL(dbItems);
+
+ // Remove all landmarks
+ CPosLmOperation* operation = NULL;
+ TRAPD(err, operation = db->RemoveAllLandmarksL());
+ VerifyErrorL(_L("<-- AddRemoveThread: RemoveAllLandmarksL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TRAP(err, ExecuteAndDeleteLD(operation));
+ VerifyErrorL(_L("<-- AddRemoveThread: ExecuteAndDeleteLD(RemoveAllLandmarksL()) left with %d -->"), err, aMessage);
+ }
+
+ // Add some landmarks
+ const TInt KNrOfLms = 10;
+ TRAP(err, AddLandmarksL(KNrOfLms, _L("AddRemoveThread"), db, dbItems));
+ VerifyErrorL(_L("<-- AddRemoveThread: AddLandmarksL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ // Remove some items one by one
+ for (TInt i = 0; i < KNrOfLms / 2; i++)
+ {
+ dbItems.Remove(0);
+ TRAP(err, db->RemoveLandmarkL(dbItems[0]));
+ VerifyErrorL(_L("<-- AddRemoveThread: RemoveLandmarkL(TPosLmItemId) left with %d -->"), err, aMessage);
+ }
+
+ // Remove 5 items in one step
+ operation = NULL;
+ TRAPD(err, operation = db->RemoveLandmarksL(dbItems));
+ VerifyErrorL(_L("<-- AddRemoveThread: RemoveLandmarksL(RArray) left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TRAP(err, ExecuteAndDeleteLD(operation));
+ VerifyErrorL(_L("<-- AddRemoveThread: ExecuteAndDeleteLD(RemoveLandmarksL(dbItems)) left with %d -->"), err, aMessage);
+ }
+ dbItems.Reset();
+
+ CPosLandmarkDatabase::TSize dbSize; dbSize.iUsage = 0;
+ TRAP(err, dbSize = db->SizeL());
+ VerifyErrorL(_L("<-- AddRemoveThread: SizeL() left with %d -->"), err, aMessage);
+ if (dbSize.iUsage < 0.9)
+ {
+ operation = NULL;
+ TRAP(err, operation = db->CompactL());
+ VerifyErrorL(_L("<-- AddRemoveThread: CompactL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ CleanupStack::PushL(operation);
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- AddRemoveThread: ExecuteAndDeleteLD(CompactL()) left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(operation);
+ }
+ }
+
+ HBufC* dbUri = NULL;
+ TRAP(err, CleanupStack::Pop(dbUri = db->DatabaseUriLC()));
+ CleanupStack::PushL(dbUri);
+ VerifyErrorL(_L("<-- AddRemoveThread: DatabaseUriLC() left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(dbUri);
+ }
+
+ dbItems.Reset();
+ CleanupStack::PopAndDestroy(&dbItems);
+
+ // Let other threads get access to the database
+ User::After(300000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+ }
+
+ CleanupStack::PopAndDestroy(db);
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::RunImportExportLmTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::RunImportExportLmTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+// Export landmarks
+ TBool exportSuccessful = EFalse;
+ CPosLmOperation* operation = NULL;
+ CPosLandmarkEncoder* encoder = NULL;
+ TRAPD(err, encoder = CPosLandmarkEncoder::NewL(KMimeType));
+ VerifyErrorL(_L("<-- ImportExportThread: CPosLandmarkEncoder::NewL left with %d -->"), err, aMessage);
+ CleanupStack::PushL(encoder);
+
+ // Use buffer as output
+ CBufBase* outputBuffer = NULL;
+ TRAP(err, outputBuffer = encoder->SetUseOutputBufferL());
+ VerifyErrorL(_L("<-- ImportExportThread: SetUseOutputBufferL left with %d -->"), err, aMessage);
+ CleanupStack::PushL(outputBuffer);
+
+ // Add collection data
+ TRAP(err, encoder->AddCollectionDataL(EPosLmCollDataCollectionName, _L("collection Name")));
+ VerifyErrorL(_L("<-- ImportExportThread: AddCollectionDataL(Name) left with %d -->"), err, aMessage);
+ TRAP(err, encoder->AddCollectionDataL(EPosLmCollDataCollectionDescription, _L("collection Desc")));
+ VerifyErrorL(_L("<-- ImportExportThread: AddCollectionDataL(Desc) left with %d -->"), err, aMessage);
+
+ // Export landmarks
+ RArray<TPosLmItemId> lmIdArray;
+ CleanupClosePushL(lmIdArray);
+ TRAP(err, AddLandmarksL(5, _L("ImportExportThread"), db, lmIdArray));
+ VerifyErrorL(_L("<-- ImportExportThread: AddLandmarksL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TRAP(err, operation = db->ExportLandmarksL(*encoder, lmIdArray,
+ CPosLandmarkDatabase::EIncludeCategories | CPosLandmarkDatabase::EIncludeGlobalCategoryNames));
+ VerifyErrorL(_L("<-- ImportExportThread: ExportLandmarksL left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ CleanupStack::PushL(operation);
+ TRAP(err, ExecuteAndDeleteLD(operation));
+ CleanupStack::Pop(operation);
+ VerifyErrorL(_L("<-- ImportExportThread: ExecuteAndDeleteLD(ExportLandmarksL) left with %d -->"), err, aMessage);
+
+ // finalize encoding
+ operation = NULL;
+ TRAP(err, operation = encoder->FinalizeEncodingL());
+ VerifyErrorL(_L("<-- ImportExportThread: FinalizeEncodingL left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ CleanupStack::PushL(operation);
+ TRAP(err, ExecuteAndDeleteLD(operation));
+ CleanupStack::Pop(operation);
+ VerifyErrorL(_L("<-- ImportExportThread: ExecuteAndDeleteLD(FinalizeEncodingL) left with %d -->"), err, aMessage);
+ exportSuccessful = ETrue;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&lmIdArray);
+
+// Import landmarks
+ if (exportSuccessful)
+ {
+ CPosLandmarkParser* parser = NULL;
+ TRAP(err, parser = CPosLandmarkParser::NewL(KMimeType));
+ CleanupStack::PushL(parser);
+ VerifyErrorL(_L("<-- ImportExportThread: CPosLandmarkParser::NewL left with %d -->"), err, aMessage);
+
+ // Use buffer as input
+ TInt size = outputBuffer->Size();
+ HBufC8* inputBuffer = HBufC8::New(size);
+ if (!inputBuffer)
+ {
+ aMessage->Copy(_L8("Unable to allocate inputBuffer. Error: KErrNoMemory"));
+ }
+ CleanupStack::PushL(inputBuffer);
+ TPtr8 inputBufferPtr = inputBuffer->Des();
+ outputBuffer->Read(0, inputBufferPtr, size);
+ parser->SetInputBuffer(inputBufferPtr);
+
+ // Import landmarks
+ operation = NULL;
+ TRAP(err, operation = db->ImportLandmarksL(*parser,
+ CPosLandmarkDatabase::EDefaultOptions));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- ImportExportThread: ImportLandmarksL left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- ImportExportThread: ExecuteAndDeleteLD(ImportLandmarksL) left with %d -->"), err, aMessage);
+
+ CPosLmItemIterator* iterator = NULL;
+ TRAP(err, iterator = db->ImportedLandmarksIteratorL(operation));
+ CleanupStack::PushL(iterator);
+ VerifyErrorL(_L("<-- ImportExportThread: ImportedLandmarksIteratorL() left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(iterator);
+ }
+ CleanupStack::PopAndDestroy(operation);
+ CleanupStack::PopAndDestroy(inputBuffer);
+ CleanupStack::PopAndDestroy(parser);
+ }
+ CleanupStack::PopAndDestroy(outputBuffer);
+ CleanupStack::PopAndDestroy(encoder);
+
+ // Let other threads get access to the database
+ User::After(100000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+ }
+
+ CleanupStack::PopAndDestroy(db);
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::RunDbEventTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::RunDbEventTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ // Open db
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+
+ while (executionTime.Int() < KExectionTimeInMinutes - 1)
+ {
+ TRequestStatus status;
+ TPosLmEvent event;
+
+ // Listen for events for some time
+ db->NotifyDatabaseEvent(event, status);
+ User::After(100000);
+
+ // Cancel listening
+ TInt err = db->CancelNotifyDatabaseEvent();
+ VerifyErrorL(_L("<-- DbEventThread: CancelNotifyDatabaseEvent returned %d -->"), err, aMessage);
+
+ // Start listening again
+ db->NotifyDatabaseEvent(event, status);
+ User::WaitForRequest(status);
+ VerifyErrorL(_L("<-- DbEventThread: NotifyDatabaseEvent returned %d -->"), status.Int(), aMessage);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+ }
+
+ CleanupStack::PopAndDestroy(db);
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::UpdateLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::UpdateLandmarksL(CPosLandmarkDatabase* aDb, TPosLmItemId aId, TDes* aMessage)
+ {
+ //CPosLandmark* landmark = NULL;
+ CPosLandmark* landmark = aDb->ReadLandmarkLC(aId);
+ //VerifyErrorL(_L("<-- ReadAndUpdateThread: ReadLandmarkLC() left with %d -->"), err, aMessage);
+
+ TRAPD(err, landmark->SetLandmarkNameL(_L("UpdatedName")));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: SetLandmarkNameL() left with %d -->"), err, aMessage);
+ TRAP(err, aDb->UpdateLandmarkL(*landmark));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: UpdateLandmarkL() left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+// ---------------------------------------------------------
+// CPosTp78::RunReadAndUpdateTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp78::RunReadAndUpdateTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ // Open db
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+ RArray<TPosLmItemId> dbItems;
+ CleanupClosePushL(dbItems);
+
+ const TInt KNrOfLms = 3;
+ TRAPD(err, AddLandmarksL(KNrOfLms, _L("ReadAndUpdateThread"), db, dbItems));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: AddLandmarksL() left with %d -->"), err, aMessage);
+
+ if (err == KErrNone)
+ {
+ // Read and update
+ for (TInt i = 0; i < KNrOfLms; i++)
+ {
+ /*
+ CPosLandmark* landmark = NULL;
+ TRAP(err, landmark = db->ReadLandmarkLC(dbItems[i]));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ReadLandmarkLC() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TRAP(err, landmark->SetLandmarkNameL(_L("UpdatedName")));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: SetLandmarkNameL() left with %d -->"), err, aMessage);
+ TRAP(err, db->UpdateLandmarkL(*landmark));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: UpdateLandmarkL() left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+ */
+
+ TRAPD(err, UpdateLandmarksL(db,dbItems[i], aMessage));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ReadLandmarkLC() left with %d -->"), err, aMessage);
+ }
+
+ // Set partial read parameters
+ CPosLmPartialReadParameters* params = NULL;
+ TRAP(err, CleanupStack::Pop(params = db->PartialReadParametersLC()));
+ CleanupStack::PushL(params);
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: PartialReadParametersLC() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ params->SetRequestedAttributes(CPosLandmark::EIcon | CPosLandmark::ECoverageRadius);
+ RArray<TUint> posFields;
+ err = posFields.Append(EPositionFieldStreet);
+ params->SetRequestedPositionFields(posFields);
+ posFields.Close();
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: Append() returned %d -->"), err, aMessage);
+ TRAP(err, db->SetPartialReadParametersL(*params));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: SetPartialReadParametersL() left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(params);
+ }
+
+ // Read partial landmarks one by one
+ for (TInt j = 0; j < KNrOfLms; j++)
+ {
+ CPosLandmark* lm = NULL;
+ TRAP(err, CleanupStack::Pop(lm = db->ReadPartialLandmarkLC(dbItems[j])));
+ CleanupStack::PushL(lm);
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ReadPartialLandmarkLC() left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+ // Read several partial landmarks in one chunk
+ CPosLmOperation* operation = NULL;
+ TRAP(err, operation = db->PreparePartialLandmarksL(dbItems));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: PreparePartialLandmarksL() left with %d -->"), err, aMessage);
+
+ if (err == KErrNone)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ExecuteAndDeleteLD(PreparePartialLandmarksL()) left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ CArrayPtr<CPosLandmark>* landmarks = NULL;
+ TRAP(err, landmarks = db->TakePreparedPartialLandmarksL(operation));
+ if (landmarks)
+ {
+ landmarks->ResetAndDestroy();
+ delete landmarks;
+ }
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: PreparePartialLandmarksL() left with %d -->"), err, aMessage);
+ }
+ }
+ CleanupStack::PopAndDestroy(operation);
+ }
+ CleanupStack::PopAndDestroy(&dbItems);
+
+ // Let other threads get access to the database
+ User::After(110000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+ }
+ CleanupStack::PopAndDestroy(db);
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::NewL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CThreadMonitor* CThreadMonitor::NewL(RThread* aThread)
+ {
+ CThreadMonitor* self = new (ELeave) CThreadMonitor(aThread);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::ConstructL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CThreadMonitor::ConstructL()
+ {
+ iThread->Resume();
+ iThread->Logon(iStatus);
+ SetActive();
+ }
+
+// Constructor
+CThreadMonitor::CThreadMonitor(RThread* aThread)
+: CActive(CActive::EPriorityStandard), iThread(aThread)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Destructor
+CThreadMonitor::~CThreadMonitor()
+ {
+ Cancel();
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CThreadMonitor::DoCancel()
+ {
+ iThread->LogonCancel(iStatus);
+
+ // Kill thread
+ TRequestStatus status;
+ iThread->Logon(status);
+ iThread->Kill(KErrCancel);
+ User::WaitForRequest(status);
+ }
+
+// ---------------------------------------------------------
+// CThreadMonitor::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CThreadMonitor::RunL()
+ {
+ CActiveScheduler::Stop();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp79.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,610 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp79.h"
+#include "FT_CPosTp78.h"
+#include <Lbs.h>
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmCategoryManager.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLandmarkCategory.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+
+// CONSTANTS
+const TInt KExectionTimeInMinutes = 60 * 10; // 10 hours
+
+// ================= LOCAL FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// LOCAL_C ThreadFunction
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+LOCAL_C TInt ThreadFunction(TAny* aData)
+ {
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ CActiveScheduler* actSch = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(actSch);
+
+ TThreadParam* params = reinterpret_cast<TThreadParam*> (aData);
+ TRAPD(err, (*params->iTestFunction)(params->iMessage));
+
+ delete actSch;
+ delete cleanup;
+ return err;
+ }
+
+LOCAL_C void AddCategoriesL(
+ TInt aNrOfLmsToAdd,
+ const TDesC& aName,
+ CPosLmCategoryManager* aCatMan,
+ RArray<TPosLmItemId>& aIdArray)
+ {
+ for (TInt i = 0; i < aNrOfLmsToAdd; i++)
+ {
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ HBufC* name = HBufC::NewLC(aName.Length() + 5);
+ TPtr namePtr = name->Des();
+ namePtr.Format(aName, i);
+ category->SetCategoryNameL(namePtr);
+ category->SetIconL(_L("Icon"), 23, KPosLmIconMaskNotUsed);
+ TPosLmItemId id;
+ TRAPD(err, id = aCatMan->AddCategoryL(*category));
+ if (err != KErrNone && err != KErrAlreadyExists)
+ {
+ User::Leave(err);
+ }
+ else
+ {
+ if (err == KErrAlreadyExists)
+ {
+ id = aCatMan->GetCategoryL(namePtr);
+ }
+ User::LeaveIfError(aIdArray.Append(id));
+ }
+ CleanupStack::PopAndDestroy(2, category);
+ }
+ }
+
+LOCAL_C void VerifyErrorL(const TDesC& aFormat, TInt aErr, TDes* aMessage)
+ {
+ if (aErr != KErrNone && aErr != KErrLocked)
+ {
+ aMessage->Format(aFormat, aErr);
+
+ // Append time
+ _LIT(KTimeFormat, " %F%Y-%M-%D at %H.%T:%S");
+ TTime now;
+ now.HomeTime();
+ TBuf<50> time;
+ now.FormatL(time, KTimeFormat);
+ aMessage->Append(time);
+
+ User::Leave(aErr);
+ }
+ }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp79::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "TP79 - Category and search duration tests");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::InitTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::InitTestL()
+ {
+ MakeSurePanicDebugFileExistsL();
+ InitDbL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::CloseTest()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::StartL()
+ {
+// Test Open database duration test
+ ResumeThreadsAndVerifyExitL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::InitDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::InitDbL()
+ {
+ RemoveDefaultDbL();
+ CPosLandmarkDatabase* database = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(database);
+
+ if (database->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(database->InitializeL());
+ }
+
+ CleanupStack::PopAndDestroy(database);
+
+ // Wait for LM server to die
+ User::After(2000000);
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::ResumeThreadsAndVerifyExitL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::ResumeThreadsAndVerifyExitL()
+ {
+ _LIT(KCreateThreadErr, "Creating thread failed with %d");
+ TInt nrOfThreads = 0;
+ RThread searchThread, readAndUpdateThread, addRemoveCatsThread;
+ TThreadParam params1, params2, params3;
+ TBuf<200> threadMsg1, threadMsg2, threadMsg3;
+
+ // Create search thread
+ _LIT(KSearch, "TP79 - Search duration thread");
+ params1.iMessage = &threadMsg1;
+ params1.iTestFunction = RunSearchTestL;
+ TInt err = searchThread.Create(KSearch, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KDefaultHeapSize, ¶ms1);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(searchThread);
+ nrOfThreads++;
+
+ // Create read and update thread
+ _LIT(KReadAndUpdateThread, "TP79 - Read and update categories duration thread");
+ params2.iMessage = &threadMsg2;
+ params2.iTestFunction = RunReadAndUpdateTestL;
+ err = readAndUpdateThread.Create(KReadAndUpdateThread, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KDefaultHeapSize, ¶ms2);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(readAndUpdateThread);
+ nrOfThreads++;
+
+ // Create add remove categories thread
+ _LIT(KAddRemoveCategories, "TP79 - Add remove categories duration thread");
+ params3.iMessage = &threadMsg3;
+ params3.iTestFunction = RunAddRemoveCatsTestL;
+ err = addRemoveCatsThread.Create(KAddRemoveCategories, ThreadFunction,
+ KDefaultStackSize, KMinHeapSize, KDefaultHeapSize, ¶ms3);
+ AssertTrueSecL(err == KErrNone, KCreateThreadErr, err);
+ CleanupClosePushL(addRemoveCatsThread);
+ nrOfThreads++;
+
+ // Start threads.
+ RThread* threads[] = {&searchThread, &readAndUpdateThread, &addRemoveCatsThread};
+ RPointerArray<CThreadMonitor> threadMonitors;
+ for (TInt j = 0; j < nrOfThreads; j++)
+ {
+ threadMonitors.Append(CThreadMonitor::NewL(threads[j]));
+ }
+
+ // Log time stamp
+ _LIT(KTimeFormat, "Threads started on %F%Y-%M-%D at %H.%T:%S");
+ TTime now;
+ now.HomeTime();
+ now.FormatL(iBuf, KTimeFormat);
+ iLog->Put(iBuf);
+
+ // Wait until any of the threads exits.
+ TDes* messages[] = {&threadMsg1, &threadMsg2, &threadMsg3};
+ TInt errors = KErrNone;
+ TBool allThreadsTerminated = EFalse;
+ while (!allThreadsTerminated && errors == KErrNone)
+ {
+ CActiveScheduler::Start();
+
+ // Assume all threads are terminated
+ allThreadsTerminated = ETrue;
+ for (TInt i = 0; i < nrOfThreads && errors == KErrNone; i++)
+ {
+ if (threadMonitors[i]->IsActive())
+ {
+ // Thread is still alive
+ allThreadsTerminated = EFalse;
+ }
+ else
+ {
+ // Thread is terminated, check exit codes
+ if (*messages[i] != KNullDesC)
+ {
+ iLog->Put(*(messages[i]));
+ }
+ if (threads[i]->ExitType() != EExitKill)
+ {
+ iBuf.Format(_L("Thread %i was not killed!"), i);
+ iLog->PutError(iBuf);
+ TExitCategoryName category = threads[i]->ExitCategory();
+ iBuf.Format(_L("Exit Category = %S %d"), &category, threads[i]->ExitReason());
+ iLog->Put(iBuf);
+ errors = KErrGeneral;
+ }
+ else
+ {
+ TInt exitReason = threads[i]->ExitReason();
+ if (exitReason != 0)
+ {
+ iBuf.Format(_L("Thread's exit reason wasn't 0 but %d."), exitReason);
+ iLog->PutError(iBuf);
+ errors = exitReason;
+ }
+ }
+ }
+ }
+ }
+
+ // Terminate all remaining threads
+ threadMonitors.ResetAndDestroy();
+
+ // Log time stamp
+ _LIT(KTimeFormat2, "Threads terminated on %F%Y-%M-%D at %H.%T:%S");
+ now.HomeTime();
+ now.FormatL(iBuf, KTimeFormat2);
+ iLog->Put(iBuf);
+
+
+ User::LeaveIfError(errors);
+
+ CleanupStack::PopAndDestroy(nrOfThreads, &searchThread);
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::RunSearchTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::RunSearchTestL(TDes* aMessage)
+ {
+ _LIT(KName, "SearchThread %d");
+
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+ CPosLandmarkSearch* searcher = NULL;
+ TRAPD(err, searcher = CPosLandmarkSearch::NewL(*db));
+ CleanupStack::PushL(searcher);
+ VerifyErrorL(_L("<-- SearchThread: CPosLandmarkSearch::NewL() left with %d -->"), err, aMessage);
+
+ RArray<TPosLmItemId> dbItems;
+ CleanupClosePushL(dbItems);
+
+ const TInt KNrOfCats = 3;
+ TRAP(err, AddCategoriesL(KNrOfCats, KName, catMan, dbItems));
+ VerifyErrorL(_L("<-- SearchThread: AddCategoriesL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ // StartLandmarkSearchL
+ CPosLmTextCriteria* textCriteria = NULL;
+ TRAP(err, CleanupStack::Pop(textCriteria = CPosLmTextCriteria::NewLC()));
+ CleanupStack::PushL(textCriteria);
+ VerifyErrorL(_L("<-- SearchThread: CPosLmTextCriteria::NewLC() left with %d -->"), err, aMessage);
+ TRAP(err, textCriteria->SetTextL(KName().Left(5)));
+ VerifyErrorL(_L("<-- SearchThread: SetTextL() left with %d -->"), err, aMessage);
+ textCriteria->SetAttributesToSearch(CPosLandmark::EDescription & CPosLandmark::ELandmarkName);
+ TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+
+ CPosLmOperation* operation = NULL;
+ TRAPD(err, operation = searcher->StartLandmarkSearchL(*textCriteria, sortPref));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- SearchThread: StartLandmarkSearchL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- SearchThread: ExecuteLD(StartLandmarkSearchL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(operation);
+
+ // StartCategorySearchL
+ CPosLmCatNameCriteria* nameCriteria = NULL;
+ TRAP(err, CleanupStack::Pop(nameCriteria = CPosLmCatNameCriteria::NewLC()));
+ CleanupStack::PushL(nameCriteria);
+ VerifyErrorL(_L("<-- SearchThread: CPosLmCatNameCriteria::NewLC() left with %d -->"), err, aMessage);
+ TRAP(err, nameCriteria->SetSearchPatternL(KName().Left(5)));
+ VerifyErrorL(_L("<-- SearchThread: SetSearchPatternL() left with %d -->"), err, aMessage);
+ operation = NULL;
+ TRAP(err, operation = searcher->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNameAscending));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- SearchThread: StartCategorySearchL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- SearchThread: ExecuteLD(StartCategorySearchL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(3, textCriteria);
+ }
+
+ // Let other threads get access to the database
+ User::After(300000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ CleanupStack::PopAndDestroy(2, searcher);
+ }
+
+ CleanupStack::PopAndDestroy(2, db);
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::RunAddRemoveCatsTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::RunAddRemoveCatsTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ // Open db
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+ CPosLmOperation* operation = NULL;
+ CPosLmCategoryManager* catMan = NULL;
+ TRAPD(err, catMan = CPosLmCategoryManager::NewL(*db));
+ CleanupStack::PushL(catMan);
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: CPosLmCategoryManager::NewL() left with %d -->"), err, aMessage);
+
+ RArray<TPosLmItemId> dbItems;
+ CleanupClosePushL(dbItems);
+
+ // RemoveCategoriesL / remove all categories
+ CPosLmItemIterator* iterator = NULL;
+ TRAP(err, iterator = catMan->CategoryIteratorL());
+ CleanupStack::PushL(iterator);
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: CategoryIteratorL() left with %d -->"), err, aMessage);
+ if (iterator)
+ {
+ TRAP(err, iterator->GetItemIdsL(dbItems, 0, iterator->NumOfItemsL()));
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: GetItemIdsL() left with %d -->"), err, aMessage);
+
+ if (err == KErrNone)
+ {
+ operation = NULL;
+ TRAP(err, operation = catMan->RemoveCategoriesL(dbItems));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: RemoveCategoriesL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: ExecuteLD(RemoveCategoriesL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(operation);
+ }
+ dbItems.Reset();
+ }
+ CleanupStack::PopAndDestroy(iterator);
+
+ // ResetGlobalCategoriesL
+ operation = NULL;
+ TRAP(err, operation = catMan->ResetGlobalCategoriesL());
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ResetGlobalCategoriesL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ CleanupStack::PushL(operation);
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ExecuteLD(ResetGlobalCategoriesL()) left with %d -->"), err, aMessage);
+ CleanupStack::PopAndDestroy(operation);
+ }
+
+ const TInt KNrOfCats = 3;
+ TRAP(err, AddCategoriesL(KNrOfCats, _L("AddRemoveCatsThread %d"), catMan, dbItems));
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: AddCategoriesL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ // AddCategoryToLandmarksL
+ operation = NULL;
+ TRAP(err, operation = catMan->AddCategoryToLandmarksL(dbItems[0], dbItems));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: AddCategoryToLandmarksL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: ExecuteLD(AddCategoryToLandmarksL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(operation);
+
+ // RemoveCategoryFromLandmarksL
+ operation = NULL;
+ TRAP(err, operation = catMan->RemoveCategoryFromLandmarksL(dbItems[0], dbItems));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: RemoveCategoryFromLandmarksL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: ExecuteLD(RemoveCategoryFromLandmarksL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(operation);
+
+ // RemoveCategoryL
+ operation = NULL;
+ TRAP(err, operation = catMan->RemoveCategoryL(dbItems[0]));
+ CleanupStack::PushL(operation);
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: RemoveCategoryL() left with %d -->"), err, aMessage);
+ if (operation)
+ {
+ TRAP(err, operation->ExecuteL());
+ VerifyErrorL(_L("<-- AddRemoveCatsThread: ExecuteLD(RemoveCategoryL()) left with %d -->"), err, aMessage);
+ }
+ CleanupStack::PopAndDestroy(operation);
+ dbItems.Remove(0);
+ }
+
+ // Let other threads get access to the database
+ User::After(300000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ CleanupStack::PopAndDestroy(2, catMan);
+ }
+
+ CleanupStack::PopAndDestroy(db);
+ }
+
+// ---------------------------------------------------------
+// CPosTp79::RunReadAndUpdateTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp79::RunReadAndUpdateTestL(TDes* aMessage)
+ {
+ // Execute thread for a number of hours
+ TTime startTime, stopTime;
+ startTime.HomeTime();
+ stopTime.HomeTime();
+ TTimeIntervalMinutes executionTime;
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+
+ // Open db
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(catMan);
+
+ while (executionTime.Int() < KExectionTimeInMinutes)
+ {
+ RArray<TPosLmItemId> dbItems;
+ CleanupClosePushL(dbItems);
+
+ const TInt KNrOfCats = 3;
+ TRAPD(err, AddCategoriesL(KNrOfCats, _L("ReadAndUpdateThread %d"), catMan, dbItems));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: AddCategoriesL() left with %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ // Read and update
+ for (TInt i = 0; i < KNrOfCats; i++)
+ {
+ CPosLandmarkCategory* category = NULL;
+ TRAP(err, CleanupStack::Pop(category = catMan->ReadCategoryLC(dbItems[i])));
+ CleanupStack::PushL(category);
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ReadCategoryLC() left with %d -->"), err, aMessage);
+ if (category)
+ {
+ TPtrC namePtr;
+ err = category->GetCategoryName(namePtr);
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: GetCategoryName() returned %d -->"), err, aMessage);
+ if (err == KErrNone)
+ {
+ TBuf<KPosLmMaxCategoryNameLength> name(namePtr);
+ name.Insert(0, name.Left(1));
+ TRAP(err, category->SetCategoryNameL(name));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: SetCategoryNameL() left with %d -->"), err, aMessage);
+ TRAP(err, catMan->UpdateCategoryL(*category));
+ if (err != KErrAlreadyExists)
+ {
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: UpdateCategoryL() left with %d -->"), err, aMessage);
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(category);
+ }
+
+ // GetCategoryL
+ if (err != KErrInUse)
+ {
+ TRAP(err, catMan->GetCategoryL(_L("RReadAndUpdateThread 3")));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: GetCategoryL() left with %d -->"), err, aMessage);
+ }
+ }
+ CleanupStack::PopAndDestroy(&dbItems);
+
+ // CategoryIteratorL
+ CPosLmItemIterator* iterator = NULL;
+ TRAP(err, iterator = catMan->CategoryIteratorL(CPosLmCategoryManager::ECategorySortOrderNameAscending));
+ delete iterator;
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: CategoryIteratorL() left with %d -->"), err, aMessage);
+
+ // ReferencedCategoryIteratorL
+ iterator = NULL;
+ TRAP(err, iterator = catMan->ReferencedCategoryIteratorL(CPosLmCategoryManager::ECategorySortOrderNameDescending));
+ delete iterator;
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: ReferencedCategoryIteratorL() left with %d -->"), err, aMessage);
+
+ // GetGlobalCategoryL
+ TRAP(err, catMan->GetGlobalCategoryL(3000));
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: GetGlobalCategoryL() left with %d -->"), err, aMessage);
+
+ // GlobalCategoryNameL
+ HBufC* name = NULL;
+ TRAP(err, name = catMan->GlobalCategoryNameL(3000));
+ delete name;
+ VerifyErrorL(_L("<-- ReadAndUpdateThread: GlobalCategoryNameL() left with %d -->"), err, aMessage);
+
+ // Let other threads get access to the database
+ User::After(110000);
+
+ stopTime.HomeTime();
+ User::LeaveIfError(stopTime.MinutesFrom(startTime, executionTime));
+ }
+
+ CleanupStack::PopAndDestroy(2, db);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp8.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,897 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp8.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLandmark.h>
+#include <LbsPosition.h>
+#include <EPos_CPosLMOperation.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KNoLandmarks = 100;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp8::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+ delete iDatabase;
+ iDatabase=NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::StartL()
+ {
+ _LIT(KLogFileName, "c:\\documents\\TP8TimeMeasurements.txt");
+
+ TTime start, stop, totalStart, totalStop;
+ totalStart.UniversalTime();
+ start.UniversalTime();
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+ // copy the test db to the private path
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp8TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KLmTp8DefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp8TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ start.UniversalTime();
+ iDatabase= CPosLandmarkDatabase::OpenL(KTp8TestDb);
+ stop.UniversalTime();
+
+ TInt64 msec = (stop.Int64() - start.Int64())/1000;
+ TBuf8<KMsgBufSize> msg;
+ _LIT8(KTrace, "Opening (creating) an empty database = %d msec");
+ msg.Format(KTrace, msec);
+ LogToFileL(KLogFileName, msg);
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ start.UniversalTime();
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+
+ stop.UniversalTime();
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace2, "Initializing an empty database = %d msec");
+ msg.Format(KTrace2, msec);
+ LogToFileL(KLogFileName, msg);
+ }
+
+// Add landmarks
+ start.UniversalTime();
+ AddLandmarksL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace3, "AddLandmarksL = %d msec");
+ msg.Format(KTrace3, msec);
+ LogToFileL(KLogFileName, msg);
+
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase = BackupTp8DbFileL();
+
+if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+// Read landmarks
+ start.UniversalTime();
+ ReadLandmarksL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace4, "ReadLandmarksL = %d msec");
+ msg.Format(KTrace4, msec);
+ LogToFileL(KLogFileName, msg);
+
+// Update landmarks
+ start.UniversalTime();
+ UpdateLandmarksL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace5, "UpdateLandmarksL = %d msec");
+ msg.Format(KTrace5, msec);
+ LogToFileL(KLogFileName, msg);
+
+ ReadLandmarksL(iDatabase);
+
+// Remove landmarks one by one
+ start.UniversalTime();
+ RemoveLandmarksL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace6, "RemoveLandmarksL = %d msec");
+ msg.Format(KTrace6, msec);
+ LogToFileL(KLogFileName, msg);
+
+ // Restore database
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+// Remove set of landmarks synchronously
+ start.UniversalTime();
+ RemoveSetOfLandmarksL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace7, "RemoveSetOfLandmarksL = %d msec");
+ msg.Format(KTrace7, msec);
+ LogToFileL(KLogFileName, msg);
+
+ // Restore database
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+// Remove set of landmarks and remove all landmarks asynchronously
+ start.UniversalTime();
+ RemoveLandmarksAsyncL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace8, "RemoveLandmarksAsyncL = %d msec");
+ msg.Format(KTrace8, msec);
+ LogToFileL(KLogFileName, msg);
+
+ // Restore database
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+// Remove set of landmarks and remove all landmarks with User::WaitForRequest()
+ start.UniversalTime();
+ RemoveLandmarksAsyncWithWaitForReqL(iDatabase);
+ stop.UniversalTime();
+
+ msec = (stop.Int64() - start.Int64())/1000;
+ _LIT8(KTrace9, "RemoveLandmarksAsyncWithWaitForReqL = %d msec");
+ msg.Format(KTrace9, msec);
+ LogToFileL(KLogFileName, msg);
+
+ // Restore database
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+// Remove set of landmarks asynchronously and cancel
+ iLog->Log(_L("TESTS BELOW ARE TESTING CANCEL"));
+ RemoveLandmarksAsyncAndCancelL();
+
+ // Check maximum length of Landmarkname
+ CheckLandmarkNameMaxLengthL();
+
+ totalStop.UniversalTime();
+ msec = (totalStop.Int64() - totalStart.Int64())/1000;
+ _LIT8(KTrace10, "Complete test case = %d msec");
+ msg.Format(KTrace10, msec);
+ LogToFileL(KLogFileName, msg);
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::AddLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::AddLandmarksL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Adding and copying landmarks"));
+
+ _LIT(KCategoryAddedErr, "A category that doesn't exist in the database should not be added to the landmark");
+ _LIT(KLmName, "LmTP8 - %d");
+ _LIT(KLmDescription, "LmTP8Description - %d");
+
+ iLandmarks.ResetAndDestroy();
+ for (TInt i=0; i<(KNoLandmarks/4); i++)
+ {
+ TBuf<100> lmName;
+ TBuf<100> lmDesc;
+ lmName.Format(KLmName,i);
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ lmDesc.Format(KLmDescription,i);
+ landmark->SetLandmarkDescriptionL(lmDesc);
+
+ CPosLandmark* copy = CPosLandmark::NewLC(*landmark);
+
+ CPosLandmark* landmark2 = CPosLandmark::NewL();
+ CleanupStack::PushL(landmark2);
+ landmark2->SetLandmarkNameL(lmName);
+ landmark2->SetLandmarkDescriptionL(lmDesc);
+
+ CPosLandmark* copy2 = CPosLandmark::NewL(*landmark2);
+ CleanupStack::PushL(copy2);
+ TInt err = KErrLocked;
+
+ ExecuteAndDeleteLD(aDatabase->CompactL());
+
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->AddLandmarkL(*landmark));
+ }
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->AddLandmarkL(*copy));
+ }
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->AddLandmarkL(*landmark2));
+ }
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->AddLandmarkL(*copy2));
+ }
+
+ TPosLmItemId id2 = 5123321;
+ CPosLandmark* landmark3 = CPosLandmark::NewLC();
+ landmark3->AddCategoryL(id2);
+ landmark3->AddCategoryL(id2);
+
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->AddLandmarkL(*landmark3)); // CR115 this should not fail any more
+ }
+
+ CPosLandmark* readLm3 = aDatabase->ReadLandmarkLC(landmark3->LandmarkId());
+
+ RArray<TPosLmItemId> catIds;
+ CleanupClosePushL(catIds);
+ readLm3->GetCategoriesL(catIds);
+ AssertTrueSecL(catIds.Count() == 0, KCategoryAddedErr);
+ CleanupStack::PopAndDestroy(3, landmark3);
+
+ iLandmarks.Append(landmark);
+ iLandmarks.Append(copy);
+ iLandmarks.Append(landmark2);
+ iLandmarks.Append(copy2);
+
+ CleanupStack::Pop(4, landmark);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::ReadLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::ReadLandmarksL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Reading landmarks"));
+
+ _LIT(KReadNotFoundErr, "The landmark id doesn't exist so ReadLandmark should return not found");
+ TBuf<100> buf;
+ buf.Format(_L("Reading %d nr of landmarks from id %d to id %d"), iLandmarks.Count(),
+ iLandmarks[0]->LandmarkId(), iLandmarks[iLandmarks.Count()-1]->LandmarkId());
+ iLog->Log(buf);
+ for (TInt i = 0; i<iLandmarks.Count(); i++)
+ {
+
+ CPosLandmark* lm = aDatabase->ReadLandmarkLC(iLandmarks[i]->LandmarkId());
+ CompareLandmarksL(*iLandmarks[i], *lm);
+ CleanupStack::PopAndDestroy(); // lm
+ }
+
+ TPosLmItemId id = 5123321;
+ CPosLandmark* lm=NULL;
+ TRAPD(err, lm=aDatabase->ReadLandmarkLC(id));
+ delete lm;
+ lm = NULL;
+ AssertTrueSecL(err == KErrNotFound, KReadNotFoundErr);
+
+ id = 13434;
+ lm=NULL;
+ TRAP(err, lm=aDatabase->ReadLandmarkLC(id));
+ delete lm;
+ AssertTrueSecL(err == KErrNotFound, KReadNotFoundErr);
+
+ id = 0;
+ lm=NULL;
+ TRAP(err, lm=aDatabase->ReadLandmarkLC(id));
+ delete lm;
+ AssertTrueSecL(err == KErrNotFound, KReadNotFoundErr);
+
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp8::UpdateLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::UpdateLandmarksL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Updating landmarks"));
+ _LIT(KCategoryName, "UpdatedCategory %d");
+ _LIT(KCategoryName2, "UpdatedCategory2:%d:%d");
+ _LIT(KCategoryAddedErr, "A category that doesn't exist in the database should not be added to the landmark");
+
+ for (TInt i = 0; i<iLandmarks.Count(); i++)
+ {
+ TCoordinate coord(KLatitude2, KLongitude2, KAltitude2);
+ TLocality loc(coord, KHorizontalAcc2, KVerticalAcc2);
+ TInt j = 0;
+ switch(i)
+ {
+ case 0:
+ iLandmarks[i]->SetLandmarkNameL(KName2);
+ break;
+ case 1:
+ iLandmarks[i]->SetPositionL(loc);
+ break;
+ case 2:
+ iLandmarks[i]->SetIconL(KMbmFileName2, KIconIndex2, KPosLmIconMaskNotUsed);
+ break;
+ case 3:
+ iLandmarks[i]->SetLandmarkDescriptionL(KDescription2);
+ break;
+ case 4:
+ iLandmarks[i]->SetCoverageRadius(KCoverageRadius);
+ break;
+ case 5:
+ AddFields2L(iLandmarks[i]);
+ break;
+ case 6:
+ for(j=0; j<KNoCategories; j++)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName, j);
+ iLandmarks[i]->AddCategoryL(CreateCategoryL(name));
+ }
+ break;
+ case 8:
+ AddFields3L(iLandmarks[i]);
+ break;
+ case 9:
+ break;
+ default:
+ iLandmarks[i]->SetLandmarkNameL(KName2);
+ iLandmarks[i]->SetPositionL(loc);
+ iLandmarks[i]->SetIconL(KMbmFileName2, KIconIndex2, KPosLmIconMaskNotUsed);
+ iLandmarks[i]->SetLandmarkDescriptionL(KDescription2);
+ iLandmarks[i]->SetCoverageRadius(KCoverageRadius);
+ AddFields2L(iLandmarks[i]);
+
+ for(j=0; j<KNoCategories; j++)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName2, j, i);
+ iLandmarks[i]->AddCategoryL(CreateCategoryL(name));
+ }
+ break;
+ }
+ }
+ TInt err = KErrLocked;
+ for (TInt k = 0; k<iLandmarks.Count(); k++)
+ {
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->UpdateLandmarkL(*iLandmarks[k]));
+ }
+ }
+
+ ExecuteAndDeleteLD(aDatabase->CompactL());
+
+ _LIT(KTemp, "temp");
+ TPosLmItemId id2 = 8787876;
+ CPosLandmark* landmark = CreateLandmarkLC(KTemp);
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->AddLandmarkL(*landmark));
+ }
+
+ landmark->AddCategoryL(id2);
+
+ // 0 is equal to KPosLmNullItemId, should leave
+ id2 = 0;
+ TRAP(err, landmark->AddCategoryL(id2));
+ AssertTrueSecL(err == KErrArgument, _L("AddCategory(0) should leave with KErrArgument"));
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->UpdateLandmarkL(*landmark)); // CR115 this should not fail any more
+ }
+
+ // Make sure category not added to lm (TR ESLI-5X7FTZ)
+ CPosLandmark* readLm = aDatabase->ReadLandmarkLC(landmark->LandmarkId());
+ RArray<TPosLmItemId> catIds;
+ CleanupClosePushL(catIds);
+ readLm->GetCategoriesL(catIds);
+ AssertTrueSecL(catIds.Count() == 3, KCategoryAddedErr);
+
+ aDatabase->RemoveLandmarkL(landmark->LandmarkId());
+
+ CleanupStack::PopAndDestroy(3, landmark);
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::RemoveLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::RemoveLandmarksL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Removing landmarks"));
+ ExecuteAndDeleteLD(aDatabase->CompactL());
+ const TInt start=9;
+ const TInt end=55;
+
+ // First check invalid landmark ids, nothing should happen
+ CheckRemovedL(iLandmarks.Count(), iLandmarks.Count());
+ TPosLmItemId id = 5123321;
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->RemoveLandmarkL(id));
+ }
+
+ id = 11233;
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->RemoveLandmarkL(id));
+ }
+ id = 0;
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->RemoveLandmarkL(id));
+ }
+
+ CheckRemovedL(iLandmarks.Count(), iLandmarks.Count());
+
+ for (TInt i = start; i<=end; i++)
+ {
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->RemoveLandmarkL(iLandmarks[i]->LandmarkId()));
+ }
+ }
+ CheckRemovedL(start, end);
+ for (TInt j = start; j<=end; j++)
+ {
+ err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, aDatabase->RemoveLandmarkL(iLandmarks[j]->LandmarkId())); // nothing should happen
+ }
+ }
+
+ CheckRemovedL(start, end);
+
+ iLog->Log(_L("Removing all landmarks"));
+ ExecuteAndDeleteLD(aDatabase->CompactL());
+ ExecuteAndDeleteLD(aDatabase->RemoveAllLandmarksL());
+
+ CheckRemovedL(0, iLandmarks.Count()-1);
+
+ ExecuteAndDeleteLD(aDatabase->RemoveAllLandmarksL());
+
+ CheckRemovedL(0, iLandmarks.Count()-1);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::RemoveLandmarksAsyncL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::RemoveLandmarksAsyncL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Removing landmarks asynchronously"));
+
+ // Remove a set of landmarks async
+ const TInt start=3;
+ const TInt end=47;
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ for(TInt i=start; i<=end; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ }
+
+ RunAsyncOperationLD(aDatabase->RemoveLandmarksL(ids));
+ CleanupStack::PopAndDestroy(&ids);
+
+ CheckRemovedL(start, end);
+
+ // Remove all async
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L("Removing all landmarks asynchronously"));
+
+ RunAsyncOperationLD(iDatabase->RemoveAllLandmarksL());
+
+ CheckRemovedL(0, iLandmarks.Count()-1);
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::RemoveLandmarksAsyncWithWaitForReqL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::RemoveLandmarksAsyncWithWaitForReqL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Removing landmarks asynchronously with User::WaitForRequest"));
+
+ // Remove a set of landmarks async with WaitForReq
+ const TInt start=3;
+ const TInt end=47;
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ for(TInt i=start; i<=end; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ }
+
+ CPosLmOperation* op = aDatabase->RemoveLandmarksL(ids);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(op);
+
+ CheckRemovedL(start, end);
+
+ // Remove all async with WaitForReq
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L("Removing all landmarks asynchronously with User::WaitForRequest"));
+ TRAPD(error,op = iDatabase->RemoveAllLandmarksL());
+ iLog->Log(_L("error while RemoveAllLandmarksL = %d"),error);
+ CleanupStack::PushL(op);
+ RunAsyncOperationByWaitForReqL(op);
+ CleanupStack::PopAndDestroy(2, &ids);
+
+ CheckRemovedL(0, iLandmarks.Count()-1);
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::RemoveLandmarksAsyncAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::RemoveLandmarksAsyncAndCancelL()
+ {
+ iLog->Log(_L("Removing landmarks asynchronously and cancel"));
+
+ // Remove a set of landmarks async
+ const TInt start=3;
+ const TInt end=47;
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ for(TInt i=start; i<=end; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ }
+
+ TReal32 progress(0);
+ while (progress < 1.0)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iDatabase->RemoveLandmarksL(ids), progress);
+
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ progress = progress + 0.09;
+ }
+ CleanupStack::PopAndDestroy(&ids);
+
+ iLog->Log(_L("Removing all landmarks asynchronously and cancel"));
+
+ progress = 0;
+ while (progress < 1.0)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iDatabase->RemoveAllLandmarksL(), progress);
+
+ delete iDatabase;
+ iDatabase=NULL;
+ iDatabase=RestoreTp8DbFileL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ progress = progress + 0.09;
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::RemoveSetOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::RemoveSetOfLandmarksL(CPosLandmarkDatabase* aDatabase)
+ {
+ iLog->Log(_L("Removing set of landmarks"));
+
+ const TInt start=3;
+ const TInt end=57;
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ // Test with empty list, should leave with KErrArgument
+ TRAPD(err, iOperation = aDatabase->RemoveLandmarksL(ids));
+ if (err != KErrArgument)
+ {
+ iLog->Log(_L("Removing empty iterator should leave with KErrArgument"));
+ User::Leave(err);
+
+ }
+
+ #if 0
+ // Added for testing -- Start
+ iOperation->ExecuteL();
+ // Added for testing -- End
+
+ delete iOperation;
+ iOperation = NULL;
+ #endif
+
+ // Test with invalid sets of lm id arrays
+ ids.Append(11234);
+ ids.Append(556);
+ ids.Append(908);
+
+ ExecuteAndDeleteLD(aDatabase->RemoveLandmarksL(ids));
+
+ // Check that no landmark has been removed
+ CheckRemovedL(iLandmarks.Count(), iLandmarks.Count());
+
+ for(TInt i=start; i<=end; i++)
+ {
+ ids.Append(iLandmarks[i]->LandmarkId());
+ // Also add invalid ids
+ ids.Append(i+5000);
+ }
+
+ ExecuteAndDeleteLD(aDatabase->RemoveLandmarksL(ids));
+
+ CheckRemovedL(start, end);
+
+ ExecuteAndDeleteLD(aDatabase->RemoveLandmarksL(ids));
+
+ CleanupStack::PopAndDestroy(&ids);
+
+ CheckRemovedL(start, end);
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::CheckRemoved
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::CheckRemovedL(const TInt startIndex, const TInt stopIndex)
+ {
+ _LIT(KRemoveNotFoundErr, "Landmark has not been removed");
+ _LIT(KRemoveFoundErr, "Landmark should not been removed");
+
+ for (TInt i = 0; i<iLandmarks.Count(); i++)
+ {
+ TRAPD(err, ReadLandmarkL(iLandmarks[i]->LandmarkId()));
+ if (i >= startIndex && i <= stopIndex)
+ {
+ AssertTrueSecL(err == KErrNotFound, KRemoveNotFoundErr);
+ }
+ else
+ {
+ AssertTrueSecL(err == KErrNone, KRemoveFoundErr);
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::ReadLandmarkL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::ReadLandmarkL(TPosLmItemId aCategoryId)
+ {
+ CPosLandmark* lm = iDatabase->ReadLandmarkLC(aCategoryId);
+ CleanupStack::PopAndDestroy(lm);
+ }
+
+//---------------------------------------------------------
+// CPosTp8::CheckLandmarkNameMaxLengthL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp8::CheckLandmarkNameMaxLengthL()
+ {
+ _LIT(K255Error, "Landmark name is not limited to 255 characters");
+
+ iLog->Log(_L("CheckLandmarkNameMaxLengthL"));
+
+ const TInt KPosLmMaxTextFieldLength = 255;
+
+ HBufC* hbuf = HBufC::NewLC(KPosLmMaxTextFieldLength+1);
+
+ CPosLandmark* lm = CPosLandmark::NewLC();
+ // Test empty name, is OK
+ lm->SetLandmarkNameL(*hbuf);
+
+ while(hbuf->Des().Length() < KPosLmMaxTextFieldLength)
+ {
+ hbuf->Des().Append(_L("X"));
+ }
+
+ lm->SetLandmarkNameL(*hbuf);
+
+ hbuf->Des().Append(_L("X"));
+
+ TRAPD(err, lm->SetLandmarkNameL(*hbuf));
+ AssertTrueSecL(err == KErrArgument, K255Error);
+
+ CleanupStack::PopAndDestroy(2, hbuf);
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::BackupTp8DbFileL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp8::BackupTp8DbFileL()
+ {
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ manager->SetDefaultDatabaseUriL(KTp8TestDb);
+ HBufC* defaultDbUri = manager->DefaultDatabaseUriLC();
+ TBuf<255> buf;
+ // Extract URI except characters ".ldb"
+ buf.Append(defaultDbUri->Left(defaultDbUri->Length()-4));
+ buf.Append(_L("COPY.LDB"));
+ // Delete in case it already exist
+ TRAPD(err, manager->DeleteDatabaseL(buf));
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Could not delete file"));
+ manager->CopyDatabaseL(*defaultDbUri, buf);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp8::RestoreTp8DbFileL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmarkDatabase* CPosTp8::RestoreTp8DbFileL()
+ {
+
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ manager->SetDefaultDatabaseUriL(KTp8TestDb);
+ HBufC* defaultDbUri = manager->DefaultDatabaseUriLC();
+ TBuf<255> buf;
+ // Extract URI except characters ".ldb"
+ buf.Append(defaultDbUri->Left(defaultDbUri->Length()-4));
+ buf.Append(_L("COPY.LDB"));
+ // Delete in case it already exist
+ TRAPD(err, manager->DeleteDatabaseL(*defaultDbUri));
+ if (err != KErrNone && err != KErrNotFound) iLog->Log(_L("Could not delete file"));
+ manager->CopyDatabaseL(buf, *defaultDbUri);
+
+ CleanupStack::PopAndDestroy(defaultDbUri);
+ CleanupStack::PopAndDestroy(manager);
+ return CPosLandmarkDatabase::OpenL();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp80.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp80.h"
+#include "FT_LandmarkConstants.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+
+// ================= CONSTANTS=======================
+_LIT(KLongFileName, "01234567890123456789012345678901234567890123456789012345678901234567890123456789_COMPOSITEEPOSLM.LDB");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp80::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp80::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp80 - Landmarks DB Long File Name");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp80::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp80::CloseTest()
+ {
+ iLog->Put(_L("CloseTest"));
+
+ TRAPD(err, DeleteTestDbL());
+ if (err != KErrNone) iLog->Put(_L("Error when DeleteTestDbL"));
+
+ TRAP(err, RemoveAllLmDatabasesL());
+ if (err != KErrNone) iLog->Put(_L("Error when RemoveAllLmDatabasesL"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp80::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp80::StartL()
+ {
+ // Init test part
+ iLog->Put(_L("DeleteTestDbL"));
+ DeleteTestDbL();
+ iLog->Put(_L("RemoveAllLmDatabasesL"));
+ RemoveAllLmDatabasesL();
+
+ iLog->Put(_L("CopyTestDbFileL(KLongFileName)"));
+ CopyTestDbFileL(KLongFileName);
+ iLog->Put(_L("After CopyTestDbFileL(KLongFileName)"));
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+ // Hangs here
+ iLog->Put(_L("Before DatabaseExistsL"));
+ TBool exist = manager->DatabaseExistsL(KLongFileName);
+ iLog->Put(_L("After DatabaseExistsL"));
+
+ // if it exists, try to open it
+ if (exist)
+ {
+ CPosLandmarkDatabase* lmd = CPosLandmarkDatabase::OpenL(KLongFileName);
+ CleanupStack::PushL(lmd);
+ CleanupStack::PopAndDestroy(lmd);
+ }
+ else iLog->Put(_L("DatabaseExistsL correctly returns EFalse"));
+
+ CleanupStack::PopAndDestroy(manager);
+ }
+
+// ---------------------------------------------------------
+// CPosTp80::DeleteTestDbL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp80::DeleteTestDbL()
+ {
+ iLog->Put(_L("DeleteTestDbL"));
+ RFs fs;
+ User::LeaveIfError(fs.Connect());
+ CleanupClosePushL(fs);
+
+ CFileMan* fileMan = CFileMan::NewL(fs);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> path;
+
+ path.Append(KLmDbPath);
+ path.Append(KLongFileName);
+
+ TInt err = fileMan->Delete(path);
+ if (err != KErrNone)
+ {
+ TBuf<100> buf;
+ buf.Format(_L("Error %d when deleting file"), err);
+ iLog->Put(buf);
+ }
+
+ CleanupStack::PopAndDestroy(2, &fs);
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp81.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,220 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp81.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmDatabaseManager.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp81::GetName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp81::GetName(TDes& aName) const
+ {
+ _LIT(KTestName, "Tp81 - category with apostrophe in name (SBUY-6A9A5B)");
+ aName = KTestName;
+ }
+
+// ---------------------------------------------------------
+// CPosTp81::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp81::StartL()
+ {
+ _LIT(KCategoryName, "Category with apostrophe'");
+ _LIT(KCategoryName2, "Category with apostrophe(')");
+
+ RemoveAllLmDatabasesL();
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+ if (db->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(db->InitializeL()); // Synchronous since no argument
+ }
+
+ CPosLmCategoryManager* manager = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(manager);
+
+ // Test with only apostrophe
+ CPosLandmarkCategory* cat = CPosLandmarkCategory::NewL();
+ CleanupStack::PushL(cat);
+ iLog->Put(_L("Set name with apostrophe"));
+ cat->SetCategoryNameL(KCategoryName);
+ iLog->Put(_L("AddCategory with apostrophe in name"));
+ TPosLmItemId id = manager->AddCategoryL(*cat);
+ User::After(200000);
+ iLog->Put(_L("AddCategory was succesful"));
+ CleanupStack::PopAndDestroy(cat);
+
+ CPosLandmarkCategory* category = manager->ReadCategoryLC(id);
+ TPtrC catName;
+ category->GetCategoryName(catName);
+ iLog->Put(catName);
+ if (catName.CompareC(KCategoryName) != KErrNone) iLog->Put(_L("ERROR: Names are not equal"));
+ CleanupStack::PopAndDestroy(category);
+ CleanupStack::PopAndDestroy(manager);
+
+ // Test with apostrophe and paranthesis
+ manager = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(manager);
+
+ cat = CPosLandmarkCategory::NewL();
+ CleanupStack::PushL(cat);
+ iLog->Put(_L("Set name with apostrophe"));
+ cat->SetCategoryNameL(KCategoryName2);
+ iLog->Put(_L("AddCategory with apostrophe and paranthesis in name"));
+ id = manager->AddCategoryL(*cat);
+ User::After(200000);
+ iLog->Put(_L("AddCategory was succesful"));
+ CleanupStack::PopAndDestroy(cat);
+
+ category = manager->ReadCategoryLC(id);
+ category->GetCategoryName(catName);
+ iLog->Put(catName);
+ if (catName.CompareC(KCategoryName2) != KErrNone) iLog->Put(_L("ERROR: Names are not equal (2)"));
+ CleanupStack::PopAndDestroy(category);
+
+ ExecuteAndDeleteLD(db->CompactL());
+
+ CleanupStack::PopAndDestroy(manager);
+ CleanupStack::PopAndDestroy(db);
+
+ TestDifferentNamesL();
+
+ }
+// ---------------------------------------------------------
+// CPosTp81::TestDifferentNamesL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp81::TestDifferentNamesL()
+ {
+ iLog->Put(_L("TestDifferentNamesL"));
+ ////////////////////////////////////////////////////////////
+ _LIT(KCategory1, "file://:://c:::en helt \" sjuk .ldb databas\".ldb.ldb.ldb");
+ _LIT(KCategory2, "file://c:en helt sjuk databas.ldb");
+ _LIT(KCategory3, "le:///c:en helt sjuk databas.ldb");
+ _LIT(KCategory4, "/c::en helt sjuk databas.ldb");
+ _LIT(KCategory5, "en helt sjuk .ldb databas.ldb");
+ _LIT(KCategory6, "en helt sjuk databas.ldb.ldb.ldb");
+ _LIT(KCategory7, "en helt \" sjuk databas.ldb");
+ _LIT(KCategory8, "en helt < sjuk databas.ldb");
+ _LIT(KCategory9, "en helt > sjuk databas.ldb");
+ _LIT(KCategory10, "en helt | sjuk databas.ldb");
+ _LIT(KCategory11, "en helt / sjuk databas.ldb");
+ _LIT(KCategory12, "en helt ? sjuk databas.ldb");
+ _LIT(KCategory13, "en helt \\ sjuk databas.ldb");
+ _LIT(KCategory14, "en helt : sjuk databas.ldb");
+ _LIT(KCategory15, ":!#¤%&()=+`´^¨~'§½-_,;.{}[]$£@0123456789åäöÅÄÖ.ldb");
+ _LIT(KCategory16, "file://c:qwertyuiopasdfghjklzxcvbnmQWERTYUIOPLKJHGFDSAZXCVBNM.ldb");
+ _LIT(KCategory17, "file://en otroligt helt sjuk databas.ldb");
+ _LIT(KCategory18, "c:en helsjuk databas.ldb");
+ _LIT(KCategory19, "file://c:\\system\\data\\en helt sjuk databas.ldb");
+ _LIT(KCategory20, "file://c:.ldb");
+ _LIT(KCategory21, "file://c:filename");
+ _LIT(KCategory22, "file://c:filename.dip");
+ _LIT(KCategory23, "file://c:filename. ldb");
+ _LIT(KCategory24, "file://c:*.ldb");
+ _LIT(KCategory25, "file://allan:en helt sjuk databas.ldb");
+ _LIT(KCategory26, "file://g:en helt sjuk databas.ldb");
+ _LIT(KCategory27, "file://c:filename.ldb");
+ _LIT(KCategory28, "file://c:012345678901234567890123456789012345678901234567890123456789.ldb");
+
+ const TInt KNrOfUris = 28;
+ const TDesC* listOfCategories[] = {&KCategory1, &KCategory2, &KCategory3 ,&KCategory4, &KCategory5, &KCategory6,
+ &KCategory7, &KCategory8, &KCategory9
+ , &KCategory10, &KCategory11, &KCategory12, &KCategory13, &KCategory14, &KCategory15
+ , &KCategory16, &KCategory17, &KCategory18, &KCategory19, &KCategory20, &KCategory21
+ , &KCategory22, &KCategory23, &KCategory24, &KCategory25, &KCategory26, &KCategory27, &KCategory28};
+
+/*
+ const TInt KNrOfNonWorkingUris = 19;
+ const TDesC* listOfUrisNonWorking[] = {&KCategory1, &KCategory3 ,&KCategory4, &KCategory7, &KCategory8, &KCategory9
+ , &KCategory10, &KCategory11, &KCategory12, &KCategory13, &KCategory14, &KCategory19, &KCategory20, &KCategory21
+ , &KCategory22, &KCategory23, &KCategory24, &KCategory25, &KCategory26};
+
+ TInt errorList[] = {KErrBadName, KErrBadName, KErrBadName, KErrBadName, KErrBadName ,KErrBadName,KErrBadName,
+ KErrBadName, KErrBadName, KErrArgument, KErrBadName, KErrArgument, KErrArgument,
+ KErrArgument, KErrArgument,KErrArgument, KErrBadName, KErrBadName, KErrNotReady};
+ */
+ //////////////////////////////////////////////////
+
+ CPosLandmarkDatabase* db = CPosLandmarkDatabase::OpenL();
+ CleanupStack::PushL(db);
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*db);
+ CleanupStack::PushL(categoryManager);
+
+ TBuf<100> buf;
+
+ for (TInt i=0;i<KNrOfUris;i++)
+ {
+ CPosLandmarkCategory* cat = CPosLandmarkCategory::NewL();
+ CleanupStack::PushL(cat);
+ iLog->Put(_L("Set name to:"));
+ iLog->Put(*listOfCategories[i]);
+ TRAPD(err, cat->SetCategoryNameL(*listOfCategories[i]));
+ if (err == KErrNone)
+ {
+ iLog->Put(_L("AddCategory"));
+ TPosLmItemId id = -1;
+ TRAPD(err2, id = categoryManager->AddCategoryL(*cat));
+ User::After(200000);
+ if (err2 != KErrNone)
+ {
+ buf.Format(_L("Error %d from AddCategoryL"), err2);
+ LogErrorAndLeave(buf);
+ }
+ else
+ {
+ buf.Format(_L("Checking landmark with id %d"), id);
+ iLog->Put(buf);
+
+ CPosLandmarkCategory* category = categoryManager->ReadCategoryLC(id);
+ User::After(200000);
+ TPtrC catName;
+ category->GetCategoryName(catName);
+ iLog->Put(catName);
+ if (catName.CompareC(*listOfCategories[i]) != KErrNone) iLog->Put(_L("ERROR: Names are not equal"));
+ CleanupStack::PopAndDestroy(category);
+ }
+ }
+ else
+ {
+ buf.Format(_L("Error %d from SetCategoryNameL"), err);
+ LogErrorAndLeave(buf);
+ }
+ CleanupStack::PopAndDestroy(cat);
+ ExecuteAndDeleteLD(db->CompactL());
+ }
+
+ CleanupStack::PopAndDestroy(categoryManager);
+ CleanupStack::PopAndDestroy(db);
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp9.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,291 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+
+#include "FT_CPosTp9.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_CPosLandmark.h>
+#include <EPos_TPosLMSortPref.h>
+#include <e32svr.h> // RDebug
+
+// CONSTANTS
+const TInt KNoLandmarks = 50;
+_LIT(KIteratorNumOfItemsErr, "The iterator returns incorrect number of items");
+_LIT(KIteratorIdErr, "A landmarks id not in the database returned from the iterator");
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp9::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::StartL()
+ {
+
+ RemoveDefaultDbL();
+ RemoveAllLmDatabasesL();
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ ExecuteAndDeleteLD(iDatabase->CompactL());
+ AddLandmarksL();
+ IterateLandmarksL();
+ IterateSetOfLandmarksL();
+ IterateSortedLandmarksL();
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::CloseTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::CloseTest()
+ {
+ iLandmarks.ResetAndDestroy();
+ iLandmarks.Close();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::AddLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::AddLandmarksL()
+ {
+ iLog->Log(_L("AddLandmarksL"));
+ _LIT(KLmName, "LmTP9 - %d");
+ _LIT(KLmDescription, "LmTP9Description - %d");
+
+ for (TInt i=0; i<(KNoLandmarks); i++)
+ {
+ TBuf<100> lmName;
+ lmName.Format(KLmName,i);
+ TBuf<100> lmDesc;
+ lmDesc.Format(KLmDescription,i);
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(lmName);
+ landmark->SetLandmarkDescriptionL(lmDesc);
+ TInt err = KErrLocked;
+ while (err == KErrLocked)
+ {
+ TRAP(err, iDatabase->AddLandmarkL(*landmark));
+ }
+
+ iLandmarks.Append(landmark);
+
+ CleanupStack::Pop(landmark);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::IterateLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::IterateLandmarksL()
+ {
+ iLog->Log(_L("IterateLandmarksL"));
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* source = InternalGet(id);
+ AssertTrueSecL(source != NULL, KIteratorIdErr);
+
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(id);
+ CompareLandmarksL(*source, *target);
+ CleanupStack::PopAndDestroy(); // target
+
+ id = iter->NextL();
+ }
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)iLandmarks.Count(), KIteratorNumOfItemsErr);
+
+ iter->Reset();
+ id = iter->NextL();
+ while (id != KPosLmNullItemId)
+ {
+ CPosLandmark* source = InternalGet(id);
+ AssertTrueSecL(source != NULL, KIteratorIdErr);
+
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(id);
+ CompareLandmarksL(*source, *target);
+ CleanupStack::PopAndDestroy(); // target
+
+ id = iter->NextL();
+ }
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)iLandmarks.Count(), KIteratorNumOfItemsErr);
+
+ CleanupStack::PopAndDestroy(iter);
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::IterateSetOfLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::IterateSetOfLandmarksL()
+ {
+ iLog->Log(_L("IterateSetOfLandmarksL"));
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+
+ const TInt startIndex=5;
+ const TInt numOfItems=20;
+
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+
+ iter->GetItemIdsL(ids, startIndex, numOfItems);
+
+ AssertTrueSecL(ids.Count() == numOfItems, KIteratorNumOfItemsErr);
+
+ for (TInt i=0; i<numOfItems; i++)
+ {
+ CPosLandmark* source = InternalGet(ids[i]);
+ AssertTrueSecL(source != NULL, KIteratorIdErr);
+
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(ids[i]);
+ CompareLandmarksL(*source, *target);
+ CleanupStack::PopAndDestroy(); // target
+ }
+
+ CleanupStack::PopAndDestroy(2, iter);
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::InternalSort
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt InternalSortL(const CPosLandmark& aSource, const CPosLandmark& aTarget)
+ {
+ TPtrC sourceName, targetName;
+
+ User::LeaveIfError(aSource.GetLandmarkName(sourceName));
+ User::LeaveIfError(aTarget.GetLandmarkName(targetName));
+
+ return sourceName.Compare(targetName);
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::IterateLandmarksL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::IterateSortedLandmarksL()
+ {
+ iLog->Log(_L("IterateSortedLandmarksL"));
+ CheckIteratorArgL(CPosLandmark::EPosition);
+ CheckIteratorArgL(CPosLandmark::ECoverageRadius);
+ CheckIteratorArgL(CPosLandmark::ECategoryInfo);
+ CheckIteratorArgL(CPosLandmark::EIcon);
+ CheckIteratorArgL(CPosLandmark::EDescription);
+
+ TLinearOrder<CPosLandmark> order(InternalSortL);
+ iLandmarks.Sort(order);
+
+ TPosLmSortPref sortDesc(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending);
+ CPosLmItemIterator* iter = iDatabase->LandmarkIteratorL(sortDesc);
+ CleanupStack::PushL(iter);
+
+ AssertTrueSecL(iter->NumOfItemsL() == (TUint)iLandmarks.Count(), KIteratorNumOfItemsErr);
+
+ TInt lastIndex=iLandmarks.Count()-1;
+ for (TInt i=lastIndex; i>=0; i--)
+ {
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(iter->NextL());
+
+ CompareLandmarksL(*iLandmarks[i], *target);
+ CleanupStack::PopAndDestroy(); // target
+ }
+ CleanupStack::PopAndDestroy(iter);
+
+ TPosLmSortPref sortAsc(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending);
+ iter = iDatabase->LandmarkIteratorL(sortAsc);
+ CleanupStack::PushL(iter);
+
+ for (TInt j=0; j < iLandmarks.Count(); j++)
+ {
+ CPosLandmark* target = iDatabase->ReadLandmarkLC(iter->NextL());
+
+ CompareLandmarksL(*iLandmarks[j], *target);
+ CleanupStack::PopAndDestroy(); // target
+ }
+
+ CleanupStack::PopAndDestroy(iter);
+ iLog->Log(_L("IterateSortedLandmarksL completed"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp9::CheckIteratorArgL(const CPosLandmark::TAttributes& aAttr)
+ {
+ _LIT(KSortByNameErr, "Only sorting by landmark name should be supported");
+ iLog->Log(_L("CheckIteratorArgL"));
+ TPosLmSortPref sortPref(aAttr);
+ CPosLmItemIterator* iter = NULL;
+ TRAPD(err, iter = iDatabase->LandmarkIteratorL(sortPref));
+ delete iter;
+ AssertTrueSecL(err==KErrNotSupported, KSortByNameErr);
+ }
+
+// ---------------------------------------------------------
+// CPosTp9::InternalGet
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CPosLandmark* CPosTp9::InternalGet(TPosLmItemId id)
+ {
+ for (TInt i=0; i<iLandmarks.Count(); i++)
+ {
+ if (iLandmarks[i]->LandmarkId() == id)
+ {
+ return iLandmarks[i];
+ }
+ }
+
+ return NULL;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CSearchResult.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,201 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+#include "FT_CSearchResult.h"
+
+//CONSTANTS
+const TInt KMaxFieldLength = 80;
+const TInt KMaxLineLength=255;
+
+
+
+// C++ Constructor
+CSearchResult::CSearchResult()
+ {
+ }
+
+CSearchResult* CSearchResult::NewL(const TDesC& aDes)
+ {
+ CSearchResult* self = new(ELeave) CSearchResult;
+ CleanupStack::PushL(self);
+ self->ConstructL(aDes);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// C++ destructor
+CSearchResult::~CSearchResult()
+ {
+ delete iTextCriteria;
+ iTextCriteria = NULL;
+
+ iPositionFields.Close();
+ }
+
+void CSearchResult::ConstructL(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt redefined=0;
+
+ if (line.Peek() != '#' && line.Peek() != '\t')
+ {
+ TInt index=0;
+ while (line.Peek() != '\n' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == '\t')
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ switch(index)
+ {
+ case ETextCriteria:
+ iTextCriteria = token.AllocL();
+ break;
+ case EAttributes:
+ ParseAttributesL(token);
+ break;
+ case EPositionFields:
+ ParsePositionFields(token);
+ break;
+ case ELmSearchResult:
+ ParseSearchResult(token);
+ break;
+ case ERedefined:
+ val.Val(redefined);
+ if (redefined == 1)
+ {
+ iRedefined = ETrue;
+ }
+ break;
+ }
+ line.Inc();
+ while (line.Peek() == '\t') // Empty value
+ {
+ line.Inc();
+ ++index;
+ }
+ line.Mark();
+ ++index;
+ }
+ }
+ }
+ //Print();
+ }
+
+
+// ---------------------------------------------------------
+// CSearchResult::ParsePositionFields()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSearchResult::ParsePositionFields(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt value=0;
+
+ while (!(line.Peek()).Eos())
+ {
+ line.Inc();
+ if (line.Peek() == ',' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ val.Val(value);
+ iPositionFields.Append(value);
+
+ if (line.Peek() == ',')
+ {
+ line.Inc();
+ line.Mark();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CSearchResult::Print()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSearchResult::Print()
+ {
+ TBuf<KMaxLineLength> print;
+
+ TChar del(',');
+
+ print.Append(*iTextCriteria);
+ print.Append(del);
+
+ TBuf<KMaxFieldLength> info;
+ _LIT(KAttrInfo, "%x");
+ info.Format(KAttrInfo, iAttributes);
+ print.Append(info);
+ print.Append(del);
+
+ _LIT(KIntInfo, "%d");
+ TInt i=0;
+ for (i=0; i<iPositionFields.Count(); i++)
+ {
+ info.Format(KIntInfo, iPositionFields[i]);
+ print.Append(info);
+ print.Append(del);
+ }
+
+ for (i=0; i<iSearchResult.Count(); i++)
+ {
+ info.Format(KIntInfo, iSearchResult[i]);
+ print.Append(info);
+ print.Append(del);
+ }
+
+ RDebug::Print(print);
+ }
+
+// ---------------------------------------------------------
+// CSearchResult::TextCriteria()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TPtrC CSearchResult::TextCriteria() const
+ {
+ return *iTextCriteria;
+ }
+
+// ---------------------------------------------------------
+// CSearchResult::PositionFields
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+const RArray<TUint>& CSearchResult::PositionFields() const
+ {
+ return iPositionFields;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CSearchResultBase.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include <e32math.h>
+#include <e32svr.h>
+#include <e32std.h>
+#include "FT_CSearchResultBase.h"
+
+//CONSTANTS
+
+// C++ Constructor
+CSearchResultBase::CSearchResultBase() :
+ iRedefined(EFalse)
+ {
+
+ }
+
+// C++ destructor
+CSearchResultBase::~CSearchResultBase()
+ {
+ iSearchResult.Close();
+ }
+
+
+// ---------------------------------------------------------
+// CSearchResultBase::ParseSearchResult()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSearchResultBase::ParseSearchResult(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Mark();
+ TInt startValue=0;
+ TInt endValue=0;
+
+ while (!(line.Peek()).Eos())
+ {
+ line.Inc();
+
+ if (line.Peek() == ',' || line.Peek() == '-' || (line.Peek()).Eos())
+ {
+ TPtrC token = line.MarkedToken();
+ TLex val(token);
+ val.Val(startValue);
+ iSearchResult.Append(startValue);
+ if (line.Peek() == '-')
+ {
+ line.Inc();
+ line.Mark();
+ while (line.Peek() != ',' && !(line.Peek()).Eos())
+ {
+ line.Inc();
+ }
+ TPtrC endToken = line.MarkedToken();
+ TLex endVal(endToken);
+ endVal.Val(endValue);
+ for (TInt i=startValue+1; i<=endValue; i++)
+ {
+ iSearchResult.Append(i);
+ }
+ }
+ if (line.Peek() == ',')
+ {
+ line.Inc();
+ line.Mark();
+ }
+ }
+ }
+ }
+
+// ---------------------------------------------------------
+// CSearchResultBase::ParseAttribute()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSearchResultBase::ParseAttributesL(const TDesC& aDes)
+ {
+ TLex line(aDes);
+ line.Inc();
+ line.Inc();
+ User::LeaveIfError(line.Val(iAttributes, EHex));
+ }
+
+// ---------------------------------------------------------
+// CSearchResultBase::Attributes
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TUint CSearchResultBase::Attributes() const
+ {
+ return iAttributes;
+ }
+
+// ---------------------------------------------------------
+// CSearchResultBase::SearchResult
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+RArray<TPosLmItemId>& CSearchResultBase::SearchResult()
+ {
+ return iSearchResult;
+ }
+
+// ---------------------------------------------------------
+// CSearchResultBase::Redefined
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CSearchResultBase::Redefined() const
+ {
+ return iRedefined;
+ }
+
+// ---------------------------------------------------------
+// CSearchResultBase::FindSearchResult
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CSearchResultBase::FindSearchResult(const TPosLmItemId aId)
+ {
+ for (TInt i=0; i<iSearchResult.Count(); i++)
+ {
+ if (iSearchResult[i] == aId)
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_DatabaseUtility.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,353 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* ?description_line
+*
+*/
+
+
+// INCLUDE FILES
+#include <f32file.h>
+#include "FT_DatabaseUtility.h"
+
+#include <D32DBMS.H>
+
+#include <EPos_Landmarks.h>
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// Code below taken from EPos_PosLmDatabaseManager.cpp
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateDatabaseL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateDatabaseL(const TDesC& aDbPath, TBool aReplaceDatabase, TBool aWrongId, TBool aCreateInvalidIndex)
+ {
+ RDbs dbSession;
+ CleanupClosePushL(dbSession);
+
+ User::LeaveIfError(dbSession.Connect());
+
+ TPtrC dbPath(aDbPath);
+
+
+ RDbNamedDatabase db;
+ CleanupClosePushL(db);
+
+
+ TUid KPosSecureUidWrongId = { 0x10204058 };
+ _LIT(KWrongIdString, "secure[10204058]");
+
+ if (aReplaceDatabase)
+ {
+ TInt err =KErrNone;
+
+ if (!aWrongId) err = dbSession.DeleteDatabase(dbPath, KPosLmDbSecureUid);
+ else err = dbSession.DeleteDatabase(dbPath, KPosSecureUidWrongId);
+
+ if (err == KErrNone || err == KErrNotFound)
+ {
+ if (!aWrongId) User::LeaveIfError(db.Create(dbSession, dbPath, KPosLmDbSecureFormat));
+ else User::LeaveIfError(db.Create(dbSession, dbPath, KWrongIdString));
+ }
+ else
+ {
+ User::Leave(err);
+ }
+ }
+ else
+ {
+ if (!aWrongId)
+ {
+ User::LeaveIfError(db.Create(dbSession, dbPath, KPosLmDbSecureFormat));
+
+ }
+ else User::LeaveIfError(db.Create(dbSession, dbPath, KWrongIdString));
+ }
+
+ CreateTablesL(db, aCreateInvalidIndex);
+
+ CreateIndexesL(db);
+
+ SetCounterToOneL(db, KPosLmLandmarkTable);
+ SetCounterToOneL(db, KPosLmCategoryTable);
+
+ // The settings table is created last so that a database can be validated
+ // when opening it (there will be a check for language there which is a
+ // part of the settings table).
+ CreateSettingsTableL(db);
+
+ CleanupStack::PopAndDestroy(2, &dbSession); // &db
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateTablesL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateTablesL(
+ RDbNamedDatabase& aDb, TBool aCreateInvalidIndex)
+ {
+ CreateLandmarkTableL(aDb, aCreateInvalidIndex);
+ CreateLandmarkFieldTableL(aDb);
+ CreateCategoryTableL(aDb, aCreateInvalidIndex);
+ CreateLmCategoryTableL(aDb);
+ CreateIconTableL(aDb);
+
+ // Do not create settings table here. This is created in the end so that the
+ // database can be validated when opening it.
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateLandmarkTableL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateLandmarkTableL(
+ RDbNamedDatabase& aDb, TBool aCreateInvalidIndex)
+ {
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmLandmarkIdCol, EDbColUint32);
+ col.iAttributes = col.EAutoIncrement;
+ columns->AddL(col);
+
+ columns->AddL(TDbCol(KPosLmLatitudeCol, EDbColReal64));
+ columns->AddL(TDbCol(KPosLmLongitudeCol, EDbColReal64));
+ columns->AddL(TDbCol(KPosLmAltitudeCol, EDbColReal32));
+
+ // Dont create the following tables when creating invalid table
+ if (!aCreateInvalidIndex)
+ {
+ columns->AddL(TDbCol(KPosLmHorizAccCol, EDbColReal32));
+ columns->AddL(TDbCol(KPosLmVertAccCol, EDbColReal32));
+ columns->AddL(TDbCol(KPosLmCoverageRadiusCol, EDbColReal32));
+ columns->AddL(TDbCol(KPosLmIconIdCol, EDbColUint32));
+ columns->AddL(TDbCol(KPosLmIconPicNrCol, EDbColInt32));
+ columns->AddL(TDbCol(KPosLmMaskPicNrCol, EDbColInt32));
+ columns->AddL(TDbCol(KPosLmNameCol, EDbColLongText,
+ KPosLmMaxTextFieldLength));
+ }
+
+ columns->AddL(TDbCol(KPosLmNDescCol, EDbColLongText,
+ KPosLmMaxDescriptionLength));
+
+ User::LeaveIfError(aDb.CreateTable(KPosLmLandmarkTable, *columns));
+ CleanupStack::PopAndDestroy(columns);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateLandmarkFieldTableL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateLandmarkFieldTableL(
+ RDbNamedDatabase& aDb)
+ {
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmLandmarkIdCol, EDbColUint32);
+ col.iAttributes = col.ENotNull;
+ columns->AddL(TDbCol(col));
+
+ TDbCol col2(KPosLmFieldTypeCol, EDbColUint16);
+ col2.iAttributes = col2.ENotNull;
+ columns->AddL(col2);
+
+ columns->AddL(TDbCol(KPosLmFieldStringCol, EDbColLongText,
+ KPosLmMaxTextFieldLength));
+
+ User::LeaveIfError(aDb.CreateTable(KPosLmLandmarkFieldTable, *columns));
+ CleanupStack::PopAndDestroy(columns);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateCategoryTableL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateCategoryTableL(
+ RDbNamedDatabase& aDb, TBool aCreateInvalidIndex)
+ {
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmCategoryIdCol, EDbColUint32);
+ col.iAttributes = col.EAutoIncrement;
+ columns->AddL(col);
+
+ columns->AddL(TDbCol(KPosLmGlobalCategoryIdCol, EDbColUint16));
+ columns->AddL(TDbCol(KPosLmIconIdCol, EDbColUint32));
+ columns->AddL(TDbCol(KPosLmIconPicNrCol, EDbColInt32));
+ columns->AddL(TDbCol(KPosLmMaskPicNrCol, EDbColInt32));
+ columns->AddL(TDbCol(KPosLmCategoryNameCol, EDbColText,
+ KPosLmMaxCategoryNameLength));
+
+ // Dont create the following tables when creating invalid table
+ if (!aCreateInvalidIndex)
+ {
+ columns->AddL(TDbCol(KPosLmCategoryNameModifiedCol, EDbColBit));
+ }
+
+ User::LeaveIfError(aDb.CreateTable(KPosLmCategoryTable, *columns));
+ CleanupStack::PopAndDestroy(columns);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateLmCategoryTableL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateLmCategoryTableL(
+ RDbNamedDatabase& aDb)
+ {
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmLandmarkIdCol, EDbColUint32);
+ col.iAttributes = col.ENotNull;
+ columns->AddL(col);
+
+ TDbCol col2(KPosLmCategoryIdCol, EDbColUint32);
+ col2.iAttributes = col2.ENotNull;
+ columns->AddL(col2);
+
+ User::LeaveIfError(aDb.CreateTable(KPosLmLandmarkCategoryTable, *columns));
+ CleanupStack::PopAndDestroy(columns);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateIconTableL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateIconTableL(
+ RDbNamedDatabase& aDb)
+ {
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ TDbCol col(KPosLmIconIdCol, EDbColUint32);
+ col.iAttributes = col.EAutoIncrement;
+ columns->AddL(col);
+
+ columns->AddL(TDbCol(KPosLmIconPathCol, EDbColLongText, KMaxFileName));
+
+ User::LeaveIfError(aDb.CreateTable(KPosLmIconTable, *columns));
+ CleanupStack::PopAndDestroy(columns);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateSettingsTableL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateSettingsTableL(
+ RDbNamedDatabase& aDb)
+ {
+ CDbColSet* columns = CDbColSet::NewLC();
+
+ columns->AddL(TDbCol(KPosLmLanguageCol, EDbColInt32));
+ columns->AddL(TDbCol(KPosLmInitFlagCol, EDbColInt32));
+
+ User::LeaveIfError(aDb.CreateTable(KPosLmSettingsTable, *columns));
+ CleanupStack::PopAndDestroy(columns);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateIndexesL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateIndexesL(
+ RDbNamedDatabase& aDb)
+ {
+ CreateIndexL(aDb, KPosLmLandmarkIdIndex, KPosLmLandmarkTable,
+ KPosLmLandmarkIdCol, ETrue);
+ CreateIndexL(aDb, KPosLmCategoryIdIndex, KPosLmCategoryTable,
+ KPosLmCategoryIdCol, ETrue);
+ CreateIndexL(aDb, KPosLmGlobalCategoryIdIndex, KPosLmCategoryTable,
+ KPosLmGlobalCategoryIdCol, EFalse);
+ CreateIndexL(aDb, KPosLmCategoryNameIndex, KPosLmCategoryTable,
+ KPosLmCategoryNameCol, ETrue);
+ CreateIndexL(aDb, KPosLmIconIdIndex, KPosLmIconTable,
+ KPosLmIconIdCol, ETrue);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::CreateIndexL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::CreateIndexL(
+ RDbNamedDatabase& aDb,
+ const TDesC& aIndex,
+ const TDesC& aTable,
+ const TDesC& aColumn,
+ TBool aUnique)
+ {
+ CDbKey* keys = CDbKey::NewLC();
+ keys->AddL(TDbKeyCol(aColumn));
+
+ if (aUnique)
+ {
+ keys->MakeUnique();
+ }
+
+ User::LeaveIfError(aDb.CreateIndex(aIndex, aTable, *keys));
+ CleanupStack::PopAndDestroy(keys);
+ }
+
+// -----------------------------------------------------------------------------
+// FTDatabaseUtility::SetCounterToOneL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void FTDatabaseUtility::SetCounterToOneL(
+ RDbNamedDatabase& aDb,
+ const TDesC& aTable)
+ {
+ HBufC* sql = HBufC::NewLC(KPosLmSqlStatementMaxLen);
+ sql->Des().Format(KPosLmSqlSelect, &KPosLmSqlAll, &aTable);
+
+ RDbView view;
+ CleanupClosePushL(view);
+ User::LeaveIfError(view.Prepare(aDb, TDbQuery(*sql),
+ TDbWindow::EUnlimited));
+
+ view.InsertL();
+ view.PutL();
+
+ if (!view.FirstL())
+ {
+ User::Leave(KErrGeneral);
+ }
+
+ view.DeleteL();
+
+ CleanupStack::PopAndDestroy(2, sql); //&view
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/LandMarksTestModule.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include "LandMarksTestModule.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLandMarksTestModule::CLandMarksTestModule
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLandMarksTestModule::CLandMarksTestModule(
+ CTestModuleIf& aTestModuleIf ):
+ CScriptBase( aTestModuleIf )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLandMarksTestModule::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CLandMarksTestModule::ConstructL()
+ {
+ iLog = CStifLogger::NewL( KLandMarksTestModuleLogPath,
+ KLandMarksTestModuleLogFile,
+ CStifLogger::ETxt,
+ CStifLogger::EFile,
+ EFalse );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLandMarksTestModule::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLandMarksTestModule* CLandMarksTestModule::NewL(
+ CTestModuleIf& aTestModuleIf )
+ {
+ CLandMarksTestModule* self = new (ELeave) CLandMarksTestModule( aTestModuleIf );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+
+ }
+
+// Destructor
+CLandMarksTestModule::~CLandMarksTestModule()
+ {
+
+ // Delete resources allocated from test methods
+ Delete();
+
+ // Delete logger
+ delete iLog;
+
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL(
+ CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+ {
+
+ return ( CScriptBase* ) CLandMarksTestModule::NewL( aTestModuleIf );
+
+ }
+
+// -----------------------------------------------------------------------------
+// E32Dll is a DLL entry point function.
+// Returns: KErrNone
+// -----------------------------------------------------------------------------
+//
+#ifndef EKA2 // Hide Dll entry point to EKA2
+GLDEF_C TInt E32Dll(
+ TDllReason ) // Reason code
+ {
+ return(KErrNone);
+
+ }
+#endif // EKA2
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/LandMarksTestModuleBlocks.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,399 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: ?Description
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include "LandMarksTestModule.h"
+
+#include "FT_CPosTp1.h"
+#include "FT_CPosTp2.h"
+#include "FT_CPosTp3.h"
+#include "FT_CPosTp4.h"
+#include "FT_CPosTp5.h"
+#include "FT_CPosTp6.h"
+#include "FT_CPosTp7.h"
+#include "FT_CPosTp8.h"
+#include "FT_CPosTp9.h"
+
+#include "FT_CPosTp10.h"
+#include "FT_CPosTp11.h"
+#include "FT_CPosTp12.h"
+#include "FT_CPosTp13.h"
+#include "FT_CPosTp18.h"
+#include "FT_CPosTp19.h"
+
+#include "FT_CPosTp20.h"
+#include "FT_CPosTp21.h"
+#include "FT_CPosTp23.h"
+#include "FT_CPosTp24.h"
+#include "FT_CPosTp25.h"
+#include "FT_CPosTp26.h"
+#include "FT_CPosTp28.h"
+
+#include "FT_CPosTp35.h"
+#include "FT_CPosTp36.h"
+#include "FT_CPosTp37.h"
+#include "FT_CPosTp38.h"
+
+#include "FT_CPosTp42.h"
+#include "FT_CPosTp43.h"
+#include "FT_CPosTp44.h"
+#include "FT_CPosTp45.h"
+#include "FT_CPosTp47.h"
+#include "FT_CPosTp48.h"
+
+#include "FT_CPosTp51.h"
+#include "FT_CPosTp52.h"
+
+#include "FT_CPosTp100.h"
+#include "FT_CPosTp101.h"
+#include "FT_CPosTp102.h"
+#include "FT_CPosTp103.h"
+#include "FT_CPosTp104.h"
+#include "FT_CPosTp106.h"
+
+#include "FT_CPosTp116.h"
+#include "FT_CPosTp117.h"
+#include "FT_CPosTp118.h"
+#include "FT_CPosTp119.h"
+
+#include "FT_CPosTp120.h"
+#include "FT_CPosTp121.h"
+#include "FT_CPosTp122.h"
+#include "FT_CPosTp123.h"
+#include "FT_CPosTp124.h"
+#include "FT_CPosTp125.h"
+#include "FT_CPosTp126.h"
+
+#include "FT_CPosTp130.h"
+#include "FT_CPosTp131.h"
+#include "FT_CPosTp132.h"
+#include "FT_CPosTp134.h"
+#include "FT_CPosTp133.h"
+#include "FT_CPosTp135.h"
+#include "FT_CPosTp136.h"
+#include "FT_CPosTp137.h"
+#include "FT_CPosTp139.h"
+
+#include "FT_CPosTp141.h"
+#include "FT_CPosTp143.h"
+
+#include "FT_CPosTp144.h"
+#include "FT_CPosTp145.h"
+#include "FT_CPosTp146.h"
+#include "FT_CPosTp147.h"
+
+#include "FT_CPosTp148.h"
+#include "FT_CPosTp149.h"
+#include "FT_CPosTp150.h"
+#include "FT_CPosTp151.h"
+#include "FT_CPosTp152.h"
+#include "FT_CPosTp153.h"
+#include "FT_CPosTp154.h"
+#include "FT_CPosTp155.h"
+#include "FT_CPosTp156.h"
+#include "FT_CPosTp157.h"
+#include "FT_CPosTp158.h"
+#include "FT_CPosTp159.h"
+#include "FT_CPosTp160.h"
+
+#include "FT_CPosTp161.h"
+#include "FT_CPosTp162.h"
+#include "FT_CPosTp163.h"
+#include "FT_CPosTp164.h"
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLandMarksTestModule::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CLandMarksTestModule::Delete()
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLandMarksTestModule::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CLandMarksTestModule::RunMethodL(CStifItemParser& aItem )
+ {
+ static TStifFunctionInfo const KFunctions[] =
+ {
+ // Copy this line for every implemented function.
+ // First string is the function name used in TestScripter script file.
+ // Second is the actual implementation member function.
+
+ ENTRY( "FT_CPosTp1", CLandMarksTestModule::FT_CPosTp1 ),
+ ENTRY( "FT_CPosTp2", CLandMarksTestModule::FT_CPosTp2 ),
+ ENTRY( "FT_CPosTp3", CLandMarksTestModule::FT_CPosTp3 ),
+ ENTRY( "FT_CPosTp4", CLandMarksTestModule::FT_CPosTp4 ),
+ ENTRY( "FT_CPosTp5", CLandMarksTestModule::FT_CPosTp5 ),
+ ENTRY( "FT_CPosTp6", CLandMarksTestModule::FT_CPosTp6 ),
+ ENTRY( "FT_CPosTp7", CLandMarksTestModule::FT_CPosTp7 ),
+ ENTRY( "FT_CPosTp8", CLandMarksTestModule::FT_CPosTp8 ),
+ ENTRY( "FT_CPosTp9", CLandMarksTestModule::FT_CPosTp9 ),
+
+ ENTRY( "FT_CPosTp10", CLandMarksTestModule::FT_CPosTp10 ),
+ ENTRY( "FT_CPosTp11", CLandMarksTestModule::FT_CPosTp11 ),
+ ENTRY( "FT_CPosTp12", CLandMarksTestModule::FT_CPosTp12 ),
+ ENTRY( "FT_CPosTp13", CLandMarksTestModule::FT_CPosTp13 ),
+ ENTRY( "FT_CPosTp18", CLandMarksTestModule::FT_CPosTp18 ),
+ ENTRY( "FT_CPosTp19", CLandMarksTestModule::FT_CPosTp19 ),
+
+ ENTRY( "FT_CPosTp20", CLandMarksTestModule::FT_CPosTp20 ),
+ ENTRY( "FT_CPosTp21", CLandMarksTestModule::FT_CPosTp21 ),
+ ENTRY( "FT_CPosTp23", CLandMarksTestModule::FT_CPosTp23 ),
+ ENTRY( "FT_CPosTp24", CLandMarksTestModule::FT_CPosTp24 ),
+ ENTRY( "FT_CPosTp25", CLandMarksTestModule::FT_CPosTp25 ),
+ ENTRY( "FT_CPosTp26", CLandMarksTestModule::FT_CPosTp26 ),
+ ENTRY( "FT_CPosTp28", CLandMarksTestModule::FT_CPosTp28 ),
+
+ ENTRY( "FT_CPosTp35", CLandMarksTestModule::FT_CPosTp35 ),
+ ENTRY( "FT_CPosTp36", CLandMarksTestModule::FT_CPosTp36 ),
+ ENTRY( "FT_CPosTp37", CLandMarksTestModule::FT_CPosTp37 ),
+ ENTRY( "FT_CPosTp38", CLandMarksTestModule::FT_CPosTp38 ),
+
+ ENTRY( "FT_CPosTp42", CLandMarksTestModule::FT_CPosTp42 ),
+ ENTRY( "FT_CPosTp43", CLandMarksTestModule::FT_CPosTp43 ),
+ ENTRY( "FT_CPosTp44", CLandMarksTestModule::FT_CPosTp44 ),
+ ENTRY( "FT_CPosTp45", CLandMarksTestModule::FT_CPosTp45 ),
+ ENTRY( "FT_CPosTp47", CLandMarksTestModule::FT_CPosTp47 ),
+ ENTRY( "FT_CPosTp48", CLandMarksTestModule::FT_CPosTp48 ),
+
+ ENTRY( "FT_CPosTp51", CLandMarksTestModule::FT_CPosTp51 ),
+ ENTRY( "FT_CPosTp52", CLandMarksTestModule::FT_CPosTp52 ),
+
+ ENTRY( "FT_CPosTp100", CLandMarksTestModule::FT_CPosTp100 ),
+ ENTRY( "FT_CPosTp101", CLandMarksTestModule::FT_CPosTp101 ),
+ ENTRY( "FT_CPosTp102", CLandMarksTestModule::FT_CPosTp102 ),
+ ENTRY( "FT_CPosTp103", CLandMarksTestModule::FT_CPosTp103 ),
+ ENTRY( "FT_CPosTp104", CLandMarksTestModule::FT_CPosTp104 ),
+ ENTRY( "FT_CPosTp106", CLandMarksTestModule::FT_CPosTp106 ),
+
+ ENTRY( "FT_CPosTp116", CLandMarksTestModule::FT_CPosTp116 ),
+ ENTRY( "FT_CPosTp117", CLandMarksTestModule::FT_CPosTp117 ),
+ ENTRY( "FT_CPosTp118", CLandMarksTestModule::FT_CPosTp118 ),
+ ENTRY( "FT_CPosTp119", CLandMarksTestModule::FT_CPosTp119 ),
+
+ ENTRY( "FT_CPosTp120", CLandMarksTestModule::FT_CPosTp120 ),
+ ENTRY( "FT_CPosTp121", CLandMarksTestModule::FT_CPosTp121 ),
+ ENTRY( "FT_CPosTp122", CLandMarksTestModule::FT_CPosTp122 ),
+ ENTRY( "FT_CPosTp123", CLandMarksTestModule::FT_CPosTp123 ),
+ ENTRY( "FT_CPosTp124", CLandMarksTestModule::FT_CPosTp124 ),
+ ENTRY( "FT_CPosTp125", CLandMarksTestModule::FT_CPosTp125 ),
+ ENTRY( "FT_CPosTp126", CLandMarksTestModule::FT_CPosTp126 ),
+
+ ENTRY( "FT_CPosTp130", CLandMarksTestModule::FT_CPosTp130 ),
+ ENTRY( "FT_CPosTp131", CLandMarksTestModule::FT_CPosTp131 ),
+ ENTRY( "FT_CPosTp132", CLandMarksTestModule::FT_CPosTp132 ),
+ ENTRY( "FT_CPosTp133", CLandMarksTestModule::FT_CPosTp133 ),
+ ENTRY( "FT_CPosTp134", CLandMarksTestModule::FT_CPosTp134 ),
+ ENTRY( "FT_CPosTp135", CLandMarksTestModule::FT_CPosTp135 ),
+ ENTRY( "FT_CPosTp136", CLandMarksTestModule::FT_CPosTp136 ),
+ ENTRY( "FT_CPosTp137", CLandMarksTestModule::FT_CPosTp137 ),
+ ENTRY( "FT_CPosTp139", CLandMarksTestModule::FT_CPosTp139 ),
+
+ ENTRY( "FT_CPosTp141", CLandMarksTestModule::FT_CPosTp141 ),
+ ENTRY( "FT_CPosTp143", CLandMarksTestModule::FT_CPosTp143 ),
+ ENTRY( "FT_CPosTp144", CLandMarksTestModule::FT_CPosTp144 ),
+ ENTRY( "FT_CPosTp145", CLandMarksTestModule::FT_CPosTp145 ),
+ ENTRY( "FT_CPosTp146", CLandMarksTestModule::FT_CPosTp146 ),
+ ENTRY( "FT_CPosTp147", CLandMarksTestModule::FT_CPosTp147 ),
+
+ ENTRY( "FT_CPosTp148", CLandMarksTestModule::FT_CPosTp148 ),
+ ENTRY( "FT_CPosTp149", CLandMarksTestModule::FT_CPosTp149 ),
+ ENTRY( "FT_CPosTp150", CLandMarksTestModule::FT_CPosTp150 ),
+ ENTRY( "FT_CPosTp151", CLandMarksTestModule::FT_CPosTp151 ),
+ ENTRY( "FT_CPosTp152", CLandMarksTestModule::FT_CPosTp152 ),
+ ENTRY( "FT_CPosTp153", CLandMarksTestModule::FT_CPosTp153 ),
+ ENTRY( "FT_CPosTp154", CLandMarksTestModule::FT_CPosTp154 ),
+ ENTRY( "FT_CPosTp155", CLandMarksTestModule::FT_CPosTp155 ),
+ ENTRY( "FT_CPosTp156", CLandMarksTestModule::FT_CPosTp156 ),
+ ENTRY( "FT_CPosTp157", CLandMarksTestModule::FT_CPosTp157 ),
+ ENTRY( "FT_CPosTp158", CLandMarksTestModule::FT_CPosTp158 ),
+ ENTRY( "FT_CPosTp159", CLandMarksTestModule::FT_CPosTp159 ),
+ ENTRY( "FT_CPosTp160", CLandMarksTestModule::FT_CPosTp160 ),
+
+ ENTRY( "FT_CPosTp161", CLandMarksTestModule::FT_CPosTp161 ),
+ ENTRY( "FT_CPosTp162", CLandMarksTestModule::FT_CPosTp162 ),
+ ENTRY( "FT_CPosTp163", CLandMarksTestModule::FT_CPosTp163 ),
+ ENTRY( "FT_CPosTp164", CLandMarksTestModule::FT_CPosTp164 ),
+
+ };
+
+ const TInt count = sizeof( KFunctions ) / sizeof( TStifFunctionInfo );
+
+ return RunInternalL( KFunctions, count, aItem );
+ }
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+//
+void CLandMarksTestModule::RunTestProcedureL(
+ CLandmarkTestProcedureBase* tp,
+ CStifItemParser* aItem )
+ {
+ TBuf<128> buf;
+ TInt tpId = tp->iModuleId;
+
+ CleanupStack::PushL( tp );
+
+ _LIT(KTestInit, "---- Initializing TP %d ------");
+ buf.Format( KTestInit, tpId );
+ iLog->Log( buf );
+ tp->InitTestL();
+
+ _LIT(KTestStart, "---- Starting TP %d ------");
+ buf.Format( KTestStart, tpId );
+ iLog->Log( buf );
+ if ( aItem )
+ tp->StartL( *aItem );
+ else
+ tp->StartL();
+
+ _LIT(KTestClose, "---- Closing TP %d ------");
+ buf.Format( KTestClose, tpId );
+ iLog->Log( buf );
+ tp->CloseTest();
+
+ CleanupStack::PopAndDestroy( tp );
+ _LIT(KTestDestroy, "---- Destroyed TP %d ------");
+ buf.Format( KTestDestroy, tpId );
+ iLog->Log( buf );
+ }
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+//
+template <class T>
+TInt CLandMarksTestModule::TestProcedure( TInt aId, CStifItemParser& )
+ {
+ iLog->Log(_L("---- Creating TP %d ------"), aId);
+ T* tp = new (ELeave) T( aId, iLog );
+ TRAPD( err, RunTestProcedureL( tp ) );
+ return err;
+ }
+
+#define DEF_TP(_id) \
+TInt CLandMarksTestModule::FT_CPosTp##_id( CStifItemParser& aItem ) \
+ { return TestProcedure<CPosTp##_id>( _id, aItem ); }
+
+DEF_TP(1)
+DEF_TP(2)
+DEF_TP(3)
+DEF_TP(4)
+DEF_TP(5)
+DEF_TP(6)
+DEF_TP(7)
+DEF_TP(8)
+DEF_TP(9)
+
+DEF_TP(10)
+DEF_TP(11)
+DEF_TP(12)
+DEF_TP(13)
+DEF_TP(18)
+DEF_TP(19)
+
+DEF_TP(20)
+DEF_TP(21)
+DEF_TP(23)
+DEF_TP(24)
+DEF_TP(25)
+DEF_TP(26)
+DEF_TP(28)
+
+DEF_TP(35)
+DEF_TP(36)
+DEF_TP(37)
+DEF_TP(38)
+
+DEF_TP(42)
+DEF_TP(43)
+DEF_TP(44)
+DEF_TP(45)
+DEF_TP(47)
+DEF_TP(48)
+
+DEF_TP(51)
+DEF_TP(52)
+
+DEF_TP(100)
+DEF_TP(101)
+DEF_TP(102)
+DEF_TP(103)
+DEF_TP(104)
+DEF_TP(106)
+
+DEF_TP(116)
+DEF_TP(117)
+DEF_TP(118)
+DEF_TP(119)
+
+DEF_TP(120)
+DEF_TP(121)
+DEF_TP(122)
+DEF_TP(123)
+DEF_TP(124)
+DEF_TP(125)
+DEF_TP(126)
+
+DEF_TP(130)
+DEF_TP(131)
+DEF_TP(132)
+DEF_TP(133)
+DEF_TP(134)
+DEF_TP(135)
+DEF_TP(136)
+DEF_TP(137)
+DEF_TP(139)
+
+DEF_TP(141)
+DEF_TP(143)
+DEF_TP(144)
+DEF_TP(145)
+DEF_TP(146)
+DEF_TP(147)
+
+DEF_TP(148)
+DEF_TP(149)
+DEF_TP(150)
+DEF_TP(151)
+DEF_TP(152)
+DEF_TP(153)
+DEF_TP(154)
+DEF_TP(155)
+DEF_TP(156)
+DEF_TP(157)
+DEF_TP(158)
+DEF_TP(159)
+DEF_TP(160)
+
+DEF_TP(161)
+DEF_TP(162)
+DEF_TP(163)
+DEF_TP(164)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/Bmarm/CUTLandmarkURLu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ LibEntryL__FR13CTestModuleIf @ 1 NONAME R3UNUSED ; LibEntryL(CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/Bwins/CUTLandmarkURLu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * __cdecl LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/conf/CUTLandmarkURL.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,209 @@
+// Definitions
+[Define]
+Parser 0
+Encoder 1
+TenEncoder 2
+Buffer 0
+File 1
+EmptyFile 2
+EmptyBuffer 3
+TestPanic 1
+Accommodation 3000
+Businesses 6000
+TeleCommunication 9000
+Educational 12000
+Entertainment 15000
+Food_Beverage 18000
+GeographicalArea 21000
+Outdoor 24000
+People 27000
+PublicService 30000
+Religious 33000
+Shopping 36000
+Sightseeing 39000
+Sports 42000
+Transport 45000
+TEST_NULL_NAME 1
+TEST_NULL_STREET 2
+TEST_NULL_HNO 3
+TEST_NULL_POSTALCODE 4
+TEST_NULL_CITY 5
+TEST_NULL_STATE 6
+TEST_NULL_COUNTRY 7
+TEST_NULL_TELEPHONE 8
+TEST_NULL_WEB 9
+TEST_NULL_DESCRIPTION 10
+TEST_MAXLENGTH_NAME 11
+TEST_MAXLENGTH1_NAME 12
+TEST_MAXLENGTH2_NAME 13
+TEST_MAXLENGTH_STREET 14
+TEST_MAXLENGTH1_STREET 15
+TEST_MAXLENGTH2_STREET 16
+TEST_MAXLENGTH_HNO 17
+TEST_MAXLENGTH1_HNO 18
+TEST_MAXLENGTH2_HNO 19
+TEST_MAXLENGTH_POSTALCODE 20
+TEST_MAXLENGTH1_POSTALCODE 21
+TEST_MAXLENGTH2_POSTALCODE 22
+TEST_MAXLENGTH_CITY 23
+TEST_MAXLENGTH1_CITY 24
+TEST_MAXLENGTH2_CITY 25
+TEST_MAXLENGTH_STATE 26
+TEST_MAXLENGTH1_STATE 27
+TEST_MAXLENGTH2_STATE 28
+TEST_MAXLENGTH_COUNTRY 29
+TEST_MAXLENGTH1_COUNTRY 30
+TEST_MAXLENGTH2_COUNTRY 31
+TEST_MAXLENGTH_TELEPHONE 32
+TEST_MAXLENGTH1_TELEPHONE 33
+TEST_MAXLENGTH2_TELEPHONE 34
+TEST_MAXLENGTH_WEB 35
+TEST_MAXLENGTH1_WEB 36
+TEST_MAXLENGTH2_WEB 37
+TEST_MAXLENGTH_DESCRIPTION 38
+TEST_MAXLENGTH1_DESCRIPTION 39
+TEST_MAXLENGTH2_DESCRIPTION 40
+[Enddefine]
+
+[Test]
+title Create_Encoder
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Create_MULTIPLE_Encoder
+create CUTLandmarkURL foobar
+foobar CreateInstanceL TenEncoder
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title EncodeToBuffer
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.1234567 HACCURACY= 12.000009 LATITUDE= 85.10 LONGITUDE= 101.102 ALTITUDE= 100 SPEED= 5.12 HEADING= 90 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Businesses WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar SetOutputBuffer
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding Buffer 20 NAME= " Nokia%20India " LMDESCRIPTION= " This%20is%20an%20Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100.00 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer%20Ring%20Road " POSTALCODE= " 560%20103 " HOUSENO.= " 2A%20Jupiter%20Block " TELEPHONE= " %2b91%2d9902019801 " CATEGORY= " Business " WEB= " www%2enokia%2ecom " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title EncodeToFile
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.1234567 HACCURACY= 12.000009 LATITUDE= 85.10 LONGITUDE= 101.102 ALTITUDE= 100 SPEED= 5.12 HEADING= 90 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Businesses WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 20 NAME= " Nokia%20India " LMDESCRIPTION= " This%20is%20an%20Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100.00 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer%20Ring%20Road " POSTALCODE= " 560%20103 " HOUSENO.= " 2A%20Jupiter%20Block " TELEPHONE= " %2b91%2d9902019801 " CATEGORY= " Business " WEB= " www%2enokia%2ecom " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAddCategory
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.1234567 HACCURACY= 12.000009 LATITUDE= 85.10 LONGITUDE= 101.102 ALTITUDE= 100 SPEED= 5.12 HEADING= 90 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Businesses WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar AddCategoryForLatestLandmark TeleCommunication
+foobar FinalizeEncoding
+foobar VerifyEncoding File 21 NAME= " Nokia%20India " LMDESCRIPTION= " This%20is%20an%20Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100.00 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer%20Ring%20Road " POSTALCODE= " 560%20103 " HOUSENO.= " 2A%20Jupiter%20Block " TELEPHONE= " %2b91%2d9902019801 " CATEGORY= " Business " WEB= " www%2enokia%2ecom " CATEGORYTWO= " Communication " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar CleanUp
+delete foobar
+[Endtest]
+//----------------------------------------------------------Test Latitude and Longitude Values---------------------------
+[Test]
+title TestLatLongNormalization1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 90.1110 LONGITUDE= 180
+foobar SetOutputFileHandle
+foobar SetOutputBuffer
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding Buffer 2 LATITUDE= 89.889000 LONGITUDE= 0.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+
+[Test]
+title TestLatLongNormalization2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -89.999 LONGITUDE= -180.001
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 2 LATITUDE= -89.999000 LONGITUDE= 179.999000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestLatLongNormalization3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 270.000001 LONGITUDE= -359.999
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 2 LATITUDE= -89.999999 LONGITUDE= 0.001000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestLatLongNormalization4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 269.0001 LONGITUDE= -360.001
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 2 LATITUDE= -89.000100 LONGITUDE= 179.999000
+foobar CleanUp
+delete foobar
+[Endtest]
+//------------------------------------------------------------------------------------------------------------------------
+
+[Test]
+title TestSetOutfileError
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 269.0001 LONGITUDE= -360.001
+foobar SetOutputFileHandle 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//------------------------------------------------------------------------------------------------------------------------
+[Test]
+title TestAddAddLmkPanic
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 269.0001 LONGITUDE= -360.001
+foobar AddLandmark TestPanic
+pause 3000
+bringtoforeground
+foobar CleanUp
+delete foobar
+[Endtest]
+//------------------------------------------------------------------------------------------------------------------------
+[Test]
+title TestAddAddCategoryPanic
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar AddCategoryForLatestLandmark TeleCommunication TestPanic
+foobar CleanUp
+delete foobar
+[Endtest]
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/conf/CUTLandmarkURL1.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,734 @@
+// Definitions
+[Define]
+Parser 0
+Encoder 1
+Buffer 0
+File 1
+EmptyFile 2
+EmptyBuffer 3
+Accommodation 3000
+Business 6000
+Communication 9000
+Educational 12000
+Entertainment 15000
+Food_Beverage 18000
+GeographicalArea 21000
+Outdoor 24000
+People 27000
+PublicService 30000
+Religious 33000
+Shopping 36000
+Sightseeing 39000
+Sports 42000
+Transport 45000
+TEST_NULL_NAME 1
+TEST_NULL_STREET 2
+TEST_NULL_HNO 3
+TEST_NULL_POSTALCODE 4
+TEST_NULL_CITY 5
+TEST_NULL_STATE 6
+TEST_NULL_COUNTRY 7
+TEST_NULL_TELEPHONE 8
+TEST_NULL_WEB 9
+TEST_NULL_DESCRIPTION 10
+TEST_MAXLENGTH_NAME 11
+TEST_MAXLENGTH1_NAME 12
+TEST_MAXLENGTH2_NAME 13
+TEST_MAXLENGTH_STREET 14
+TEST_MAXLENGTH1_STREET 15
+TEST_MAXLENGTH2_STREET 16
+TEST_MAXLENGTH_HNO 17
+TEST_MAXLENGTH1_HNO 18
+TEST_MAXLENGTH2_HNO 19
+TEST_MAXLENGTH_POSTALCODE 20
+TEST_MAXLENGTH1_POSTALCODE 21
+TEST_MAXLENGTH2_POSTALCODE 22
+TEST_MAXLENGTH_CITY 23
+TEST_MAXLENGTH1_CITY 24
+TEST_MAXLENGTH2_CITY 25
+TEST_MAXLENGTH_STATE 26
+TEST_MAXLENGTH1_STATE 27
+TEST_MAXLENGTH2_STATE 28
+TEST_MAXLENGTH_COUNTRY 29
+TEST_MAXLENGTH1_COUNTRY 30
+TEST_MAXLENGTH2_COUNTRY 31
+TEST_MAXLENGTH_TELEPHONE 32
+TEST_MAXLENGTH1_TELEPHONE 33
+TEST_MAXLENGTH2_TELEPHONE 34
+TEST_MAXLENGTH_WEB 35
+TEST_MAXLENGTH1_WEB 36
+TEST_MAXLENGTH2_WEB 37
+TEST_MAXLENGTH_DESCRIPTION 38
+TEST_MAXLENGTH1_DESCRIPTION 39
+TEST_MAXLENGTH2_DESCRIPTION 40
+TEST_MAXLENGTH_PID 44
+TEST_MAXLENGTH1_PID 45
+TEST_MAXLENGTH2_PID 46
+TEST_NULL_PID 43
+[Enddefine]
+//-----------------------------------------------------PID Param------------------------------------------------------------
+[Test]
+title NullPID
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_PID LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000 PID= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericPID
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 23 LONGITUDE= 100 PID= " PlaceBangNokLoc "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000 PID= " PlaceBangNokLoc "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharPID
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 23 LONGITUDE= 100 PID= " Place:*[Bang,{Nok}<Loc>]; "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000 PID= " Place%3a%2a%5bBang%2c%7bNok%7d%3cLoc%3e%5d%3b "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title PID_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_PID LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title PID_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_PID LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title PID_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_PID LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+//----------------------------------------------End of PId--------------------------------------------------------------
+//------------------------------------------Name Param---------------------------------------------------------------
+[Test]
+title NullName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_NAME LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 NAME= " " LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL NAME= " John1 " LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 NAME= " John1 " LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL NAME= " Amar_Akbar`Anthony~ " LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 NAME= " Amar%5fAkbar%60Anthony%7e " LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NameWithPercentage
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL NAME= " Aditya%20Singh " LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 NAME= " Aditya%2520Singh " LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+//255 chars
+[Test]
+title Name_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_NAME LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title Name_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_NAME LATITUDE= 23 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title Name_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_NAME LATITUDE= 23.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//--------------------------------------------------- End of Name----------------------------------------------------------------------------------------------
+
+//----------------------------------------------------Street Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullStreet
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_STREET LATITUDE= 79 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 79.000000 LONGITUDE= 100.000000 STREET= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericStreet
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 79 LONGITUDE= 100 STREET= " 2AJupiterBlk "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 79.000000 LONGITUDE= 100.000000 STREET= " 2AJupiterBlk "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharStreet
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 79 LONGITUDE= 100 STREET= " #2AJupiter-Block! "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 79.000000 LONGITUDE= 100.000000 STREET= " %232AJupiter%2dBlock%21 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StreetWithPercentage
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 79 LONGITUDE= 100 STREET= " %2A "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 79.000000 LONGITUDE= 100.000000 STREET= " %252A "
+foobar CleanUp
+delete foobar
+[Endtest]
+//255 chars
+[Test]
+title Street_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_STREET LATITUDE= 79 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 79.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title Street_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_STREET LATITUDE= 79 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 79.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title Street_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_STREET LATITUDE= 79.00000 LONGITUDE= 100.00000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of Street---------------------------------------------------------------------------------------------------
+//----------------------------------------------------HouseNumber Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullHouseNo
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_HNO LATITUDE= -56 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -56.000000 LONGITUDE= 100.000000 HOUSENO.= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericHouseNo
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -56 LONGITUDE= 100 HOUSENO.= " 10Janpath "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -56.000000 LONGITUDE= 100.000000 HOUSENO.= " 10Janpath "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharHouseNo
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -56 LONGITUDE= 100 HOUSENO.= " (10.Janpath)' "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -56.000000 LONGITUDE= 100.000000 HOUSENO.= " %2810%2eJanpath%29%27 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title HouseNo_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_HNO LATITUDE= -56 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -56.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title HouseNo_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_HNO LATITUDE= -56 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -56.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title HouseNo_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_HNO LATITUDE= -9.00 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of HouseNumber---------------------------------------------------------------------------------------------------
+//----------------------------------------------------Postal Code Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullPostalCode
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_POSTALCODE LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 POSTALCODE= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericPostalCode
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 POSTALCODE= " K1A 0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 POSTALCODE= " K1A%200B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharPostalCode
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 POSTALCODE= " @$^&*=|0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 POSTALCODE= " %40%24%5e%26%2a%3d%7c0B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title PostalCode_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_POSTALCODE LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title PostalCode_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_POSTALCODE LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title PostalCode_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_POSTALCODE LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of Postal Code---------------------------------------------------------------------------------------------------
+
+//----------------------------------------------------City Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullCity
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_CITY LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 CITY= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericCity
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 CITY= " K1A 0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 CITY= " K1A%200B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharCity
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9.00000 LONGITUDE= 100.00000 CITY= " @$^&*=|0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 CITY= " %40%24%5e%26%2a%3d%7c0B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title City_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_CITY LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title City_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_CITY LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title City_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_CITY LATITUDE= -45 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of City--------------------------------------------------------------------------------------------------
+
+//----------------------------------------------------State Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullState
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_STATE LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 STATE= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericState
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 STATE= " K1A 0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 STATE= " K1A%200B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharState
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 STATE= " @$^&*=|0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 STATE= " %40%24%5e%26%2a%3d%7c0B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title State_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_STATE LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title State_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_STATE LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title State_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_STATE LATITUDE= -45 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of State--------------------------------------------------------------------------------------------------
+
+
+//----------------------------------------------------Country Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullCountry
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_COUNTRY LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 COUNTRY= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericCountry
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 COUNTRY= " K1A 0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 COUNTRY= " K1A%200B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharCountry
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 COUNTRY= " @$^&*=|0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 COUNTRY= " %40%24%5e%26%2a%3d%7c0B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title Country_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_COUNTRY LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title Country_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_COUNTRY LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title Country_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_COUNTRY LATITUDE= -45 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of Country--------------------------------------------------------------------------------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/conf/CUTLandmarkURL2.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,715 @@
+// Definitions
+[Define]
+Parser 0
+Encoder 1
+Buffer 0
+File 1
+EmptyFile 2
+EmptyBuffer 3
+Accommodation 3000
+Business 6000
+Communication 9000
+Educational 12000
+Entertainment 15000
+Food_Beverage 18000
+GeographicalArea 21000
+Outdoor 24000
+People 27000
+PublicService 30000
+Religious 33000
+Shopping 36000
+Sightseeing 39000
+Sports 42000
+Transport 45000
+TEST_NULL_NAME 1
+TEST_NULL_STREET 2
+TEST_NULL_HNO 3
+TEST_NULL_POSTALCODE 4
+TEST_NULL_CITY 5
+TEST_NULL_STATE 6
+TEST_NULL_COUNTRY 7
+TEST_NULL_TELEPHONE 8
+TEST_NULL_WEB 9
+TEST_NULL_DESCRIPTION 10
+TEST_MAXLENGTH_NAME 11
+TEST_MAXLENGTH1_NAME 12
+TEST_MAXLENGTH2_NAME 13
+TEST_MAXLENGTH_STREET 14
+TEST_MAXLENGTH1_STREET 15
+TEST_MAXLENGTH2_STREET 16
+TEST_MAXLENGTH_HNO 17
+TEST_MAXLENGTH1_HNO 18
+TEST_MAXLENGTH2_HNO 19
+TEST_MAXLENGTH_POSTALCODE 20
+TEST_MAXLENGTH1_POSTALCODE 21
+TEST_MAXLENGTH2_POSTALCODE 22
+TEST_MAXLENGTH_CITY 23
+TEST_MAXLENGTH1_CITY 24
+TEST_MAXLENGTH2_CITY 25
+TEST_MAXLENGTH_STATE 26
+TEST_MAXLENGTH1_STATE 27
+TEST_MAXLENGTH2_STATE 28
+TEST_MAXLENGTH_COUNTRY 29
+TEST_MAXLENGTH1_COUNTRY 30
+TEST_MAXLENGTH2_COUNTRY 31
+TEST_MAXLENGTH_TELEPHONE 32
+TEST_MAXLENGTH1_TELEPHONE 33
+TEST_MAXLENGTH2_TELEPHONE 34
+TEST_MAXLENGTH_WEB 35
+TEST_MAXLENGTH1_WEB 36
+TEST_MAXLENGTH2_WEB 37
+TEST_MAXLENGTH_DESCRIPTION 38
+TEST_MAXLENGTH1_DESCRIPTION 39
+TEST_MAXLENGTH2_DESCRIPTION 40
+TEST_NULL_SPEED 41
+TEST_NULL_HEADING 42
+TEST_MAX_HA 47
+TEST_MAX_VA 48
+[Enddefine]
+
+//----------------------------------------------------Telephone Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullTelephone
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_TELEPHONE LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 TELEPHONE= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericTelephone
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 TELEPHONE= " K1A 0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 TELEPHONE= " K1A%200B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharTelephone
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 TELEPHONE= " @$^&*=|0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 TELEPHONE= " %40%24%5e%26%2a%3d%7c0B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title Telephone_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_TELEPHONE LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title Telephone_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_TELEPHONE LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title Telephone_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_TELEPHONE LATITUDE= -45 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of Telephone--------------------------------------------------------------------------------------------------
+
+//----------------------------------------------------Web Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullWeb
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_WEB LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 WEB= " "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericWeb
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 WEB= " K1A 0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 WEB= " K1A%200B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharWeb
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= -9 LONGITUDE= 100 WEB= " @$^&*=|0B1 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -9.000000 LONGITUDE= 100.000000 WEB= " %40%24%5e%26%2a%3d%7c0B1 "
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//255 chars
+[Test]
+title Web_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_WEB LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//254 chars
+[Test]
+title Web_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_WEB LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title Web_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_WEB LATITUDE= -45 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of Web--------------------------------------------------------------------------------------------------
+//----------------------------------------------------Description Param---------------------------------------------------------------------------------------------
+
+[Test]
+title NullDescription
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_NULL_DESCRIPTION LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LMDESCRIPTION= " " LATITUDE= -9.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AlphanumericDescription
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LMDESCRIPTION= " K1A 0B1 " LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LMDESCRIPTION= " K1A%200B1 " LATITUDE= -9.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title SpecialCharDescription
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LMDESCRIPTION= " @$^&*=|0B1 " LATITUDE= -9 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LMDESCRIPTION= " %40%24%5e%26%2a%3d%7c0B1 " LATITUDE= -9.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//4095 chars
+[Test]
+title Description_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH_DESCRIPTION LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//4094 chars
+[Test]
+title Description_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH1_DESCRIPTION LATITUDE= -45 LONGITUDE= 100
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= -45.000000 LONGITUDE= 100.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//4096 chars
+[Test]
+title Description_BV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAXLENGTH2_DESCRIPTION LATITUDE= -45 LONGITUDE= 100
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-------------------------------------------------------End of Description--------------------------------------------------------------------------------------------------
+
+
+//------------------------------------------PositionalAccuracy Param---------------------------------------------------------------
+[Test]
+title PA_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAX_HA LATITUDE= 9 LONGITUDE= 18
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 HACCURACY= 340282346638529000000000000000000000000.00 LATITUDE= 9.000000 LONGITUDE= 18.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PA_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL HACCURACY= 1 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 HACCURACY= 1.00 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestPAFoatingNumber1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL HACCURACY= 1345.001 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 HACCURACY= 1345.00 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestPAFoatingNumber2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL HACCURACY= 1345.01 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 HACCURACY= 1345.01 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestPAFoatingNumber3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL HACCURACY= 1345.12 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 HACCURACY= 1345.12 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestPAFoatingNumber4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL HACCURACY= 1345.98 LATITUDE= 9.00000 LONGITUDE= 108.00000
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 HACCURACY= 1345.98 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//--------------------------------------------------- End of PositionalAccuracy----------------------------------------------------------------------------------------------
+
+//------------------------------------------Altitude Accuracy Param---------------------------------------------------------------
+[Test]
+title AA_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL TEST_MAX_VA LATITUDE= 9 LONGITUDE= 18
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 VERT_ACC= 340282346638529000000000000000000000000.00 LATITUDE= 9.000000 LONGITUDE= 18.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title AA_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL VERT_ACC= 1 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 VERT_ACC= 1.00 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAAFoatingNumber1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL VERT_ACC= 1345.001 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 VERT_ACC= 1345.00 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAAFoatingNumber2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL VERT_ACC= 1345.01 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 VERT_ACC= 1345.01 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAAFoatingNumber3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL VERT_ACC= 1345.123456789 LATITUDE= 9 LONGITUDE= 108
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 VERT_ACC= 1345.12 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAAFoatingNumber4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL VERT_ACC= 1345.987654321 LATITUDE= 9.00000 LONGITUDE= 108.00000
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 VERT_ACC= 1345.99 LATITUDE= 9.000000 LONGITUDE= 108.000000
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//--------------------------------------------------- End of Altitude Accuracy----------------------------------------------------------------------------------------------
+
+//--------------------------------------------------- Altitude Param ----------------------------------------------------------------------------------------------
+
+[Test]
+title Alt_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 18 ALTITUDE= 4294967296
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 18.000000 ALTITUDE= 4294967296.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Alt_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 ALTITUDE= 1
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 ALTITUDE= 1.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAltFoatingNumber1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 ALTITUDE= 1345.001
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 ALTITUDE= 1345.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAltFoatingNumber2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 ALTITUDE= 1345.01
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 ALTITUDE= 1345.01
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAltFoatingNumber3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 ALTITUDE= 1345.124
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 ALTITUDE= 1345.12
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestAltFoatingNumber4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 ALTITUDE= 1345.986
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 ALTITUDE= 1345.99
+foobar CleanUp
+delete foobar
+[Endtest]
+//--------------------------------------------------- End of Altitude----------------------------------------------------------------------------------------------
+
+//--------------------------------------------------- Speed Param ----------------------------------------------------------------------------------------------
+
+[Test]
+title Speed_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 18 SPEED= 340282346638529000000000000000000000000.00
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 18.000000 SPEED= 340282346638529000000000000000000000000.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Speed_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 SPEED= 1
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 SPEED= 1.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestSpeedFoatingNumber1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 SPEED= 1345.001
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 SPEED= 1345.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestSpeedFoatingNumber2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 SPEED= 1345.01
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 SPEED= 1345.01
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestSpeedFoatingNumber3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 SPEED= 1345.1234
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 SPEED= 1345.12
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestSpeedFoatingNumber4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 SPEED= 1345.9876
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 SPEED= 1345.99
+foobar CleanUp
+delete foobar
+[Endtest]
+//--------------------------------------------------- End of Speed----------------------------------------------------------------------------------------------
+//--------------------------------------------------- Heading Param ----------------------------------------------------------------------------------------------
+
+[Test]
+title Heading_BV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 18 HEADING= 340282346638529000000000000000000000000.00
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 18.000000 HEADING= 340282346638529000000000000000000000000.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Heading_BV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 HEADING= 1
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 HEADING= 1.00
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestHeadingFoatingNumber1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 HEADING= 1345.00999
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 HEADING= 1345.01
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestHeadingFoatingNumber2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 HEADING= 1345.01
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 HEADING= 1345.01
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestHeadingFoatingNumber3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 HEADING= 1345.123456
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 HEADING= 1345.12
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestHeadingFoatingNumber4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Encoder
+foobar CreateLandmarkL LATITUDE= 9 LONGITUDE= 108 HEADING= 1345.987654
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar VerifyEncoding File 3 LATITUDE= 9.000000 LONGITUDE= 108.000000 HEADING= 1345.99
+foobar CleanUp
+delete foobar
+[Endtest]
+//--------------------------------------------------- End of Heading----------------------------------------------------------------------------------------------
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/conf/CUTLmkURLParser.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1122 @@
+// Definitions
+[Define]
+default 0
+Parser 0
+Encoder 1
+NoProtocol 1
+https 2
+InvalidProtocol 3
+NoHostName 4
+InvalidHostName 5
+InvalidHostName1 6
+InvalidHostName2 7
+UnknownFormat 2
+[Enddefine]
+
+//----------------------------------------------------BAT Cases---------------------------------------------------------------------------------------------
+
+[Test]
+title Create_Parser
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Parse_Buffer
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default la=85.100000&lo=101.102000&a=100.00&pa=12.00&aa=3.12&pid=1234&n=Nokia%20India&d=This%20is%20an%20Example&sn=2A%20Jupiter%20Block&s=Outer%20Ring%20Road&c=Bangalore&sp=Karnataka&cr=India&pz=560%20103&t=%2b91%2d9902019801&v=5.12&h=90.00&cat=Businesses&w=www%2enokia%2ecom&ts=20090430:120000.100000
+foobar ParseContent
+foobar Landmark NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Business WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Parse_File
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar CreateInstanceL Encoder
+foobar SetInputFile
+foobar ParseContent
+foobar Landmark NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Business WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar SetOutputFileHandle
+foobar AddLandmark
+foobar FinalizeEncoding
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Parse_FileHandle
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=85.100000&lo=101.102000&a=100.00&pa=12.00&aa=3.12&pid=1234&n=Nokia%20India&d=This%20is%20an%20Example&sn=2A%20Jupiter%20Block&s=Outer%20Ring%20Road&c=Bangalore&sp=Karnataka&cr=India&pz=560%20103&t=%2b91%2d9902019801&v=5.12&h=90.00&cat=Businesses&w=www%2enokia%2ecom&ts=20090430:120000.100000
+foobar ParseContent
+foobar Landmark NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Business WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title GetLmkCat
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFile
+foobar ParseContent
+foobar Landmark NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Business WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar LandmarkCategory CATEGORY= " dummy "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------End of BAT cases-----------------------------------------------------------
+
+//--------------------------------------------Testing Protocol------------------------------------------------------------
+[Test]
+title NoProtocol
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle NoProtocol la=-90.000000&lo=-180.000000
+foobar ParseContent
+foobar Landmark LATITUDE= -90.000000 LONGITUDE= -180.000000
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title HTTPSProtocol
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle https la=90.000000&lo=180.000000
+foobar ParseContent
+foobar Landmark LATITUDE= 90.000000 LONGITUDE= -180.000000
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title InvalidProtocol
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle InvalidProtocol la=85.100000&lo=101.102000
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//--------------------------------------- End of testing protocol-------------------------------------------------------
+
+//---------------------------------------- TestingHostName--------------------------------------------------------------
+
+[Test]
+title NoHostName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer NoHostName la=85.100000&lo=101.102000
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title InvalidHostName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer InvalidHostName la=85.100000&lo=101.102000
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title InvalidHostName1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer InvalidHostName1 la=85.100000&lo=101.102000
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title InvalidHostName2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer InvalidHostName1 la=85.100000&lo=101.102000
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//---------------------------------------End of Testing Hostname -----------------------------------------------------------
+//-----------------------------------------Testing Lat and Long-------------------------------------------------------------
+[Test]
+title ValidLatLong
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default lo=-179.99999&la=-89.99999
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NoLongitude
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=-89.010&
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NoLatitude
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default lo=-102.001&
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title WithoutParam
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullPosition
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=&lo=
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title BVLatLong1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=90.000001&lo=100.1234
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title BVLatLong2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=9&lo=180.000001
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title BVLatLong3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=-90.000001&lo=100.1234
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title BVLatLong4
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default la=9&lo=-180.000001
+foobar ParseContent UnknownFormat
+foobar NumOfParsedLandmarks 0
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//------------------------------------------------End of Testing Lat and Long---------------------------------------------------------
+//--------------------------------------------------Testing PID-----------------------------------------------------------------------
+[Test]
+title ValidPID
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=1a
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 PID= " 1a "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PID_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=%235%2C%201st%20Cross%2E
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 PID= " #5, 1st Cross. "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullPID
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PIDBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PIDBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//256 chars
+[Test]
+title PIDBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PIDRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&pid=123$abc
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 PID= " 123 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+
+//----------------------------------------------------------------------End of Testing PID-------------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------Testing Name------------------------------------------------------------------------------------
+
+[Test]
+title ValidName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=Aurthur3
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 NAME= " Aurthur3 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Name_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&n=Jim%2bCarrey
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 NAME= " Jim+Carrey "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullName
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&n=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NameBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&n=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NameBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&n=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NameBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&n=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NameRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&n=Jim+Carrey
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------End of Name---------------------------------------------------------------------------
+//----------------------------------------------------------Testing Street-----------------------------------------------------------------------
+[Test]
+title ValidStreet
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pid=CemeteryRidge
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 STREET= " CemeteryRidge "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Street_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&s=112%20½%20Beacon%20Street%2c%20Boston
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 STREET= " 112 ½ Beacon Street, Boston "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullStreet
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&s=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StreetBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&s=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StreetBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&s=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StreetBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&s=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StreetRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&s=112 ½ Beacon Street, Boston
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 STREET= " 112 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Street--------------------------------------------------------
+//----------------------------------------------------------Testing HouseNumber-----------------------------------------------------------------------
+[Test]
+title ValidHNo
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sn=Apt56B
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 HOUSENO.= " Apt56B "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title HNo_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sn=221B%2520Baker%20Street
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 HOUSENO.= " 221B%20Baker Street "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullHNo
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sn=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title HNoBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sn=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title HNoBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sn=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title HNoBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sn=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title HNoRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&s=Ottumwa, Iowa
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 HOUSENO.= " Ottumwa "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing House Number--------------------------------------------------------
+//----------------------------------------------------------Testing PostalCode-----------------------------------------------------------------------
+[Test]
+title ValidPostalCode
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pz=DK-1448
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 POSTALCODE= " DK%2D1448 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PostalCode_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pz=4455%2d111%25%252520
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 POSTALCODE= " 4455-111%%2520 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullPostalCode
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pz=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PostalCodeBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pz=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PostalCodeBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pz=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PostalCodeBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&pz=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title PostalCodeRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&pz=560%20103
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 POSTALCODE= " 560 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Postal Code--------------------------------------------------------
+//----------------------------------------------------------Testing City----------------------------------------------------------------------
+[Test]
+title ValidCity
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&c=Idaho
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 CITY= " Idaho "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title City_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&c=Krung%2dthep%2dmaha%2dnakorn%2dboworn%2dratana
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 CITY= " Krung-thep-maha-nakorn-boworn-ratana "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullCity
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&c=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CityBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&c=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CityBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&c=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CityBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&c=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CityRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&c=New York
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 CITY= " New "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing City--------------------------------------------------------
+//----------------------------------------------------------Testing State----------------------------------------------------------------------
+[Test]
+title ValidState
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=Helsinki
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 STATE= " Helsinki "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title State_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=Jammu%20%26%20Kashmir
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 STATE= " Jammu & Kashmir "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullState
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StateBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StateBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StateBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title StateRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&sp=Jammu & Kashmir
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 STATE= " Jammu "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing State--------------------------------------------------------
+//----------------------------------------------------------Testing Country----------------------------------------------------------------------
+[Test]
+title ValidCountry
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&cr=India
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 COUNTRY= " India "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Country_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&cr=The%20Separate%20Customs%20Territory%20of%20Taiwan%2C%20Penghu%2C%20Kinmen%2C%20and%20Matsu%20%28Chinese%20Taipei%29
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 COUNTRY= " The Separate Customs Territory of Taiwan, Penghu, Kinmen, and Matsu (Chinese Taipei) "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullCountry
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CountryBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CountryBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CountryBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&sp=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CountryRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&sp=Jammu & Kashmir
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 COUNTRY= " Jammu "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Country--------------------------------------------------------
+//----------------------------------------------------------Testing Telephone----------------------------------------------------------------------
+[Test]
+title ValidTelephone
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&t=08040159999
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 TELEPHONE= " 08040159999 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Telephone_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&t=%2b44%20%280%291248%20717171
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 TELEPHONE= " +44 (0) 1248 717171 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullTelephone
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&t=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TelephoneBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&t=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TelephoneBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&t=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TelephoneBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&t=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TelephoneRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&t=%2b91%20080%204015 99999
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 TELEPHONE= " +91 080 4015 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Telephone--------------------------------------------------------
+//----------------------------------------------------------Testing Web----------------------------------------------------------------------
+[Test]
+title ValidWeb
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&w=www%2Enokia%2ecom
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 WEB= " www.nokia.com "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Web_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&w=www%2ellanfairpwllgwyngyllgogerychwyrndrobwyll%2Dllantysiliogogogoch%2ecom%2F
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999 WEB= " www.llanfairpwllgwyngyllgogerychwyrndrobwyll-llantysiliogogogoch.com/ "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullWeb
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&w=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title WebBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&w=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title WebBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&w=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title WebBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&w=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title webRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&w=http://
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 WEB= " http "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Web--------------------------------------------------------
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/conf/CUTLmkURLParser1.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,565 @@
+// Definitions
+[Define]
+Parser 0
+default 0
+Encoder 1
+NoProtocol 1
+NullCat 1
+https 2
+InvalidProtocol 3
+NoHostName 4
+InvalidHostName 5
+InvalidHostName1 6
+InvalidHostName2 7
+BV_Description1 8
+BV_Description2 9
+BV_Description3 10
+UnknownFormat 2
+deletefile 1
+TestPanic 1
+[Enddefine]
+
+//----------------------------------------------------------Testing Category----------------------------------------------------------------------
+
+[Test]
+title MultipleCat_Unique
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default lo=179.99999&la=89.99999&cat=dummy1&cat=dummy2
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar LandmarkCategory default CATEGORY= " dummy1 " CATEGORYTWO= " dummy2 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title MultipleCat_Duplicate
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default lo=179.99999&la=89.99999&cat=dummy&cat=dummy
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar LandmarkCategory default CATEGORY= " dummy "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullCat
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default lo=179.99999&la=89.99999&cat=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar LandmarkCategory NullCat
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CategoryBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&cat=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar LandmarkCategory default
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CategoryBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&cat=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar LandmarkCategory default
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CategoryBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&cat=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar LandmarkCategory LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title CategoryRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&cat=cate_gory
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar LandmarkCategory default CATEGORY= " cate "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Category--------------------------------------------------------
+//----------------------------------------------------------Testing Description----------------------------------------------------------------------
+[Test]
+title ValidDescription
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&d=Example
+foobar ParseContent
+foobar Landmark LMDESCRIPTION= " Example " LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Description_EncodedChars
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&d=This%20is%20Example
+foobar ParseContent
+foobar Landmark LMDESCRIPTION= " This is Example " LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullDescription
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=179.99999&la=89.99999&d=
+foobar ParseContent
+foobar Landmark LATITUDE= 89.99999 LONGITUDE= 179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DescriptionBV1
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle BV_Description1
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DescriptionBV2
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle BV_Description2
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DescriptionBV3
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle BV_Description3
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DescriptionRecovery
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&d=This is Invalid
+foobar ParseContent
+foobar Landmark LMDESCRIPTION= " This " LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//---------------------------------------------------------------End of Testing Description--------------------------------------------------------
+//-----------------------------------------------------------------Testing Position accuracy-------------------------------------------------------
+[Test]
+title ValidPA
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&pa=4.05
+foobar ParseContent
+foobar Landmark HACCURACY= 4.05 LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullPA
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&pa=
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NonDigitPA
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&pa=123#
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-----------------------------------------------------End of Position accuracy-----------------------------------------------
+
+//-----------------------------------------------------------------Testing Vertical accuracy-------------------------------------------------------
+[Test]
+title ValidVA
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&aa=12313.016
+foobar ParseContent
+foobar Landmark VERT_ACC= 12313.02 LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullVA
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&aa=
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NonDigitVA
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&aa=rsen
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//-----------------------------------------------------End of Vertical accuracy-----------------------------------------------
+
+
+//-----------------------------------------------------------------Testing Altitude-------------------------------------------------------
+[Test]
+title ValidAlt
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&a=50000
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 ALTITUDE= 50000.00
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullAlt
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&a=
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NonDigitAlt
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&a=inf
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NegativeAltitude
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&a=-0.124
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 ALTITUDE= -0.124
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//-----------------------------------------------------End of Altitude-----------------------------------------------
+
+
+//-----------------------------------------------------------------Testing Speed-------------------------------------------------------
+[Test]
+title ValidSpeed
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&v=9.125
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 SPEED= " 9.12 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullSpeed
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&v=
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NonDigitSpeed
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&v=NaN
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-----------------------------------------------------End of speed-----------------------------------------------
+//-----------------------------------------------------------------Testing Heading-------------------------------------------------------
+[Test]
+title ValidHeading
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&h=90.126
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 HEADING= " 90.13 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NullHeading
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&h=
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title NonDigitHeading
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&h=-inf
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//-----------------------------------------------------End of Heading-----------------------------------------------
+//-----------------------------------------------------------------Testing TimeStamp-------------------------------------------------------
+[Test]
+title ValidTimeStamp
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20090516:124800.000000
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 TS= " 20090516:124800.000000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TSWithoutTime
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20090516
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 TS= " 20090516:000000.000000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TSWithoutDate
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=:124800.000000
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title InvalidMonth
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20091216
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestLeapYear
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20080229
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 TS= " 20080229:000000.000000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestInvalidDay
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20090229
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+//-----------------------------------------------------End of TestingTimeStamp-----------------------------------------------
+//--------------------------------------------------------Misc Error Handling Test Cases--------------------------------------
+[Test]
+title DiscardingofFileHandle
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFileHandle default lo=1&la=4
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20090616:123605.000000
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 TS= " 20090616:123605.000000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DiscardingofBuffer
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=1&la=4
+foobar SetInputFile
+foobar ParseContent
+foobar Landmark NAME= " Nokia India " LMDESCRIPTION= " This is an Example " VERT_ACC= 3.12 HACCURACY= 12.00 LATITUDE= 85.100000 LONGITUDE= 101.102000 ALTITUDE= 100 SPEED= 5.12 HEADING= 90.00 COUNTRY= " India " STATE= " Karnataka " CITY= " Bangalore " STREET= " Outer Ring Road " POSTALCODE= " 560 103 " HOUSENO.= " 2A Jupiter Block " TELEPHONE= " +91-9902019801 " CATEGORY= Business WEB= " www.nokia.com " PID= " 1234 " TS= " 20090430:120000.100000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DiscardingofFile
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFile
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20090616
+foobar ParseContent
+foobar Landmark LATITUDE= -89.99999 LONGITUDE= -179.99999 TS= " 20090616:000000.000000 "
+foobar NumOfParsedLandmarks 1
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title DeleteInputFile
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputFile deletefile
+foobar CleanUp
+delete foobar
+[Endtest]
+
+//[Test]
+//title WriteModeFileHandle
+//create CUTLandmarkURL foobar
+//foobar CreateInstanceL Parser
+//foobar SetInputFileHandle default TESTMODE= 1
+//foobar CleanUp
+//delete foobar
+//[Endtest]
+
+[Test]
+title TestPanic_Parsing
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar ParseContent TestPanic
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title TestPanic_Landmark
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar SetInputBuffer default lo=-179.99999&la=-89.99999&ts=20090516:124800.000000
+foobar ParseContent
+foobar Landmark TestPanic
+foobar CleanUp
+delete foobar
+[Endtest]
+
+[Test]
+title Misc
+create CUTLandmarkURL foobar
+foobar CreateInstanceL Parser
+foobar CreateInstanceL Encoder
+foobar TestMisc
+foobar CleanUp
+delete foobar
+[Endtest]
+//-----------------------------------------------End of Testing------------------------------------------------------------------
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/data/URLParser.txt Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,1 @@
+http://www.maps.ovi.com/?la=85.100000&lo=101.102000&a=100.00&pa=12.00&aa=3.12&pid=1234&n=Nokia%20India&d=This%20is%20an%20Example&sn=2A%20Jupiter%20Block&s=Outer%20Ring%20Road&c=Bangalore&sp=Karnataka&cr=India&pz=560%20103&t=%2b91%2d9902019801&v=5.12&h=90.00&cat=dummy&w=www%2enokia%2ecom&ts=20090430:120000.100000
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/eabi/CUTLandmarkURLu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/group/ABLD.BAT Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,15 @@
+@ECHO OFF
+
+REM Bldmake-generated batch file - ABLD.BAT
+REM ** DO NOT EDIT **
+
+perl -S ABLD.PL "\Requirements\LandmarksURL\testcases\CUTLandmarkURL\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9
+if errorlevel==1 goto CheckPerl
+goto End
+
+:CheckPerl
+perl -v >NUL
+if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed?
+goto End
+
+:End
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/group/CUTLandmarkURL.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: mmp file for test component
+*
+*/
+
+/*TYPE TESTCLASS*//*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: MMP file for STIF Test Framework's TestScripter
+* testclass test module.
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET CUTLandmarkURL.dll
+TARGETTYPE dll
+UID 0x1000008D 0x101FB3E3
+
+CAPABILITY ALL -TCB
+/* Remove comments and replace 0x00000000 with correct vendor id */
+// VENDORID 0x00000000
+/* Remove comments and replace 0x00000000 with correct secure id */
+// SECUREID 0x00000000
+
+//TARGETPATH ?target_path
+DEFFILE CUTLandmarkURL.def
+
+USERINCLUDE ../inc
+
+APP_LAYER_SYSTEMINCLUDE
+MW_LAYER_SYSTEMINCLUDE
+OS_LAYER_SYSTEMINCLUDE
+
+SOURCEPATH ../src
+
+SOURCE CUTLandmarkURL.cpp
+SOURCE CUTLandmarkURLBlocks.cpp
+
+//RESOURCE resource_file
+//RESOURCE resource_file2
+
+LIBRARY euser.lib
+LIBRARY stiftestinterface.lib
+LIBRARY stiftestengine.lib
+LIBRARY eposlandmarks.lib
+LIBRARY bafl.lib
+LIBRARY Lbs.lib
+LIBRARY efsrv.lib
+LIBRARY egul.lib
+
+LANG SC
+
+/*
+START WINS
+?wins_specific_information
+END
+
+START MARM
+?marm_specific_information
+END
+*/
+// Other possible keywords:
+
+// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes)
+/*
+START BITMAP ?target
+TARGETPATH ?emulated_path_on_target_machine
+HEADER
+SOURCE ?color_depth ?source_bitmap
+END
+*/
+// DEFFILE ?filename
+// AIF ?filename
+EPOCALLOWDLLDATA
+
+SMPSAFE
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/group/CUTLandmarkURL.pkg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,69 @@
+;
+; 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 the License "Symbian Foundation License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: package file for device installation
+;
+
+; Languages
+&EN
+
+; Provide value for uid
+#{"STIF"},(0x00000000),1,1,0,TYPE=SA
+
+; Series60 product id for S60 3.0
+[0x101F7961], 0, 0, 0, {"Series60ProductID"}
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Logo
+; None
+
+; Package signature - Optional
+; None
+
+; Start of Package body
+
+; Condition blocks
+; None
+
+; Options list
+; None
+
+; Files to install
+"\epoc32\release\armv5\urel\CUTLandmarkURL.dll"-"!:\sys\bin\CUTLandmarkURL.dll"
+
+;data file
+"..\data\URLParser.txt"-"C:\testframework\URLParser.txt"
+
+"..\conf\CUTLandmarkURL.cfg"-"C:\testframework\CUTLandmarkURL.cfg"
+"..\conf\CUTLandmarkURL1.cfg"-"C:\testframework\CUTLandmarkURL1.cfg"
+"..\conf\CUTLandmarkURL2.cfg"-"C:\testframework\CUTLandmarkURL2.cfg"
+"..\conf\CUTLmkURLParser.cfg"-"C:\testframework\CUTLmkURLParser.cfg"
+"..\conf\CUTLmkURLParser1.cfg"-"C:\testframework\CUTLmkURLParser1.cfg"
+
+"..\init\testframework.ini"-"C:\testframework\testframework.ini"
+
+; Embedded SIS
+; None
+
+; End of Package body
+
+; PKG dependencies
+; None
+
+; PKG capabilities
+; None
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This is build file for urlparser test component
+*
+*/
+
+
+
+
+PRJ_PLATFORMS
+// specify the platforms your component needs to be built for here
+// defaults to WINS MARM so you can ignore this if you just build these
+
+ DEFAULT
+
+PRJ_TESTEXPORTS
+// NOTE: If using ARS requirements all export operations should be done under this.
+// 'abld test export'
+../data/URLParser.txt /epoc32/winscw/c/TestFramework/URLParser.txt
+../conf/CUTLandmarkURL1.cfg /epoc32/winscw/c/TestFramework/CUTLandmarkURL1.cfg
+../conf/CUTLandmarkURL2.cfg /epoc32/winscw/c/TestFramework/CUTLandmarkURL2.cfg
+../conf/CUTLandmarkURL.cfg /epoc32/winscw/c/TestFramework/CUTLandmarkURL.cfg
+../conf/CUTLmkURLParser.cfg /epoc32/winscw/c/TestFramework/CUTLmkURLParser.cfg
+../conf/CUTLmkURLParser1.cfg /epoc32/winscw/c/TestFramework/CUTLmkURLParser1.cfg
+
+PRJ_EXPORTS
+
+
+// Specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in /epoc32/include
+// Example:
+/*
+/agnmodel/inc/AGMCOMON.H
+*/
+
+PRJ_TESTMMPFILES
+
+ CUTLandmarkURL.mmp
+
+PRJ_MMPFILES
+
+
+// Specify the .mmp files required for building the important component
+// releasables.
+//
+// Specify "tidy" if the component you need to build doesn't need to be
+// released. Specify "ignore" if the MMP file exists but should be
+// ignored.
+// Example:
+/*
+/agnmodel/group/agnmodel.mmp
+#if defined(MARM)
+/agnmodel/group/agsvexe.mmp
+#endif
+*/
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/inc/CUTLandmarkURL.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,348 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: STIF testclass declaration
+*
+*/
+
+#ifndef CUTLANDMARKURL_H
+#define CUTLANDMARKURL_H
+
+// INCLUDES
+#include <StifLogger.h>
+#include <TestScripterInternal.h>
+#include <StifTestModule.h>
+#include <TestclassAssert.h>
+
+#include <EPos_CPosLandmark.h>
+#include <EPos_CPosLandmarkEncoder.h>
+#include <EPos_CPosLandmarkParser.h>
+#include <EPos_CPosLandmarkDatabase.h>
+
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+const TInt KMaxTestBuf= 10240;
+const TInt KMaxTagName= 24;
+const TInt CREATE_PARSER = 0;
+const TInt CREATE_ENCODER =1;
+const TInt MULTIPLE_ENCODER =2;
+const TInt MULTIPLE_PARSER =3;
+const TInt BUFFER_OUTPUT =0;
+const TInt FILE_OUTPUT =1;
+const TInt NO_ENCODING_FILE =2;
+const TInt NO_ENCODING_BUFFER =3;
+const TInt ERROR_VERIFICATION_OPFILE =1;
+const TInt PANIC_CODE_VERIIFCATION =1;
+const TInt TEST_NULL_NAME = 1;
+const TInt TEST_NULL_STREET = 2;
+const TInt TEST_NULL_HNO = 3;
+const TInt TEST_NULL_POSTALCODE = 4;
+const TInt TEST_NULL_CITY = 5;
+const TInt TEST_NULL_STATE = 6;
+const TInt TEST_NULL_COUNTRY = 7;
+const TInt TEST_NULL_TELEPHONE = 8;
+const TInt TEST_NULL_WEB = 9;
+const TInt TEST_NULL_DESCRIPTION = 10;
+const TInt TEST_NULL_SPEED = 41;
+const TInt TEST_NULL_HEADING = 42;
+const TInt TEST_NULL_PID = 43;
+const TInt TEST_MAXLENGTH_NAME = 11;
+const TInt TEST_MAXLENGTH1_NAME = 12;
+const TInt TEST_MAXLENGTH2_NAME = 13;
+const TInt TEST_MAXLENGTH_STREET = 14;
+const TInt TEST_MAXLENGTH1_STREET = 15;
+const TInt TEST_MAXLENGTH2_STREET = 16;
+const TInt TEST_MAXLENGTH_HNO = 17;
+const TInt TEST_MAXLENGTH1_HNO = 18;
+const TInt TEST_MAXLENGTH2_HNO = 19;
+const TInt TEST_MAXLENGTH_POSTALCODE = 20;
+const TInt TEST_MAXLENGTH1_POSTALCODE = 21;
+const TInt TEST_MAXLENGTH2_POSTALCODE = 22;
+const TInt TEST_MAXLENGTH_CITY = 23;
+const TInt TEST_MAXLENGTH1_CITY = 24;
+const TInt TEST_MAXLENGTH2_CITY = 25;
+const TInt TEST_MAXLENGTH_STATE = 26;
+const TInt TEST_MAXLENGTH1_STATE = 27;
+const TInt TEST_MAXLENGTH2_STATE = 28;
+const TInt TEST_MAXLENGTH_COUNTRY = 29;
+const TInt TEST_MAXLENGTH1_COUNTRY = 30;
+const TInt TEST_MAXLENGTH2_COUNTRY = 31;
+const TInt TEST_MAXLENGTH_TELEPHONE = 32;
+const TInt TEST_MAXLENGTH1_TELEPHONE = 33;
+const TInt TEST_MAXLENGTH2_TELEPHONE = 34;
+const TInt TEST_MAXLENGTH_WEB = 35;
+const TInt TEST_MAXLENGTH1_WEB = 36;
+const TInt TEST_MAXLENGTH2_WEB = 37;
+const TInt TEST_MAXLENGTH_DESCRIPTION = 38;
+const TInt TEST_MAXLENGTH1_DESCRIPTION = 39;
+const TInt TEST_MAXLENGTH2_DESCRIPTION = 40;
+const TInt TEST_MAXLENGTH_PID = 44;
+const TInt TEST_MAXLENGTH1_PID = 45;
+const TInt TEST_MAXLENGTH2_PID = 46;
+const TInt TEST_MAX_HA = 47;
+const TInt TEST_MAX_VA = 48;
+
+//constants for testing the Parser
+const TInt NOPROTOCOL= 1;
+const TInt HTTPS= 2;
+const TInt INVALIDPROTOCOL= 3;
+const TInt NOHOSTNAME= 4;
+const TInt INVALIDHOSTNAME= 5;
+const TInt INVALIDHOSTNAME1= 6;
+const TInt INVALIDHOSTNAME2= 7;
+const TInt DESC_BV1= 8;
+const TInt DESC_BV2= 9;
+const TInt DESC_BV3= 10;
+const TInt UNKNOWNFORMAT= 2;
+const TInt NOLANDMARK= 2;
+const TInt NULLCAT= 1;
+const TInt DELETEFILE= 1;
+const TInt KRead= 0;
+const TInt KReadWrite= 1;
+const TUint KColumnSeperator='&';
+
+
+
+
+// MACROS
+//#define ?macro ?macro_def
+#define TEST_CLASS_VERSION_MAJOR 0
+#define TEST_CLASS_VERSION_MINOR 0
+#define TEST_CLASS_VERSION_BUILD 0
+
+// Logging path
+_LIT( KCUTLandmarkURLLogPath, "\\logs\\testframework\\CUTLandmarkURL\\" );
+// Log file
+_LIT( KCUTLandmarkURLLogFile, "CUTLandmarkURL.txt" );
+_LIT( KCUTLandmarkURLLogFileWithTitle, "CUTLandmarkURL_[%S].txt" );
+
+// FUNCTION PROTOTYPES
+//?type ?function_name(?arg_list);
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+class CCUTLandmarkURL;
+
+// DATA TYPES
+//enum ?declaration
+//typedef ?declaration
+//extern ?data_type;
+
+// CLASS DECLARATION
+
+/**
+* CCUTLandmarkURL test class for STIF Test Framework TestScripter.
+* ?other_description_lines
+*
+* @lib ?library
+* @since ?Series60_version
+*/
+NONSHARABLE_CLASS(CCUTLandmarkURL) : public CScriptBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CCUTLandmarkURL* NewL( CTestModuleIf& aTestModuleIf );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CCUTLandmarkURL();
+
+ public: // New functions
+
+ /**
+ * ?member_description.
+ * @since ?Series60_version
+ * @param ?arg1 ?description
+ * @return ?description
+ */
+ //?type ?member_function( ?type ?arg1 );
+
+ public: // Functions from base classes
+
+ /**
+ * From CScriptBase Runs a script line.
+ * @since ?Series60_version
+ * @param aItem Script line containing method name and parameters
+ * @return Symbian OS error code
+ */
+ virtual TInt RunMethodL( CStifItemParser& aItem );
+
+ protected: // New functions
+
+ /**
+ * ?member_description.
+ * @since ?Series60_version
+ * @param ?arg1 ?description
+ * @return ?description
+ */
+ //?type ?member_function( ?type ?arg1 );
+
+ protected: // Functions from base classes
+
+ /**
+ * From ?base_class ?member_description
+ */
+ //?type ?member_function();
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CCUTLandmarkURL( CTestModuleIf& aTestModuleIf );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ // Prohibit copy constructor if not deriving from CBase.
+ // ?classname( const ?classname& );
+ // Prohibit assigment operator if not deriving from CBase.
+ // ?classname& operator=( const ?classname& );
+
+ /**
+ * Frees all resources allocated from test methods.
+ * @since ?Series60_version
+ */
+ void Delete();
+
+ /**
+ * Test methods are listed below.
+ */
+
+ /**
+ * Example test method.
+ * @since ?Series60_version
+ * @param aItem Script line containing parameters.
+ * @return Symbian OS error code.
+ */
+
+ TInt CreateInstanceL(CStifItemParser& aItem);
+ TInt CleanUp (CStifItemParser& aItem);
+ TInt CreateLandmarkL (CStifItemParser& aItem);
+
+ //Test methods for parser
+ TInt SetInputBufferL(CStifItemParser& aItem);
+ TInt SetInputFile(CStifItemParser& aItem);
+ TInt SetInputFileHandleL(CStifItemParser& aItem);
+ TInt ParseContent(CStifItemParser& aItem);
+ TInt NumOfParsedLandmarksL(CStifItemParser& aItem);
+ TInt LandmarkL(CStifItemParser& aItem);
+ TInt LandmarkCategoryL(CStifItemParser& aItem);
+ void MiscL(CStifItemParser& aItem);
+
+
+ //Test methods for encoder
+ TInt SetOutputFileHandle (CStifItemParser& aItem);
+ TInt SetOutputBuffer (CStifItemParser& aItem);
+ TInt AddLandmark (CStifItemParser& aItem);
+ TInt AddCategoryForLatestLandmarkL (CStifItemParser& aItem);
+ TInt FinalizeEncoding (CStifItemParser& aItem);
+ TInt VerifyEncodingL (CStifItemParser& aItem);
+
+ //Helper methods
+ void VerifyParsingL(CStifItemParser& aItem, CPosLandmark* aPosLandmark);
+ TInt ParseURL(const TDesC8 & aDelimiter, TPtr8 aBufferedURL, CStifItemParser& aItem);
+ TInt ParseValueL(TPtr8 aBufferedURL, CStifItemParser& aItem);
+ TInt CompareParamValueL(TBuf8<KMaxTagName> aTagName , TPtrC8 aValue, CStifItemParser& aItem);
+ TInt GetStringTillQuote(CStifItemParser& aItem, TName& aName);
+ TInt GetStringAfterTag(CStifItemParser& aItem, const TDesC& aTag, TName& aString);
+
+
+ /**
+ * Method used to log version of test class
+ */
+ void SendTestClassVersion();
+
+ //ADD NEW METHOD DEC HERE
+ //[TestMethods] - Do not remove
+
+ public: // Data
+ // ?one_line_short_description_of_data
+ //?data_declaration;
+
+ protected: // Data
+ // ?one_line_short_description_of_data
+ //?data_declaration;
+
+ private: // Data
+
+ CPosLandmarkParser *iPosLandmarkParser;
+ CPosLandmarkEncoder *iPosLandmarkEncoder;
+ CPosLandmark *iPosLandmark;
+ CPosLmOperation* iOperation;
+ CBufBase* iEncoderBuffer;
+ HBufC8 * iParsedURL ;
+ HBufC8 * iRemainingURL ;
+ CPosLandmarkDatabase* iDatabase;
+ RFs iFileSession;
+ RFile iFile;
+
+ // These data types stores the values from the cfg files
+ TPtrC iVerticalAccuracy;
+ TPtrC iHorizontalAccuracy;
+ TName iName;
+ TName iDescription;
+ TPtrC iLatitude;
+ TPtrC iLongitude;
+ TPtrC iAltitude;
+ TPtrC iCategory;
+ TName iMatchCategory;
+ TName iMatchCategory2;
+ TName iTS;
+ TName iPID;
+ TPtrC iYear;
+ TPtrC iMonth;
+ TPtrC iDay;
+ TPtrC iHour;
+ TPtrC iMinutes;
+ TPtrC iSeconds;
+ TPtrC iMSeconds;
+ TPtrC iSpeed;
+ TName iTelephone;
+ TName iWeb;
+ TPtrC iHeading;
+ TName iCountry;
+ TName iState;
+ TName iCity;
+ TName iStreet;
+ TName iHouseNumber;
+ TName iPostalCode;
+
+ TInt iCount;
+
+
+ // ?one_line_short_description_of_data
+ //?data_declaration;
+
+ // Reserved pointer for future extension
+ //TAny* iReserved;
+
+ public: // Friend classes
+ //?friend_class_declaration;
+ protected: // Friend classes
+ //?friend_class_declaration;
+ private: // Friend classes
+ //?friend_class_declaration;
+
+ };
+
+#endif // CUTLANDMARKURL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/inc/EPos_LandmarksErrors.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Defines landmarks panic codes
+*
+*/
+
+
+
+
+
+#ifndef LANDMARKSERRORS_H
+#define LANDMARKSERRORS_H
+
+// INCLUDES
+#include <e32base.h>
+#include <e32def.h>
+
+// CONSTANTS
+_LIT(KPosLandmarksClientPanic,"Landmarks Client");
+
+/**
+ * Landmarks panic codes
+ *
+ */
+enum TPositionLandmarksClientPanic
+ {
+ EPosInvalidPositionFieldId = 0
+ /** A client has specified a position field ID that is invalid for
+ the landmark. */,
+ EPosNoneOrMultipleLandmarkAttributeSet = 1
+ /** A client has specified none or multiple landmark attributes. */,
+ EPosSpecifiedIntervalLiesOutsideIteratedSet = 2
+ /** A client has specified an interval that lies partially outside the
+ iterated set. */,
+ EPosNaNCoordinate = 3
+ /** A client has specified a coordinate with latitude and/or longitude set
+ to NaN. */,
+ EPosInvalidLandmarkAttribute = 4
+ /** A client has specified a landmark attribute that is invalid. */,
+ EPosInvalidValueSpecifiedInResourceFile = 5
+ /** An invalid value has been detected in a resource file. */,
+ EPosInvalidPartialReadParameters = 6
+ /** Invalid partial read parameters have been detected. */,
+ EPosInvalidRequestedPositionFields = 7
+ /** Invalid requested position fields have been detected. */,
+ EPosNegativeValue = 8
+ /** A negative value has been detected. */,
+ EPosInvalidOperationMode = 9
+ /** Invalid operation mode. Caused by mixed calls to NextStep and ExecuteL
+ for an CPosLmOperation object or subsequent calls to NextStep. */,
+ EPosInvalidEnumValue = 10
+ /** Invalid enum value. */,
+ EPosLmProtocolBreak = 11
+ /** The protocol of CPosLandmarkEncoder/CPosLandmarkParser is not
+ followed. */,
+ EPosLmInvalidArgument = 12
+ /** A client has passed an invalid argument. */,
+ EPosInvalidIndex = 14
+ /** A client has specified an invalid index. */,
+ EPosInvalidItemType = 15
+ /** A client has specified an invalid item type. */,
+ EPosSearchOperationInUse = 16
+ /** A client has tried to set/unset display data during an ongoing search.
+ */
+ };
+
+// FUNCTION PROTOTYPES
+IMPORT_C GLDEF_C void Panic(const TDesC& aCategory, TInt aReason);
+
+#endif // LANDMARKSERRORS_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/init/testframework.ini Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,176 @@
+#
+# This is STIFTestFramework initialization file
+# Comment lines start with '#'-character.
+# See STIF TestFramework users guide.doc for instructions
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set following test engine settings:
+# - Set Test Reporting mode. TestReportMode's possible values are:
+# + 'Summary': Summary of the tested test cases.
+# + 'Environment': Hardware and software info.
+# + 'TestCases': Test case report.
+# + 'FullReport': Set of all above ones.
+# + Example 'TestReportMode= Summary TestCases'
+#
+# - CreateTestReport setting controls report creation mode
+# + YES, Test report will created.
+# + NO, No Test report.
+#
+# - File path indicates the base path of the test report.
+# - File name indicates the name of the test report.
+#
+# - File format indicates the type of the test report.
+# + TXT, Test report file will be txt type, for example 'TestReport.txt'.
+# + HTML, Test report will be html type, for example 'TestReport.html'.
+#
+# - File output indicates output source of the test report.
+# + FILE, Test report logging to file.
+# + RDEBUG, Test report logging to using rdebug.
+#
+# - File Creation Mode indicates test report overwriting if file exist.
+# + OVERWRITE, Overwrites if the Test report file exist.
+# + APPEND, Continue logging after the old Test report information if
+# report exist.
+
+[Engine_Defaults]
+
+TestReportMode= FullReport # Possible values are:
+ # 'Summary', 'Environment', 'TestCases' or 'FullReport'
+
+CreateTestReport= YES # Possible values: YES or NO
+
+TestReportFilePath= C:\LOGS\TestFramework\
+TestReportFileName= TestReport
+
+TestReportFormat= TXT # Possible values: TXT or HTML
+TestReportOutput= FILE # Possible values: FILE or RDEBUG
+TestReportFileCreationMode= OVERWRITE # Possible values: OVERWRITE or APPEND
+
+[End_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Module configurations start
+# Modules are added between module tags
+# tags. Module name is specified after ModuleName= tag, like
+# ModuleName= XXXXXXXXX
+# Modules might have initialisation file, specified as
+# IniFile= YYYYYY
+# Modules might have several configuration files, like
+# TestCaseFile= NormalCases.txt
+# TestCaseFile= SmokeCases.txt
+# TestCaseFile= ManualCases.txt
+
+# (TestCaseFile is synonym for old term ConfigFile)
+
+# Following case specifies demo module settings. Demo module
+# does not read any settings from file, so tags
+# IniFile and TestCaseFile are not used.
+# In the simplest case it is enough to specify only the
+# name of the test module when adding new test module
+
+[New_Module]
+ModuleName= testscripter
+TestCaseFile= c:\testframework\CUTLandmarkURL.cfg
+TestCaseFile= c:\testframework\CUTLandmarkURL1.cfg
+TestCaseFile= c:\testframework\CUTLandmarkURL2.cfg
+TestCaseFile= c:\testframework\CUTLmkURLParser.cfg
+TestCaseFile= c:\testframework\CUTLmkURLParser1.cfg
+[End_Module]
+
+#Load testmoduleXXX, optionally with initialization file and/or test case files
+#[New_Module]
+#ModuleName= testmodulexxx
+
+#TestModuleXXX used initialization file
+#IniFile= init.txt
+
+#TestModuleXXX used configuration file(s)
+#TestCaseFile= testcases1.cfg
+#TestCaseFile= testcases2.cfg
+#TestCaseFile= manualtestcases.cfg
+
+#[End_Module]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+
+
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+# Set STIFTestFramework logging overwrite parameters for Logger.
+# Hardware and emulator environment logging path and styles can
+# be configured from here to overwrite the Logger's implemented values.
+#
+# Settings description:
+# - Indicates option for creation log directory/directories. If log directory/directories
+# is/are not created by user they will make by software.
+# + YES, Create log directory/directories if not allready exist.
+# + NO, Log directory/directories not created. Only created one is used.
+#
+# - Overwrite emulator path setting.
+# + Example: If 'EmulatorBasePath= C:\LOGS\TestFramework\' and in code is defined
+# Logger's path 'D:\\LOGS\\Module\\' with those definition the path
+# will be 'C:\LOGS\TestFramework\LOGS\Module\'
+#
+# - Overwrite emulator's logging format.
+# + TXT, Log file(s) will be txt type(s), for example 'Module.txt'.
+# + HTML, Log file(s) will be html type(s), for example 'Module.html'.
+#
+# - Overwrited emulator logging output source.
+# + FILE, Logging to file(s).
+# + RDEBUG, Logging to using rdebug(s).
+#
+# - Overwrite hardware path setting (Same description as above in emulator path).
+# - Overwrite hardware's logging format(Same description as above in emulator format).
+# - Overwrite hardware's logging output source(Same description as above in emulator output).
+#
+# - File Creation Mode indicates file overwriting if file exist.
+# + OVERWRITE, Overwrites if file(s) exist.
+# + APPEND, Continue logging after the old logging information if file(s) exist.
+#
+# - Will thread id include to the log filename.
+# + YES, Thread id to log file(s) name, Example filename 'Module_b9.txt'.
+# + NO, No thread id to log file(s), Example filename 'Module.txt'.
+#
+# - Will time stamps include the to log file.
+# + YES, Time stamp added to each line in log file(s). Time stamp is
+# for example'12.Nov.2003 115958 LOGGING INFO'
+# + NO, No time stamp(s).
+#
+# - Will line breaks include to the log file.
+# + YES, Each logging event includes line break and next log event is in own line.
+# + NO, No line break(s).
+#
+# - Will event ranking include to the log file.
+# + YES, Event ranking number added to each line in log file(s). Ranking number
+# depends on environment's tics, for example(includes time stamp also)
+# '012 12.Nov.2003 115958 LOGGING INFO'
+# + NO, No event ranking.
+#
+
+[Logger_Defaults]
+
+#NOTE: If you want to set Logger using next setting(s) remove comment(s)'#'
+
+CreateLogDirectories= YES # Possible values: YES or NO
+
+EmulatorBasePath= C:\
+EmulatorFormat= TXT # Possible values: TXT or HTML
+EmulatorOutput= FILE # Possible values: FILE or RDEBUG
+
+HardwareBasePath= C:\
+HardwareFormat= TXT # Possible values: TXT or HTML
+HardwareOutput= FILE # Possible values: FILE or RDEBUG
+
+FileCreationMode= APPEND # Possible values: OVERWRITE or APPEND
+
+ThreadIdToLogFile= YES # Possible values: YES or NO
+WithTimeStamp= YES # Possible values: YES or NO
+WithLineBreak= YES # Possible values: YES or NO
+#WithEventRanking= YES # Possible values: YES or NO
+
+[End_Logger_Defaults]
+# -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
+
+# End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/src/CUTLandmarkURL.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,188 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains testclass implementation.
+* This file defines the test class for testing the encoder functionality.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <Stiftestinterface.h>
+#include <SettingServerClient.h>
+#include "CUTLandmarkURL.h"
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CCUTLandmarkURL
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CCUTLandmarkURL::CCUTLandmarkURL(
+ CTestModuleIf& aTestModuleIf ):
+ CScriptBase( aTestModuleIf ),
+ iCount(0),
+ iVerticalAccuracy(_L("")),
+ iHorizontalAccuracy(_L("")),
+ iName(_L("")),
+ iDescription(_L("")),
+ iLatitude(_L("")),
+ iLongitude(_L("")),
+ iAltitude(_L("")),
+ iCategory(_L("")),
+ iMatchCategory(_L("")),
+ iMatchCategory2(_L("")),
+ iTS(_L("")),
+ iPID(_L("")),
+ iYear(_L("")),
+ iMonth(_L("")),
+ iDay(_L("")),
+ iHour(_L("")),
+ iMinutes(_L("")),
+ iSeconds(_L("")),
+ iMSeconds(_L("")),
+ iSpeed(_L("")),
+ iTelephone(_L("")),
+ iWeb(_L("")),
+ iHeading(_L("")),
+ iCountry(_L("")),
+ iState(_L("")),
+ iCity(_L("")),
+ iStreet(_L("")),
+ iHouseNumber(_L("")),
+ iPostalCode(_L(""))
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CCUTLandmarkURL::ConstructL()
+ {
+ //Read logger settings to check whether test case name is to be
+ //appended to log file name.
+ RSettingServer settingServer;
+ TInt ret = settingServer.Connect();
+ if(ret != KErrNone)
+ {
+ User::Leave(ret);
+ }
+ // Struct to StifLogger settigs.
+ TLoggerSettings loggerSettings;
+ // Parse StifLogger defaults from STIF initialization file.
+ ret = settingServer.GetLoggerSettings(loggerSettings);
+ if(ret != KErrNone)
+ {
+ User::Leave(ret);
+ }
+ // Close Setting server session
+ settingServer.Close();
+
+ TFileName logFileName;
+
+ if(loggerSettings.iAddTestCaseTitle)
+ {
+ TName title;
+ TestModuleIf().GetTestCaseTitleL(title);
+ logFileName.Format(KCUTLandmarkURLLogFileWithTitle, &title);
+ }
+ else
+ {
+ logFileName.Copy(KCUTLandmarkURLLogFile);
+ }
+
+ iLog = CStifLogger::NewL( KCUTLandmarkURLLogPath,
+ logFileName,
+ CStifLogger::ETxt,
+ CStifLogger::EFile,
+ EFalse );
+
+ SendTestClassVersion();
+ //Connects the file session
+ User::LeaveIfError(iFileSession.Connect());
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CCUTLandmarkURL* CCUTLandmarkURL::NewL(
+ CTestModuleIf& aTestModuleIf )
+ {
+ CCUTLandmarkURL* self = new (ELeave) CCUTLandmarkURL( aTestModuleIf );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+
+ return self;
+
+ }
+
+// Destructor
+CCUTLandmarkURL::~CCUTLandmarkURL()
+ {
+
+ // Delete resources allocated from test methods
+ Delete();
+
+ // Delete logger
+ delete iLog;
+
+ }
+
+//-----------------------------------------------------------------------------
+// CCUTLandmarkURL::SendTestClassVersion
+// Method used to send version of test class
+//-----------------------------------------------------------------------------
+//
+void CCUTLandmarkURL::SendTestClassVersion()
+ {
+ TVersion moduleVersion;
+ moduleVersion.iMajor = TEST_CLASS_VERSION_MAJOR;
+ moduleVersion.iMinor = TEST_CLASS_VERSION_MINOR;
+ moduleVersion.iBuild = TEST_CLASS_VERSION_BUILD;
+
+ TFileName moduleName;
+ moduleName = _L("CUTLandmarkURL.dll");
+
+ TBool newVersionOfMethod = ETrue;
+ TestModuleIf().SendTestModuleVersion(moduleVersion, moduleName, newVersionOfMethod);
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// LibEntryL is a polymorphic Dll entry point.
+// Returns: CScriptBase: New CScriptBase derived object
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CScriptBase* LibEntryL(
+ CTestModuleIf& aTestModuleIf ) // Backpointer to STIF Test Framework
+ {
+
+ return ( CScriptBase* ) CCUTLandmarkURL::NewL( aTestModuleIf );
+
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkURL/src/CUTLandmarkURLBlocks.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,2051 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: This file contains testclass implementation.
+* This file containts the test blocks that tests the encoder functionality.
+*
+*/
+
+// [INCLUDE FILES] - do not remove
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <LbsPosition.h>
+#include <LbsFieldIds.h>
+#include <BAUTILS.h>
+#include <EPos_CPosLmCategoryManager.h>
+#include <e32math.h>
+#include <gulutil.h>
+
+#include "CUTLandmarkURL.h"
+#include "EPos_LandmarksErrors.h"
+
+
+
+// EXTERNAL DATA STRUCTURES
+//extern ?external_data;
+
+// EXTERNAL FUNCTION PROTOTYPES
+//extern ?external_function( ?arg_type,?arg_type );
+
+// CONSTANTS
+//const ?type ?constant_var = ?constant;
+
+// MACROS
+//#define ?macro ?macro_def
+
+// LOCAL CONSTANTS AND MACROS
+//const ?type ?constant_var = ?constant;
+//#define ?macro_name ?macro_def
+
+// MODULE DATA STRUCTURES
+//enum ?declaration
+//typedef ?declaration
+
+// LOCAL FUNCTION PROTOTYPES
+//?type ?function_name( ?arg_type, ?arg_type );
+
+// FORWARD DECLARATIONS
+//class ?FORWARD_CLASSNAME;
+
+//Tags used in cfg file
+ _LIT(KName, "NAME= ");
+ _LIT(KLandmarkDescription, "LMDESCRIPTION= ");
+ _LIT(KVerticalAccuracy, "VERT_ACC= ");
+ _LIT(KHorizontalAccuracy, "HACCURACY= ");
+ _LIT(KLatitude, "LATITUDE= ");
+ _LIT(KLongitude, "LONGITUDE= ");
+ _LIT(KCountry, "COUNTRY= ");
+ _LIT(KState, "STATE= ");
+ _LIT(KStreet, "STREET= ");
+ _LIT(KHouseNumber, "HOUSENO.= ");
+ _LIT(KPostalCode, "POSTALCODE= ");
+ _LIT(KCity, "CITY= ");
+ _LIT(KTelephone, "TELEPHONE= ");
+ _LIT(KWeb, "WEB= ");
+ _LIT(KAltitude, "ALTITUDE= ");
+ _LIT(KSpeed, "SPEED= ");
+ _LIT(KHeading, "HEADING= ");
+ _LIT(KCategory, "CATEGORY= ");
+ _LIT(K2ndCategory, "CATEGORYTWO= ");
+ _LIT(KPID, "PID= ");
+ _LIT(KTS, "TS= ");
+
+ _LIT(KOutputFilePath, "c:\\testframework\\EncodedLandmarks.txt");
+ _LIT(KInputFile, "c:\\testframework\\URLParser.txt");
+ _LIT(KInputFileHandle, "c:\\testframework\\InputFilehandle.txt");
+
+ //255
+ _LIT(KMAXSTRING, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890");
+ //254
+ _LIT(KMAXSTRING1, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789");
+ //256
+ _LIT(KMAXSTRING2, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901");
+
+ //4095
+ _LIT(KMAXDESSTRING, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890");
+ //4094
+ _LIT(KMAXDESSTRING1, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789");
+ //4096
+ _LIT(KMAXDESSTRING2, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901");
+
+ //124
+ _LIT(KMAXCAT, "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234");
+ //123
+ _LIT(KMAXCAT1, "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123");
+ //125
+ _LIT(KMAXCAT2, "123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345");
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CCUTLandmarkURL::Delete()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::RunMethodL(
+ CStifItemParser& aItem )
+ {
+
+ static TStifFunctionInfo const KFunctions[] =
+ {
+ // Copy this line for every implemented function.
+ // First string is the function name used in TestScripter script file.
+ // Second is the actual implementation member function.
+ ENTRY( "CreateInstanceL", CCUTLandmarkURL::CreateInstanceL ),
+ ENTRY( "CleanUp", CCUTLandmarkURL::CleanUp ),
+ ENTRY( "CreateLandmarkL", CCUTLandmarkURL::CreateLandmarkL ),
+
+ //Test Methods for parsing
+ ENTRY( "SetInputBuffer", CCUTLandmarkURL::SetInputBufferL ),
+ ENTRY( "SetInputFile", CCUTLandmarkURL::SetInputFile ),
+ ENTRY( "SetInputFileHandle", CCUTLandmarkURL::SetInputFileHandleL ),
+ ENTRY( "ParseContent", CCUTLandmarkURL::ParseContent ),
+ ENTRY( "NumOfParsedLandmarks", CCUTLandmarkURL::NumOfParsedLandmarksL ),
+ ENTRY( "Landmark", CCUTLandmarkURL::LandmarkL ),
+ ENTRY( "LandmarkCategory", CCUTLandmarkURL::LandmarkCategoryL ),
+ ENTRY( "TestMisc", CCUTLandmarkURL::MiscL ),
+
+
+ //Test methods for encoder
+ ENTRY( "SetOutputFileHandle", CCUTLandmarkURL::SetOutputFileHandle ),
+ ENTRY( "SetOutputBuffer", CCUTLandmarkURL::SetOutputBuffer ),
+ ENTRY( "AddLandmark", CCUTLandmarkURL::AddLandmark ),
+ ENTRY( "AddCategoryForLatestLandmark", CCUTLandmarkURL::AddCategoryForLatestLandmarkL),
+ ENTRY( "FinalizeEncoding", CCUTLandmarkURL::FinalizeEncoding ),
+ ENTRY( "VerifyEncoding", CCUTLandmarkURL::VerifyEncodingL ),
+
+
+
+
+ //ADD NEW ENTRY HERE
+ // [test cases entries] - Do not remove
+
+ };
+
+ const TInt count = sizeof( KFunctions ) /
+ sizeof( TStifFunctionInfo );
+
+ return RunInternalL( KFunctions, count, aItem );
+
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CreateInstanceL
+// This function creates instances for URL parser and encoder
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::CreateInstanceL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt Case;
+ RArray<CPosLandmarkEncoder> ArrayOfEncoders;
+ RArray<CPosLandmarkParser> ArrayOfParsers;
+
+ aItem.GetNextInt(Case);
+ _LIT8( KUrlMIMEType, "maps.ovi.com" );
+
+ switch(Case)
+ {
+ case CREATE_PARSER:
+ iLog->Log(_L("Creating Instance of parser....."));
+ TRAP(result, iPosLandmarkParser = CPosLandmarkParser::NewL(KUrlMIMEType));
+ if(result != KErrNone || !(iPosLandmarkParser))
+ {
+ iLog->Log(_L("FAILED: Creating instance for Parser fails, error = %d"),result);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: Creating instance for Parser passes"));
+
+ break;
+
+ case CREATE_ENCODER:
+ iLog->Log(_L("Creating Instance of encoder....."));
+ TRAP(result, iPosLandmarkEncoder = CPosLandmarkEncoder::NewL(KUrlMIMEType));
+ if(result != KErrNone || !(iPosLandmarkEncoder))
+ {
+ iLog->Log(_L("FAILED: Creating instance for encoder fails, error = %d"),result);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: Creating instance for Encoder passes "));
+ break;
+
+
+ case MULTIPLE_ENCODER:
+ TRAPD(err, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err1, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err2, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err3, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err4, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err5, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err6, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err7, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err8, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ TRAPD(err9, ArrayOfEncoders.AppendL(*CPosLandmarkEncoder::NewL(KUrlMIMEType)));
+ if((ArrayOfEncoders.Count() != 10)||(err||err1||err2||err3||err4||err5||err6||err7||err8||err9 != KErrNone))
+ result = KErrNone;
+ break;
+
+ case MULTIPLE_PARSER:
+ TRAPD(parseerr, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr1, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr2, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr3, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr4, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr5, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr6, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr7, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr8, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ TRAPD(parseerr9, ArrayOfParsers.AppendL(*CPosLandmarkParser::NewL(KUrlMIMEType)));
+ if((ArrayOfParsers.Count() != 10)||(parseerr||parseerr1||parseerr2||parseerr3||parseerr4||parseerr5||parseerr6||parseerr7||parseerr8||parseerr9 != KErrNone))
+ result = KErrNone;
+ break;
+
+
+ default:
+ break;
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CleanUp
+// Releases memory and other resources
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::CleanUp( CStifItemParser& /*aItem*/ )
+ {
+ ReleaseLandmarkResources();
+ if(iPosLandmark)
+ {
+ delete iPosLandmark;
+ iPosLandmark = NULL;
+ }
+
+ if(iEncoderBuffer)
+ {
+ delete iEncoderBuffer;
+ iEncoderBuffer = NULL;
+ }
+
+ if(iDatabase)
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+ if(iOperation)
+ {
+ delete iOperation;
+ iOperation = NULL;
+ }
+
+ if(iPosLandmarkParser)
+ {
+ delete iPosLandmarkParser;
+ iPosLandmarkParser = NULL;
+ }
+
+ if(iPosLandmarkEncoder)
+ {
+ delete iPosLandmarkEncoder;
+ iPosLandmarkEncoder = NULL;
+ }
+
+ iFile.Close();
+ iFileSession.Close();
+ TestModuleIf().SetBehavior( CTestModuleIf::ETestLeaksHandles );
+ User::After( 20000 );
+ iLog->Log(_L("PASSED: Cleanup Succesful"));
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CreateLandmark
+// This functions creates landmarks
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::CreateLandmarkL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt Case = 0;
+ TRAP(result, iPosLandmark = CPosLandmark::NewL());
+ User::LeaveIfError(result);
+ aItem.GetNextInt(Case);
+
+ //Reading location values from the cfg files
+ GetStringAfterTag(aItem, KName, iName);
+ GetStringAfterTag(aItem, KLandmarkDescription, iDescription);
+ aItem.GetNextString(KVerticalAccuracy,iVerticalAccuracy);
+ aItem.GetNextString(KHorizontalAccuracy,iHorizontalAccuracy);
+ aItem.GetNextString(KLatitude,iLatitude);
+ aItem.GetNextString(KLongitude,iLongitude);
+ aItem.GetNextString(KAltitude,iAltitude);
+
+
+ //Reading postion fields from cfg fields
+ aItem.GetNextString(KSpeed,iSpeed);
+ aItem.GetNextString(KHeading,iHeading);
+ GetStringAfterTag(aItem, KCountry,iCountry);
+ GetStringAfterTag(aItem, KState,iState);
+ GetStringAfterTag(aItem, KCity,iCity);
+ GetStringAfterTag(aItem, KStreet ,iStreet);
+ GetStringAfterTag(aItem, KPostalCode,iPostalCode);
+ GetStringAfterTag(aItem, KHouseNumber,iHouseNumber);
+ GetStringAfterTag(aItem, KTelephone,iTelephone);
+ aItem.GetNextString(KCategory,iCategory);
+ GetStringAfterTag(aItem, KWeb,iWeb);
+ GetStringAfterTag(aItem, KPID,iPID);
+ GetStringAfterTag(aItem, KTS,iTS);
+
+
+ //Converting string to TReal
+ TReal32 VA = 0;
+ TLex16 VerticalAcc(iVerticalAccuracy);
+ VerticalAcc.Val(VA);
+
+ TReal32 HA= 0;
+ TLex16 HorizontalAcc(iHorizontalAccuracy);
+ HorizontalAcc.Val(HA);
+
+ TReal64 RLat = 0;
+ TLex16 Lat(iLatitude);
+ Lat.Val(RLat);
+
+ TReal64 RLong = 0;
+ TLex16 Long(iLongitude);
+ Long.Val(RLong);
+
+ TReal64 RAlt = 0;
+ TLex16 Alt(iAltitude);
+ Alt.Val(RAlt);
+
+ //This part of the code sets the position params to the landmark
+ TLocality Locality;
+ if (!iAltitude.Compare(_L("")))
+ Locality.SetCoordinate(RLat, RLong);
+ else
+ Locality.SetCoordinate(RLat,RLong, RAlt);
+
+ if (iHorizontalAccuracy.Compare(_L("")))
+ Locality.SetHorizontalAccuracy(HA);
+
+ if (iVerticalAccuracy.Compare(_L("")))
+ Locality.SetVerticalAccuracy(VA);
+
+ TUint Cat;
+ TLex16 Categ(iCategory);
+ Categ.Val(Cat, EDecimal);
+
+ //Sets the time stamp to the landmark
+ TTime TS;
+ TS.Set(iTS);
+
+ if (iTS.Compare(_L("")))
+ {
+ TRAP(result ,iPosLandmark->SetTimeStampL(TS));
+ User::LeaveIfError(result);
+ }
+
+ switch(Case)
+ {
+ //This case tests the normal condition for all the landmark param fields
+ default:
+ //fall through
+ case 0:
+
+ if (iDescription.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetLandmarkDescriptionL(iDescription));
+ User::LeaveIfError(result);
+ }
+ if (iName.Compare(_L("")))
+ {
+ TRAP(result ,iPosLandmark->SetLandmarkNameL(iName));
+ User::LeaveIfError(result);
+ }
+
+ //Setting positions fields
+ if (iSpeed.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldHorizontalSpeed, iSpeed));
+ User::LeaveIfError(result);
+ }
+ if (iHeading.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldHeading, iHeading));
+ User::LeaveIfError(result);
+ }
+ if (iCountry.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCountry, iCountry));
+ User::LeaveIfError(result);
+ }
+ if (iState.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldState, iState));
+ User::LeaveIfError(result);
+ }
+ if (iCity.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCity, iCity));
+ User::LeaveIfError(result);
+ }
+ if (iStreet.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreet, iStreet));
+ User::LeaveIfError(result);
+ }
+ if (iPostalCode.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldPostalCode, iPostalCode));
+ User::LeaveIfError(result);
+ }
+ if (iHouseNumber.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreetExtension, iHouseNumber));
+ User::LeaveIfError(result);
+ }
+ if (iTelephone.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, iTelephone));
+ User::LeaveIfError(result);
+ }
+ if (iWeb.Compare(_L("")))
+ {
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, iWeb));
+ User::LeaveIfError(result);
+ }
+ if (iPID.Compare(_L("")))
+ {
+ TRAP(result ,iPosLandmark->SetPlaceIdL(iPID));
+ User::LeaveIfError(result);
+ }
+ break;
+
+ //The following cases sets the location params to test the boundry and error cases
+ case TEST_NULL_NAME:
+ TRAP(result ,iPosLandmark->SetLandmarkNameL(iName));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_STREET:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreet, iStreet));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_HNO:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreetExtension, iHouseNumber));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_POSTALCODE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldPostalCode, iPostalCode));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_CITY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCity, iCity));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_STATE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldState, iState));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_COUNTRY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCountry, iCountry));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_TELEPHONE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, iTelephone));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_WEB:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, iWeb));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_DESCRIPTION:
+ TRAP(result, iPosLandmark->SetLandmarkDescriptionL(iDescription));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_SPEED:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldHorizontalSpeed, iSpeed));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_HEADING:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldHeading, iHeading));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_NULL_PID:
+ TRAP(result ,iPosLandmark->SetPlaceIdL(iPID));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH_NAME:
+ TRAP(result ,iPosLandmark->SetLandmarkNameL(KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_NAME:
+ TRAP(result ,iPosLandmark->SetLandmarkNameL(KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_NAME:
+ TRAP(result ,iPosLandmark->SetLandmarkNameL(KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_STREET:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreet, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_STREET:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreet, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_STREET:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreet, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_HNO:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreetExtension, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_HNO:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreetExtension, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_HNO:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldStreetExtension, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_POSTALCODE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldPostalCode, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_POSTALCODE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldPostalCode, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_POSTALCODE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldPostalCode, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_CITY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCity, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_CITY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCity, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_CITY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCity, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_STATE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldState, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_STATE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldState, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_STATE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldState, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_COUNTRY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCountry, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_COUNTRY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCountry, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_COUNTRY:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldCountry, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_TELEPHONE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_TELEPHONE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_TELEPHONE:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldBuildingTelephone, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_WEB:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_WEB:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_WEB:
+ TRAP(result, iPosLandmark->SetPositionFieldL(EPositionFieldMediaLinksStart, KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_DESCRIPTION:
+ TRAP(result, iPosLandmark->SetLandmarkDescriptionL(KMAXDESSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_DESCRIPTION:
+ TRAP(result, iPosLandmark->SetLandmarkDescriptionL(KMAXDESSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_DESCRIPTION:
+ TRAP(result, iPosLandmark->SetLandmarkDescriptionL(KMAXDESSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAXLENGTH_PID:
+ TRAP(result ,iPosLandmark->SetPlaceIdL(KMAXSTRING));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH1_PID:
+ TRAP(result ,iPosLandmark->SetPlaceIdL(KMAXSTRING1));
+ User::LeaveIfError(result);
+ break;
+
+ case TEST_MAXLENGTH2_PID:
+ TRAP(result ,iPosLandmark->SetPlaceIdL(KMAXSTRING2));
+ if(result != KErrArgument)
+ User::Leave(result);
+ else
+ result = KErrNone;
+ break;
+
+ case TEST_MAX_HA:
+ Locality.SetHorizontalAccuracy(KMaxTReal32);
+ break;
+
+ case TEST_MAX_VA:
+ Locality.SetVerticalAccuracy(KMaxTReal32-1);
+ break;
+ }
+
+ //Adding Global Category
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ if (iCategory.Compare(_L("")))
+ {
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ TUint16 id = categoryManager->GetGlobalCategoryL(Cat);
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(id);
+ TRAP(result, iPosLandmark->AddCategoryL(id));
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+ User::LeaveIfError(result);
+ }
+
+ TRAP(result, iPosLandmark->SetPositionL(Locality));
+ if(result!= KErrNone)
+ {
+ result = KErrGeneral;
+ iLog->Log(_L("FAILED: Creating Landmark fails!!"));
+ }
+ else
+ iLog->Log(_L("PASSED: Creating Landmark Success!!"));
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::SetOutputFileHandle
+// This function sets the output file to which the encoded URLs will be written
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::SetOutputFileHandle( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+ aItem.GetNextInt(result);
+
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ if ( BaflUtils::FileExists(iFileSession, KOutputFilePath))
+ {
+ BaflUtils :: DeleteFile( iFileSession, KOutputFilePath );
+ }
+ TRAP(result,iPosLandmarkEncoder->SetOutputFileL(KOutputFilePath));
+ if(result != KErrNone)
+ {
+ iLog->Log(_L("FAILED: Setting output file fails with error %d"), result);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: Setting output file passes"));
+ break;
+
+ case ERROR_VERIFICATION_OPFILE:
+ if ( BaflUtils::FileExists(iFileSession, KOutputFilePath))
+ {
+ BaflUtils ::DeleteFile( iFileSession, KOutputFilePath );
+ }
+ TRAP(result,iPosLandmarkEncoder->SetOutputFileL(KOutputFilePath));
+ TRAPD(err,iPosLandmarkEncoder->SetOutputFileL(KOutputFilePath));
+
+ if(err != KErrAlreadyExists)
+ {
+ iLog->Log(_L("FAILED: Error verification for setting output file fails with %d"), err);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: Error Verification for setting output file passed!!"));
+
+ break;
+ }
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::SetOutputFileHandle
+// This function sets the output buffer to which the encoded URLs will be written
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::SetOutputBuffer( CStifItemParser& /*aItem*/ )
+ {
+ TInt result = KErrNone;
+
+ TRAP(result, iEncoderBuffer = iPosLandmarkEncoder->SetUseOutputBufferL());
+ if(result != KErrNone)
+ iLog->Log(_L("FAILED: Setting Output buffer fails with error %d"), result);
+
+ else
+ iLog->Log(_L("PASSED: Setting Output buffer passed"));
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::AddLandmark
+// This function adds the landmark to be encoded
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::AddLandmark( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+ aItem.GetNextInt(caseno);
+
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ TRAP(result, iPosLandmarkEncoder->AddLandmarkL(* iPosLandmark));
+ if(result != KErrNone)
+ iLog->Log(_L("FAILED: Adding Landmark for encoding fails with error %d"), result);
+
+ else
+ iLog->Log(_L("PASSED: Adding Landmark for encoding passed"));
+ break;
+
+ case PANIC_CODE_VERIIFCATION:
+ TestModuleIf().SetExitReason( CTestModuleIf::EPanic, EPosLmProtocolBreak );
+ TRAP(result, iPosLandmarkEncoder->AddLandmarkL(* iPosLandmark));
+ break;
+ }
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::AddCategoryForLatestLandmark
+// This function adds category to the latest landmark
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::AddCategoryForLatestLandmarkL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt Category;
+ TInt caseno = 0;
+
+ aItem.GetNextInt(Category);
+ aItem.GetNextInt(caseno);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ TUint16 id = categoryManager->GetGlobalCategoryL(Category);
+ CPosLandmarkCategory* landmarkCategory = categoryManager->ReadCategoryLC(id);
+
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ TRAP(result, iPosLandmarkEncoder->AddCategoryForLatestLandmarkL(* landmarkCategory));
+ if(result != KErrNone)
+ iLog->Log(_L("FAILED: Adding Category for latest landmark fails with error %d"), result);
+
+ else
+ iLog->Log(_L("PASSED: Adding Category for latest landmark passed"));
+ break;
+
+ case PANIC_CODE_VERIIFCATION:
+ TestModuleIf().SetExitReason( CTestModuleIf::EPanic, EPosLmProtocolBreak );
+ TRAP(result, iPosLandmarkEncoder->AddCategoryForLatestLandmarkL(* landmarkCategory));
+ break;
+ }
+ CleanupStack::PopAndDestroy(landmarkCategory);
+ CleanupStack::PopAndDestroy(categoryManager);
+ return result;
+ }
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::FinalizeEncoding
+// This function finalizes the encoding
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::FinalizeEncoding( CStifItemParser& /*aItem*/ )
+ {
+ TInt result = KErrNone;
+ TRAP(result, iOperation = iPosLandmarkEncoder->FinalizeEncodingL());
+ TRAPD(result1, iOperation->ExecuteL());
+ if(result != KErrNone||result1 != KErrNone)
+ iLog->Log(_L("FAILED: Finalize Encoding fails with error %d"), result);
+
+ else
+ iLog->Log(_L("PASSED: Encoding Completed Successfully"));
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::SetInputBuffer
+// This function sets the input buffer containing the URL to be parsed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::SetInputBufferL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+ TPtrC inputBuffer = _L("");
+ aItem.GetNextInt(caseno);
+ aItem.GetNextString(inputBuffer);
+
+ HBufC *buffer = HBufC::NewLC(inputBuffer.Size());
+ *buffer = inputBuffer;
+
+ HBufC8 *urlBuffer = HBufC8::NewL((inputBuffer.Size() + 25));
+
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ urlBuffer->Des().Copy(_L8("http://www.maps.ovi.com/?"));
+ break;
+
+ case NOPROTOCOL:
+ urlBuffer->Des().Copy(_L8("maps.ovi.com/?"));
+ break;
+
+ case HTTPS:
+ urlBuffer->Des().Copy(_L8("https://maps.ovi.com/?"));
+ break;
+
+ case INVALIDPROTOCOL:
+ urlBuffer->Des().Copy(_L8("ftp://maps.ovi.com/?"));
+ break;
+
+ case NOHOSTNAME:
+ urlBuffer->Des().Copy(_L8("/?"));
+ break;
+
+ case INVALIDHOSTNAME:
+ urlBuffer->Des().Copy(_L8("http://www.maps.google.com/?"));
+ break;
+
+ case INVALIDHOSTNAME1:
+ urlBuffer->Des().Copy(_L8("http://www.maps.ovi.com?/"));
+ break;
+
+ case INVALIDHOSTNAME2:
+ urlBuffer->Des().Copy(_L8("http://www.maps.ovi.com/"));
+ break;
+ }
+
+ urlBuffer->Des().Append(*buffer);
+ iPosLandmarkParser->SetInputBuffer(* urlBuffer);
+
+ CleanupStack::PopAndDestroy(buffer);
+ return result;
+ }
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::SetInputFile
+// This function sets the input file containing the URL to be parsed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::SetInputFile( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+ aItem.GetNextInt(caseno);
+
+ if(BaflUtils::FileExists(iFileSession, KInputFile))
+ {
+ TRAP(result,iPosLandmarkParser->SetInputFileL(KInputFile));
+ if(result != KErrNone)
+ iLog->Log(_L("FAILED: Setting Input File Fails with error, %d"), result);
+
+ else
+ iLog->Log(_L("PASSED: Setting Input File passes"));
+ }
+ else
+ result = KErrNotFound;
+
+ if(caseno == DELETEFILE)
+ {
+ result = BaflUtils::DeleteFile(iFileSession, KInputFile);
+ if (result != KErrInUse)
+ iLog->Log(_L("FAILED: Input File Deleted after Setting"));
+ else
+ {
+ iLog->Log(_L("PASSED: Input File cannot be deleted after Setting"));
+ result = KErrNone;
+ }
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::SetInputFileHandle
+// This function sets the handle of file containing the URL to be parsed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::SetInputFileHandleL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ _LIT(KTestMode, "TESTMODE= " );
+ if(BaflUtils::FileExists(iFileSession, KInputFileHandle))
+ {
+ BaflUtils::DeleteFile(iFileSession, KInputFileHandle);
+ }
+ TInt caseno = 0;
+ aItem.GetNextInt(caseno);
+
+ TPtrC inputURL;
+ aItem.GetNextString(inputURL);
+
+ TInt testmode = 0;
+ aItem.GetInt(KTestMode, testmode);
+
+
+ HBufC *url = HBufC::NewLC(inputURL.Size());
+ *url = inputURL;
+
+ HBufC8 *urlfile = HBufC8::NewLC(inputURL.Size());
+ urlfile->Des().Copy(*url);
+
+ User::LeaveIfError(iFile.Create(iFileSession,KInputFileHandle, EFileWrite));
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.ovi.com/?")));
+ break;
+
+ case NOPROTOCOL:
+ User::LeaveIfError(iFile.Write(0, _L8("maps.ovi.com/?")));
+ break;
+
+ case HTTPS:
+ User::LeaveIfError(iFile.Write(0, _L8("https://maps.ovi.com/?")));
+ break;
+
+ case INVALIDPROTOCOL:
+ User::LeaveIfError(iFile.Write(0, _L8("ftp://maps.ovi.com/?")));
+ break;
+
+ case NOHOSTNAME:
+ User::LeaveIfError(iFile.Write(0, _L8("/?")));
+ break;
+
+ case INVALIDHOSTNAME:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.google.com/?")));
+ break;
+
+ case INVALIDHOSTNAME1:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.ovi.com?/")));
+ break;
+
+ case INVALIDHOSTNAME2:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.ovi.com/")));
+ break;
+
+ case DESC_BV1:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.ovi.com/?lo=-179.99999&la=-89.99999&d=123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678906789012345678901234567890123456789012345678901234567890")));
+ break;
+
+ case DESC_BV2:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.ovi.com/?lo=-179.99999&la=-89.99999&d=12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890678901234567890123456789012345678901234567890123456789")));
+ break;
+
+ case DESC_BV3:
+ User::LeaveIfError(iFile.Write(0, _L8("http://www.maps.ovi.com/?lo=-179.99999&la=-89.99999&d=1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789067890123456789012345678901234567890123456789012345678901")));
+ break;
+
+ }
+
+ User::LeaveIfError(iFile.Write(25, *urlfile));
+
+ CleanupStack::PopAndDestroy(urlfile);
+ CleanupStack::PopAndDestroy(url);
+
+ //Closing the file and opening in ReadMode
+ TInt expectedResult = KErrNone;
+ if(testmode == KRead)
+ {
+ iFile.Close();
+ User::LeaveIfError(iFile.Open(iFileSession, KInputFileHandle, EFileRead));
+ expectedResult = KErrNone;
+ }
+ if(testmode == KReadWrite)
+ expectedResult = KErrAccessDenied;
+
+
+ TRAP(result,iPosLandmarkParser->SetInputFileHandleL(iFile));
+ {
+ if(result != expectedResult)
+ {
+ iLog->Log(_L("FAILED: Setting Input File Handle Fails with error, %d"), result);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: Setting Input File Handle passes"));
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::ParseContent
+// This function calls the parser method to parse the URL set either in buffer or file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::ParseContent( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+ aItem.GetNextInt(caseno);
+ TReal32 progress;
+ TRequestStatus status;
+
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ TRAP(result, iOperation = iPosLandmarkParser->ParseContentL(EFalse));
+ TRAPD(error, iOperation->NextStep(status, progress));
+ User::WaitForRequest(status);
+ if(result != KErrNone || error != KErrNone && status != KPosLmOperationNotComplete)
+ {
+ iLog->Log(_L("FAILED: ParseContent Fails with Error: %d and %d"), result, error);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: ParseContent passes"));
+ break;
+
+ case UNKNOWNFORMAT:
+ TRAP(result, iOperation = iPosLandmarkParser->ParseContentL(EFalse));
+ TRAP(result, iOperation->ExecuteL());
+ if(result != KErrPosLmUnknownFormat && status == KErrNone)
+ {
+ iLog->Log(_L("FAILED:Parse Content fails for unknown format with error, %d"), result);
+ result = KErrGeneral;
+ }
+ else
+ {
+ iLog->Log(_L("PASSED: Parse Content passes for unknown format"));
+ result = KErrNone;
+ }
+ break;
+
+ case PANIC_CODE_VERIIFCATION:
+ TestModuleIf().SetExitReason( CTestModuleIf::EPanic, EPosLmProtocolBreak );
+ TRAP(result, iPosLandmarkParser->ParseContentL(EFalse));
+ break;
+ }
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::NumOfParsedLandmarks
+// This function gives the number of parsed landmarks
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::NumOfParsedLandmarksL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt value = 0;
+ User::LeaveIfError(aItem.GetNextInt(value));
+
+ if(iPosLandmarkParser->NumOfParsedLandmarks() != value)
+ {
+ iLog->Log(_L("FAILED: Number of parsed Landmark does not matches"));
+ result = KErrGeneral;
+ }
+
+ else
+ iLog->Log(_L("PASSED: NumOfParsedLandmarks returns the correct value"));
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::Landmark
+// This function returns the landmark that is parsed from the URL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::LandmarkL( CStifItemParser& aItem )
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+
+ aItem.GetNextInt(caseno);
+
+ CPosLandmark* landmark = NULL;
+
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ landmark = iPosLandmarkParser->LandmarkLC();
+ TRAP(result, VerifyParsingL(aItem, landmark));
+ if(result != KErrNone)
+ {
+ iLog->Log(_L("FAILED: Verification of Parsing Failed with error %d"), result);
+ result = KErrGeneral;
+ }
+ else
+ iLog->Log(_L("PASSED: Verification of parsing passed"));
+
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+ iPosLandmark = CPosLandmark::NewL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ break;
+
+ case NOLANDMARK:
+ TRAP(result, landmark = iPosLandmarkParser->LandmarkLC(); CleanupStack::PopAndDestroy(landmark));
+ if(result != KErrNotFound)
+ {
+ iLog->Log(_L("FAILED:LandmarkLC fails for no landmark parsed, %d"), result);
+ result = KErrGeneral;
+ }
+ else
+ {
+ iLog->Log(_L("PASSED: LandmarkLC passes no landmark parsed"));
+ result = KErrNone;
+ }
+ break;
+
+ case PANIC_CODE_VERIIFCATION:
+ TestModuleIf().SetExitReason( CTestModuleIf::EPanic, EPosInvalidIndex );
+ TRAP(result, iPosLandmarkParser->LandmarkLC(4); CleanupStack::PopAndDestroy(landmark));
+ break;
+ }
+
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::LandmarkCategory
+// This function returns the category of the landmark that was most recently parsed
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::LandmarkCategoryL( CStifItemParser& aItem )
+ {
+ TInt result = KErrGeneral;
+ TInt caseno = 0;
+
+ aItem.GetNextInt(caseno);
+
+ GetStringAfterTag(aItem, KCategory,iMatchCategory);
+ GetStringAfterTag(aItem, K2ndCategory,iMatchCategory2);
+
+ RArray<TPosLmItemId> array;
+ CPosLandmark* landmark = NULL;
+ landmark = iPosLandmarkParser->LandmarkLC();
+ TRAP(result, landmark->GetCategoriesL(array));
+ switch(caseno)
+ {
+ default:
+ //fall through
+ case 0:
+ for (TInt i=0;i<array.Count();i++)
+ {
+ TBuf<150> buf;
+ CPosLandmarkCategory* category = iPosLandmarkParser->LandmarkCategoryLC(array[i]);
+
+ if (category->GlobalCategory()) buf.Append(_L("Global category: "));
+ else buf.Append(_L("Local category: "));
+ TPtrC catName;
+ User::LeaveIfError(category->GetCategoryName(catName));
+ result = (catName.Compare(iMatchCategory));
+ if (result == KErrNone)
+ goto CONTINUE;
+ result = (catName.Compare(iMatchCategory2));
+ if (result == KErrNone)
+ goto CONTINUE;
+ result = (catName.Compare(KMAXCAT));
+ if (result == KErrNone)
+ goto CONTINUE;
+ result = (catName.Compare(KMAXCAT1));
+ if (result == KErrNone)
+ goto CONTINUE;
+ result = (catName.Compare(KMAXCAT2));
+ if (result == KErrNone)
+ goto CONTINUE;
+ CONTINUE:
+ {
+ buf.Append(catName);
+ iLog->Log(buf);
+ CleanupStack::PopAndDestroy(category);
+ if (result != KErrNone)
+ break;
+ }
+ }
+ break;
+
+ case NULLCAT:
+ if(array.Count()== 0)
+ result = KErrNone;
+
+ }
+ if(result == KErrNone)
+ iLog->Log(_L("PASSED: LandmarkLC Passed!!"));
+ else
+ iLog->Log(_L("FAILED: LandmarkLC fails!!"));
+ CleanupStack::PopAndDestroy(landmark);
+ return result;
+ }
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::Misc
+// This method verifies the encoded url as follows:
+// 1. Complies with the URL grammer
+// 2. Compares the parameters are same as they were set
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUTLandmarkURL::MiscL( CStifItemParser& /*aItem*/)
+ {
+ TInt result = KErrNone;
+ TPosLmCollectionDataId collectionDataId;
+
+ //Testing CPosLandmarkParser::CollectionData()
+ if( iPosLandmarkParser->CollectionData(EPosLmCollDataNone)!= KNullDesC)
+ {
+ iLog->Log(_L("FAILED: CollectionData fails"));
+ User::Leave(KErrGeneral);
+ }
+ else
+ iLog->Log(_L("PASSED: Collection Data passed"));
+
+ //Testing CPosLandmarkParser::FirstCollectionDataId()
+ collectionDataId= iPosLandmarkParser->FirstCollectionDataId();
+ if(collectionDataId != EPosLmCollDataNone)
+ {
+ iLog->Log(_L("FAILED: FirstCollectionDataId fails"));
+ User::Leave(KErrGeneral);
+ }
+ else
+ iLog->Log(_L("PASSED: FirstCollectionDataId Data passed"));
+
+ //Testing CPosLandmarkParser::NextCollectionDataId()
+ collectionDataId = iPosLandmarkParser->NextCollectionDataId(EPosLmCollDataNone);
+ if(collectionDataId != EPosLmCollDataNone)
+ {
+ iLog->Log(_L("FAILED: NextCollectionDataId fails"));
+ User::Leave(KErrGeneral);
+ }
+ else
+ iLog->Log(_L("PASSED: NextCollectionDataId Data passed"));
+ TBuf<16> collectionData;
+ TRAP(result,iPosLandmarkEncoder->AddCollectionDataL(EPosLmCollDataNone,collectionData));
+ User::Leave(result);
+ }
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::VerifyEncoding
+// This method verifies the encoded url as follows:
+// 1. Complies with the URL grammer
+// 2. Compares the parameters are same as they were set
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::VerifyEncodingL( CStifItemParser& aItem)
+ {
+ TInt result = KErrNone;
+ TInt caseno = 0;
+ TInt NumberofParams = 0;
+ aItem.GetNextInt(caseno);
+ aItem.GetNextInt(NumberofParams);
+
+ HBufC8* aDes = NULL;
+ HBufC8 *BufferedURL = HBufC8::NewLC(KMaxTestBuf);
+ TInt size = 0;
+
+ switch(caseno)
+ {
+ default:
+ case BUFFER_OUTPUT:
+ TRAP(result, aDes = HBufC8::NewL(iEncoderBuffer->Size()));
+ CleanupStack::PushL(aDes);
+ TPtr8 ptr = aDes->Des();
+ iEncoderBuffer->Read(0, ptr, iEncoderBuffer->Size());
+ result = ParseURL(_L8("?"),ptr ,aItem);
+ iEncoderBuffer->Reset();
+ CleanupStack::PopAndDestroy(aDes);
+ break;
+
+ case FILE_OUTPUT:
+ User::LeaveIfError(iFile.Open(iFileSession, KOutputFilePath,EFileRead));
+ TPtr8 fileptr = BufferedURL->Des();
+ User::LeaveIfError(iFile.Read(fileptr));
+ result = ParseURL(_L8("?"),fileptr,aItem);
+ break;
+
+ case NO_ENCODING_FILE:
+ User::LeaveIfError(iFile.Open(iFileSession, KOutputFilePath,EFileRead));
+ User::LeaveIfError(iFile.Size(size));
+ iLog->Log(_L("Size of the file is %d"), size);
+ if (size != -1)
+ User::Leave(KErrGeneral);
+ else
+ User::Leave(KErrNone);
+ break;
+
+ case NO_ENCODING_BUFFER:
+ size = iEncoderBuffer->Size();
+ if (size != -1)
+ User::Leave(KErrGeneral);
+ else
+ User::Leave(KErrNone);
+ break;
+ }
+ iLog->Log(_L("PASSED: All the location params values matches!!"));
+ if(iCount != (NumberofParams))
+ {
+ result = KErrGeneral;
+ iLog->Log(_L("FAILED: number of location params encoded does not match with the cfg file!!"));
+ }
+ CleanupStack::PopAndDestroy(BufferedURL);
+ return result;
+ }
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::ParseURL
+// This method parses the URL obtained after encoding the landmark
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::ParseURL(const TDesC8 & aDelimiter, TPtr8 aBufferedURL, CStifItemParser& aItem)
+ {
+ TInt result = KErrNone;
+ TInt ParamStart = 0;
+ TInt column = 0;
+ TPtrC parsedURL;
+ HBufC * bufferedURL = HBufC::NewLC(KMaxTestBuf);
+ HBufC * remainingURL = HBufC::NewLC(KMaxTestBuf);
+ ParamStart = aBufferedURL.Find(aDelimiter);
+ if(ParamStart != -1)
+ {
+ remainingURL->Des().Copy(aBufferedURL.Mid((ParamStart+1),aBufferedURL.Length() -(ParamStart+1) ));
+ bufferedURL->Des().Copy(remainingURL->Des());
+ while(result != KErrNotFound)
+ {
+ result = TextUtils::ColumnText(parsedURL, column, bufferedURL, KColumnSeperator);
+ HBufC8 *parsedURL8 = HBufC8::NewLC(parsedURL.Length());
+ parsedURL8->Des().Copy(parsedURL);
+ ParseValueL(parsedURL8->Des(), aItem);
+ column++;
+ CleanupStack::PopAndDestroy(parsedURL8);
+ }
+ }
+ CleanupStack::PopAndDestroy(2);
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::ParseValue
+// This method obtains the value of the location parameters in the URL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+TInt CCUTLandmarkURL::ParseValueL(TPtr8 aBufferedURL, CStifItemParser& aItem)
+ {
+ TInt result = KErrNone;
+ TInt paramStart = 0;
+ paramStart = aBufferedURL.Find(_L8("="));
+ TBuf8<KMaxTagName> tagName;
+ HBufC8* temp = HBufC8::NewLC(KMaxTestBuf);
+ TPtr8 temp8 = temp->Des();
+ if(paramStart != -1)
+ {
+ tagName .Copy(aBufferedURL.Mid(0,paramStart )) ;
+ temp8.Copy(aBufferedURL .Mid((paramStart+1),aBufferedURL .Length() -(paramStart+1) ));
+ temp8.TrimAll();
+ TPtrC8 Value(temp8);
+ result = CompareParamValueL(tagName, Value, aItem);
+ }
+ CleanupStack::PopAndDestroy(temp);
+ return result;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CompareParamValue
+// This method compares the values of the parameters in the URL and in the cfg file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::CompareParamValueL(TBuf8<KMaxTagName> aTagName , TPtrC8 aValue, CStifItemParser& aItem)
+ {
+ TInt result = KErrGeneral;
+ TInt tagCompare = -1;
+
+ HBufC *value = HBufC::NewLC(aValue.Length());
+ value->Des().Copy(aValue);
+ aTagName.TrimAll();
+
+ //Reading location values from the cfg files
+ GetStringAfterTag(aItem, KName, iName);
+ GetStringAfterTag(aItem, KLandmarkDescription, iDescription);
+ aItem.GetNextString(KVerticalAccuracy,iVerticalAccuracy);
+ aItem.GetNextString(KHorizontalAccuracy,iHorizontalAccuracy);
+ aItem.GetNextString(KLatitude,iLatitude);
+ aItem.GetNextString(KLongitude,iLongitude);
+ aItem.GetNextString(KAltitude,iAltitude);
+
+
+ //Reading postion fields from cfg fields
+ aItem.GetNextString(KSpeed,iSpeed);
+ aItem.GetNextString(KHeading,iHeading);
+ GetStringAfterTag(aItem, KCountry,iCountry);
+ GetStringAfterTag(aItem, KState,iState);
+ GetStringAfterTag(aItem, KCity,iCity);
+ GetStringAfterTag(aItem, KStreet ,iStreet);
+ GetStringAfterTag(aItem, KPostalCode,iPostalCode);
+ GetStringAfterTag(aItem, KHouseNumber,iHouseNumber);
+ GetStringAfterTag(aItem, KTelephone,iTelephone);
+ GetStringAfterTag(aItem, KCategory,iMatchCategory);
+ GetStringAfterTag(aItem, KWeb,iWeb);
+ GetStringAfterTag(aItem, K2ndCategory,iMatchCategory2);
+ GetStringAfterTag(aItem, KPID,iPID);
+ GetStringAfterTag(aItem, KTS,iTS);
+
+
+
+ tagCompare = aTagName.Compare(_L8("la"));
+ if(tagCompare == 0)
+ result = value->Compare(iLatitude);
+
+ tagCompare = aTagName.Compare(_L8("lo"));
+ if(tagCompare == 0)
+ result = value->Compare(iLongitude);
+
+ tagCompare = aTagName.Compare(_L8("n"));
+ if(tagCompare == 0)
+ result = value->Compare(iName);
+
+ tagCompare = aTagName.Compare(_L8("s"));
+ if(tagCompare == 0)
+ result = value->Compare(iStreet);
+
+ tagCompare = aTagName.Compare(_L8("sn"));
+ if(tagCompare == 0)
+ result = value->Compare(iHouseNumber);
+
+ tagCompare = aTagName.Compare(_L8("pz"));
+ if(tagCompare == 0)
+ result = value->Compare(iPostalCode);
+
+ tagCompare = aTagName.Compare(_L8("c"));
+ if(tagCompare == 0)
+ result = value->Compare(iCity);
+
+ tagCompare = aTagName.Compare(_L8("sp"));
+ if(tagCompare == 0)
+ result = value->Compare(iState);
+
+ tagCompare = aTagName.Compare(_L8("cr"));
+ if(tagCompare == 0)
+ result = value->Compare(iCountry);
+
+ tagCompare = aTagName.Compare(_L8("t"));
+ if(tagCompare == 0)
+ result = value->Compare(iTelephone);
+
+ tagCompare = aTagName.Compare(_L8("w"));
+ if(tagCompare == 0)
+ result = value->Compare(iWeb);
+
+ tagCompare = aTagName.Compare(_L8("cat"));
+ if(tagCompare == 0)
+ result = value->Compare(iMatchCategory);
+ if (result != KErrNone)
+ result = value->Compare(iMatchCategory2);
+
+ tagCompare = aTagName.Compare(_L8("d"));
+ if(tagCompare == 0)
+ result = value->Compare(iDescription);
+
+ tagCompare = aTagName.Compare(_L8("pa"));
+ if(tagCompare == 0)
+ result = value->Compare(iHorizontalAccuracy);
+
+ tagCompare = aTagName.Compare(_L8("a"));
+ if(tagCompare == 0)
+ result = value->Compare(iAltitude);
+
+ tagCompare = aTagName.Compare(_L8("aa"));
+ if(tagCompare == 0)
+ result = value->Compare(iVerticalAccuracy);
+
+ tagCompare = aTagName.Compare(_L8("v"));
+ if(tagCompare == 0)
+ result = value->Compare(iSpeed);
+
+ tagCompare = aTagName.Compare(_L8("h"));
+ if(tagCompare == 0)
+ result = value->Compare(iHeading);
+
+ tagCompare = aTagName.Compare(_L8("pid"));
+ if(tagCompare == 0)
+ result = value->Compare(iPID);
+
+ tagCompare = aTagName.Compare(_L8("ts"));
+ if(tagCompare == 0)
+ result = value->Compare(iTS);
+
+ if (result != 0)
+ {
+ result = value->Compare(KMAXSTRING);
+ }
+ if (result != 0)
+ {
+ result = value->Compare(KMAXSTRING1);
+ }
+ if (result != 0)
+ {
+ result = value->Compare(KMAXSTRING2);
+ }
+ if (result != 0)
+ {
+ result = value->Compare(KMAXDESSTRING);
+ }
+ if (result != 0)
+ {
+ result = value->Compare(KMAXDESSTRING1);
+ }
+ if (result != 0)
+ {
+ result = value->Compare(KMAXDESSTRING2);
+ }
+
+
+ iCount++;
+ if(result != KErrNone)
+ {
+ iLog->Log(_L("FAILED: Params Values in the URL and cfg file does not match, Param: %S"),&aTagName);
+ User::Leave(KErrGeneral);
+ }
+ CleanupStack::PopAndDestroy(value);
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CompareParamValue
+// This method compares the values of the parameters in the URL and in the cfg file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CCUTLandmarkURL::GetStringTillQuote(CStifItemParser& aItem, TName& aName)
+ {
+ TPtrC temp;
+
+
+ //Assuming that a " has already been seen.
+ if(aItem.GetNextString(temp) != KErrNone)
+ {
+ return KErrArgument;
+ }
+
+ //The name should have atleast one word.
+ if(temp == _L("\""))
+ {
+ return KErrArgument;
+ }
+
+
+ //Append the first word.
+ aName.Append(temp);
+
+ if(aItem.GetNextString(temp) != KErrNone)
+ {
+ return KErrArgument;
+ }
+
+
+ while(temp!=_L("\""))
+ {
+ //Append a space at the beginning
+ aName.Append(_L(" "));
+ aName.Append(temp);
+
+ //Keep on appending the next words.
+ if(aItem.GetNextString(temp) != KErrNone)
+ {
+ return KErrArgument;
+ }
+ }
+
+ return KErrNone;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::CompareParamValue
+// This method compares the values of the parameters in the URL and in the cfg file
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+TInt CCUTLandmarkURL::GetStringAfterTag(CStifItemParser& aItem, const TDesC& aTag, TName& aString)
+ {
+ TPtrC temp;
+ aString.Delete(0,aString.Length());
+
+ if(aItem.GetString(aTag, temp) != KErrNone)
+ {
+ return KErrArgument;
+ }
+
+ //Now temp should contain a "
+ if(temp != _L("\""))
+ {
+ return KErrArgument;
+ }
+
+ //Get the Country name till a " is found.
+ if(GetStringTillQuote(aItem, aString) != KErrNone)
+ {
+ return KErrArgument;
+ }
+
+ return KErrNone;
+ }
+// -----------------------------------------------------------------------------
+// CCUTLandmarkURL::VerifyParsing
+// This method verifies the parsed url as follows:
+// 1. Compares with the URL grammer
+// 2. Compares the parameters are set properly in the landmark object
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CCUTLandmarkURL::VerifyParsingL( CStifItemParser& aItem,CPosLandmark* aPosLandmark )
+ {
+ TInt result = KErrGeneral;
+
+ //Reading location values from the cfg files
+ GetStringAfterTag(aItem, KName, iName);
+ GetStringAfterTag(aItem, KLandmarkDescription, iDescription);
+ aItem.GetNextString(KVerticalAccuracy,iVerticalAccuracy);
+ aItem.GetNextString(KHorizontalAccuracy,iHorizontalAccuracy);
+ aItem.GetNextString(KLatitude,iLatitude);
+ aItem.GetNextString(KLongitude,iLongitude);
+ aItem.GetNextString(KAltitude,iAltitude);
+
+
+ //Reading postion fields from cfg fields
+ aItem.GetNextString(KSpeed,iSpeed);
+ aItem.GetNextString(KHeading,iHeading);
+
+ GetStringAfterTag(aItem, KCountry,iCountry);
+ GetStringAfterTag(aItem, KState,iState);
+ GetStringAfterTag(aItem, KCity,iCity);
+ GetStringAfterTag(aItem, KStreet ,iStreet);
+ GetStringAfterTag(aItem, KPostalCode,iPostalCode);
+ GetStringAfterTag(aItem, KHouseNumber,iHouseNumber);
+ GetStringAfterTag(aItem, KTelephone,iTelephone);
+ GetStringAfterTag(aItem, KWeb,iWeb);
+ GetStringAfterTag(aItem, KPID,iPID);
+ GetStringAfterTag(aItem, KTS,iTS);
+
+
+
+ //Converting string to TReal
+ TRealX floatX;
+ floatX.SetNaN();
+
+ TReal32 VA = 0;
+ if(iVerticalAccuracy != _L(""))
+ {
+ TLex16 VerticalAcc(iVerticalAccuracy);
+ VerticalAcc.Val(VA);
+ }
+ else
+ VA = floatX;
+
+ TReal32 HA= 0;
+ if(iHorizontalAccuracy != _L(""))
+ {
+ TLex16 HorizontalAcc(iHorizontalAccuracy);
+ HorizontalAcc.Val(HA);
+ }
+ else
+ HA = floatX;
+
+ TReal64 RLat = 0;
+ TLex16 Lat(iLatitude);
+ Lat.Val(RLat);
+
+ TReal64 RLong = 0;
+ TLex16 Long(iLongitude);
+ Long.Val(RLong);
+
+ TReal64 RAlt = 0;
+ if(iAltitude != _L(""))
+ {
+ TLex16 Alt(iAltitude);
+ Alt.Val(RAlt);
+ }
+ else
+ RAlt = floatX;
+
+
+ TPtrC landmarkDescription;
+ aPosLandmark->GetLandmarkDescription(landmarkDescription);
+ result = landmarkDescription.Compare(iDescription);
+ if(result != KErrNone)
+ result = landmarkDescription.Compare(KMAXDESSTRING);
+ if(result != KErrNone)
+ result = landmarkDescription.Compare(KMAXDESSTRING1);
+ if(result != KErrNone)
+ result = landmarkDescription.Compare(KMAXDESSTRING2);
+
+ TPtrC name;
+ aPosLandmark->GetLandmarkName(name);
+ result = name.Compare(iName);
+ if(result != KErrNone)
+ result = name.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = name.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = name.Compare(KMAXSTRING2);
+
+ TPtrC pid;
+ aPosLandmark->GetPlaceId(pid);
+ result = pid.Compare(iPID);
+ if(result != KErrNone)
+ result = pid.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = pid.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = pid.Compare(KMAXSTRING2);
+
+ TLocality position;
+ TReal64 latitude, longitude = 0;
+ TReal32 altitude, pa, aa = 0;
+ aPosLandmark->GetPosition(position);
+ latitude = position.Latitude();
+ if(latitude != RLat)
+ User::Leave(KErrGeneral);
+ longitude = position.Longitude();
+ if(longitude != RLong)
+ User::Leave(KErrGeneral);
+ altitude = position.Altitude();
+ if(Math::IsNaN(altitude)!= Math::IsNaN(RAlt) )
+ {
+ if(altitude != RAlt)
+ User::Leave(KErrGeneral);
+ }
+
+ pa = position.HorizontalAccuracy();
+ if(Math::IsNaN(pa)!= Math::IsNaN(HA) )
+ {
+ if(pa != HA)
+ User::Leave(KErrGeneral);
+ }
+
+ aa = position.VerticalAccuracy();
+ if(Math::IsNaN(aa)!= Math::IsNaN(VA) )
+ {
+ if(aa != VA)
+ User::Leave(KErrGeneral);
+ }
+
+ TPtrC speed;
+ aPosLandmark->GetPositionField(EPositionFieldHorizontalSpeed, speed);
+ result = speed.Compare(iSpeed);
+ if(result != KErrNone)
+ result = speed.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = speed.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = speed.Compare(KMAXSTRING2);
+
+
+
+ TPtrC heading;
+ aPosLandmark->GetPositionField(EPositionFieldHeading, heading);
+ result = heading.Compare(iHeading);
+ if(result != KErrNone)
+ result = heading.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = heading.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = heading.Compare(KMAXSTRING2);
+
+ TPtrC country;
+ aPosLandmark->GetPositionField(EPositionFieldCountry, country);
+ result = country.Compare(iCountry);
+ if(result != KErrNone)
+ result = country.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = country.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = country.Compare(KMAXSTRING2);
+
+ TPtrC state;
+ aPosLandmark->GetPositionField(EPositionFieldState, state);
+ result = state.Compare(iState);
+ if(result != KErrNone)
+ result = state.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = state.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = state.Compare(KMAXSTRING2);
+
+ TPtrC city;
+ aPosLandmark->GetPositionField(EPositionFieldCity, city);
+ result = city.Compare(iCity);
+ if(result != KErrNone)
+ result = city.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = city.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = city.Compare(KMAXSTRING2);
+
+
+ TPtrC street;
+ aPosLandmark->GetPositionField(EPositionFieldStreet, street);
+ result = street.Compare(iStreet);
+ if(result != KErrNone)
+ result = street.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = street.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = street.Compare(KMAXSTRING2);
+
+ TPtrC postalCode;
+ aPosLandmark->GetPositionField(EPositionFieldPostalCode, postalCode);
+ result = postalCode.Compare(iPostalCode);
+ if(result != KErrNone)
+ result = postalCode.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = postalCode.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = postalCode.Compare(KMAXSTRING2);
+
+ TPtrC houseNumber;
+ aPosLandmark->GetPositionField(EPositionFieldStreetExtension, houseNumber);
+ result = houseNumber.Compare(iHouseNumber);
+ if(result != KErrNone)
+ result = houseNumber.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = houseNumber.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = houseNumber.Compare(KMAXSTRING2);
+
+ TPtrC telephone;
+ aPosLandmark->GetPositionField(EPositionFieldBuildingTelephone, telephone);
+ result = telephone.Compare(iTelephone);
+ if(result != KErrNone)
+ result = telephone.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = telephone.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = telephone.Compare(KMAXSTRING2);
+
+ TPtrC web;
+ aPosLandmark->GetPositionField(EPositionFieldMediaLinksStart, web);
+ result = web.Compare(iWeb);
+ if(result != KErrNone)
+ result = web.Compare(KMAXSTRING);
+ if(result != KErrNone)
+ result = web.Compare(KMAXSTRING1);
+ if(result != KErrNone)
+ result = web.Compare(KMAXSTRING2);
+
+ User::LeaveIfError(result);
+
+ // This part of the code Tests the timestamp
+ TTime timeStamp;
+ result = aPosLandmark->GetTimeStamp(timeStamp);
+ TTime ts;
+ if(iTS != _L(""))
+ ts.Set(iTS);
+ if(result != KErrNotFound && iTS != _L(""))
+ {
+ if(timeStamp != ts)
+ User::Leave(KErrGeneral);
+ }
+ }
+
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+// None
+
+// [End of File] - Do not remove
--- a/layers.sysdef.xml Tue Jun 15 11:38:32 2010 +0100
+++ b/layers.sysdef.xml Thu Jul 22 16:37:56 2010 +0100
@@ -1,9 +1,9 @@
<?xml version="1.0"?>
-<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_5_1.dtd" [
<!ENTITY layer_real_source_path "sf/mw/locationsrv" >
]>
-<SystemDefinition name="locationsrv" schema="1.4.0">
+<SystemDefinition name="locationsrv" schema="1.5.1">
<systemModel>
<layer name="mw_layer">
<module name="locationsrv">
@@ -12,13 +12,21 @@
<module name="asnpluginimplementation">
<unit unitID="lodo.locationsrv.supl.asnpluginimplementation"
mrp="" bldFile="&layer_real_source_path;/supl/locationomasuplprotocolhandler/asnpluginimplementation/group"
- filter="dfs_build" name="lodo_locationsrv_supl_asnpluginimplementation>" />
+ filter="dfs_build" name="lodo_locationsrv_supl_asnpluginimplementation" />
+ </module>
+ <module name="locationsupllocinfoconverter">
+ <unit unitID="lodo.locationsrv.supl.locationsupllocinfoconverter"
+ mrp="" bldFile="&layer_real_source_path;/supl/locationsupllocinfoconverter/group"
+ filter="dfs_build" name="lodo_locationsrv_supl_locationsupllocinfoconverter" />
</module>
<module name="asnpluginimplementationver2">
<unit unitID="lodo.locationsrv.supl.asnpluginimplementationver2"
mrp="" bldFile="&layer_real_source_path;/supl/locationomasuplprotocolhandler/asnpluginimplementationver2/group"
- filter="dfs_build" name="lodo_locationsrv_supl_asnpluginimplementationver2>" />
+ filter="dfs_build" name="lodo_locationsrv_supl_asnpluginimplementationver2" />
</module>
+ <module name="locationsysui_pro">
+ <unit unitID="locationsysui.pro" mrp="" bldFile="&layer_real_source_path;/locationsystemui/locationsysui" name="locationsysui_pro" proFile="locsysui.pro" />
+ </module>
</layer>
</systemModel>
</SystemDefinition>
--- a/locationsystemui/locationsysui/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/locationsystemui/locationsysui/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -23,13 +23,14 @@
PRJ_PLATFORMS
DEFAULT
+PRJ_EXPORTS
// Export Configuration Markup language and Central Repository Mark up language files
../conf/loclocalvariation.confml MW_LAYER_CONFML(loclocalvariation.confml)
../conf/loclocalvariation_20022D83.crml MW_LAYER_CRML(loclocalvariation_20022D83.crml)
-PRJ_EXPORTS
+
// Query and Notification
#include "../queryandnotification/group/bld.inf"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/locsysui.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,27 @@
+#
+# 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: project file for Locsysui
+#
+
+
+TEMPLATE = subdirs
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+SUBDIRS += possettings/possettings.pro
+SUBDIRS += privacyverifiernotifierui/privacyverifiernotifierui.pro
+SUBDIRS += posindicator/posindicator.pro
+
+BLD_INF_RULES.prj_exports += "conf/loclocalvariation.confml MW_LAYER_CONFML(loclocalvariation.confml)" \
+ "conf/loclocalvariation_20022D83.crml MW_LAYER_CRML(loclocalvariation_20022D83.crml)"
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posgeoaddress.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* 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: Data structure containing positioning and address info
+*
+*/
+
+#ifndef POSGEOADDRESS_H
+#define POSGEOADDRESS_H
+
+#include <QObject.h>
+
+#include "posindicatorglobal.h"
+
+class PosGeoAddressPrivate;
+
+/**
+* PosGeoAddress represents a Location information.
+*/
+class POSINDICATOR_EXPORT PosGeoAddress : public QObject
+ {
+ Q_OBJECT
+
+ Q_PROPERTY(double latitude READ latitude WRITE setLatitude)
+ Q_PROPERTY(double longitude READ longitude WRITE setLongitude)
+ Q_PROPERTY(float hAccuracy READ hAccuracy WRITE sethAccuracy)
+ Q_PROPERTY(float vAccuracy READ vAccuracy WRITE setvAccuracy)
+ Q_PROPERTY(float altitude READ altitude WRITE setAltitude)
+
+ Q_PROPERTY(QString country READ country WRITE setCountry)
+ Q_PROPERTY(QString state READ state WRITE setState)
+ Q_PROPERTY(QString city READ district WRITE setDistrict)
+ Q_PROPERTY(QString city READ city WRITE setCity)
+ Q_PROPERTY(QString zip READ zip WRITE setZip)
+ Q_PROPERTY(QString street READ street WRITE setStreet)
+ Q_PROPERTY(QString number READ number WRITE setNumber)
+
+public:
+ PosGeoAddress();
+ ~PosGeoAddress();
+ void setLatitude( double value );
+ double latitude() const;
+ void setLongitude(double value);
+ double longitude() const;
+ void sethAccuracy(float value);
+ float hAccuracy() const;
+ void setvAccuracy(float value);
+ float vAccuracy() const;
+ void setAltitude(float value);
+ float altitude() const ;
+ void setCountry(QString value);
+ QString country() const;
+ void setState(QString value);
+ QString state() const;
+ void setDistrict(QString value);
+ QString district() const ;
+ void setCity(QString value);
+ QString city() const;
+ void setZip(QString value);
+ QString zip() const;
+ void setStreet(QString value);
+ QString street() const;
+ void setNumber(QString value);
+ QString number() const;
+
+private:
+ Q_DECLARE_PRIVATE_D(d_ptr, PosGeoAddress)
+
+private:
+ /**
+ * Pointer to private implementation.
+ * Owns
+ */
+ PosGeoAddressPrivate* d_ptr;
+ };
+#endif /* POSGEOADDRESS_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posindicatorglobal.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* 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: Positioning Indicators export/import declarations
+*
+*/
+
+
+#ifndef POSINDICATOR_GLOBAL_H
+#define POSINDICATOR_GLOBAL_H
+
+#ifdef BUILD_POSINDICATOR
+ #define POSINDICATOR_EXPORT Q_DECL_EXPORT
+#else
+ #define POSINDICATOR_EXPORT Q_DECL_IMPORT
+#endif
+
+
+#endif // POSINDICATOR_GLOBAL_H
+
+// End of file
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posindicatorinfo.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicators Info - QT Wrapper
+*
+*/
+
+#ifndef POSITIONINDICATORINFO_H
+#define POSITIONINDICATORINFO_H
+
+#include <QObject.h>
+
+#include "posgeoaddress.h"
+#include "posindicatorglobal.h"
+
+class PosIndicatorInfoPrivate;
+
+class POSINDICATOR_EXPORT PosIndicatorInfo : public QObject
+ {
+ Q_OBJECT
+
+public :
+ /*
+ * Constructor
+ */
+ PosIndicatorInfo();
+
+ /*
+ * Destructor
+ */
+ ~PosIndicatorInfo();
+
+ /**
+ * Requests for positioning information from Positioning Indicator
+ * Helper Server.PosInfoUpdated() will be emitted when
+ * position information is available.
+ *
+ */
+ void requestPosInfo();
+
+ /**
+ * Cancels position info request.
+ */
+ void cancelPosInfo();
+
+private:
+ signals:
+ /*
+ * Signal emitted when new position updates available
+ * When coordinates are available, this object is
+ * populated with only Position attribute.
+ * When reverse geo-code address has been resolved,
+ * the only address fields will be populated.
+ *
+ * @param[in] posGeoAddress - Object containing position information
+ * @param[in] error - Any error code while retrieving position information
+ * - KTimeOut - if time out during retrieval of position information
+ */
+ void posInfoUpdated(PosGeoAddress& posGeoAddress, int error);
+
+private:
+ Q_DECLARE_PRIVATE_D(d_ptr, PosIndicatorInfo)
+
+private:
+ /**
+ * Pointer to private implementation.
+ * Owns
+ */
+ PosIndicatorInfoPrivate* d_ptr;
+ };
+
+#endif /* POSITIONINDICATORINFO_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posindicatorlogger.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* 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: Implementation of logger.
+*
+*/
+
+
+#ifndef POSINDICATORLOGGER_H
+#define POSINDICATORLOGGER_H
+
+#include <flogger.h>
+#include <f32file.h>
+
+#define FUNC( x ) { TBuf8<150> buffer; \
+ const unsigned char* string = (unsigned char*)(x); \
+ buffer.Zero(); \
+ buffer.Copy(string); \
+ RFileLogger::Write( _L("lbs"),_L("PosIndicatorLog.log"),EFileLoggingModeAppend,buffer); }
+
+#define LOG( x, y ) { TBuf8<150> buffer; \
+ const unsigned char* string = (unsigned char*)(x); \
+ buffer.Zero(); \
+ buffer.Copy(string); \
+ buffer.AppendNum(y); \
+ RFileLogger::Write( _L("lbs"),_L("PosIndicatorLog.log"),EFileLoggingModeAppend,buffer); }
+
+#endif /* POSINDICATORLOGGER_H*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posindicatorserverconst.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2010 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: Declaration of server core class.
+*
+*/
+
+#ifndef POSINDICATORSERVERCONSTS_H
+#define POSINDICATORSERVERCONSTS_H
+
+/**
+ * Server core name.
+ */
+_LIT( KPosIndHelperSrvName,"posindicatorhelperserver" );
+
+
+/**
+ * Current server version number
+ *
+ */
+const TInt8 KMajorVersionNumber = 1;
+const TInt8 KMinorVersionNumber = 0;
+const TInt16 KBuildVersionNumber = 0;
+
+
+/**
+ * Service Ids for client service requests. These
+ * service numbers should be used by the client library
+ * in all IPC messages to indicate the type of service
+ * required
+ */
+enum TServiceIds
+ {
+ /* Subsession Open */
+ ESubSessionOpen,
+ /* Subsession Close */
+ ESubSessionClose,
+ /* Get current position */
+ EGetCurrentPosition,
+ /* Get current address info size */
+ EGetCurrentAddressInfoSize,
+ /* Get current address info */
+ EGetCurrentAddressInfo,
+ /* Cancel outstanding request*/
+ ECancelCurrentOperation
+ };
+
+
+// This position in the IPC message should hold the sub-session handle
+const TInt KParamSubsessionHandle = 3;
+
+// This position in the IPC message should hold last known position.
+const TInt KParamLastKnownPosition = 0;
+
+// This position in the IPC message should hold current position.
+const TInt KParamCurrentPosition = 0;
+
+// This position in the IPC message should hold current address size.
+const TInt KParamCurrentAddressSize = 0;
+
+// This position in the IPC message should hold current address size.
+const TInt KParamCurrentAddress = 0;
+
+#endif // POSINDICATORSERVERCONSTS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posreversegeocodeinterface.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,91 @@
+/*
+* Copyright (c) 2010 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: Declaration of Geo coding interface class.
+*
+*/
+
+#ifndef POSREVERSEGEOCODEINTERFACE_H
+#define POSREVERSEGEOCODEINTERFACE_H
+
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+/*
+ * Observer class which exposes callbacks to notify the completion of reversegeocoding event.
+ *
+ **/
+class MPosReverseGeocodeObserver
+ {
+public:
+ /*
+ * Callback function which notifys the completion of reverse geocode event. This signals the completion
+ * of the asynchronous function CReverseGeoCode::GetAddressByCoordinate.
+ *
+ * @param aErrorcode Error status KErrNone in case of success or other system specific errorcodes
+ * in case of failures.
+ */
+
+ virtual void ReverseGeocodeComplete( TInt aErrorcode ) =0;
+ };
+
+/*
+ * CReverseGeocode
+ * Concrete class which exposes interfaces to convert the geo-coordinates information
+ * in to the address information.
+ *
+ **/
+class CPosReverseGeocodeInterface : public CBase
+ {
+public:
+ /*
+ * Factory function to create the instance of CReverseGeocode Class. This also registers
+ * observer for getting the reverse geocode completion notifications.
+ *
+ * @param[in] aObserver refrence to the instance MReverseGeocodeObserver's
+ * implementation class.
+ * @return pointer to the instance of CReverseGeocode.
+ */
+ IMPORT_C static CPosReverseGeocodeInterface* NewL( MPosReverseGeocodeObserver& aObserver );
+
+ /**
+ * Unloads the plugin.
+ */
+ IMPORT_C virtual ~CPosReverseGeocodeInterface();
+
+ /*
+ *
+ * Gets the address information for the given geo coordinates. The geo-coordinates should be
+ * encapsulated inside a landmark object which is passed as argument to this method. This is an
+ * asyncronous function whose completion will be notified by
+ * MReverseGeocodeObserver::ReverseGeocodeComplete call back.Address information corresponding to
+ * coordinates can be retrieved from the same landmarks object.
+ *
+ * @param aLandmark[in/out] Landmarks object in which address information is expected.
+ *
+ */
+ IMPORT_C virtual void GetAddressByCoordinateL( CPosLandmark& aLandmark ) = 0;
+
+
+ /**
+ * Cancels the current operation.
+ */
+ IMPORT_C virtual void Cancel() = 0;
+private:
+ /**
+ * Instance identifier key
+ */
+ TUid iDtor_ID_Key;
+ };
+
+#endif //POSREVERSEGEOCODEINTERFACE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/inc/posreversegeocodeinterface.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: Resource headers for project
+*
+*/
+
+#ifndef POSREVERSEGEOCODEINTERFACE_HRH
+#define POSREVERSEGEOCODEINTERFACE_HRH
+
+// ECom interface ID for reverse geo-code interface
+#define KPosReverseGeoCodeInterfaceId 0x2002E692
+
+
+#endif // POSREVERSEGEOCODEINTERFACE_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/bwins/posindicatorhelperu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,57 @@
+EXPORTS
+ ??0PosIndicatorInfo@@QAE@XZ @ 1 NONAME ; PosIndicatorInfo::PosIndicatorInfo(void)
+ ?requestPosInfo@PosIndicatorInfo@@QAEXXZ @ 2 NONAME ; void PosIndicatorInfo::requestPosInfo(void)
+ ?zip@PosGeoAddress@@QBE?AVQString@@XZ @ 3 NONAME ; class QString PosGeoAddress::zip(void) const
+ ?city@PosGeoAddress@@QBE?AVQString@@XZ @ 4 NONAME ; class QString PosGeoAddress::city(void) const
+ ??_EPosGeoAddress@@UAE@I@Z @ 5 NONAME ; PosGeoAddress::~PosGeoAddress(unsigned int)
+ ?trUtf8@PosIndicatorInfo@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString PosIndicatorInfo::trUtf8(char const *, char const *)
+ ?district@PosGeoAddress@@QBE?AVQString@@XZ @ 7 NONAME ; class QString PosGeoAddress::district(void) const
+ ?country@PosGeoAddress@@QBE?AVQString@@XZ @ 8 NONAME ; class QString PosGeoAddress::country(void) const
+ ?setState@PosGeoAddress@@QAEXVQString@@@Z @ 9 NONAME ; void PosGeoAddress::setState(class QString)
+ ?d_func@PosGeoAddress@@ABEPBVPosGeoAddressPrivate@@XZ @ 10 NONAME ; class PosGeoAddressPrivate const * PosGeoAddress::d_func(void) const
+ ?staticMetaObject@PosIndicatorInfo@@2UQMetaObject@@B @ 11 NONAME ; struct QMetaObject const PosIndicatorInfo::staticMetaObject
+ ?staticMetaObject@PosGeoAddress@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const PosGeoAddress::staticMetaObject
+ ?trUtf8@PosGeoAddress@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString PosGeoAddress::trUtf8(char const *, char const *)
+ ?metaObject@PosGeoAddress@@UBEPBUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const * PosGeoAddress::metaObject(void) const
+ ?altitude@PosGeoAddress@@QBEMXZ @ 15 NONAME ; float PosGeoAddress::altitude(void) const
+ ?tr@PosIndicatorInfo@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString PosIndicatorInfo::tr(char const *, char const *, int)
+ ?setCountry@PosGeoAddress@@QAEXVQString@@@Z @ 17 NONAME ; void PosGeoAddress::setCountry(class QString)
+ ?qt_metacast@PosGeoAddress@@UAEPAXPBD@Z @ 18 NONAME ; void * PosGeoAddress::qt_metacast(char const *)
+ ??_EPosIndicatorInfo@@UAE@I@Z @ 19 NONAME ; PosIndicatorInfo::~PosIndicatorInfo(unsigned int)
+ ??0PosGeoAddress@@QAE@XZ @ 20 NONAME ; PosGeoAddress::PosGeoAddress(void)
+ ?qt_metacall@PosGeoAddress@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 21 NONAME ; int PosGeoAddress::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?longitude@PosGeoAddress@@QBENXZ @ 22 NONAME ; double PosGeoAddress::longitude(void) const
+ ?d_func@PosIndicatorInfo@@ABEPBVPosIndicatorInfoPrivate@@XZ @ 23 NONAME ; class PosIndicatorInfoPrivate const * PosIndicatorInfo::d_func(void) const
+ ?qt_metacall@PosIndicatorInfo@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 24 NONAME ; int PosIndicatorInfo::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?latitude@PosGeoAddress@@QBENXZ @ 25 NONAME ; double PosGeoAddress::latitude(void) const
+ ?d_func@PosIndicatorInfo@@AAEPAVPosIndicatorInfoPrivate@@XZ @ 26 NONAME ; class PosIndicatorInfoPrivate * PosIndicatorInfo::d_func(void)
+ ?trUtf8@PosGeoAddress@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString PosGeoAddress::trUtf8(char const *, char const *, int)
+ ?tr@PosIndicatorInfo@@SA?AVQString@@PBD0@Z @ 28 NONAME ; class QString PosIndicatorInfo::tr(char const *, char const *)
+ ?getStaticMetaObject@PosGeoAddress@@SAABUQMetaObject@@XZ @ 29 NONAME ; struct QMetaObject const & PosGeoAddress::getStaticMetaObject(void)
+ ?getStaticMetaObject@PosIndicatorInfo@@SAABUQMetaObject@@XZ @ 30 NONAME ; struct QMetaObject const & PosIndicatorInfo::getStaticMetaObject(void)
+ ?metaObject@PosIndicatorInfo@@UBEPBUQMetaObject@@XZ @ 31 NONAME ; struct QMetaObject const * PosIndicatorInfo::metaObject(void) const
+ ?setLatitude@PosGeoAddress@@QAEXN@Z @ 32 NONAME ; void PosGeoAddress::setLatitude(double)
+ ?number@PosGeoAddress@@QBE?AVQString@@XZ @ 33 NONAME ; class QString PosGeoAddress::number(void) const
+ ?state@PosGeoAddress@@QBE?AVQString@@XZ @ 34 NONAME ; class QString PosGeoAddress::state(void) const
+ ??1PosGeoAddress@@UAE@XZ @ 35 NONAME ; PosGeoAddress::~PosGeoAddress(void)
+ ?setStreet@PosGeoAddress@@QAEXVQString@@@Z @ 36 NONAME ; void PosGeoAddress::setStreet(class QString)
+ ?setCity@PosGeoAddress@@QAEXVQString@@@Z @ 37 NONAME ; void PosGeoAddress::setCity(class QString)
+ ?street@PosGeoAddress@@QBE?AVQString@@XZ @ 38 NONAME ; class QString PosGeoAddress::street(void) const
+ ?setDistrict@PosGeoAddress@@QAEXVQString@@@Z @ 39 NONAME ; void PosGeoAddress::setDistrict(class QString)
+ ?tr@PosGeoAddress@@SA?AVQString@@PBD0H@Z @ 40 NONAME ; class QString PosGeoAddress::tr(char const *, char const *, int)
+ ?vAccuracy@PosGeoAddress@@QBEMXZ @ 41 NONAME ; float PosGeoAddress::vAccuracy(void) const
+ ?setNumber@PosGeoAddress@@QAEXVQString@@@Z @ 42 NONAME ; void PosGeoAddress::setNumber(class QString)
+ ??1PosIndicatorInfo@@UAE@XZ @ 43 NONAME ; PosIndicatorInfo::~PosIndicatorInfo(void)
+ ?posInfoUpdated@PosIndicatorInfo@@IAEXAAVPosGeoAddress@@H@Z @ 44 NONAME ; void PosIndicatorInfo::posInfoUpdated(class PosGeoAddress &, int)
+ ?setAltitude@PosGeoAddress@@QAEXM@Z @ 45 NONAME ; void PosGeoAddress::setAltitude(float)
+ ?d_func@PosGeoAddress@@AAEPAVPosGeoAddressPrivate@@XZ @ 46 NONAME ; class PosGeoAddressPrivate * PosGeoAddress::d_func(void)
+ ?hAccuracy@PosGeoAddress@@QBEMXZ @ 47 NONAME ; float PosGeoAddress::hAccuracy(void) const
+ ?setLongitude@PosGeoAddress@@QAEXN@Z @ 48 NONAME ; void PosGeoAddress::setLongitude(double)
+ ?qt_metacast@PosIndicatorInfo@@UAEPAXPBD@Z @ 49 NONAME ; void * PosIndicatorInfo::qt_metacast(char const *)
+ ?cancelPosInfo@PosIndicatorInfo@@QAEXXZ @ 50 NONAME ; void PosIndicatorInfo::cancelPosInfo(void)
+ ?trUtf8@PosIndicatorInfo@@SA?AVQString@@PBD0H@Z @ 51 NONAME ; class QString PosIndicatorInfo::trUtf8(char const *, char const *, int)
+ ?setZip@PosGeoAddress@@QAEXVQString@@@Z @ 52 NONAME ; void PosGeoAddress::setZip(class QString)
+ ?tr@PosGeoAddress@@SA?AVQString@@PBD0@Z @ 53 NONAME ; class QString PosGeoAddress::tr(char const *, char const *)
+ ?setvAccuracy@PosGeoAddress@@QAEXM@Z @ 54 NONAME ; void PosGeoAddress::setvAccuracy(float)
+ ?sethAccuracy@PosGeoAddress@@QAEXM@Z @ 55 NONAME ; void PosGeoAddress::sethAccuracy(float)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/eabi/posindicatorhelperu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,53 @@
+EXPORTS
+ _ZN13PosGeoAddress10setCountryE7QString @ 1 NONAME
+ _ZN13PosGeoAddress11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN13PosGeoAddress11qt_metacastEPKc @ 3 NONAME
+ _ZN13PosGeoAddress11setAltitudeEf @ 4 NONAME
+ _ZN13PosGeoAddress11setDistrictE7QString @ 5 NONAME
+ _ZN13PosGeoAddress11setLatitudeEd @ 6 NONAME
+ _ZN13PosGeoAddress12setLongitudeEd @ 7 NONAME
+ _ZN13PosGeoAddress12sethAccuracyEf @ 8 NONAME
+ _ZN13PosGeoAddress12setvAccuracyEf @ 9 NONAME
+ _ZN13PosGeoAddress16staticMetaObjectE @ 10 NONAME DATA 16
+ _ZN13PosGeoAddress19getStaticMetaObjectEv @ 11 NONAME
+ _ZN13PosGeoAddress6setZipE7QString @ 12 NONAME
+ _ZN13PosGeoAddress7setCityE7QString @ 13 NONAME
+ _ZN13PosGeoAddress8setStateE7QString @ 14 NONAME
+ _ZN13PosGeoAddress9setNumberE7QString @ 15 NONAME
+ _ZN13PosGeoAddress9setStreetE7QString @ 16 NONAME
+ _ZN13PosGeoAddressC1Ev @ 17 NONAME
+ _ZN13PosGeoAddressC2Ev @ 18 NONAME
+ _ZN13PosGeoAddressD0Ev @ 19 NONAME
+ _ZN13PosGeoAddressD1Ev @ 20 NONAME
+ _ZN13PosGeoAddressD2Ev @ 21 NONAME
+ _ZN16PosIndicatorInfo11qt_metacallEN11QMetaObject4CallEiPPv @ 22 NONAME
+ _ZN16PosIndicatorInfo11qt_metacastEPKc @ 23 NONAME
+ _ZN16PosIndicatorInfo14posInfoUpdatedER13PosGeoAddressi @ 24 NONAME
+ _ZN16PosIndicatorInfo14requestPosInfoEv @ 25 NONAME
+ _ZN16PosIndicatorInfo16staticMetaObjectE @ 26 NONAME DATA 16
+ _ZN16PosIndicatorInfo19getStaticMetaObjectEv @ 27 NONAME
+ _ZN16PosIndicatorInfoC1Ev @ 28 NONAME
+ _ZN16PosIndicatorInfoC2Ev @ 29 NONAME
+ _ZN16PosIndicatorInfoD0Ev @ 30 NONAME
+ _ZN16PosIndicatorInfoD1Ev @ 31 NONAME
+ _ZN16PosIndicatorInfoD2Ev @ 32 NONAME
+ _ZNK13PosGeoAddress10metaObjectEv @ 33 NONAME
+ _ZNK13PosGeoAddress3zipEv @ 34 NONAME
+ _ZNK13PosGeoAddress4cityEv @ 35 NONAME
+ _ZNK13PosGeoAddress5stateEv @ 36 NONAME
+ _ZNK13PosGeoAddress6numberEv @ 37 NONAME
+ _ZNK13PosGeoAddress6streetEv @ 38 NONAME
+ _ZNK13PosGeoAddress7countryEv @ 39 NONAME
+ _ZNK13PosGeoAddress8altitudeEv @ 40 NONAME
+ _ZNK13PosGeoAddress8districtEv @ 41 NONAME
+ _ZNK13PosGeoAddress8latitudeEv @ 42 NONAME
+ _ZNK13PosGeoAddress9hAccuracyEv @ 43 NONAME
+ _ZNK13PosGeoAddress9longitudeEv @ 44 NONAME
+ _ZNK13PosGeoAddress9vAccuracyEv @ 45 NONAME
+ _ZNK16PosIndicatorInfo10metaObjectEv @ 46 NONAME
+ _ZTI13PosGeoAddress @ 47 NONAME
+ _ZTI16PosIndicatorInfo @ 48 NONAME
+ _ZTV13PosGeoAddress @ 49 NONAME
+ _ZTV16PosIndicatorInfo @ 50 NONAME
+ _ZN16PosIndicatorInfo13cancelPosInfoEv @ 51 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posgeoaddress.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* 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: Data structure containing positioning and address info
+*
+*/
+
+#ifndef POSGEOADDRESS_H
+#define POSGEOADDRESS_H
+
+#include <QObject.h>
+
+#include "posindicatorglobal.h"
+
+class PosGeoAddressPrivate;
+
+/**
+* PosGeoAddress represents a Location information.
+*/
+class POSINDICATOR_EXPORT PosGeoAddress : public QObject
+ {
+ Q_OBJECT
+
+ Q_PROPERTY(double latitude READ latitude WRITE setLatitude)
+ Q_PROPERTY(double longitude READ longitude WRITE setLongitude)
+ Q_PROPERTY(float hAccuracy READ hAccuracy WRITE sethAccuracy)
+ Q_PROPERTY(float vAccuracy READ vAccuracy WRITE setvAccuracy)
+ Q_PROPERTY(float altitude READ altitude WRITE setAltitude)
+
+ Q_PROPERTY(QString country READ country WRITE setCountry)
+ Q_PROPERTY(QString state READ state WRITE setState)
+ Q_PROPERTY(QString city READ district WRITE setDistrict)
+ Q_PROPERTY(QString city READ city WRITE setCity)
+ Q_PROPERTY(QString zip READ zip WRITE setZip)
+ Q_PROPERTY(QString street READ street WRITE setStreet)
+ Q_PROPERTY(QString number READ number WRITE setNumber)
+
+public:
+ PosGeoAddress();
+ ~PosGeoAddress();
+ void setLatitude( double value );
+ double latitude() const;
+ void setLongitude(double value);
+ double longitude() const;
+ void sethAccuracy(float value);
+ float hAccuracy() const;
+ void setvAccuracy(float value);
+ float vAccuracy() const;
+ void setAltitude(float value);
+ float altitude() const ;
+ void setCountry(QString value);
+ QString country() const;
+ void setState(QString value);
+ QString state() const;
+ void setDistrict(QString value);
+ QString district() const ;
+ void setCity(QString value);
+ QString city() const;
+ void setZip(QString value);
+ QString zip() const;
+ void setStreet(QString value);
+ QString street() const;
+ void setNumber(QString value);
+ QString number() const;
+
+private:
+ Q_DECLARE_PRIVATE_D(d_ptr, PosGeoAddress)
+
+private:
+ /**
+ * Pointer to private implementation.
+ * Owns
+ */
+ PosGeoAddressPrivate* d_ptr;
+ };
+#endif /* POSGEOADDRESS_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posgeoaddress_p.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,52 @@
+/*
+* 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: Private implementation of PosGeoAddress class
+*
+*/
+
+#ifndef POSGEOADDRESSPRIVATE_H
+#define POSGEOADDRESSPRIVATE_H
+
+#include "posgeoaddress.h"
+
+#include <QObject.h>
+
+/**
+* Private implementation of PosGeoAddress
+*/
+class PosGeoAddressPrivate
+ {
+
+public :
+
+ double mLatitude;
+ double mLongitude;
+ float mHAccuracy;
+ float mVAccuracy;
+ float mAltitude;
+
+ QString mCountry;
+ QString mState;
+ QString mDistrict;
+ QString mCity;
+ QString mZip;
+ QString mStreet;
+ QString mNumber;
+
+ PosGeoAddress* q_ptr;
+
+ Q_DECLARE_PUBLIC(PosGeoAddress);
+
+ };
+#endif /* POSGEOADDRESSPRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindhelperclientrequester.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicator Helper Client Requestor
+*
+*/
+
+
+
+#ifndef POS_IND_HELPER_CLIENTREQUESTER_H
+#define POS_IND_HELPER_CLIENTREQUESTER_H
+
+#include "posindicatorserverconst.h"
+
+// Forward declaration
+class MServerRequestCompletetionObserver;
+/**
+ * Client requestor class.
+ *
+ * This is a helper class used by RPosIndicatorHelper class to serve the asynchronous operations
+ * requested to the server.
+ */
+class CPosIndHelperClientRequester : public CActive
+ {
+public:
+
+ /**
+ * Construct a CPosIndHelperClientRequester object.
+ */
+ static CPosIndHelperClientRequester* NewL( MServerRequestCompletetionObserver& aServerRequestCompletetionObserver );
+
+ /**
+ * Destructor.
+ */
+ ~CPosIndHelperClientRequester();
+
+ /**
+ * Starts the asynchronous operation by setting the iStatus to active
+ *
+ * @param[in] aServiceId - Service id of the operation requested
+ */
+ void Start(TServiceIds aServiceId);
+
+private://Derived from CActive
+ void RunL();
+ TInt RunError( TInt aError );
+ void DoCancel();
+
+private:
+ /**
+ * C++ default constructor
+ */
+ CPosIndHelperClientRequester( MServerRequestCompletetionObserver& aServerRequestCompletetionObserver );
+
+ /**
+ *Second phase constructor
+ */
+ void ConstructL();
+
+private:// data
+
+ /*
+ * Handler to the observer which notifies operation completion to the client
+ */
+ MServerRequestCompletetionObserver& iServerRequestCompletetionObserver;
+
+ /*
+ * Service id of the operation requested.
+ */
+ TServiceIds iServiceId;
+ };
+
+#endif // POS_IND_HELPER_CLIENTREQUESTER_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindicatorglobal.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,34 @@
+/*
+* 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: Positioning Indicators export/import declarations
+*
+*/
+
+
+#ifndef POSINDICATOR_GLOBAL_H
+#define POSINDICATOR_GLOBAL_H
+
+#ifdef BUILD_POSINDICATOR
+ #define POSINDICATOR_EXPORT Q_DECL_EXPORT
+#else
+ #define POSINDICATOR_EXPORT Q_DECL_IMPORT
+#endif
+
+
+#endif // POSINDICATOR_GLOBAL_H
+
+// End of file
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindicatorhelper.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,225 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicator Helper Client Interface
+*
+*/
+
+
+
+#ifndef POS_INDICATOR_HELPER_H
+#define POS_INDICATOR_HELPER_H
+
+#include <e32std.h>
+#include <lbssatellite.h>
+#include <locationvariationdomaincrkeys.h>
+#include <centralrepository.h>
+
+#include "posindicatorserverconst.h"
+#include "posindicatorlogger.h"
+
+class CPosIndHelperClientRequester;
+class RPosIndicatorHelperServer;
+class MPosIndInfoChangeObserver;
+class CPosLandmark;
+
+/**
+ * A handle to Positioning Indicator Helper Server subsession. This class provides
+ * methods to use Positioning Indicator Helper service from Positioning Indicator Helper
+ * Server.
+ *
+ * RPosIndicatorHelper is used to create subsession with Positioning Indicator Helper Server.
+ * This class provides mechanisms for retrieving location
+ * [coordinate or reverse geo-code info], actively requesting location.
+ * Before using any of these services, a connection to Positioning Indicator Helper
+ * Server must first be made.
+ *
+ * A client can have multiple sessions connected to the Positioning Indicator Helper
+ * Server. There can be multiple subsessions opened from one session.
+ *
+ *
+ * @see RPosIndicatorHelperServer
+ *
+ * @lib posindicatorhelper.lib
+ *
+ */
+
+class MServerRequestCompletetionObserver
+ {
+public:
+ /*
+ * It will be used to notify RPosIndicatorHelper client that server has completed
+ * the requested operation.
+ *
+ * @param[out] aServiceId - Id of the operation which is requested
+ * @param[out] aErrCode - Error code if operation is failed
+ * KErrNone if operation is successful.
+ */
+ virtual void NotifyServerRequestCompletion(TServiceIds aServiceId, TInt aErrCode) = 0;
+ };
+
+class RPosIndicatorHelper : public RSubSessionBase,
+ public MServerRequestCompletetionObserver
+ {
+public:
+
+ public:
+ /**
+ * default constructior.
+ */
+ RPosIndicatorHelper();
+
+ /**
+ * destructior.
+ */
+ ~RPosIndicatorHelper();
+
+ /**
+ * Opens a subsession with Positioning Indicator Helper Server.
+ *
+ * A subsession must be opened before any other service can be used.
+ *
+ * @panic PosIndicatorHelper EPosIndicatorHelperServerBadHandle If a session to
+ * Positioning Indicator Helper Server has not been connected.
+ *
+ * @param[in] aServer Reference to the Positioning Indicator Helper Server
+ * session.
+ * @param[in] aPosIndInfoChangeObserver Reference to the Positioning
+ * Indicator Info Change observer. Any change in position information
+ * is notified by this observer.
+ *
+ * @return KErrNone if successful. Otherwise, Symbian standard
+ * error code is returned, such as KErrNoMemory, KErrServerBusy, etc.
+ */
+ TInt Open( RPosIndicatorHelperServer& aServer,
+ MPosIndInfoChangeObserver* aPosIndInfoChangeObserver );
+
+ /**
+ * Closes the subsession with Positioning Indicator Helper Server.
+ *
+ * Close() must be called when RPosIndicatorHelper subsession is no longer required.
+ *
+ * Before a subsession is closed, the client application must ensure
+ * that all outstanding notification requests have been cancelled. In
+ * particular, the application must issue all the appropriate Cancel
+ * requests and then wait for a confirmation that the notification has
+ * been terminated. A failure to do so results in a panic.
+ *
+ * @panic PosIndicatorHelper EPosIndicatorHelperRequestsNotCancelled If client application
+ * has requests outstanding with Positioning Indicator Helper Server.
+ */
+ void Close();
+
+ /*
+ * Requests current position information.
+ *
+ * It will first request for current location. if it is already available
+ * it will request for reverse geo-code address.
+ *
+ * The result of the request is notified to the client through observer.
+ */
+ void RequestPosInfo();
+
+ /**
+ * Cancels the current request
+ */
+ void CancelCurrentRequest();
+
+ /**
+ * Symbian 2nd phase construction.
+ */
+ void ConstructL();
+
+ /*
+ * from MServerRequestCompletetionObserver
+ */
+ void NotifyServerRequestCompletion(TServiceIds aServiceId, TInt aErrCode);
+
+ private:
+ /*
+ * Requests size of landmark object containing current position with
+ * reverse geo-coded address.
+ *
+ * It will request for the reverse geo-coded location giving the
+ * position coordinates as input.
+ *
+ * The size of the landmark object returned from reverse geo-coded
+ * plugin is notified to the client through observer.
+ *
+ */
+ void GetAddressInfoSize();
+
+ /*
+ * Requests landmark object containing current position with
+ * reverse geo-coded address.
+ *
+ * It will request for the reverse geo-coded location
+ *
+ * The landmark object returned from reverse geo-coded
+ * plugin is notified to the client through observer.
+ *
+ */
+ void GetAddressL();
+
+ /*
+ * Check Hide Coordinates feature flag.
+ * Uses KLocHideCoordinates CenRep key
+ */
+ void CheckHideCoordinateL();
+
+ private:// data
+
+ /**
+ * Pointer to client requestor.
+ * Own.
+ */
+ CPosIndHelperClientRequester* iClientRequester;
+
+ /**
+ * It is used to request position details from server
+ */
+ TPositionSatelliteInfo iPositionInfo;
+
+ /**
+ * It is used to request size of the landmark object from server
+ */
+ TInt iSize;
+
+ /**
+ * It is used to request the landmark object from the server
+ * Owns
+ */
+ HBufC8* iLmkBuf;
+
+ /**
+ * It is used to sent the landmark object to the observer
+ * Owns
+ */
+ CPosLandmark * iLandmark;
+
+ /**
+ * It is used to notify PosIndicatorInfoPrivate that new position information
+ * new position information is available.
+ *
+ * Array of observers are not stored here as multiple client requests are actually
+ * handled by signal-slot mechanism in PosIndicatorInfoPrivate
+ * Does not own
+ */
+ MPosIndInfoChangeObserver* iPosIndInfoChangeObserver;
+
+ /*
+ * Holds value of Hide Coordinates CenRep key
+ */
+ TInt iCoordinateSettingValue;
+ };
+#endif // POS_INDICATOR_HELPER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindicatorhelpererrors.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2010 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: Position Indicator Helper Client panic category and panic code
+*
+*/
+
+
+#ifndef POS_IND_HELPER_ERRORS_H
+#define POS_IND_HELPER_ERRORS_H
+
+#include <e32def.h>
+#include <e32cmn.h>
+
+/**
+ *Position Indicator Helper Client API panic categories
+ */
+_LIT( KPosIndHelperClientPanicCategory, "PosIndicator" );
+
+/**
+ * Position Indicator Helper Client API panic codes
+ */
+enum TPosIndicatorHelperClientPanic
+ {
+ /**
+ * An attempt has been made to connect using an already opened handle.
+ */
+ EPosIndicatorHelperServerHandleNotClosed = 1,
+ /**
+ * An attempt to communicate using an unconnected handle.
+ */
+ EPosIndicatorHelperServerBadHandle = 2,
+ /**
+ * A subsession was closed with requests still outstanding.
+ */
+ EPosIndicatorHelperRequestsNotCancelled = 3,
+ /**
+ * A client has called an asynchronous request while it is still outstanding.
+ */
+ EPosIndicatorHelperDuplicateRequest = 5,
+ /**
+ * Wrong value is given as parameter.
+ */
+ EPosIndicatorHelperErrArgument = 6
+ };
+#endif //POS_IND_HELPER_ERRORS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindicatorhelperserver.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicator Helper Client Library
+*
+*/
+
+
+
+#ifndef POS_IND_HELPER_SERVER_H
+#define POS_IND_HELPER_SERVER_H
+
+
+#include <e32base.h>
+
+#include "posindicatorlogger.h"
+
+/**
+ * A handle to Positioning Indicator Helper Server session.
+ *
+ * This is generally the first interface class used by all client applications.
+ * It is used to make the primary connection to the Positioning Indicator Helper Server.
+ * After the primary connection has been established, its handle is passed as a
+ * parameter of the Open methods of @p RPosIndicatorHelper to create a subsession.
+ *
+ * @lib posindicatorhelper.lib
+ *
+ */
+class RPosIndicatorHelperServer : public RSessionBase
+ {
+public:
+ /**
+ * Constructor for RPosIndicatorHelperServer
+ */
+ RPosIndicatorHelperServer();
+
+ /**
+ * Creates a session with the Positioning Indicator Helper Server.
+ * This method must be called before any subsession can be opened.
+ * @see RPosIndicatorHelper.
+ *
+ * @panic EPosIndicatorHelperServerHandleNotClosed Try to connect using an already opened handle.
+ *
+ * @return KErrNone, if successful. KErrNotSupported if Positioning Indicator Helper
+ * Server is not present in the system. Otherwise one of the other standard
+ * Symbian error code (for example KErrNoMemory, KErrServerBusy, etc. )
+ * is returned.
+ */
+ TInt Connect();
+
+ /**
+ * Closes a session with the Positioning Indicator Helper Server.
+ * Before the connection to Positioning Indicator Helper Server is closed, the
+ * client application must ensure that all subsessions is closed.
+ */
+ void Close();
+
+ /**
+ * Obtains the client side version number of Positioning Indicator Helper Server.
+ *
+ * @return The client side version number.
+ */
+ TVersion Version() const;
+
+#if defined(__WINSCW__)
+ TInt StartLbsRootProcess();
+#endif
+
+private: // data
+ /**
+ * Unused variable for future expansion.
+ */
+ TAny* iReserved;
+ };
+
+
+#endif //POS_IND_HELPER_SERVER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindicatorinfo.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicators Info - QT Wrapper
+*
+*/
+
+#ifndef POSITIONINDICATORINFO_H
+#define POSITIONINDICATORINFO_H
+
+#include <QObject.h>
+
+#include "posgeoaddress.h"
+#include "posindicatorglobal.h"
+
+class PosIndicatorInfoPrivate;
+
+class POSINDICATOR_EXPORT PosIndicatorInfo : public QObject
+ {
+ Q_OBJECT
+
+public :
+ /*
+ * Constructor
+ */
+ PosIndicatorInfo();
+
+ /*
+ * Destructor
+ */
+ ~PosIndicatorInfo();
+
+ /**
+ * Requests for positioning information from Positioning Indicator
+ * Helper Server.PosInfoUpdated() will be emitted when
+ * position information is available.
+ *
+ */
+ void requestPosInfo();
+
+ /**
+ * Cancels position info request.
+ */
+ void cancelPosInfo();
+
+private:
+ signals:
+ /*
+ * Signal emitted when new position updates available
+ * When coordinates are available, this object is
+ * populated with only Position attribute.
+ * When reverse geo-code address has been resolved,
+ * the only address fields will be populated.
+ *
+ * @param[in] posGeoAddress - Object containing position information
+ * @param[in] error - Any error code while retrieving position information
+ * - KTimeOut - if time out during retrieval of position information
+ */
+ void posInfoUpdated(PosGeoAddress& posGeoAddress, int error);
+
+private:
+ Q_DECLARE_PRIVATE_D(d_ptr, PosIndicatorInfo)
+
+private:
+ /**
+ * Pointer to private implementation.
+ * Owns
+ */
+ PosIndicatorInfoPrivate* d_ptr;
+ };
+
+#endif /* POSITIONINDICATORINFO_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindicatorinfo_p.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicators Info private implementation
+*
+*/
+
+#ifndef POSITIONINDICATORINFOPRIVATE_H
+#define POSITIONINDICATORINFOPRIVATE_H
+
+#include "posindicatorinfo.h"
+#include "posindinfochangeobserver.h"
+#include "posindicatorhelperserver.h"
+#include "posindicatorhelper.h"
+
+class PosGeoAddress;
+
+class PosIndicatorInfoPrivate : public MPosIndInfoChangeObserver
+ {
+public :
+ /**
+ * Constructor
+ */
+ PosIndicatorInfoPrivate(PosIndicatorInfo *aPositionIndicator);
+
+ /**
+ * Destructor
+ */
+ ~PosIndicatorInfoPrivate();
+
+ /**
+ * Requests for positioning information from Positioning Indicator
+ * Helper Server.NotifyPosInfoChange() will be called when
+ * position information is available.
+ *
+ */
+ void RequestPosInfo();
+
+ /**
+ * Cancels positon info request.
+ */
+ void CancelPosInfo();
+
+ /**
+ * Derived from MPosIndInfoChangeObserver
+ */
+ void NotifyPosInfoChange(CPosLandmark* aLandmark, TInt aErrCode);
+
+private:
+ void AddToAddress(TPositionFieldId aFieldId, TPtrC aValue);
+
+private:
+
+ // Handle to current server session
+ RPosIndicatorHelperServer mPosIndicatorHelperServer;
+
+ // Handle to current subsession
+ RPosIndicatorHelper mPosIndicatorHelper;
+
+ /**
+ * It contains the latest position information
+ * Owns
+ */
+ PosGeoAddress* mPosGeoAddress;
+
+ /*
+ * Handler to PosIndicatorInfo.
+ * It is required to emit PosInfoUpdated() signal
+ *
+ *
+ */
+ PosIndicatorInfo* q_ptr;
+
+ Q_DECLARE_PUBLIC(PosIndicatorInfo);
+ };
+
+
+#endif /* POSITIONINDICATORINFOPRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/inc/posindinfochangeobserver.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicator Info Change Observer
+*
+*/
+
+#ifndef POSIND_INFOCHANGEOBSERVER_H
+#define POSIND_INFOCHANGEOBSERVER_H
+
+#include <EPos_CPosLandmark.h>
+
+class MPosIndInfoChangeObserver
+ {
+public:
+ /*
+ * It will be used to notify client that position information is changed
+ * and new information is available.
+ *
+ * Landmark object contains coordinate information when location fix is available
+ * When reverse geo-code information is available, it contains address info.
+ *
+ * @param[out] aLandmark - landmark object containing new position information
+ * Ownership is NOT transferred to the observer.
+ * @param[out] aErrCode - Error code if operation is failed
+ * KErrNone if operation is successful.
+ */
+ virtual void NotifyPosInfoChange(CPosLandmark* aLandmark, TInt aErrCode) = 0;
+ };
+
+#endif /* POSIND_INFOCHANGEOBSERVER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/posindicatorhelperclientlib.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,59 @@
+#
+# Copyright (c) 2010 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: posindicator plugin project file
+#
+
+TEMPLATE = lib
+TARGET = posindicatorhelper
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+QT += core
+QT -= gui
+MOC_DIR = moc
+OBJECTS_DIR = obj
+
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+
+LIBS += -llbs \
+ -leposlandmarks \
+ -lflogger \
+ -lCentralRepository
+
+HEADERS += inc/posindhelperclientrequester.h \
+ inc/posindicatorhelper.h \
+ inc/posindicatorhelperserver.h \
+ inc/posindicatorhelpererrors.h \
+ inc/posindicatorinfo_p.h \
+ inc/posindicatorglobal.h \
+ inc/posindicatorinfo.h \
+ inc/posgeoaddress.h
+
+SOURCES += src/posindicatorhelper.cpp \
+ src/posindicatorhelperserver.cpp \
+ src/posindhelperclientrequester.cpp \
+ src/posindicatorinfo_p.cpp \
+ src/posindicatorinfo.cpp \
+ src/posgeoaddress.cpp
+
+symbian:
+ {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += BUILD_POSINDICATOR
+ TARGET.UID3 = 0x2002E688
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/src/posgeoaddress.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2010 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: Data structure containing positioning and address info
+*
+*/
+
+#include "posgeoaddress.h"
+#include "posgeoaddress_p.h"
+#include "posindicatorlogger.h"
+
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::PosGeoAddress()
+// ---------------------------------------------------------------------------
+PosGeoAddress::PosGeoAddress()
+ {
+ d_ptr = new PosGeoAddressPrivate;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::~PosGeoAddress()
+// ---------------------------------------------------------------------------
+PosGeoAddress::~PosGeoAddress()
+ {
+ delete d_ptr;
+ }
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setLatitude( double value )
+ {
+ FUNC("+ PosGeoAddress::setLatitude");
+ d_ptr->mLatitude = value;
+ FUNC("- PosGeoAddress::setLatitude");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+double PosGeoAddress::latitude() const
+ {
+ FUNC("+ PosGeoAddress::latitude");
+ return d_ptr->mLatitude;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setLongitude(double value)
+ {
+ FUNC("+ PosGeoAddress::setLongitude");
+ d_ptr->mLongitude = value;
+ FUNC("- PosGeoAddress::setLongitude");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+double PosGeoAddress::longitude() const
+ {
+ FUNC("+ PosGeoAddress::longitude");
+ return d_ptr->mLongitude;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::sethAccuracy(float value)
+ {
+ FUNC("+ PosGeoAddress::sethAccuracy");
+ d_ptr->mHAccuracy = value;
+ FUNC("- PosGeoAddress::sethAccuracy");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+float PosGeoAddress::hAccuracy() const
+ {
+ FUNC("+ PosGeoAddress::hAccuracy");
+ return d_ptr->mHAccuracy;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setvAccuracy(float value)
+ {
+ FUNC("+ PosGeoAddress::setvAccuracy");
+ d_ptr->mVAccuracy = value;
+ FUNC("- PosGeoAddress::setvAccuracy");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+float PosGeoAddress::vAccuracy() const
+ {
+ FUNC("+ PosGeoAddress::vAccuracy");
+ return d_ptr->mVAccuracy;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setAltitude(float value)
+ {
+ FUNC("+ PosGeoAddress::setAltitude");
+ d_ptr->mAltitude = value;
+ FUNC("- PosGeoAddress::setAltitude");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+float PosGeoAddress::altitude() const
+ {
+ FUNC("+ PosGeoAddress::altitude");
+ return d_ptr->mAltitude;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setCountry(QString value)
+ {
+ FUNC("+ PosGeoAddress::setCountry");
+ d_ptr->mCountry = value;
+ FUNC("- PosGeoAddress::setCountry");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::country() const
+ {
+ FUNC("+ PosGeoAddress::country");
+ return d_ptr->mCountry;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setState(QString value)
+ {
+ FUNC("+ PosGeoAddress::setState");
+ d_ptr->mState = value;
+ FUNC("- PosGeoAddress::setState");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::state() const
+ {
+ FUNC("+ PosGeoAddress::state");
+ return d_ptr->mState;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setDistrict(QString value)
+ {
+ FUNC("+ PosGeoAddress::setDistrict");
+ d_ptr->mDistrict = value;
+ FUNC("- PosGeoAddress::setDistrict");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::district() const
+ {
+ FUNC("+ PosGeoAddress::district");
+ return d_ptr->mDistrict;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setCity(QString value)
+ {
+ FUNC("+ PosGeoAddress::setCity");
+ d_ptr->mCity = value;
+ FUNC("- PosGeoAddress::setCity");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::city() const
+ {
+ FUNC("+ PosGeoAddress::city");
+ return d_ptr->mCity;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setZip(QString value)
+ {
+ FUNC("+ PosGeoAddress::setZip");
+ d_ptr->mZip = value;
+ FUNC("- PosGeoAddress::setZip");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::zip() const
+ {
+ FUNC("+ PosGeoAddress::zip");
+ return d_ptr->mZip;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setStreet(QString value)
+ {
+ FUNC("+ PosGeoAddress::setStreet");
+ d_ptr->mStreet = value;
+ FUNC("- PosGeoAddress::setStreet");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::street() const
+ {
+ FUNC("+ PosGeoAddress::street");
+ return d_ptr->mStreet;
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+void PosGeoAddress::setNumber(QString value)
+ {
+ FUNC("+ PosGeoAddress::setNumber");
+ d_ptr->mNumber = value;
+ FUNC("- PosGeoAddress::setNumber");
+ }
+
+// ---------------------------------------------------------------------------
+// PosGeoAddress::setLatitude()
+// ---------------------------------------------------------------------------
+QString PosGeoAddress::number() const
+ {
+ FUNC("+ PosGeoAddress::number");
+ return d_ptr->mNumber;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/src/posindhelperclientrequester.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicator Helper Client Requestor
+*
+*/
+
+
+// INCLUDE FILES
+
+#include <e32base.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+#include "posindhelperclientrequester.h"
+#include "posindicatorhelper.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosIndHelperClientRequester::CPosIndHelperClientRequester
+//
+// Default constructor
+// ---------------------------------------------------------
+//
+CPosIndHelperClientRequester::CPosIndHelperClientRequester(
+ MServerRequestCompletetionObserver& aServerRequestCompletetionObserver ):
+ CActive(EPriorityStandard),iServerRequestCompletetionObserver(aServerRequestCompletetionObserver)
+ {
+ FUNC("+ CPosIndHelperClientRequester::CPosIndHelperClientRequester");
+ CActiveScheduler::Add(this);
+ FUNC("- CPosIndHelperClientRequester::CPosIndHelperClientRequester");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndHelperClientRequester::ConstructL()
+// Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void CPosIndHelperClientRequester::ConstructL()
+ {
+ FUNC("+ CPosIndHelperClientRequester::ConstructL");
+ FUNC("- CPosIndHelperClientRequester::ConstructL");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndHelperClientRequester::NewL()
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+CPosIndHelperClientRequester* CPosIndHelperClientRequester::NewL(
+ MServerRequestCompletetionObserver& aServerRequestCompletetionObserver )
+ {
+ FUNC("+ CPosIndHelperClientRequester::NewL");
+ CPosIndHelperClientRequester* self = new (ELeave) CPosIndHelperClientRequester(
+ aServerRequestCompletetionObserver );
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPosIndHelperClientRequester::~CPosIndHelperClientRequester()
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPosIndHelperClientRequester::~CPosIndHelperClientRequester()
+ {
+ FUNC("+ CPosIndHelperClientRequester::~CPosIndHelperClientRequester");
+ Cancel();
+ FUNC("- CPosIndHelperClientRequester::~CPosIndHelperClientRequester");
+ }
+
+
+// ---------------------------------------------------------
+// CPosIndHelperClientRequester::Start
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosIndHelperClientRequester::Start(TServiceIds aServiceId )
+ {
+ FUNC("+ CPosIndHelperClientRequester::Start");
+ iServiceId = aServiceId;
+ SetActive();
+ FUNC("- CPosIndHelperClientRequester::Start");
+ }
+
+// ---------------------------------------------------------
+// CPosIndHelperClientRequester::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosIndHelperClientRequester::RunL()
+ {
+ FUNC("+ CPosIndHelperClientRequester::RunL");
+ LOG("Error code : %d", iStatus.Int());
+ iServerRequestCompletetionObserver.NotifyServerRequestCompletion( iServiceId, iStatus.Int() );
+ FUNC("- CPosIndHelperClientRequester::RunL");
+ }
+
+
+// ---------------------------------------------------------
+// CPosIndHelperClientRequester::RunError
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CPosIndHelperClientRequester::RunError(TInt /*aError*/)
+ {
+ FUNC("+ CPosIndHelperClientRequester::RunError");
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------
+// CPosIndHelperClientRequester::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosIndHelperClientRequester::DoCancel()
+ {
+ FUNC("+ CPosIndHelperClientRequester::DoCancel");
+ // iServerRequestCompletetionObserver.NotifyServerRequestCompletion( iServiceId, iStatus.Int() );
+ FUNC("- CPosIndHelperClientRequester::DoCancel");
+ }
+// End of File
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/src/posindicatorhelper.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,338 @@
+/*
+* Copyright (c) 2010 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: Client-Server communication
+*
+*/
+
+#include "posindicatorhelper.h"
+#include "posindicatorhelperserver.h"
+#include "posindhelperclientrequester.h"
+#include "posindicatorhelpererrors.h"
+#include "posindinfochangeobserver.h"
+
+#include <e32std.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+#include <epos_poslandmarkserialization.h>
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::RPosIndicatorHelper()
+//
+// Default constructor.
+// ---------------------------------------------------------------------------
+//
+ RPosIndicatorHelper::RPosIndicatorHelper()
+ : iClientRequester(NULL),
+ iLmkBuf(NULL),
+ iLandmark(NULL),
+ iCoordinateSettingValue( ELocCoordinatesNotHidden )
+ {
+ FUNC("+ RPosIndicatorHelper::RPosIndicatorHelper");
+ FUNC("- RPosIndicatorHelper::RPosIndicatorHelper");
+ }
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::~RPosIndicatorHelper
+//
+// Destructor.
+// ---------------------------------------------------------------------------
+//
+ RPosIndicatorHelper::~RPosIndicatorHelper()
+ {
+ FUNC("+ RPosIndicatorHelper::~RPosIndicatorHelper");
+
+ if(iClientRequester)
+ {
+ delete iClientRequester;
+ iClientRequester = NULL;
+ }
+ if(iLmkBuf)
+ {
+ delete iLmkBuf;
+ iLmkBuf = NULL;
+ }
+ if(iLandmark)
+ {
+ delete iLandmark;
+ iLandmark = NULL;
+ }
+ FUNC("- RPosIndicatorHelper::~RPosIndicatorHelper");
+ }
+
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::ConstructL
+//Symbian 2nd phase constructor can leave.
+// ---------------------------------------------------------------------------
+//
+void RPosIndicatorHelper::ConstructL()
+ {
+ FUNC("+ RPosIndicatorHelper::ConstructL");
+ iClientRequester = CPosIndHelperClientRequester::NewL(*this);
+ iLandmark = NULL;
+ CheckHideCoordinateL();
+ FUNC("- RPosIndicatorHelper::ConstructL");
+ }
+
+
+// ---------------------------------------------------------
+// RPosIndicatorHelper::Open
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+ TInt RPosIndicatorHelper::Open( RPosIndicatorHelperServer& aServer,
+ MPosIndInfoChangeObserver* aPosIndInfoChangeObserver )
+ {
+ FUNC("+ RPosIndicatorHelper::Open");
+
+ __ASSERT_ALWAYS( aPosIndInfoChangeObserver , User::Panic (KPosIndHelperClientPanicCategory, EPosIndicatorHelperServerBadHandle));
+ iPosIndInfoChangeObserver = aPosIndInfoChangeObserver;
+
+ __ASSERT_ALWAYS(aServer.Handle() != 0,
+ User::Panic(KPosIndHelperClientPanicCategory, EPosIndicatorHelperServerBadHandle));
+
+ __ASSERT_ALWAYS(! SubSessionHandle() , User::Panic (KPosIndHelperClientPanicCategory, EPosIndicatorHelperServerBadHandle));
+ TRAPD(ret, ConstructL());
+ if (ret == KErrNone)
+ {
+ ret = CreateSubSession(aServer, ESubSessionOpen, TIpcArgs());
+ }
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// RPosIndicatorHelper::Close
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+ void RPosIndicatorHelper:: Close()
+ {
+ FUNC("+ RPosIndicatorHelper::Close");
+
+ TBool isActive = iClientRequester->IsActive();
+ TInt status = iClientRequester->iStatus.Int();
+
+ if( isActive && status == KRequestPending )
+ {
+ User::Panic(KPosIndHelperClientPanicCategory, EPosIndicatorHelperRequestsNotCancelled );
+ }
+
+ if(SubSessionHandle())
+ {
+ CloseSubSession(ESubSessionClose);
+ }
+
+ FUNC("- RPosIndicatorHelper::Close");
+ }
+
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::RequestPosInfo()
+// ---------------------------------------------------------------------------
+void RPosIndicatorHelper::RequestPosInfo()
+ {
+ FUNC("+ RPosIndicatorHelper::RequestPosInfo");
+
+ __ASSERT_ALWAYS(SubSessionHandle() , User::Panic (KPosIndHelperClientPanicCategory, EPosIndicatorHelperServerBadHandle));
+
+ if(iClientRequester->IsActive())
+ return; // If a previous request for position is alive, ignore this call
+
+ TPckg<TPositionSatelliteInfo> posSatPckg( iPositionInfo );
+ TIpcArgs args;
+ args.Set(KParamCurrentPosition, &posSatPckg);
+
+ iClientRequester->iStatus = KRequestPending;
+ SendReceive(EGetCurrentPosition, args , iClientRequester->iStatus);
+ iClientRequester->Start(EGetCurrentPosition);
+ FUNC("- RPosIndicatorHelper::RequestPosInfo");
+ }
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::GetAddressInfoSizePrivate()
+// ---------------------------------------------------------------------------
+void RPosIndicatorHelper::GetAddressInfoSize()
+ {
+ FUNC("+ RPosIndicatorHelper::RPosIndicatorHelper");
+
+ // Create buffer and send message to resolve address
+ TPckg<TInt> posSatPckg( iSize );
+ TIpcArgs args;
+ args.Set(KParamCurrentAddressSize ,&posSatPckg);
+
+ iClientRequester->iStatus = KRequestPending;
+ SendReceive(EGetCurrentAddressInfoSize, args, iClientRequester->iStatus);
+ iClientRequester->Start(EGetCurrentAddressInfoSize);
+
+ FUNC("- RPosIndicatorHelper::GetAddressInfoSize");
+ }
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::GetAddressL()
+// ---------------------------------------------------------------------------
+void RPosIndicatorHelper::GetAddressL()
+ {
+ FUNC("+ RPosIndicatorHelper::RPosIndicatorHelper");
+ TIpcArgs args;
+ FUNC(" TIpcArgs args");
+ iLmkBuf = HBufC8::NewL(iSize); // Need to check iStatus
+ FUNC(" HBufC8::NewLC");
+
+ TPtr8 bufferPtr = iLmkBuf->Des();
+ FUNC(" iLmkBuf->Des()");
+
+ args.Set( KParamCurrentAddress , &bufferPtr);
+ FUNC(" args.Set");
+
+ iClientRequester->iStatus = KRequestPending;
+ SendReceive(EGetCurrentAddressInfo, args, iClientRequester->iStatus);
+ iClientRequester->Start(EGetCurrentAddressInfo);
+
+ FUNC("- RPosIndicatorHelper::GetAddressL");
+
+ }
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::CancelCurrentRequest()
+// ---------------------------------------------------------------------------
+void RPosIndicatorHelper::CancelCurrentRequest()
+ {
+ FUNC("+ RPosIndicatorHelper::CancelCurrentRequest");
+ if (iClientRequester->IsActive())
+ {
+ SendReceive(ECancelCurrentOperation);
+ iClientRequester->Cancel();
+ }
+ FUNC("- RPosIndicatorHelper::CancelCurrentRequest");
+ }
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelper::NotifyServerRequestCompletion()
+// ---------------------------------------------------------------------------
+void RPosIndicatorHelper::NotifyServerRequestCompletion(TServiceIds aServiceId, TInt aErrCode )
+ {
+ FUNC("+ RPosIndicatorHelper::NotifyServerRequestCompletion");
+ TInt err = aErrCode;
+ switch( aServiceId )
+ {
+ case EGetCurrentPosition:
+ {
+ FUNC("case EGetCurrentPosition");
+
+ //delete old landmark
+ if(iLandmark)
+ {
+ delete iLandmark;
+ iLandmark = NULL;
+ }
+ //if error in retrieval of coordinate info, notify client
+ if( err!=KErrNone )
+ {
+ LOG("Error in NotifyServerRequestCompletion : %d",err);
+ //notify client about change in position information
+ iPosIndInfoChangeObserver->NotifyPosInfoChange( iLandmark, err );
+ return;
+ }
+ if( iCoordinateSettingValue == ELocCoordinatesNotHidden )
+ {
+ //add coordinate info to landmark object
+ TRAP(err,
+ iLandmark = CPosLandmark::NewL();
+ TPosition position;
+ iPositionInfo.GetPosition( position );
+ iLandmark->SetPositionL( position );
+ );
+
+ if(err == KErrNone)
+ {
+ LOG("No error in NotifyServerRequestCompletion : %d",err);
+ //notify client about change in position information
+ iPosIndInfoChangeObserver->NotifyPosInfoChange( iLandmark, err );
+ }
+ }
+ GetAddressInfoSize();
+ break;
+ }
+ case EGetCurrentAddressInfoSize:
+ {
+ FUNC("case EGetCurrentAddressInfoSize");
+
+ //delete old landmark
+ if(iLandmark)
+ {
+ delete iLandmark;
+ iLandmark = NULL;
+ }
+ //if error in retrieval of coordinate info, notify client
+ if( err!=KErrNone )
+ {
+ //notify client about change in position information
+ iPosIndInfoChangeObserver->NotifyPosInfoChange( iLandmark, err );
+ break;
+ }
+ GetAddressL();
+ break;
+ }
+ case EGetCurrentAddressInfo:
+ {
+ FUNC("case EGetCurrentAddressInfo");
+
+ //delete old landmark
+ if(iLandmark)
+ {
+ delete iLandmark;
+ iLandmark = NULL;
+ }
+ //if error in retrieval of coordinate info, notify client
+ if( err!=KErrNone )
+ {
+ //notify client about change in position information
+ iPosIndInfoChangeObserver->NotifyPosInfoChange( iLandmark, err );
+ }
+
+ //add coordinate info to landmark object
+ TRAPD(err,
+ iLandmark = CPosLandmark::NewL();
+ iLandmark = PosLandmarkSerialization::UnpackL(*iLmkBuf)
+ );
+
+ if(err == KErrNone)
+ {
+ //notify client about change in position information
+ iPosIndInfoChangeObserver->NotifyPosInfoChange( iLandmark, err );
+ }
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ FUNC("- RPosIndicatorHelper::NotifyServerRequestCompletion");
+ }
+
+void RPosIndicatorHelper::CheckHideCoordinateL()
+ {
+ FUNC("+ RPosIndicatorHelper::CheckHideCoordinateL");
+ CRepository* repository = CRepository::NewL( TUid::Uid( KCRUidLocLocalVariation) );
+ CleanupStack::PushL( repository );
+ User::LeaveIfError( repository->Get( KLocHideCoordinates,
+ iCoordinateSettingValue ));
+ CleanupStack::PopAndDestroy( repository );
+ FUNC("+ RPosIndicatorHelper::CheckHideCoordinateL");
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/src/posindicatorhelperserver.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,164 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicator Helper Client-Server communication
+*
+*/
+
+#include "posindicatorhelperserver.h"
+#include "posindicatorhelpererrors.h"
+#include "posindicatorserverconst.h"
+
+#include <s32mem.h>
+#include <e32std.h>
+
+const TInt KDefaultMessageSlots = 255; //max
+
+// ---------------------------------------------------------------------------
+// RPosIndicatorHelperServer::RPosIndicatorHelperServer()
+// Default constructor
+// ---------------------------------------------------------------------------
+//
+ RPosIndicatorHelperServer :: RPosIndicatorHelperServer():RSessionBase(),iReserved(NULL)
+ {
+ FUNC("+ RPosIndicatorHelperServer::RPosIndicatorHelperServer");
+ FUNC("- RPosIndicatorHelperServer::RPosIndicatorHelperServer");
+ }
+
+// ---------------------------------------------------------
+// RPosIndicatorHelperServer::Connect
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+ TInt RPosIndicatorHelperServer::Connect()
+ {
+ FUNC("+ RPosIndicatorHelperServer::Connect");
+ __ASSERT_ALWAYS(Handle() == 0, User::Panic(KPosIndHelperClientPanicCategory, EPosIndicatorHelperServerHandleNotClosed));
+
+ TInt ret = CreateSession(KPosIndHelperSrvName, Version(), KDefaultMessageSlots);
+
+ if( ret == KErrNotFound )
+ {
+#if defined(__WINSCW__)
+ StartLbsRootProcess();
+#endif
+ RProcess posIndHelperServerProcess;
+ ret = posIndHelperServerProcess.Create(KPosIndHelperSrvName, KNullDesC);
+
+ if( ret != KErrNone )
+ {
+ posIndHelperServerProcess.Close();
+ return KErrNotFound;
+ }
+
+ TRequestStatus status;
+ posIndHelperServerProcess.Rendezvous(status);
+
+ if( status != KRequestPending )
+ {
+ User::WaitForRequest(status);
+ posIndHelperServerProcess.Kill(KErrNone);
+ posIndHelperServerProcess.Close();
+ return status.Int();
+ }
+ else
+ {
+ posIndHelperServerProcess.Resume();
+ }
+
+ User::WaitForRequest(status);
+ posIndHelperServerProcess.Close();
+
+ if( status != KErrNone )
+ {
+ return (status.Int());
+ }
+ ret = CreateSession(KPosIndHelperSrvName, Version(), KDefaultMessageSlots);
+ }
+
+ return ret;
+ }
+
+// ---------------------------------------------------------
+// RPosIndicatorHelperServer::Close
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+ void RPosIndicatorHelperServer::Close()
+ {
+ FUNC("+ RPosIndicatorHelperServer::Close");
+ RSessionBase::Close();
+ FUNC("- RPosIndicatorHelperServer::Close");
+ }
+
+// ---------------------------------------------------------
+// RPosIndicatorHelperServer::Version
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+ TVersion RPosIndicatorHelperServer::Version() const
+ {
+ FUNC("+ RPosIndicatorHelperServer::Version");
+ return TVersion(KMajorVersionNumber,
+ KMinorVersionNumber,
+ KBuildVersionNumber);
+ }
+
+#if defined(__WINSCW__)
+// ---------------------------------------------------------
+// RPosIndicatorHelperServer::Version
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt RPosIndicatorHelperServer::StartLbsRootProcess()
+ {
+ FUNC("+ RPosIndicatorHelperServer::StartLbsRootProcess");
+
+ RProcess lbsrootProcess;
+ TInt ret = lbsrootProcess.Create(_L("lbsroot"), KNullDesC);
+
+ if( ret != KErrNone )
+ {
+ lbsrootProcess.Close();
+ return KErrNotFound;
+ }
+
+ TRequestStatus status;
+ lbsrootProcess.Rendezvous(status);
+
+ if( status != KRequestPending )
+ {
+ User::WaitForRequest(status);
+ lbsrootProcess.Kill(KErrNone);
+ lbsrootProcess.Close();
+ return KErrNotFound;
+ }
+ else
+ {
+ lbsrootProcess.Resume();
+ }
+
+ User::WaitForRequest(status);
+ lbsrootProcess.Close();
+
+ if( status != KErrNone )
+ {
+ return (status.Int());
+ }
+ return ret;
+ }
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/src/posindicatorinfo.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2010 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: Positioning Indicators Info - QT Wrapper
+*
+*/
+
+#include "posindicatorinfo.h"
+#include "posindicatorinfo_p.h"
+
+// ---------------------------------------------------------------------------
+// PositionIndicatorInfo::PositionIndicatorInfo()
+// ---------------------------------------------------------------------------
+ PosIndicatorInfo::PosIndicatorInfo()
+ {
+ FUNC("+ PosIndicatorInfo::PosIndicatorInfo");
+ d_ptr = new PosIndicatorInfoPrivate(this);
+ FUNC("- PosIndicatorInfo::PosIndicatorInfo");
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfo::~PosIndicatorInfo()
+// ---------------------------------------------------------------------------
+ PosIndicatorInfo::~PosIndicatorInfo()
+ {
+ FUNC("+ PosIndicatorInfo::~PosIndicatorInfo");
+ delete d_ptr;
+ d_ptr = NULL;
+ FUNC("- PosIndicatorInfo::~PosIndicatorInfo");
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfo::requestPosInfo()
+// ---------------------------------------------------------------------------
+ void PosIndicatorInfo::requestPosInfo()
+ {
+ FUNC("+ PosIndicatorInfo::requestPosInfo");
+ d_ptr->RequestPosInfo();
+ FUNC("- PosIndicatorInfo::requestPosInfo");
+ }
+
+ // ---------------------------------------------------------------------------
+ // PosIndicatorInfo::cancelPosInfo()
+ // ---------------------------------------------------------------------------
+ void PosIndicatorInfo::cancelPosInfo()
+ {
+ FUNC("+ PosIndicatorInfo::cancelPosInfo");
+ d_ptr->CancelPosInfo();
+ FUNC("- PosIndicatorInfo::cancelPosInfo");
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindhelperclientlib/src/posindicatorinfo_p.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,197 @@
+/*
+* Copyright (c) 2010 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: Implementation of position indicator private class.
+*
+*/
+
+#include "posindicatorinfo_p.h"
+#include "posgeoaddress.h"
+#include "posindicatorlogger.h"
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfoPrivate::PosIndicatorInfoPrivate()
+// ---------------------------------------------------------------------------
+PosIndicatorInfoPrivate::PosIndicatorInfoPrivate( PosIndicatorInfo *aPositionIndicator )
+ : q_ptr(aPositionIndicator)
+ {
+ FUNC("+ PosIndicatorInfoPrivate::PosIndicatorInfoPrivate");
+ QT_TRAP_THROWING (
+ qt_symbian_throwIfError(mPosIndicatorHelperServer.Connect());
+ qt_symbian_throwIfError(mPosIndicatorHelper.Open(mPosIndicatorHelperServer, this));
+ mPosGeoAddress = NULL;
+ )
+ FUNC("- PosIndicatorInfoPrivate::PosIndicatorInfoPrivate");
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfoPrivate::~PosIndicatorInfoPrivate()
+// ---------------------------------------------------------------------------
+PosIndicatorInfoPrivate::~PosIndicatorInfoPrivate()
+ {
+ FUNC("+ PosIndicatorInfoPrivate::~PosIndicatorInfoPrivate");
+ if(mPosGeoAddress)
+ {
+ delete mPosGeoAddress;
+ mPosGeoAddress = NULL;
+ }
+ mPosIndicatorHelper.CancelCurrentRequest();
+ mPosIndicatorHelper.Close();
+ mPosIndicatorHelperServer.Close();
+ FUNC("- PosIndicatorInfoPrivate::~PosIndicatorInfoPrivate");
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfoPrivate::RequestPosInfo()
+// ---------------------------------------------------------------------------
+void PosIndicatorInfoPrivate::RequestPosInfo()
+ {
+ FUNC("+ PosIndicatorInfoPrivate::RequestPosInfo");
+ mPosIndicatorHelper.RequestPosInfo();
+ FUNC("- PosIndicatorInfoPrivate::RequestPosInfo");
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfoPrivate::CancelPosInfo()
+// ---------------------------------------------------------------------------
+void PosIndicatorInfoPrivate::CancelPosInfo()
+ {
+ FUNC("+ PosIndicatorInfoPrivate::CancelPosInfo");
+ mPosIndicatorHelper.CancelCurrentRequest();
+ FUNC("- PosIndicatorInfoPrivate::CancelPosInfo");
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicatorInfoPrivate::NotifyPosInfoChange()
+// ---------------------------------------------------------------------------
+void PosIndicatorInfoPrivate::NotifyPosInfoChange(CPosLandmark* aLandmark, TInt aErrCode)
+ {
+ FUNC("+ PosIndicatorInfoPrivate::NotifyPosInfoChange");
+
+ if(mPosGeoAddress)
+ {
+ delete mPosGeoAddress;
+ mPosGeoAddress = NULL;
+ }
+ mPosGeoAddress = new PosGeoAddress();
+
+ if ( aErrCode != KErrNone )
+ {
+ LOG("Error in NotifyPosInfoChange = ",aErrCode);
+ emit q_ptr->posInfoUpdated(*mPosGeoAddress , aErrCode );
+ return;
+ }
+
+ // Coordinate info
+ TLocality locality;
+ TInt err = aLandmark->GetPosition(locality);
+
+ if (err != KErrNone)
+ {
+ emit q_ptr->posInfoUpdated( *mPosGeoAddress, err );
+ FUNC("Unable to get position, exitting with error");
+ return;
+ }
+ else
+ {
+ mPosGeoAddress->setLatitude(locality.Latitude());
+ mPosGeoAddress->setLongitude(locality.Longitude());
+ mPosGeoAddress->sethAccuracy(locality.HorizontalAccuracy());
+ mPosGeoAddress->setvAccuracy(locality.VerticalAccuracy());
+ }
+
+ //reverse geo-code info
+ TUint numOfPositionFields = aLandmark->NumOfAvailablePositionFields();
+ if (numOfPositionFields>0)
+ {
+ FUNC("Retrieving Address");
+
+ TPositionFieldId fieldId;
+ TPtrC value;
+
+ // Read fields input by reverse geocoding and add to address
+ FUNC("Reading First Field");
+
+ fieldId = aLandmark->FirstPositionFieldId();
+ aLandmark->GetPositionField( fieldId, value );
+ AddToAddress(fieldId, value);
+ FUNC("Reading Fields");
+
+ for( int i = 0; i<numOfPositionFields ; ++i )
+ {
+ FUNC("Reading Fields");
+ fieldId = aLandmark->NextPositionFieldId(fieldId);
+ aLandmark->GetPositionField( fieldId, value );
+ AddToAddress(fieldId, value);
+ }
+ }
+
+ emit q_ptr->posInfoUpdated(*mPosGeoAddress , aErrCode );
+ FUNC("- PosIndicatorInfoPrivate::NotifyPosInfoChange");
+ }
+
+void PosIndicatorInfoPrivate::AddToAddress(TPositionFieldId aFieldId, TPtrC aValue)
+ {
+ FUNC("+ PosIndicatorInfoPrivate::AddToAddress");
+ switch(aFieldId)
+ {
+ case EPositionFieldCountry:
+ {
+ mPosGeoAddress->setCountry(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+ case EPositionFieldState:
+ {
+ mPosGeoAddress->setState(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+ case EPositionFieldDistrict:
+ {
+ mPosGeoAddress->setDistrict(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+
+ case EPositionFieldCity:
+ {
+ mPosGeoAddress->setCity(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+
+ case EPositionFieldPostalCode:
+ {
+ mPosGeoAddress->setZip(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+
+ case EPositionFieldStreet:
+ {
+ mPosGeoAddress->setStreet(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+
+ case EPositionFieldStreetExtension:
+ {
+ mPosGeoAddress->setNumber(QString::fromUtf16(aValue.Ptr(),
+ aValue.Length()));
+ break;
+ }
+
+ }
+ FUNC("- PosIndicatorInfoPrivate::AddToAddress");
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicator.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,36 @@
+# 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: project file for positioning settings in control panel
+
+
+TEMPLATE = subdirs
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+
+# Build.inf rules
+BLD_INF_RULES.prj_mmpfiles += "posindicatorhelperserver/group/posindicatorhelperserver.mmp"
+BLD_INF_RULES.prj_mmpfiles += "posreversegeocodeinterface/group/posreversegeocodeinterface.mmp"
+BLD_INF_RULES.prj_mmpfiles += "posreversegeocodeplugin/group/posreversegeocodeplugin.mmp"
+
+SUBDIRS += posindhelperclientlib/posindicatorhelperclientlib.pro
+SUBDIRS += posindicatorplugin/posindicator.pro
+
+DEFINES += BUILD_POSINDICATOR
+
+BLD_INF_RULES.prj_exports += "rom/posindicator.iby CORE_MW_LAYER_IBY_EXPORT_PATH(posindicator.iby)" \
+ "posindhelperclientlib/inc/posgeoaddress.h ./inc/posgeoaddress.h" \
+ "posindhelperclientlib/inc/posindicatorglobal.h ./inc/posindicatorglobal.h" \
+ "posindhelperclientlib/inc/posindicatorinfo.h ./inc/posindicatorinfo.h" \
+ "posindicatorhelperserver/inc/posindicatorserverconst.h ./inc/posindicatorserverconst.h" \
+ "posreversegeocodeinterface/inc/posreversegeocodeinterface.h ./inc/posreversegeocodeinterface.h" \
+ "posreversegeocodeinterface/inc/posreversegeocodeinterface.hrh ./inc/posreversegeocodeinterface.hrh" \
+
+# TODO:This is temporary solution. Once there is support to include bld.inf directly, this needs to be
+# removed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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 provides the information required for building the
+* whole of a posindicatorhelperserver.
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+posindicatorhelperserver.mmp
+
+PRJ_EXPORTS
+../inc/posindicatorserverconst.h |../../inc/posindicatorserverconst.h
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/group/posindicatorhelperserver.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 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 is the project specification file for posindicatorhelperserver.
+*
+*/
+
+TARGET posindicatorhelperserver.exe
+TARGETTYPE exe
+UID 0 0x2002E689
+
+CAPABILITY CAP_SERVER -ProtServ
+
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/ecom
+
+SOURCEPATH ../src
+SOURCE posindicatorhelperserverstartup.cpp
+SOURCE posindicatorserversession.cpp
+SOURCE posindicatorserversubsession.cpp
+SOURCE posindicatorservercore.cpp
+SOURCE posindicatorsubsessionregistry.cpp
+SOURCE posindicatorlocationrequestor.cpp
+
+LIBRARY euser.lib
+LIBRARY lbs.lib
+LIBRARY posreversegeocodeinterface.lib
+LIBRARY eposlandmarks.lib
+LIBRARY flogger.lib
+LIBRARY ecom.lib
+
+#ifdef ENABLE_ABIV2_MODE
+DEBUGGABLE_UDEBONLY
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorlocationrequestor.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,161 @@
+/*
+* Copyright (c) 2010 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: Declaration of location requestor class.
+*
+*/
+
+#ifndef POSINDICATORLOCATIONREQUESTOR_H
+#define POSINDICATORLOCATIONREQUESTOR_H
+
+#include <lbs.h>
+#include <lbssatellite.h>
+#include <EPos_CPosLandmark.h>
+#include "posreversegeocodeinterface.h"
+
+class CPosIndicatorLocationRequestor : public CActive,
+ public MPosReverseGeocodeObserver
+ {
+ /**
+ * This defines the different states of location requestor
+ */
+ enum TOperation
+ {
+ /**
+ * Idle state
+ */
+ ENone,
+
+ /**
+ * Acquiring last known position
+ */
+ ELastKnownPosition,
+
+ /**
+ * During acquiring location
+ */
+ ECurrentPosition,
+
+ /**
+ * During acquiring address.
+ */
+ ECurrentAddress
+ };
+public:
+ /**
+ * Factory function that instantiates an object
+ * of CPosIndicatorLocationRequestor
+ */
+ static CPosIndicatorLocationRequestor* NewL();
+
+ /**
+ * Destructor
+ */
+ ~CPosIndicatorLocationRequestor();
+
+ /**
+ * Gets current position
+ */
+ void GetCurrentPosition( const RMessage2& aMessage );
+
+ /**
+ * Gets current address info size.
+ */
+ void GetCurrentAddressInfoSizeL( const RMessage2& aMessage );
+
+ /**
+ * Gets current address info.
+ */
+ void GetCurrentAddressInfoL( const RMessage2& aMessage );
+
+ /**
+ * Cancels outstanding request
+ */
+ void CancelRequest( const RMessage2& aMessage );
+
+
+public: // From MPosReverseGeocodeObserver
+ virtual void ReverseGeocodeComplete( TInt aErrorcode );
+
+protected: // From CActive
+ void RunL();
+
+ void DoCancel();
+
+private:
+ /**
+ * Default constructor.
+ */
+ CPosIndicatorLocationRequestor();
+
+ /**
+ * 2nd phase constructor for instantiating member variables
+ */
+ void ConstructL();
+
+
+private: // Data members
+ /**
+ * Queue of position request
+ */
+ RArray<RMessage2> iPositionRequestQueue;
+
+ /**
+ * Queue of address request
+ */
+ RArray<RMessage2> iAddressRequestQueue;
+ /**
+ * Handle to the location server interface
+ */
+ RPositionServer iPosServer;
+
+ /**
+ * Handle to create a subsession with the location sever
+ */
+ RPositioner iPositioner;
+
+ /**
+ * Pointer to reverse geo-coding plugin object
+ * Own
+ */
+ CPosReverseGeocodeInterface* iReverseGeoCodeInterface;
+
+ /**
+ * Pointer to landmark object
+ * Own
+ */
+ CPosLandmark* iLandmark;
+
+ /**
+ * Pointer to landmarks package.
+ * Own
+ */
+ HBufC8* iLandmarkPackage;
+
+ /**
+ * Last known position
+ */
+ TPositionInfo iLastKnownInfo;
+
+ /**
+ * Requested satellite info.
+ */
+ TPositionSatelliteInfo iPositionInfo;
+
+ /**
+ * Current operation that is progress.
+ */
+ TOperation iOperation;
+ };
+
+#endif /* POSINDICATORLOCATIONREQUESTOR_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorlogger.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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: Implementation of logger.
+*
+*/
+
+
+#ifndef POSINDICATORLOGGER_H
+#define POSINDICATORLOGGER_H
+
+#include <flogger.h>
+#include <f32file.h>
+
+#define FUNC( x ) { TBuf8<150> buffer; \
+ const unsigned char* string = (unsigned char*)(x); \
+ buffer.Zero(); \
+ buffer.Copy(string); \
+ RFileLogger::Write( _L("lbs"),_L("PosIndicatorLog.log"),EFileLoggingModeAppend,buffer); }
+
+#define LOG( x, y ) { TBuf8<150> buffer; \
+ const unsigned char* string = (unsigned char*)(x); \
+ buffer.Zero(); \
+ buffer.Copy(string); \
+ buffer.AppendNum(y); \
+ RFileLogger::Write( _L("lbs"),_L("PosIndicatorLog.log"),EFileLoggingModeAppend,buffer); }
+
+#endif /* POSINDICATORLOGGER_H*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorserverconst.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2010 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: Declaration of server core class.
+*
+*/
+
+#ifndef POSINDICATORSERVERCONSTS_H
+#define POSINDICATORSERVERCONSTS_H
+
+/**
+ * Server core name.
+ */
+_LIT( KPosIndHelperSrvName,"posindicatorhelperserver" );
+
+
+/**
+ * Current server version number
+ *
+ */
+const TInt8 KMajorVersionNumber = 1;
+const TInt8 KMinorVersionNumber = 0;
+const TInt16 KBuildVersionNumber = 0;
+
+
+/**
+ * Service Ids for client service requests. These
+ * service numbers should be used by the client library
+ * in all IPC messages to indicate the type of service
+ * required
+ */
+enum TServiceIds
+ {
+ /* Subsession Open */
+ ESubSessionOpen,
+ /* Subsession Close */
+ ESubSessionClose,
+ /* Get current position */
+ EGetCurrentPosition,
+ /* Get current address info size */
+ EGetCurrentAddressInfoSize,
+ /* Get current address info */
+ EGetCurrentAddressInfo,
+ /* Cancel outstanding request*/
+ ECancelCurrentOperation
+ };
+
+
+// This position in the IPC message should hold the sub-session handle
+const TInt KParamSubsessionHandle = 3;
+
+// This position in the IPC message should hold last known position.
+const TInt KParamLastKnownPosition = 0;
+
+// This position in the IPC message should hold current position.
+const TInt KParamCurrentPosition = 0;
+
+// This position in the IPC message should hold current address size.
+const TInt KParamCurrentAddressSize = 0;
+
+// This position in the IPC message should hold current address size.
+const TInt KParamCurrentAddress = 0;
+
+#endif // POSINDICATORSERVERCONSTS_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorservercore.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,101 @@
+/*
+* Copyright (c) 2010 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: Declaration of server core class.
+*
+*/
+
+#ifndef POSINDICATORSERVERCORE_H
+#define POSINDICATORSERVERCORE_H
+
+#include <e32base.h>
+#include "posindicatorlocationrequestor.h"
+
+class CPosIndicatorServerCore : public CServer2
+ {
+public:
+ /**
+ * Destructor
+ *
+ */
+ ~CPosIndicatorServerCore();
+
+ /**
+ * Instantiates a new object of
+ * CPosIndicatorServerCore
+ *
+ */
+ static CPosIndicatorServerCore* NewLC();
+
+ /**
+ * Starts the position indicator server to listen
+ * to incoming requests
+ *
+ * @param[in] aName the name of the server which the
+ * client will use to connect
+ */
+ void StartL(const TDesC &aName);
+
+ /**
+ * Returns the handle of location requestor
+ */
+ CPosIndicatorLocationRequestor* GetLocationRequestorHandle() const;
+
+ /**
+ * Handle session closure.
+ */
+ void HandleSessionClosure() const;
+
+private:
+ /**
+ * C++ constructor.
+ *
+ * @param aServerType Sharable or non-sharable sessions.
+ *
+ */
+ CPosIndicatorServerCore( TServerType aServerType = ESharableSessions );
+
+ /**
+ * 2nd phase constructor for instantiating member variables
+ *
+ */
+ void ConstructL();
+
+ /**
+ * From CServer2. Creates a server-side session object.
+ *
+ * @param aVersion The version information supplied by the client.
+ * @param aMessage Represents the details of the client request that
+ * is requesting the creation of the session.
+ *
+ * @return A pointer to the newly created server-side session object
+ */
+ CSession2* NewSessionL(const TVersion& aVersion,
+ const RMessage2& aMessage) const;
+
+
+private: // Private Data
+ /**
+ * Pointer to location requestor object.
+ * Own
+ */
+ CPosIndicatorLocationRequestor* iLocationRequestor;
+
+ /**
+ * Session counter
+ */
+ mutable TInt iSessionCount;
+ };
+
+
+#endif /* POSINDICATORSERVERCORE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorserversession.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2010 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: Declaration of server session class.
+*
+*/
+
+#ifndef POSINDICATORSERVERSESSION_H
+#define POSINDICATORSERVERSESSION_H
+
+#include <e32base.h>
+
+// Forward declaration
+class CPosIndicatorServerCore;
+class CPosIndicatorSubSessionRegistry;
+
+class CPosIndicatorServerSession : public CSession2
+ {
+public:
+ /**
+ * Instantiates a new object of CPosIndicatorServerSession
+ *
+ */
+ static CPosIndicatorServerSession* NewL( const
+ CPosIndicatorServerCore& aServerCore );
+
+public: // From CSession2
+ /**
+ * Handles the servicing of a client request that
+ * has been passed to the server via this session.
+ *
+ * @param[in] aMessage The message containing the details of
+ * the client request
+ *
+ */
+ virtual void ServiceL(const RMessage2 &aMessage);
+
+ /**
+ * Handles error cases when the ServiceL method leaves.
+ *
+ * @param[in] aMessage The message containing the details of
+ * the client request
+ * @param[in] aError The error code that the serviceL method
+ * leaves with
+ */
+ virtual void ServiceError(const RMessage2& aMessage,TInt aError);
+
+ /**
+ * Handles session closure when the client panics.
+ *
+ * @param[in] aMessage The message containing the details of
+ * the client request
+ * @param[in] aError The error code that the serviceL method
+ * leaves with
+ */
+ virtual void Disconnect(const RMessage2& aMessage);
+
+private:
+ /**
+ * Default C++ Constructor
+ *
+ * @param[in] aSecureId the secure Id of the client application
+ * which has created this session object.
+ *
+ */
+ CPosIndicatorServerSession( const CPosIndicatorServerCore& aServerCore );
+
+ /**
+ * Destructor
+ *
+ */
+ ~CPosIndicatorServerSession();
+
+ /**
+ * 2nd phase constructor for instantiating
+ * member variables
+ *
+ * @param[in] aSecureId the secure Id of the client application
+ * which has created this session object.
+ */
+ void ConstructL();
+
+ /**
+ * Create a sub-session object
+ *
+ */
+ void CreateSubSessionL(const RMessage2 &aMessage);
+
+ /**
+ * Forwards client request to sub-session
+ *
+ * @aMessage[in] The message containing the details of
+ * the client request
+ *
+ */
+ void ForwardToSubSessionL(const RMessage2& aMessage);
+
+
+private: //Data
+
+ /**
+ * Reference to the server object
+ */
+ const CPosIndicatorServerCore& iServerCore;
+
+ /**
+ * Pointer to the sub-session registry
+ * Own
+ */
+ CPosIndicatorSubSessionRegistry* iSubSessionRegistry;
+ };
+
+#endif /* POSINDICATORSERVERSESSION_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorserversubsession.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2010 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: Declaration of server session class.
+*
+*/
+
+#ifndef POSINDICATORSERVERSUBSESSION_H
+#define POSINDICATORSERVERSUBSESSION_H
+
+#include <e32base.h>
+
+class CPosIndicatorLocationRequestor;
+
+class CPosIndicatorServerSubsession : public CObject
+ {
+public:
+ /**
+ * Instantiates a new object of
+ * CPosIndicatorServerSubsession
+ *
+ * @return a pointer to instance of CLbtSubSession
+ */
+ static CPosIndicatorServerSubsession* NewL( CPosIndicatorLocationRequestor&
+ aLocationRequestor );
+
+ /**
+ * C++ destructor
+ *
+ */
+ ~CPosIndicatorServerSubsession();
+
+ /**
+ * Handles the servicing of a client request that
+ * has been passed from the session
+ *
+ * @aMessage The message containing the details of
+ * the client request
+ *
+ */
+ void ServiceL(const RMessage2 &aMessage);
+
+private:
+ /**
+ * C++ Default constructor
+ *
+ */
+ CPosIndicatorServerSubsession( CPosIndicatorLocationRequestor&
+ aLocationRequestor );
+
+ /**
+ * 2nd phase constructor for instantiating
+ * member variables
+ *
+ */
+ void ConstructL();
+
+private: // Data member
+ /**
+ * Pointer to location requestor object.
+ * Not own
+ */
+ CPosIndicatorLocationRequestor& iLocationRequestor;
+ };
+#endif /* POSINDICATORSERVERSUBSESSION_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/inc/posindicatorsubsessionregistry.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2010 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: Declaration of subsession registry class.
+*
+*/
+#ifndef POSINDICATORSUBSESSIONREGISTRY_H
+#define POSINDICATORSUBSESSIONREGISTRY_H
+
+#include <e32base.h>
+
+// FORWARD DECLARATIONS
+class CObjectCon;
+class CObjectConIx;
+class CPosIndicatorServerSubsession;
+
+class CPosIndicatorSubSessionRegistry : public CBase
+ {
+public:
+ /**
+ * Instantiates a new object of
+ * CPosIndicatorSubSessionRegistry
+ *
+ * @return pointer to an instance of
+ * CPosIndicatorSubSessionRegistry
+ */
+ static CPosIndicatorSubSessionRegistry* NewL();
+
+ /**
+ * C++ destructor
+ *
+ */
+ ~CPosIndicatorSubSessionRegistry();
+
+ /**
+ * Adds an object instance to the registry and
+ * takes ownership of the object
+ *
+ * @param aSubSession an sub-session object instance
+ * @return a registry handle to the object instance.
+ */
+ TInt AddSubSessionL( CPosIndicatorServerSubsession* aSubSession );
+
+ /**
+ * Removes the subsession from the registry and
+ * also closes the sub-session handle
+ *
+ * @param aHandle a handle to the subsession
+ * @return KErrNone if handle close successfully,
+ * ELbtServerBadHandle if handle not found
+ *
+ */
+ TInt CloseSubSession( TUint aHandle );
+
+ /**
+ * Retrieves the appropriate subsession handle
+ * with the specified index
+ *
+ * @param aHandle index to the subsession handle
+ * @return pointer the subsession
+ *
+ */
+ CPosIndicatorServerSubsession* SubSessionFromHandle(
+ TUint aHandle );
+
+private:
+ /**
+ * Default C++ Constructor
+ *
+ */
+ CPosIndicatorSubSessionRegistry();
+
+ /**
+ * 2nd phase constructor for instantiating
+ * member variables
+ *
+ */
+ void ConstructL();
+
+private:// Data
+ /**
+ * CObject to create the object container
+ * Own
+ */
+ CObjectIx* iRegistryIndex;
+
+ /**
+ * Object index container
+ * Own
+ */
+ CObjectCon* iRegistryContainer;
+
+ /**
+ * Object index
+ * Own
+ */
+ CObjectConIx* iRegistryContainerIndex;
+ };
+
+#endif /* POSINDICATORSUBSESSIONREGISTRY_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/src/posindicatorhelperserverstartup.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 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: Position indicator server start up
+*
+*/
+
+#include <e32base.h>
+#include <e32std.h>
+#include "posindicatorservercore.h"
+#include "posindicatorserverconst.h"
+#include "posindicatorlogger.h"
+
+// ---------------------------------------------------------------------------
+// Starts the server core
+// ---------------------------------------------------------------------------
+//
+void StartServerCoreL()
+ {
+ FUNC("StartServerCoreL");
+ User::LeaveIfError(RThread().RenameMe(KPosIndHelperSrvName));
+
+ // Install the scheduler and start the LBT server
+ CActiveScheduler* scheduler = new ( ELeave ) CActiveScheduler;
+ CleanupStack::PushL( scheduler );
+ CActiveScheduler::Install( scheduler );
+
+ CPosIndicatorServerCore* server = CPosIndicatorServerCore::NewLC();
+
+ // This starts the position indicator server
+ server->StartL(KPosIndHelperSrvName);
+
+ // Finish rendezvous with launching process
+ RProcess::Rendezvous( KErrNone );
+
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy( 2, scheduler );
+ }
+
+
+GLDEF_C TInt E32Main()
+ {
+ FUNC("E32Main");
+ __UHEAP_MARK;
+
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+
+ // The ret is initialized to KErrNoMemory so that the function returns
+ // KErrNoMemory if the cleanupstack allocation fails.
+ TInt ret = KErrNoMemory;
+ if (cleanupStack)
+ {
+ TRAP(ret, StartServerCoreL());
+ delete cleanupStack;
+ }
+
+ __UHEAP_MARKEND;
+ return ret;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/src/posindicatorlocationrequestor.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,366 @@
+/*
+* Copyright (c) 2010 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: Implementation of location requestor class.
+*
+*/
+
+#include "posindicatorlocationrequestor.h"
+#include "posindicatorserverconst.h"
+#include "posindicatorlogger.h"
+
+#include <epos_poslandmarkserialization.h>
+#include <ecom.h>
+
+_LIT( KServer,"PositionIndicatorServer" );
+static const TInt KMaxUpdateAge = 10;
+static const TInt KUpdateTimeOut = 5000000;
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::NewL
+// -----------------------------------------------------------------------------
+CPosIndicatorLocationRequestor* CPosIndicatorLocationRequestor::NewL()
+ {
+ FUNC("CPosIndicatorLocationRequestor::NewL");
+ CPosIndicatorLocationRequestor* self = new ( ELeave )
+ CPosIndicatorLocationRequestor;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::~CPosIndicatorLocationRequestor
+// -----------------------------------------------------------------------------
+CPosIndicatorLocationRequestor::~CPosIndicatorLocationRequestor()
+ {
+ FUNC("CPosIndicatorLocationRequestor::~CPosIndicatorLocationRequestor");
+
+ // Cancel the current operation.
+ Cancel();
+
+ iPositionRequestQueue.Close();
+ iAddressRequestQueue.Close();
+ iPositioner.Close();
+ iPosServer.Close();
+ delete iReverseGeoCodeInterface;
+ iReverseGeoCodeInterface = NULL;
+ delete iLandmark;
+ iLandmark = NULL;
+ delete iLandmarkPackage;
+ iLandmarkPackage = NULL;
+ // Release all landmark resources
+ ReleaseLandmarkResources();
+
+ // Release all ECOM resources
+ REComSession::FinalClose();
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::CPosIndicatorLocationRequestor
+// -----------------------------------------------------------------------------
+CPosIndicatorLocationRequestor::CPosIndicatorLocationRequestor():CActive(
+ EPriorityStandard )
+ {
+ FUNC("CPosIndicatorLocationRequestor::CPosIndicatorLocationRequestor");
+ CActiveScheduler::Add( this );
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::ConstructL
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::ConstructL()
+ {
+ FUNC("CPosIndicatorLocationRequestor::ConstructL");
+ iOperation = ENone;
+
+ User::LeaveIfError( iPosServer.Connect() );
+
+ TInt error = iPositioner.Open( iPosServer );
+
+ User::LeaveIfError( iPositioner.SetRequestor(
+ CRequestor::ERequestorService,
+ CRequestor::EFormatApplication,
+ KServer ) );
+
+ TPositionUpdateOptions updateops;
+ updateops.SetUpdateTimeOut(TTimeIntervalMicroSeconds(KUpdateTimeOut));
+ User::LeaveIfError( iPositioner.SetUpdateOptions( updateops ));
+
+ iReverseGeoCodeInterface = CPosReverseGeocodeInterface::NewL( *this );
+
+ iLandmark = CPosLandmark::NewL();
+
+ iLandmarkPackage = NULL;
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::GetCurrentPosition
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::GetCurrentPosition( const RMessage2&
+ aMessage )
+ {
+ FUNC("CPosIndicatorLocationRequestor::GetCurrentPosition");
+ // If location fix is already available and this is waiting for address info,
+ // reply the message with the fix available
+ if( iOperation == ECurrentAddress )
+ {
+ FUNC("iOperation == ECurrentAddress");
+ TPckg<TPositionSatelliteInfo> posSatPckg( iPositionInfo );
+ TInt error = aMessage.Write( KParamCurrentPosition,posSatPckg );
+ aMessage.Complete( error );
+ }
+ else
+ {
+ FUNC("iOperation != ECurrentAddress");
+ // Store client's message
+ iPositionRequestQueue.Append( aMessage );
+ // If the requestor is idle without doing any operation, request
+ // current location.
+ if( iOperation == ENone )
+ {
+ FUNC("iOperation == ENone");
+ iOperation = ELastKnownPosition;
+
+ // Last known position.
+ iPositioner.GetLastKnownPosition( iLastKnownInfo,iStatus );
+ SetActive();
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::GetCurrentAddressInfoSizeL
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::GetCurrentAddressInfoSizeL( const RMessage2&
+ aMessage )
+ {
+ FUNC("CPosIndicatorLocationRequestor::GetCurrentAddressInfoSizeL");
+ // Store client's message
+ iAddressRequestQueue.Append( aMessage );
+
+ // If the requestor is idle without doing any operation, request
+ // address information.
+ if( iOperation == ENone )
+ {
+ iOperation = ECurrentAddress;
+ // Clear previous landmark information.
+ iLandmark->RemoveLandmarkAttributes( CPosLandmark::EAllAttributes );
+ TPosition position;
+ iPositionInfo.GetPosition( position );
+ iLandmark->SetPositionL( position );
+ iReverseGeoCodeInterface->GetAddressByCoordinateL( *iLandmark );
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::GetCurrentAddressInfoL
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::GetCurrentAddressInfoL( const RMessage2&
+ aMessage )
+ {
+ FUNC("CPosIndicatorLocationRequestor::GetCurrentAddressInfoL");
+ TInt error = aMessage.Write( KParamCurrentAddress,*iLandmarkPackage );
+ aMessage.Complete( error );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::RunL
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::RunL()
+ {
+ FUNC("CPosIndicatorLocationRequestor::RunL");
+ LOG("Error Status : ", iStatus.Int());
+ switch( iOperation )
+ {
+ case ELastKnownPosition:
+ {
+ // Check the time stamp of the last fix, if the fix is 10 sec
+ // old, request for the new fix.
+ TPosition position;
+ iLastKnownInfo.GetPosition( position );
+ TTime timeOfFix = position.Time();
+ TTime currentTime;
+ currentTime.HomeTime();
+ timeOfFix += TTimeIntervalSeconds( KMaxUpdateAge );
+ if( iStatus.Int() == KErrNone && timeOfFix < currentTime &&
+ !(Math::IsNaN( position.Latitude() ) || Math::IsNaN( position.Longitude() ) ) )
+ {
+ // Set the last knowm position to position info to send it to
+ // client.
+ iPositionInfo.SetPosition( position );
+ }
+ else
+ {
+ iOperation = ECurrentPosition;
+
+ // Request current position.
+ iPositioner.NotifyPositionUpdate( iPositionInfo,iStatus );
+ SetActive();
+ return;
+ }
+ }
+ case ECurrentPosition:
+ {
+ // Reset operation id
+ iOperation = ENone;
+ // Pack the satellite position information
+ TPckg<TPositionSatelliteInfo> posSatPckg( iPositionInfo );
+ TInt count = iPositionRequestQueue.Count();
+ for( TInt i=0;i<count;++i )
+ {
+ TInt error = iStatus.Int();
+ if( error == KErrNone )
+ {
+ error = iPositionRequestQueue[i].Write( KParamCurrentPosition,posSatPckg );
+ }
+ iPositionRequestQueue[i].Complete( error );
+ }
+ // All the messages in the position request queue are completed. Hence reset the list.
+ iPositionRequestQueue.Reset();
+ break;
+ }
+ case ECurrentAddress:
+ {
+ FUNC("ECurrentAddress");
+ // Reset operation id
+ iOperation = ENone;
+ // Pack landmarks information
+ delete iLandmarkPackage;
+ iLandmarkPackage = NULL;
+ iLandmarkPackage = PosLandmarkSerialization::PackL( *iLandmark );
+ TInt count = iAddressRequestQueue.Count();
+ for( TInt i=0;i<count;i++ )
+ {
+ TInt error = iStatus.Int();
+ if( error == KErrNone )
+ {
+ TPckg<TInt> size( iLandmarkPackage->Size() );
+ error = iAddressRequestQueue[i].Write( KParamCurrentAddressSize,size );
+ }
+ iAddressRequestQueue[i].Complete( error );
+ }
+ // All the messages in the address request queue are completed. Hence reset the list.
+ iAddressRequestQueue.Reset();
+ break;
+ }
+
+ default:
+ {
+ FUNC("- CPosIndicatorLocationRequestor::RunL default case");
+ break;
+ }
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::CancelRequest
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::CancelRequest( const RMessage2& aMessage )
+ {
+ // Iterate through the outstanding request and check whether there are
+ // outstanding request from the subsession from which cancel call is
+ // received.
+ RMessage2 outStandingMessage;
+ TBool outStandingFlag = EFalse;
+ TInt count = iPositionRequestQueue.Count();
+ for( TInt i=0;i<count;++i )
+ {
+ if( iPositionRequestQueue[i].SecureId() == aMessage.SecureId() &&
+ iPositionRequestQueue[i].Int3() == aMessage.Int3() )
+ {
+ outStandingMessage = iPositionRequestQueue[i];
+ iPositionRequestQueue.Remove(i);
+ outStandingFlag = ETrue;
+ break;
+ }
+ }
+
+ // If the outstanding request is not found in the position request queue,
+ // search address request queue.
+ if( !outStandingFlag )
+ {
+ count = iAddressRequestQueue.Count();
+ for( TInt i=0;i<count;++i )
+ {
+ if( iAddressRequestQueue[i].SecureId() == aMessage.SecureId() &&
+ iAddressRequestQueue[i].Int3() == aMessage.Int3() )
+ {
+ outStandingMessage = iAddressRequestQueue[i];
+ iAddressRequestQueue.Remove(i);
+ outStandingFlag = ETrue;
+ break;
+ }
+ }
+ }
+
+ // If the both position and address request queue are zero, cancel outstanding request
+ if( !iAddressRequestQueue.Count() &&
+ !iPositionRequestQueue.Count() )
+ {
+ Cancel();
+ }
+ if( outStandingFlag )
+ {
+ outStandingMessage.Complete( KErrCancel );
+ }
+ // Complete cancel request.
+ aMessage.Complete( KErrNone );
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::DoCancel
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::DoCancel()
+ {
+ FUNC("CPosIndicatorLocationRequestor::DoCancel");
+ switch( iOperation )
+ {
+ case ELastKnownPosition:
+ {
+ iPositioner.CancelRequest( RPositionerSubSessionBase::EReqGetLastKnownPosition );
+ break;
+ }
+ case ECurrentPosition:
+ {
+ iPositioner.CancelRequest( RPositionerSubSessionBase::EReqNotifyPositionUpdate );
+ break;
+ }
+ case ECurrentAddress:
+ {
+ iReverseGeoCodeInterface->Cancel();
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CPosIndicatorLocationRequestor::ReverseGeocodeComplete
+// -----------------------------------------------------------------------------
+void CPosIndicatorLocationRequestor::ReverseGeocodeComplete( TInt aErrorcode )
+ {
+ FUNC("CPosIndicatorLocationRequestor::ReverseGeocodeComplete");
+ // Here we self complete our active to release the control from this
+ // call back method.
+ iStatus = KRequestPending;
+ SetActive();
+ TRequestStatus* statusPtr = &iStatus;
+ User::RequestComplete( statusPtr,aErrorcode );
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/src/posindicatorservercore.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,132 @@
+/*
+* Copyright (c) 2010 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: Implementation of server core class.
+*
+*/
+
+#include "posindicatorservercore.h"
+#include "posindicatorserversession.h"
+#include "posindicatorserverconst.h"
+#include "posindicatorlogger.h"
+
+// Priorty of server
+// This number has its origin in Symbian development.
+// The priority of a server active object should be 950.
+enum
+ {
+ EPriority=950
+ };
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::NewLC
+//---------------------------------------------------------------
+CPosIndicatorServerCore* CPosIndicatorServerCore::NewLC()
+ {
+ FUNC("CPosIndicatorServerCore::NewLC");
+ CPosIndicatorServerCore* self = new( ELeave )
+ CPosIndicatorServerCore;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ return self;
+ }
+
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::CPosIndicatorServerCore
+//---------------------------------------------------------------
+CPosIndicatorServerCore::CPosIndicatorServerCore(
+ TServerType aServerType ):
+ CServer2( EPriority,aServerType ),
+ iSessionCount( 0 )
+ {
+ FUNC("CPosIndicatorServerCore::CPosIndicatorServerCore");
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::~CPosIndicatorServerCore
+//---------------------------------------------------------------
+CPosIndicatorServerCore::~CPosIndicatorServerCore()
+ {
+ FUNC("CPosIndicatorServerCore::~CPosIndicatorServerCore");
+ delete iLocationRequestor;
+ iLocationRequestor = NULL;
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::StartL
+//---------------------------------------------------------------
+void CPosIndicatorServerCore::StartL(const TDesC &aName)
+ {
+ FUNC("CPosIndicatorServerCore::StartL");
+ CServer2::StartL(aName);
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::ConstructL
+//---------------------------------------------------------------
+void CPosIndicatorServerCore::ConstructL()
+ {
+ FUNC("CPosIndicatorServerCore::ConstructL");
+ iLocationRequestor = CPosIndicatorLocationRequestor::NewL();
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::NewSessionL
+//---------------------------------------------------------------
+CSession2* CPosIndicatorServerCore::NewSessionL( const TVersion& aVersion,
+ const RMessage2& /*aMessage*/ ) const
+ {
+ FUNC("CPosIndicatorServerCore::NewSessionL");
+ // Check if we're the right version
+ TVersion version( KMajorVersionNumber,
+ KMinorVersionNumber,
+ KBuildVersionNumber );
+ if (!User::QueryVersionSupported(version, aVersion))
+ {
+ User::Leave(KErrNotSupported);
+ }
+ CPosIndicatorServerSession* session = CPosIndicatorServerSession::NewL( *this );
+ iSessionCount++;
+ return session;
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::GetLocationRequestorHandle
+//---------------------------------------------------------------
+CPosIndicatorLocationRequestor* CPosIndicatorServerCore::
+ GetLocationRequestorHandle() const
+ {
+ FUNC("CPosIndicatorServerCore::GetLocationRequestorHandle");
+ return iLocationRequestor;
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerCore::HandleSessionClosure
+//---------------------------------------------------------------
+void CPosIndicatorServerCore::HandleSessionClosure() const
+ {
+ FUNC("CPosIndicatorServerCore::HandleSessionClosure");
+ // If all the sessions are closed, server should exit.
+ // This can be achieved by stop the active scheduler.
+ iSessionCount--;
+
+ // Check the count of session iterator
+ if( !iSessionCount )
+ {
+ CActiveScheduler::Stop();
+ }
+ }
+
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/src/posindicatorserversession.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,178 @@
+/*
+* Copyright (c) 2010 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: Implementation of server session class.
+*
+*/
+
+#include "posindicatorserversession.h"
+#include "posindicatorservercore.h"
+#include "posindicatorserversubsession.h"
+#include "posindicatorserverconst.h"
+#include "posindicatorsubsessionregistry.h"
+#include "posindicatorlogger.h"
+
+//---------------------------------------------------------------
+// CPosIndicatorServerSession::NewL
+//---------------------------------------------------------------
+CPosIndicatorServerSession* CPosIndicatorServerSession::NewL(
+ const CPosIndicatorServerCore& aServerCore )
+ {
+ FUNC("CPosIndicatorServerSession::NewL");
+ CPosIndicatorServerSession* self = new( ELeave )
+ CPosIndicatorServerSession( aServerCore );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerSession::CPosIndicatorServerSession
+//---------------------------------------------------------------
+CPosIndicatorServerSession::CPosIndicatorServerSession(
+ const CPosIndicatorServerCore& aServerCore ):
+ iServerCore( aServerCore )
+ {
+ FUNC("CPosIndicatorServerSession::CPosIndicatorServerSession");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSession::~CPosIndicatorServerSession
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CPosIndicatorServerSession::~CPosIndicatorServerSession()
+ {
+ FUNC("CPosIndicatorServerSession::~CPosIndicatorServerSession");
+ delete iSubSessionRegistry;
+ iServerCore.HandleSessionClosure();
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSession::ConstructL()
+// 2nd phase constructor for instantiating member variables
+// ---------------------------------------------------------------------------
+void CPosIndicatorServerSession::ConstructL()
+ {
+ FUNC("CPosIndicatorServerSession::ConstructL");
+ iSubSessionRegistry = CPosIndicatorSubSessionRegistry::NewL();
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerSession::SecureId
+//---------------------------------------------------------------
+void CPosIndicatorServerSession::ServiceL( const RMessage2 &aMessage )
+ {
+ FUNC("CPosIndicatorServerSession::ServiceL");
+ switch( aMessage.Function() )
+ {
+ case ESubSessionOpen:
+ {
+ FUNC("ESubSessionOpen");
+ CreateSubSessionL( aMessage );
+ break;
+ }
+ case ESubSessionClose:
+ {
+ FUNC("ESubSessionClose");
+ // Close the sub-session and free the sub-session object
+ TInt retVal = iSubSessionRegistry->CloseSubSession( aMessage.Int3() );
+ aMessage.Complete( retVal );
+ break;
+ }
+ default: // Forward other messages to the sub-session
+ {
+ ForwardToSubSessionL( aMessage );
+ break;
+ }
+ }
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerSession::SecureId
+//---------------------------------------------------------------
+void CPosIndicatorServerSession::ServiceError( const RMessage2& aMessage,
+ TInt aError )
+ {
+ FUNC("CPosIndicatorServerSession::ServiceError");
+ aMessage.Complete( aError );
+ }
+
+//---------------------------------------------------------------
+// CPosIndicatorServerSession::Disconnect
+//---------------------------------------------------------------
+void CPosIndicatorServerSession::Disconnect( const RMessage2& aMessage )
+ {
+ FUNC("CPosIndicatorServerSession::Disconnect");
+ CSession2::Disconnect( aMessage );
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSession::CreateSubSessionL
+// ---------------------------------------------------------------------------
+//
+void CPosIndicatorServerSession::CreateSubSessionL( const RMessage2& aMessage )
+ {
+ FUNC("CPosIndicatorServerSession::CreateSubSessionL");
+ CPosIndicatorServerSubsession* subSession =
+ CPosIndicatorServerSubsession::NewL(
+ *iServerCore.GetLocationRequestorHandle());
+ CleanupStack::PushL( subSession );
+ // If the NewL cannot allocate then it leaves with KErrMemory. In such a
+ // scenario the ServiceError is invoked which responds to the IPC message
+ // with the error code. Hence no special handling is required for
+ // KErrNoMemory here.
+
+ TInt subSessionHandle = iSubSessionRegistry->AddSubSessionL( subSession );
+ CleanupStack::Pop(subSession); // subSession ownership taken by registry
+
+ // Set the client subsession identifier.
+ TPckg<TInt> handlePackage( subSessionHandle );
+ TInt retVal = aMessage.Write( KParamSubsessionHandle,handlePackage );
+
+ // The error code from Write has to be handled as below,
+ // If the retVal is an error code then
+ // close the open subsession first.
+ // If error is KErrBadDescriptor then panic the client
+ // else complete the message with the error code.
+ // else complete the message with KErrNone.
+ if ( retVal != KErrNone )
+ {
+ // close the open subsession first.
+ iSubSessionRegistry->CloseSubSession( subSessionHandle );
+ }
+ aMessage.Complete( retVal );
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSession::ForwardToSubSessionL
+// ---------------------------------------------------------------------------
+void CPosIndicatorServerSession::ForwardToSubSessionL(const RMessage2& aMessage)
+ {
+ FUNC("CPosIndicatorServerSession::ForwardToSubSessionL");
+ CPosIndicatorServerSubsession* subSession =
+ iSubSessionRegistry->SubSessionFromHandle(aMessage.Int3());
+
+ if (!subSession)
+ {
+ // Complete client's request if the sub-session handle is not
+ // present in the registry
+ aMessage.Complete( KErrNotFound );
+ }
+ else
+ {
+ subSession->ServiceL(aMessage);
+ }
+ }
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/src/posindicatorserversubsession.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2010 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: Implementation of subsession class.
+*
+*/
+
+// INCLUDES
+#include "posindicatorserversubsession.h"
+#include "posindicatorserversession.h"
+#include "posindicatorservercore.h"
+#include "posindicatorlocationrequestor.h"
+#include "posindicatorserverconst.h"
+#include "posindicatorlogger.h"
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSubsession::NewL
+// ---------------------------------------------------------------------------
+CPosIndicatorServerSubsession* CPosIndicatorServerSubsession::NewL(
+ CPosIndicatorLocationRequestor&
+ aLocationRequestor )
+ {
+ FUNC("CPosIndicatorServerSubsession::NewL");
+ CPosIndicatorServerSubsession* self = new ( ELeave )
+ CPosIndicatorServerSubsession( aLocationRequestor );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSubsession::CPosIndicatorServerSubsession
+// ---------------------------------------------------------------------------
+CPosIndicatorServerSubsession::CPosIndicatorServerSubsession(
+ CPosIndicatorLocationRequestor&
+ aLocationRequestor ):
+ iLocationRequestor( aLocationRequestor )
+ {
+ FUNC("CPosIndicatorServerSubsession::CPosIndicatorServerSubsession");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSubsession::~CPosIndicatorServerSubsession
+// ---------------------------------------------------------------------------
+CPosIndicatorServerSubsession::~CPosIndicatorServerSubsession()
+ {
+ FUNC("CPosIndicatorServerSubsession::~CPosIndicatorServerSubsession");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSubsession::ConstructL
+// ---------------------------------------------------------------------------
+void CPosIndicatorServerSubsession::ConstructL()
+ {
+ FUNC("CPosIndicatorServerSubsession::ConstructL");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorServerSubsession::ServiceL
+// ---------------------------------------------------------------------------
+void CPosIndicatorServerSubsession::ServiceL( const RMessage2 &aMessage )
+ {
+ FUNC("+ CPosIndicatorServerSubsession::ServiceL");
+ switch( aMessage.Function() )
+ {
+ case EGetCurrentPosition:
+ {
+ iLocationRequestor.GetCurrentPosition( aMessage );
+ break;
+ }
+ case EGetCurrentAddressInfoSize:
+ {
+ iLocationRequestor.GetCurrentAddressInfoSizeL( aMessage );
+ break;
+ }
+ case EGetCurrentAddressInfo:
+ {
+ iLocationRequestor.GetCurrentAddressInfoL( aMessage );
+ break;
+ }
+ case ECancelCurrentOperation:
+ {
+ iLocationRequestor.CancelRequest( aMessage );
+ break;
+ }
+ default:
+ aMessage.Complete( KErrNotFound );
+ }
+ }
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorhelperserver/src/posindicatorsubsessionregistry.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2010 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: Implementation of subsession registry class.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "posindicatorsubsessionregistry.h"
+#include "posindicatorserversubsession.h"
+#include "posindicatorlogger.h"
+#include <e32base.h>
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::NewL
+// ---------------------------------------------------------------------------
+CPosIndicatorSubSessionRegistry* CPosIndicatorSubSessionRegistry::NewL()
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::NewL");
+ CPosIndicatorSubSessionRegistry* self = new ( ELeave ) CPosIndicatorSubSessionRegistry;
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::CPosIndicatorSubSessionRegistry
+// ---------------------------------------------------------------------------
+CPosIndicatorSubSessionRegistry::CPosIndicatorSubSessionRegistry()
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::CPosIndicatorSubSessionRegistry");
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::~CPosIndicatorSubSessionRegistry
+// ---------------------------------------------------------------------------
+CPosIndicatorSubSessionRegistry::~CPosIndicatorSubSessionRegistry()
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::~CPosIndicatorSubSessionRegistry");
+ delete iRegistryIndex;
+ delete iRegistryContainerIndex;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::ConstructL
+// ---------------------------------------------------------------------------
+void CPosIndicatorSubSessionRegistry::ConstructL()
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::ConstructL");
+ iRegistryIndex = CObjectIx::NewL();
+ iRegistryContainerIndex = CObjectConIx::NewL();
+ iRegistryContainer = iRegistryContainerIndex->CreateL();
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::AddSubSessionL
+// ---------------------------------------------------------------------------
+TInt CPosIndicatorSubSessionRegistry::AddSubSessionL(
+ CPosIndicatorServerSubsession* aSubSession)
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::AddSubSessionL");
+ iRegistryContainer->AddL( aSubSession );
+ return iRegistryIndex->AddL( aSubSession );
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::CloseSubSession
+// ---------------------------------------------------------------------------
+TInt CPosIndicatorSubSessionRegistry::CloseSubSession( TUint aHandle )
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::CloseSubSession");
+ if ( iRegistryIndex->At( aHandle ) )
+ {
+ // Removes the sub-session object and closes
+ // the handle i,e. destroys the object
+ iRegistryIndex->Remove( aHandle );
+ return KErrNone;
+ }
+ return KErrBadHandle;
+ }
+
+// ---------------------------------------------------------------------------
+// CPosIndicatorSubSessionRegistry::SubSessionFromHandle
+// ---------------------------------------------------------------------------
+CPosIndicatorServerSubsession* CPosIndicatorSubSessionRegistry::
+ SubSessionFromHandle( TUint aHandle )
+ {
+ FUNC("CPosIndicatorSubSessionRegistry::SubSessionFromHandle");
+ return static_cast<CPosIndicatorServerSubsession*> (iRegistryIndex->At(aHandle));
+ }
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/inc/apilogger.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* 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 class provides function that help in logging entry and exit of APIs of classes
+*
+*/
+
+#include <iostream>
+#include <fstream>
+#include <QDebug>
+#include <qfile.h>
+#include <qtextstream.h>
+
+using namespace std;
+
+// Flag to enable NFT logging
+//#define POSINDICATOR_NFT
+
+class ApiLogger
+ {
+ public:
+ static void OpenLogFile();
+ static void CloseLogFile();
+ static void MyOutputHandler(QtMsgType type, const char *msg);
+ static void NftLogger( const QString msg );
+ };
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/inc/posindicator.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,145 @@
+/*
+* Copyright (c) 2003-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: Implementation for positioning indicator plugin class
+*
+*/
+
+#ifndef POS_INDICATOR_PLUGIN_H
+#define POS_INDICATOR_PLUGIN_H
+
+#include <QObject>
+#include <QStringList>
+#include <QVariant>
+
+#include <hbindicatorplugininterface.h>
+#include <hbindicatorinterface.h>
+
+
+class PosIndicatorInfo;
+class PosGeoAddress;
+class QTranslator;
+
+// Indicator Plugin class
+class PosIndicatorPlugin : public QObject, public HbIndicatorPluginInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(HbIndicatorPluginInterface)
+
+public:
+ /**
+ * Constructor
+ */
+ PosIndicatorPlugin();
+ /**
+ * Destructor
+ */
+ ~PosIndicatorPlugin();
+
+ /**
+ * Returns indicator types implemented by this plugin
+ * @return List of strings that denote indicator types implemented
+ */
+ QStringList indicatorTypes() const;
+
+ /**
+ * creates an indicator of type indicatorType
+ * @param[in] String representing indicator type
+ * @return Pointer to HbIndicatorInterface
+ */
+ HbIndicatorInterface* createIndicator(const QString &indicatorType);
+
+ /**
+ * Virtual function to check for capabilities for calling client
+ * @return true if client has Location capability
+ false if client does not have Location capability
+ */
+ bool accessAllowed(const QString &indicatorType, const QVariantMap &securityInfo) const;
+
+ /**
+ * Returns the last error code
+ * @return error code integer
+ */
+ int error() const;
+
+private:
+ Q_DISABLE_COPY(PosIndicatorPlugin)
+ int mError;
+ QStringList mIndicatorTypes;
+ /**
+ * Holds localization translator handle
+ * OWns
+ */
+ QTranslator* mTranslator;
+};
+
+// Indicator class that the indicator plugin implements
+class PosIndicator : public HbIndicatorInterface
+{
+ Q_OBJECT
+public:
+ /**
+ * Constructor
+ */
+ PosIndicator(const QString &indicatorType);
+
+ /**
+ * Destructor
+ */
+ ~PosIndicator();
+
+ /**
+ * Returns the data element store based on role
+ * @param[in] role
+ * @return Data stored for the role.
+ */
+ QVariant indicatorData(int role) const;
+
+ /*
+ * Called when Indicator menu is about to be shown
+ */
+ bool refreshData();
+
+private slots:
+ /*
+ * Refreshes indicator pane when new position information is available
+ */
+ void refreshPosIndicatorPane(PosGeoAddress& posGeoAddress, int error);
+
+private :
+ /*
+ * Converts decimal coordinate information to Degrees, Minutes,
+ * Seconds value
+ */
+ void ConvertToDMSFormat(QString &dDisplayString, double decimal);
+
+private :
+
+ /**
+ * String containing information to be displayed
+ */
+ QString mDisplayString;
+
+ /**
+ * Owns
+ **/
+ PosIndicatorInfo* mPosIndicatorInfo;
+
+ /*
+ * Toggle flag to check whether current signal is returns address or co-ordinates
+ */
+ bool processedAddess;
+};
+
+#endif // POS_INDICATOR_PLUGIN_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/posindicator.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,59 @@
+#
+# Copyright (c) 2010 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: posindicator plugin project file
+#
+
+
+TEMPLATE = lib
+TARGET = posindicator
+CONFIG += hb \
+ plugin
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RESOURCES += posindicatorplugin.qrc
+
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+
+#Uncomment following line to disable logging
+#DEFINES += QT_NO_DEBUG_OUTPUT
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+
+HEADERS += inc/posindicator.h \
+ inc/apilogger.h
+SOURCES += src/posindicator.cpp \
+ src/apilogger.cpp
+
+LIBS += -lposindicatorhelper
+symbian {
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.UID3 = 0x2002E686
+
+ hblib.sources = Hb.dll
+ hblib.path = \sys\bin
+ hblib.depends = "(0xEEF9EA38), 1, 0, 0, {\"Hb\"}"
+
+ pluginstub.sources = posindicator.dll
+ pluginstub.path = /resource/plugins/indicators
+ DEPLOYMENT += pluginstub
+
+ # Add translation files
+ addFiles.sources = translations/lilocationmw.qm
+ addFiles.path = .
+ DEPLOYMENT += addFiles
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/posindicatorplugin.qrc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/translations" >
+ <file alias="lilocationmw">translations/lilocationmw.qm</file>
+ </qresource>
+</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/src/apilogger.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,84 @@
+/*
+* 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 class provides function that help in logging entry and exit of APIs of classes
+*
+*/
+
+
+#include "apilogger.h"
+#include <qdatetime.h>
+
+#ifdef POSINDICATOR_NFT
+const char* debugFileName("c://logs//lbs//posindicatornftlog.txt");
+#else
+const char* debugFileName("c://logs//lbs//posindicatorlog.txt");
+#endif
+
+ofstream logfile;
+QFile file( debugFileName );
+
+void ApiLogger::OpenLogFile()
+{
+#ifdef POSINDICATOR_NFT
+ file.open( QIODevice::ReadWrite | QIODevice::Text ) ;
+#else
+ logfile.open(debugFileName, ios::app);
+#endif
+}
+
+void ApiLogger::CloseLogFile()
+{
+#ifdef POSINDICATOR_NFT
+ file.close();
+#else
+ logfile.flush();
+ logfile.close();
+#endif
+
+}
+
+void ApiLogger::MyOutputHandler(QtMsgType type, const char *msg)
+{
+ switch (type) {
+ case QtDebugMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Debug: " << msg << "\n";
+ break;
+ case QtCriticalMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Critical: " << msg << "\n";
+ break;
+ case QtWarningMsg:
+ // logfile << QTime::currentTime().toString().toAscii().data() << " Warning: " << msg << "\n";
+ break;
+ case QtFatalMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Fatal: " << msg << "\n";
+ default:
+ break;
+ }
+ logfile.flush();
+}
+
+
+
+void ApiLogger::NftLogger( const QString msg )
+ {
+ QString displayString( msg );
+ #ifdef POSINDICATOR_NFT
+ QTextStream stream( &file );
+ QString display( QTime::currentTime().toString("h:m:s:z") );
+ display.append( displayString );
+ stream << display;
+ stream.flush();
+ #endif
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/src/posindicator.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,383 @@
+/*
+* Copyright (c) 2010 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: Implementation for positioning indicator plugin class
+*
+*/
+
+#include "posindicator.h"
+#include "posindicatorinfo.h"
+#include "posgeoaddress.h"
+#include "apilogger.h"
+
+#include <QtPlugin>
+#include <QVariant>
+#include <QDebug>
+#include <QTranslator>
+#include <QTCore>
+
+
+Q_EXPORT_PLUGIN(PosIndicatorPlugin)
+
+// This plugin implements just one indicator type
+const QString typeOfIndicator ="com.nokia.positioning.indicatorplugin/1.0";
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::PosIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+PosIndicatorPlugin::PosIndicatorPlugin() : mError(0), mTranslator(0)
+{
+ #ifndef QT_NO_DEBUG_OUTPUT
+ ApiLogger::OpenLogFile();
+ #ifndef POSINDICATOR_NFT
+ qInstallMsgHandler(ApiLogger::MyOutputHandler);
+ #endif
+ #endif
+
+ qDebug() << "+ PosIndicatorPlugin::PosIndicatorPlugin()";
+
+ mTranslator = new QTranslator();
+
+ QString locale = QLocale::system().name();
+ QString path = "z:/resource/qt/translations/";
+ bool loaded = false;
+ loaded = mTranslator->load(path + QString("lilocationmw_") + locale);
+ if (loaded == false)
+ {
+ loaded = mTranslator->load("lilocationmw", ":/translations");
+ }
+ if (loaded)
+ {
+ qApp->installTranslator(mTranslator);
+ }
+
+ mIndicatorTypes.append(typeOfIndicator);
+ qDebug() << "- PosIndicatorPlugin::PosIndicatorPlugin()";
+
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::~PosIndicatorPlugin
+// ---------------------------------------------------------------------------
+//
+PosIndicatorPlugin::~PosIndicatorPlugin()
+{
+ qDebug() << "+ PosIndicatorPlugin::~PosIndicatorPlugin()";
+ if (mTranslator)
+ {
+ if (mTranslator->isEmpty() == false)
+ qApp->removeTranslator(mTranslator);
+ delete mTranslator;
+ }
+ qInstallMsgHandler(0);
+ ApiLogger::CloseLogFile();
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::indicatorTypes
+// ---------------------------------------------------------------------------
+//
+QStringList PosIndicatorPlugin::indicatorTypes() const
+{
+ qDebug() << "+ PosIndicatorPlugin::indicatorTypes()";
+ // Return indicator types this plugin implements
+ return mIndicatorTypes;
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::createIndicator
+// ---------------------------------------------------------------------------
+//
+HbIndicatorInterface* PosIndicatorPlugin::createIndicator(
+ const QString &indicatorType)
+{
+ qDebug() << "+ PosIndicatorPlugin::createIndicator()";
+ ApiLogger::NftLogger("Before launching indicator");
+ PosIndicator* ind = new PosIndicator( indicatorType );
+ ApiLogger::NftLogger("After launching indicator");
+ return ind;
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::accessAllowed
+// ---------------------------------------------------------------------------
+//
+bool PosIndicatorPlugin::accessAllowed(const QString &/*indicatorType*/, const QVariantMap &securityInfo) const
+{
+ qDebug() << "+ PosIndicatorPlugin::accessAllowed()";
+ QVariant value = securityInfo.value("sym-caps");
+ if ((value.toInt() && ECapabilityLocation) == true )
+ {
+ qDebug() << "Location capability present, pass";
+ return true;
+ }
+ else
+ {
+ qDebug() << "Location capability absent, fail";
+ return false;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicatorPlugin::error
+// ---------------------------------------------------------------------------
+//
+int PosIndicatorPlugin::error() const
+{
+ qDebug() << "+ PosIndicatorPlugin::error()";
+ return mError;
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::PosIndicator
+// ---------------------------------------------------------------------------
+//
+PosIndicator::PosIndicator(const QString &indicatorType) :
+ HbIndicatorInterface(indicatorType, SettingCategory, NoInteraction),
+ mDisplayString(QString(hbTrId("txt_loe_dblist_positioning_val_acquiring_position"))),
+ mPosIndicatorInfo(0),
+ processedAddess(false)
+{
+ qDebug() << "+ PosIndicator::PosIndicator()";
+ qDebug() << "- PosIndicator::PosIndicator()";
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::RefreshPosIndicatorPane
+// ---------------------------------------------------------------------------
+//
+void PosIndicator::refreshPosIndicatorPane(PosGeoAddress& posGeoAddress, int error)
+ {
+ qDebug() << "+ PosIndicator::refreshPosIndicatorPane()";
+ if(error!=KErrNone)
+ {
+ qDebug() << "- PosIndicator::refreshPosIndicatorPane(),error code : "<<error;
+ return;
+ }
+ qDebug() << "latitude : "<< posGeoAddress.latitude() << ", longitude : "<<posGeoAddress.longitude();
+ TBool addressResolved = false;
+ qDebug() << " No Errors.";
+ mDisplayString.clear();
+ if(!posGeoAddress.number().isEmpty())
+ {
+ qDebug() << "Number - %s"<<posGeoAddress.number();
+
+ addressResolved = true;
+ mDisplayString = mDisplayString + QString(posGeoAddress.number()) + QString(' ');
+ }
+ if(!posGeoAddress.street().isEmpty())
+ {
+ qDebug() << "street - %d"<<posGeoAddress.street();
+
+ addressResolved = true;
+ mDisplayString = mDisplayString + QString(posGeoAddress.street()) + QString(' ');
+ }
+ if(!posGeoAddress.district().isEmpty())
+ {
+ qDebug() << "district - %s"<<posGeoAddress.district();
+
+ addressResolved = true;
+ mDisplayString = mDisplayString + QString(posGeoAddress.district()) + QString(' ');
+ }
+ if(!posGeoAddress.city().isEmpty())
+ {
+ qDebug() << "city - %s"<<posGeoAddress.city();
+
+ addressResolved = true;
+ mDisplayString = mDisplayString + QString(posGeoAddress.city()) + QString(' ');
+ }
+ if(!posGeoAddress.state().isEmpty())
+ {
+ qDebug() << "state - %s"<<posGeoAddress.state();
+
+ addressResolved = true;
+ mDisplayString = mDisplayString + QString(posGeoAddress.state()) + QString(' ');
+ }
+ if(!posGeoAddress.country().isEmpty())
+ {
+ qDebug() << "country - %s"<<posGeoAddress.country();
+
+ addressResolved = true;
+ mDisplayString = mDisplayString + QString(posGeoAddress.country());
+ ApiLogger::NftLogger("address information available");
+ }
+
+ if(addressResolved == false)
+ {
+ qDebug() << "Address Not available, displaying lat,long";
+ QString latitude, longitude;
+ latitude = QString("latitude");
+ ConvertToDMSFormat(latitude, posGeoAddress.latitude());
+ longitude = QString("longitude");
+ ConvertToDMSFormat(longitude, posGeoAddress.longitude());
+
+ QString comma(", ");
+ mDisplayString.clear();
+ mDisplayString.append(latitude);
+ mDisplayString.append(comma);
+ mDisplayString.append(longitude);
+ ApiLogger::NftLogger("Position information available");
+ }
+
+ if( processedAddess == true)
+ {
+ processedAddess = false;
+ }
+ else
+ {
+ processedAddess = true;
+ }
+
+ emit dataChanged();
+ qDebug() << "- PosIndicator::refreshPosIndicatorPane()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicator::~PosIndicator
+// ---------------------------------------------------------------------------
+//
+PosIndicator::~PosIndicator()
+{
+ qDebug() << "+ PosIndicator::~PosIndicator()";
+ if(mPosIndicatorInfo)
+ {
+ mPosIndicatorInfo->cancelPosInfo();
+ delete mPosIndicatorInfo;
+ mPosIndicatorInfo = 0;
+ }
+ qDebug() << "- PosIndicator::~PosIndicator()";
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::indicatorData
+// ---------------------------------------------------------------------------
+//
+QVariant PosIndicator::indicatorData(int role) const
+{
+ qDebug() << "+ PosIndicator::indicatorData(), role = "<< role;
+// Q_UNUSED(role)
+
+ if (role == PrimaryTextRole) {
+ return QString(hbTrId("txt_loe_dblist_positioning"));
+ } else if (role == SecondaryTextRole) {
+ return mDisplayString;
+ } else if (role == DecorationNameRole) {
+ return QString("qtg_mono_gps");
+ } else if (role == MonoDecorationNameRole ) {
+ return QString("qtg_mono_gps");
+ }
+ else
+ return QVariant();
+}
+
+// ---------------------------------------------------------------------------
+// PosIndicator::refreshData
+// ---------------------------------------------------------------------------
+//
+bool PosIndicator::refreshData()
+ {
+ qDebug() << "+ PosIndicator::refreshData()";
+ if(!mPosIndicatorInfo)
+ {
+ qDebug() << "First Call";
+ mPosIndicatorInfo = new PosIndicatorInfo();
+ if(!mPosIndicatorInfo)
+ {
+ qDebug() << "Error in constructing PosIndicatorInfo class";
+ throw;
+ }
+
+ QObject::connect(mPosIndicatorInfo, SIGNAL(posInfoUpdated(PosGeoAddress&, int)), this, SLOT(refreshPosIndicatorPane(PosGeoAddress&, int)));
+ }
+ ApiLogger::NftLogger("Before requesting position information");
+ qDebug() << "Call requestPosInfo()";
+ mPosIndicatorInfo->requestPosInfo();
+ return true;
+ }
+
+// ---------------------------------------------------------------------------
+// PosIndicator::ConvertToDMSFormat
+// ---------------------------------------------------------------------------
+//
+void PosIndicator::ConvertToDMSFormat(QString &displayString, double decimal)
+{
+ qDebug() << "+ PosIndicator::ConvertToDMSFormat()";
+
+ int tempNum;
+ QString temp;
+ float tempDec;
+
+ int degrees = (int)decimal;
+
+ tempDec = decimal - degrees;
+ tempDec = tempDec * 60;
+ int minutes = (int)tempDec;
+
+ tempDec = tempDec - minutes;
+ tempDec = tempDec * 60;
+ int seconds = (int)tempDec;
+
+ tempDec = tempDec - seconds;
+ tempNum = tempDec * 100;
+
+ QVariant varDegrees(degrees);
+ QVariant varMinutes(minutes);
+ QVariant varSeconds(seconds);
+ QVariant varTemp(tempNum);
+
+ if (QString::compare(displayString, "latitude") == KErrNone)
+ {
+ displayString.clear();
+
+ if (decimal>=0)
+ {
+ displayString = QString(hbTrId("txt_loe_list_l1l2l3l4n"))
+ .arg(varDegrees.toString())
+ .arg(varMinutes.toString())
+ .arg(varSeconds.toString())
+ .arg(varTemp.toString());
+ }
+ else
+ {
+ displayString = QString(hbTrId("txt_loe_list_l1l2l3l4s"))
+ .arg(varDegrees.toString())
+ .arg(varMinutes.toString())
+ .arg(varSeconds.toString())
+ .arg(varTemp.toString());
+ }
+ }
+ else
+ {
+ displayString.clear();
+ {
+ if (decimal>=0)
+ {
+ displayString = QString(hbTrId("txt_loe_list_l1l2l3l4e"))
+ .arg(varDegrees.toString())
+ .arg(varMinutes.toString())
+ .arg(varSeconds.toString())
+ .arg(varTemp.toString());
+ }
+ else
+ {
+ displayString = QString(hbTrId("txt_loe_list_l1l2l3l4w"))
+ .arg(varDegrees.toString())
+ .arg(varMinutes.toString())
+ .arg(varSeconds.toString())
+ .arg(varTemp.toString());
+ }
+ }
+ }
+ qDebug() << "- PosIndicator::ConvertToDMSFormat()";
+}
Binary file locationsystemui/locationsysui/posindicator/posindicatorplugin/translations/lilocationmw.qm has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posindicatorplugin/translations/lilocationmw.ts Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,826 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="3.0" sourcelanguage="en_GB">
+<context>
+<message numerus="no" id="txt_loe_list_use_1">
+ <comment>%1 is the name of the positioning server</comment>
+ <source>Use %1</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_settings">
+ <comment>Button for accessing settings in control palel</comment>
+ <source>Settings</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_lint_button_settings</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_seconds">
+ <comment>Update interval value when update happens in seconds (59s or less)</comment>
+ <source>Updates every %L1 seconds</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4e">
+ <comment>Coordinate value</comment>
+ <source>%L1Ëš%L2'%L3.%L4"E</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4e</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_reject">
+ <comment>Location request query dialog - Softkey button. Allows the user to reject the suggested operation.</comment>
+ <source>Reject</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_day_and_l2_hour">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 day and %L2 hour</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_cancel">
+ <comment>Button. Note! Use this text ID only if there are max. two buttons in the dialog. Allows the user to cancel the action or process.</comment>
+ <source>Cancel</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_softkey_2</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_hour_and_l2_minute">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 hour and %L2 minute</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_wifi">
+ <comment>Wi-FI - enable/disable wifi usage in positioning context</comment>
+ <source>Wi-Fi</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_minute_and_l2_seco">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 minute and %L2 second</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_enable_for_most_accurate_positioning">
+ <comment>Description text for GPS under the checkbox item</comment>
+ <source>Enable for most accurate positioning</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dataform_description_sec </extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_accuracy_ln_kilometers">
+ <comment>%L1 = Accuracy information in kilometers. Displayed when over 999 meters</comment>
+ <source>Accuracy: %Ln kilometers</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_lint_list_accuracy_1_kilometers</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_assisted_gps">
+ <comment>Assisted GPS - enabling or disabling</comment>
+ <source>Assisted GPS</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_positioning_settings">
+ <comment>subtitle for positioning settings main view</comment>
+ <source>Positioning settings</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_location_was_requested_by">
+ <comment>Requestor info text in Location request query dialog</comment>
+ <source>Location was requested by : </source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_valid_until_1">
+ <comment>%1 is the date value until the service is active/available</comment>
+ <source>Valid until %1</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_your_location_not_sent_to_1">
+ <comment>Multiline secondary text in a list item. %1 is the name of the service</comment>
+ <source>Your location not sent to: %1</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_018</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_upd_every_l1_hour_and_l2_minute">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 hour and %L2 minutes</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_background_positioning">
+ <comment>Checkbox item for enabling/disabling Background positioning</comment>
+ <source>Background positioning</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_hours_and_l2_minut">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 hours and %L2 minute</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_updates_every_ln_months">
+ <comment>update interval value</comment>
+ <source>Updates every %Ln months</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_minutes_and_l2_sec">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 minutes and %L2 second</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4n">
+ <comment>Coordinate value</comment>
+ <source>%L1Ëš%L2'%L3.%L4"N</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4n</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_months_and_l2_days">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 months and %L2 days</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_your_location_sent_to_1">
+ <comment>Multiline secondary text in a list item. %1 is the name of the service</comment>
+ <source>Your location sent to : %1</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_018</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_your_location_sent_to_1_ln_times">
+ <comment>Multiline secondary text in a list item for periodic location notifiers. %1 is the name of the service. %Ln indicates how many times the location has been sent to %1. Example text : Your location sent to Nokia , Friends finder 6 times</comment>
+ <source>Your location sent to %1 %Ln times</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_018</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_month_and_l2_days">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 month and %L2 days</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_unknown_requestor">
+ <comment>If the requestor is unknown, this text string should be shown to the user. </comment>
+ <source>Unknown requestor</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_up_every_l1_hours_and_l2_minut">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 hours and %L2 minutes</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_you_location_will_be_shared_periodica">
+ <comment>Info text for periodic location request query - No default policy</comment>
+ <source>You location will be shared periodically with :</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_014</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_dblist_positioning">
+ <comment>UniversalIndicatorMenu item text. </comment>
+ <source>Positioning</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_indimenu_pri_medium_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>loe_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_done">
+ <comment>Button in dialog for closing the Positioning info dialog</comment>
+ <source>Done</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_softkey_1</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_info_ln_unknown_requestors">
+ <comment>If there are more than one unknown requestor, this text string should be shown to the user. </comment>
+ <source>%Ln Unknown requestors</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_stop_service_1">
+ <comment>Confirmation about stopping service. %1 is the name of the service</comment>
+ <source>Stop service %1</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri3_large_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>loe_010</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_dpophead_your_location_not_sent_to">
+ <comment>Location notification heading text </comment>
+ <source>Your location not sent to :</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_notifdialog_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_016</extra-loc-viewid>
+ <extra-loc-positionid>dpophead</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_days_and_l2_hour">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 days and %L2 hour</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_accept">
+ <comment>Location request query dialog - Softkey button. Allows the user to accept the location request</comment>
+ <source>Accept</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_ok">
+ <comment>Button. Note! Use this text ID only if there are max. two buttons in the dialog. When this button is pressed, the focused item or operation will be selected or accepted.</comment>
+ <source>OK</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_softkey_2</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_cellular_network">
+ <comment>2G/3G/etc network settings for positionin use</comment>
+ <source>Cellular network</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_opt_delete_server">
+ <comment>Option menu item</comment>
+ <source>Delete server</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>opt</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subhead_logs">
+ <comment>Sub heading text for Location notification logs view</comment>
+ <source>Logs</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_018</extra-loc-viewid>
+ <extra-loc-positionid>subhead</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_advanced">
+ <comment>Button - takes to advanced positioning settings</comment>
+ <source>Advanced</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dataform_button_sec </extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_days_and_l2_hours">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 days and %L2 hours</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_cp_dblist_positioning_val_change_positioning_s">
+ <comment>Control panel item in CP main view</comment>
+ <source>Change positioning settings</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec_large_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>cp_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
+ <extra-loc-feature>cp</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_accuracy_ln_meters">
+ <comment>%L1 = Accuracy information in meters. Displayed when value is 999 meters or less</comment>
+ <source>Accuracy: %Ln meters</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_lint_accuracy_1_meters</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_dpophead_your_location_sent_to">
+ <comment>Location notification heading text </comment>
+ <source>Your location sent to :</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_notifdialog_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_016</extra-loc-viewid>
+ <extra-loc-positionid>dpophead</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_positioning_methods">
+ <comment>Group heading for positioning methods</comment>
+ <source>Positioning methods</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_groupbox_expand_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_updates_every_ln_hours">
+ <comment>update interval value</comment>
+ <source>Updates every %Ln hours</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_internal_gps">
+ <comment>Internal GPS chipset - enabling or disabling that</comment>
+ <source>Internal GPS</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_clear_logs">
+ <comment>Single toolbar item to clear logs in Location notification log view</comment>
+ <source>Clear logs</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_toolbar_tiny1</extra-loc-layout_id>
+ <extra-loc-viewid>loe_018</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_use_wifi_and_mobile_networks_to_get">
+ <comment>Description text for wireless networks under the checkbox item</comment>
+ <source>Use only WI-FI and mobile networks to get position information</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dataform_description_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_positioning_servers">
+ <comment>Group heading positioning servers</comment>
+ <source>Positioning servers</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_groupbox_expand_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_save">
+ <comment>Save button for saving current position</comment>
+ <source>Save</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_loe_button_save</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_select_server_to_delete">
+ <comment>Dialog text for server deletion</comment>
+ <source>Select server to delete</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri3</extra-loc-layout_id>
+ <extra-loc-viewid>loe_011</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_your_location_will_be_shared_periodic">
+ <comment>Info text for periodic location request query (Default policy - Accept)</comment>
+ <source>Your location will be shared periodically by default if you don’t respond.</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_015</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_delete">
+ <comment>Button. Note! Use this text ID only if there are max. two buttons in the dialog. Allows the user to delete an item. Note that deleting removes the item permanently from memory.</comment>
+ <source>Delete</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_softkey_2</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_title_positioning">
+ <comment>Heading for the positioning info dialog</comment>
+ <source>Positioning</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
+ <extra-loc-viewid>loe_001</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_title_location_notifications">
+ <comment>Title text for Location notifications log view</comment>
+ <source>Location notifications</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_titlebar</extra-loc-layout_id>
+ <extra-loc-viewid>loe_018</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_your_location_will_not_be_shared_peri">
+ <comment>Info text for periodic location request query (Default policy - Reject)</comment>
+ <source>Your location will not be shared periodically by default if you don't respond</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_015</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_background_positioning">
+ <comment>Group heading for location based services</comment>
+ <source>Background positioning</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_groupbox_expand_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_advanced_positioning_settings">
+ <comment>Button - takes to advanced positioning settings</comment>
+ <source>Advanced positioning settings</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_your_location_will_be_shared_with">
+ <comment>Info text for location request query - No default policy</comment>
+ <source>Your location will be shared with :</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_014</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_dblist_ln_location_notifications">
+ <comment>Location notification primarry text in Universal Indicator Menu</comment>
+ <source>%Ln Location notifications</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_indimenu_pri_medium_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>loe_017</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_your_location_will_be_shared_by_defau">
+ <comment>Info text in Location request query dialog (Default policy - Accept)</comment>
+ <source>Your location will be shared by default if you don’t respond</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_gps">
+ <comment>Checkbox item for enabling/disabling GPS</comment>
+ <source>GPS</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_your_location_will_not_be_shared_by_d">
+ <comment>Info text in Location request query dialog (Default policy - Reject)</comment>
+ <source>Your location will not be shared by default if you don’t respond</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_day_and_l2_hours">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 day and %L2 hours</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4w">
+ <comment>Coordinate value</comment>
+ <source>%L1Ëš%L2'%L3.%L4"W</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4w</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_title_save_as">
+ <comment>Query header for save dialog</comment>
+ <source>Save as</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
+ <extra-loc-viewid>loe_005</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_bluetooth_gps">
+ <comment>Bluetooth GPS - enabling/disabling external BT GPS device usage</comment>
+ <source>Bluetooth GPS</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_title_location_request">
+ <comment>Title text in Location request query dialog</comment>
+ <source>Location request</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
+ <extra-loc-viewid>loe_013</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_wireless_networks">
+ <comment>Checkbox item for enabling/disabling Wireless positioning</comment>
+ <source>Wireless networks</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_cp_dblist_positioning">
+ <comment>Control panel item in CP main view</comment>
+ <source>Positioning</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>cp_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1</extra-loc-positionid>
+ <extra-loc-feature>cp</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_month_and_l2_day">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 month and %L2 day</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4s">
+ <comment>Coordinate value</comment>
+ <source>%L1Ëš%L2'%L3.%L4"S</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4s</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_updates_every_ln_days">
+ <comment>update interval value</comment>
+ <source>Updates every %Ln days</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_up_every_l1_minutes_and_l2_sec">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 minutes and %L2 seconds</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_loe_list_updates_every_ln_minutes">
+ <comment>update interval value</comment>
+ <source>Updates every %Ln minutes</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_enable_applications_and_services_upda">
+ <comment>Description text for Location based services & background applications</comment>
+ <source>Enable applications and services update and retrieve location information on the background</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_dataform_description_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_months_and_l2_day">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 months and %L2 day</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_upd_every_l1_minute_and_l2_seco">
+ <comment>Update interval. </comment>
+ <source>Updates every %L1 minute and %L2 seconds</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_dblist_positioning_val_acquiring_position">
+ <comment>Universaln indicator menu. Secondary text when positioning is being acquired</comment>
+ <source>Acquiring position</source>
+ <translation variants="no" type="unfinished"></translation>
+ <extra-loc-layout_id>qtl_indimenu_sec_medium_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>loe_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+</context>
+</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/bwins/posreversegeocodeinterfaceu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+ ?NewL@CPosReverseGeocodeInterface@@SAPAV1@AAVMPosReverseGeocodeObserver@@@Z @ 1 NONAME ; class CPosReverseGeocodeInterface * CPosReverseGeocodeInterface::NewL(class MPosReverseGeocodeObserver &)
+ ??1CPosReverseGeocodeInterface@@UAE@XZ @ 2 NONAME ; CPosReverseGeocodeInterface::~CPosReverseGeocodeInterface(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/eabi/posreversegeocodeinterfaceu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,8 @@
+EXPORTS
+ _ZN27CPosReverseGeocodeInterface4NewLER26MPosReverseGeocodeObserver @ 1 NONAME
+ _ZN27CPosReverseGeocodeInterfaceD0Ev @ 2 NONAME
+ _ZN27CPosReverseGeocodeInterfaceD1Ev @ 3 NONAME
+ _ZN27CPosReverseGeocodeInterfaceD2Ev @ 4 NONAME
+ _ZTI27CPosReverseGeocodeInterface @ 5 NONAME
+ _ZTV27CPosReverseGeocodeInterface @ 6 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,26 @@
+// Copyright (c) 2010 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:
+//
+
+
+
+PRJ_MMPFILES
+posreversegeocodeinterface.mmp
+
+
+PRJ_EXPORTS
+../inc/posreversegeocodeinterface.h |../../inc/posreversegeocodeinterface.h
+../inc/posreversegeocodeinterface.hrh |../../inc/posreversegeocodeinterface.hrh
+
+// End of file.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/group/posreversegeocodeinterface.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,40 @@
+// Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <platform_paths.hrh>
+
+TARGET posreversegeocodeinterface.dll
+TARGETTYPE dll
+UID 0x1000008d 0x2002E691
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL
+
+
+SOURCEPATH ../src
+SOURCE posreversegeocodeinterface.cpp
+
+
+USERINCLUDE ../inc
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/ecom
+
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+
+
+// End of file
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/inc/posreversegeocodeinterface.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 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: Declaration of Geo coding interface class.
+*
+*/
+
+#ifndef POSREVERSEGEOCODEINTERFACE_H
+#define POSREVERSEGEOCODEINTERFACE_H
+
+#include <e32base.h>
+#include <EPos_CPosLandmark.h>
+
+/*
+ * Observer class which exposes callbacks to notify the completion of reversegeocoding event.
+ *
+ **/
+class MPosReverseGeocodeObserver
+ {
+public:
+ /*
+ * Callback function which notifys the completion of reverse geocode event. This signals the completion
+ * of the asynchronous function CReverseGeoCode::GetAddressByCoordinate.
+ *
+ * @param aErrorcode Error status KErrNone in case of success or other system specific errorcodes
+ * in case of failures.
+ */
+
+ virtual void ReverseGeocodeComplete( TInt aErrorcode ) =0;
+ };
+
+/*
+ * CReverseGeocode
+ * Concrete class which exposes interfaces to convert the geo-coordinates information
+ * in to the address information.
+ *
+ **/
+class CPosReverseGeocodeInterface : public CBase
+ {
+public:
+ /*
+ * Factory function to create the instance of CReverseGeocode Class. This also registers
+ * observer for getting the reverse geocode completion notifications.
+ *
+ * @param[in] aObserver refrence to the instance MReverseGeocodeObserver's
+ * implementation class.
+ * @return pointer to the instance of CReverseGeocode.
+ */
+ IMPORT_C static CPosReverseGeocodeInterface* NewL( MPosReverseGeocodeObserver& aObserver );
+
+ /**
+ * Unloads the plugin.
+ */
+ IMPORT_C virtual ~CPosReverseGeocodeInterface();
+
+ /*
+ * Gets the address information for the given geo coordinates. This is an asynchronous function
+ * Whose completion will be notified by the MReverseGeocodeObserver::ReverseGeocodeComplete callback.
+ *
+ * @param aLandmark[in] Landmarks object in which address information is expected.
+ *
+ */
+ IMPORT_C virtual void GetAddressByCoordinateL( CPosLandmark& aLandmark ) = 0;
+
+
+ /**
+ * Cancels the current operation.
+ */
+ IMPORT_C virtual void Cancel() = 0;
+private:
+ /**
+ * Instance identifier key
+ */
+ TUid iDtor_ID_Key;
+ };
+
+#endif //POSREVERSEGEOCODEINTERFACE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/inc/posreversegeocodeinterface.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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: Resource headers for project
+*
+*/
+
+#ifndef POSREVERSEGEOCODEINTERFACE_HRH
+#define POSREVERSEGEOCODEINTERFACE_HRH
+
+// ECom interface ID for reverse geo-code interface
+#define KPosReverseGeoCodeInterfaceId 0x2002E692
+
+
+#endif // POSREVERSEGEOCODEINTERFACE_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeinterface/src/posreversegeocodeinterface.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2010 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: Implementation of Geo coding interface class.
+*
+*/
+
+#include "posreversegeocodeinterface.h"
+#include "posreversegeocodeinterface.hrh"
+
+#include <ecom.h>
+
+// static cleanup function
+static void RImpleInfoPtrArrayCleanup( TAny* aArray )
+ {
+ static_cast<RImplInfoPtrArray*>( aArray )->ResetAndDestroy();
+ }
+
+
+//------------------------------------------------------------------------------
+// CPosReverseGeocodeInterface::NewL
+//------------------------------------------------------------------------------
+EXPORT_C CPosReverseGeocodeInterface* CPosReverseGeocodeInterface::NewL(
+ MPosReverseGeocodeObserver& aObserver )
+ {
+ RImplInfoPtrArray implInfoPtrArray;
+ TCleanupItem arrayCleanup( RImpleInfoPtrArrayCleanup, &implInfoPtrArray );
+ CleanupStack::PushL(arrayCleanup);
+
+ TUid implementationUID;
+
+ REComSession::ListImplementationsL( TUid::Uid(KPosReverseGeoCodeInterfaceId),
+ implInfoPtrArray );
+
+ if( implInfoPtrArray.Count() == 0 )
+ {
+ implInfoPtrArray.ResetAndDestroy();
+ User::Leave( KErrNotFound );
+ }
+
+ const CImplementationInformation* pluginInformation = implInfoPtrArray[0];
+ implementationUID = pluginInformation->ImplementationUid();
+
+ TAny* ptr = REComSession::CreateImplementationL( implementationUID,
+ _FOFF(CPosReverseGeocodeInterface,iDtor_ID_Key),
+ reinterpret_cast<TAny*>( &aObserver ));
+ REComSession::FinalClose();
+ CleanupStack::PopAndDestroy(); // arrayCleanup
+ return reinterpret_cast<CPosReverseGeocodeInterface*>(ptr);
+ }
+
+//----------------------------------------------------------------------------------
+// CPosReverseGeocodeInterface::~CPosReverseGeocodeInterface
+//----------------------------------------------------------------------------------
+EXPORT_C CPosReverseGeocodeInterface::~CPosReverseGeocodeInterface()
+ {
+ REComSession::DestroyedImplementation(iDtor_ID_Key);
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/data/2002E68A.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2010 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: Resource file for reverse geo code plugin
+*
+*/
+#include <registryinfo.rh>
+#include "posreversegeocodeinterface.hrh"
+#include "posreversegeocodeplugin.hrh"
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = KPosReverseGeoCodePluginUid;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KPosReverseGeoCodeInterfaceId;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = KPosReverseGeoCodeImplementationUid;
+ version_no = 1;
+ display_name = "Geocode plugin";
+ default_data = "text/ascii";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/data/posreversegeocodeplugin.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 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: Resource headers for project
+*
+*/
+
+
+#ifndef POSREVERSEGEOCODEPLUGIN_HRH
+#define POSREVERSEGEOCODEPLUGIN_HRH
+
+#define KPosReverseGeoCodePluginUid 0x2002E68A
+#define KPosReverseGeoCodeImplementationUid 0x2002E693
+
+
+#endif // POSREVERSEGEOCODEPLUGIN_HRH
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+posreversegeocodeplugin.mmp
+
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/group/posreversegeocodeplugin.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2010 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: Project definition file for project reverse geo-code plugin
+*
+*/
+
+
+
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+
+TARGET posrevgeocodeplugin.dll
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x2002E68A
+
+CAPABILITY CAP_GENERAL_DLL
+VENDORID VID_DEFAULT
+
+MW_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE /epoc32/include/ecom
+
+
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+USERINCLUDE ../data
+
+SOURCEPATH ../src
+
+SOURCE posrevgeocodeplugin.cpp
+SOURCE posrevgeocodeconnectiontimer.cpp
+SOURCE posrevgeocodexmlparser.cpp
+SOURCE posrevgeocodehttpclientengine.cpp
+
+
+START RESOURCE ../data/2002E68A.rss
+TARGET posrevgeocodeplugin.rsc
+END
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+LIBRARY posreversegeocodeinterface.lib
+LIBRARY insock.lib
+LIBRARY inetprotutil.lib
+LIBRARY http.lib
+LIBRARY bafl.lib
+LIBRARY commdb.lib
+LIBRARY cmmanager.lib
+LIBRARY xmlframework.lib
+LIBRARY esock.lib
+LIBRARY lbs.lib
+LIBRARY libc.lib
+LIBRARY charconv.lib
+LIBRARY extendedconnpref.lib
+LIBRARY eposlandmarks.lib
+LIBRARY extendedconnpref.lib
+LIBRARY netmeta.lib
+LIBRARY flogger.lib
+PAGED
+// END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodeconnectiontimer.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2010 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: Declaration of connection timer class.
+*
+*/
+
+#ifndef POSREVGEOCODECONNECTIONTIMER_H
+#define POSREVGEOCODECONNECTIONTIMER_H
+
+// INCLUDES
+#include <e32std.h>
+#include <e32base.h>
+
+class MPosRevGeoCodeTimeoutObserver
+ {
+public:
+ virtual void HandleTimedoutEvent( TInt aErrorCode ) = 0;
+ };
+
+
+/**
+ * This is the timer class responsible for notifying client's on
+ * time out specified by the client.
+ */
+class CPosRevGeoCodeConnectionTimer : public CTimer
+ {
+public:
+ /**
+ * Factory function to create the instance of CPosRevGeoCodeConnectionTimer object.
+ */
+ static CPosRevGeoCodeConnectionTimer* NewL( MPosRevGeoCodeTimeoutObserver&
+ aConnectionTimeoutHandlerInterface);
+
+ /**
+ * Destructor
+ */
+ ~CPosRevGeoCodeConnectionTimer();
+
+ /**
+ * Starts the timer with specified time out.
+ * @return KErrInUse If timer is already running.
+ */
+ TInt StartTimer( const TInt aTimeoutVal );
+
+
+protected: // From CTimer
+ void RunL();
+
+private:
+ /**
+ * Symbian 2nd phase constructor
+ */
+ void ConstructL();
+
+ /**
+ * Constructor
+ */
+ CPosRevGeoCodeConnectionTimer( MPosRevGeoCodeTimeoutObserver& aConnectionTimeoutHandler );
+
+private: // Data member
+ /**
+ * Reference to connection time out observer
+ */
+ MPosRevGeoCodeTimeoutObserver& iConnectionTimeoutObserver;
+ };
+
+
+#endif /* POSREVGEOCODECONNECTIONTIMER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodehttpclientengine.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2010 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: Declaration of HTTP client engine class.
+*
+*/
+
+#ifndef POSREVGEOCODEHTTPCLIENTENGINE_H
+#define POSREVGEOCODEHTTPCLIENTENGINE_H
+
+#include <http/mhttptransactioncallback.h>
+#include <http/mhttpauthenticationcallback.h>
+#include <es_sock.h>
+#include <cmmanager.h>
+#include <comms-infras/cs_mobility_apiext.h>
+
+
+
+class RHTTPSession;
+class RHTTPTransaction;
+
+const TInt KDefaultBufferSize = 256;
+
+/*
+ * Enumration for the different states of HTTP GET request.
+ */
+enum THttpStatus
+ {
+ EHttpSessionError =0,
+ EHttpExitingApp,
+ EHttpConnecting,
+ EHttpTxCancelled,
+ EHttpHdrReceived,
+ EHttpBytesReceieved,
+ EHttpBodyReceieved,
+ EHttpTxCompleted,
+ EHttpTxSuccess,
+ EHttpTxFailed,
+ EHttpConnectionFailure,
+ EHttpUnknownEvent,
+ EHttpMhfRunError,
+ EHttpAuthNote,
+ EHttpAuthFailed,
+ EHttpAuthRequired,
+ };
+
+enum TMobileRoamingStatus
+ {
+ EMobileNotRegistered = 0x00,
+ EMobileRegHomeNetwork, // home network
+ EMobileNationalRoaming,
+ EMobileInternationalRoaming
+ };
+
+/**
+ * MClientObserver
+ * CPosRevGeoCodeHTTPClientEngine passes events and responses body data with this interface.
+ * An instance of this class must be provided for construction of CPosRevGeoCodeHTTPClientEngine.
+ */
+class MPosRevGeoCodeHTTPClientObserver
+ {
+ public:
+ /*
+ * ClientEvent()
+ *
+ * Called when event occurs in CClientEngine.
+ *
+ * @params aEvent Status of the event.
+ */
+ virtual void ClientEvent( const THttpStatus& aEvent ) = 0;
+
+ /*
+ * ClientBodyReceived()
+ *
+ * Called when a part of the HTTP body is received.
+ *
+ * @param aBodyData Part of the body data received. (e.g. part of
+ * the received HTML page)
+ */
+ virtual void ClientBodyReceived( const TDesC8& aBodyData ) = 0;
+ };
+
+
+/*
+ * This class provides interface to HTTP client APIs
+ */
+class CPosRevGeoCodeHTTPClientEngine: public CActive,
+ public MHTTPTransactionCallback,
+ public MMobilityProtocolResp
+ {
+ /**
+ * Internal Engine state
+ */
+ enum TEngineState
+ {
+ EIdle = 0,
+ EGet
+ };
+public:
+ /**
+ * Factory method which creates instance of CPosRevGeoCodeHTTPClientEngine object.
+ */
+ static CPosRevGeoCodeHTTPClientEngine* NewL( MPosRevGeoCodeHTTPClientObserver& iObserver );
+
+ /**
+ * Destructor
+ */
+ ~CPosRevGeoCodeHTTPClientEngine();
+
+ /**
+ * Starts a new HTTP GET transaction.
+ *
+ * @param aUri URI to get request. (e.g. http://host.org")
+ */
+ void IssueHTTPGetL( const TDesC8& aUri );
+
+ /**
+ * Closes currently running transaction and frees resources related to it.
+ */
+ void CancelTransaction();
+
+ /**
+ * Closes the connection
+ */
+ void CloseConnection();
+
+private:
+ /*
+ * Symbian 2nd phase constructor
+ */
+ void ConstructL();
+
+ /*
+ * Constructor
+ */
+ CPosRevGeoCodeHTTPClientEngine( MPosRevGeoCodeHTTPClientObserver& iObserver );
+
+ /**
+ * Sets header value of an HTTP request.
+ */
+ void SetHeaderL( RHTTPHeaders aHeaders, TInt aHdrField,
+ const TDesC8& aHdrValue );
+
+ /**
+ * Sets up the connection
+ */
+ void SetupConnectionL();
+
+private: //From MHTTPSessionEventCallback
+
+ void MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+ TInt MHFRunError( TInt aError, RHTTPTransaction aTransaction, const THTTPEvent& aEvent );
+
+private:// From MMobilityProtocolResp
+ void PreferredCarrierAvailable( TAccessPointInfo aOldAPInfo,
+ TAccessPointInfo aNewAPInfo,
+ TBool aIsUpgrade,
+ TBool aIsSeamless );
+
+ void NewCarrierActive( TAccessPointInfo aNewAPInfo, TBool aIsSeamless );
+
+ void Error( TInt aError );
+
+private: // from CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+
+private:
+ void DoHTTPGetL();
+
+private: // Data members
+ RSocketServ iSocketServ;
+ RConnection iConnection;
+ TUint32 iSelectedIap;
+
+ RHTTPSession iSession;
+ RHTTPTransaction iTransaction;
+
+ MPosRevGeoCodeHTTPClientObserver& iObserver; // Used for passing body data and events to UI
+ TBool iRunning; // ETrue, if transaction running
+ TBool iConnectionSetupDone;
+
+ TInt iPrevProfileId;
+
+ CActiveCommsMobilityApiExt* iMobility;
+ TBool iTransactionOpen;
+ TEngineState iEngineState;
+ HBufC8* iUri;
+ RCmManager iCmManager;
+ };
+#endif /* POSREVGEOCODEHTTPCLIENTENGINE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodelogger.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 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: Implementation of logger.
+*
+*/
+
+#ifndef POSREVGEOCODELOGGER_H
+#define POSREVGEOCODELOGGER_H
+
+#include <flogger.h>
+#include <f32file.h>
+
+//#ifdef _DEBUG
+#define FUNC( x ) { TBuf8<150> buffer; \
+ const unsigned char* string = (unsigned char*)(x); \
+ buffer.Zero(); \
+ buffer.Copy(string); \
+ RFileLogger::Write( _L("lbs"),_L("PosRevGeocode.log"),EFileLoggingModeAppend,buffer); }
+
+#define LOG ( x,y ) { TBuf8<150> buffer; \
+ const unsigned char* string = (unsigned char*)(x); \
+ buffer.Zero(); \
+ buffer.Copy(string); \
+ buffer.format(y); \
+ RFileLogger::Write( _L("lbs"),_L("PosRevGeocode.log"),EFileLoggingModeAppend,buffer); }
+
+/*#else
+#define FUNC( x )
+#define LOG ( x,y )
+#endif*/
+
+#endif /* POSREVGEOCODELOGGER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodeplugin.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,133 @@
+/*
+* Copyright (c) 2010 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: Declaration of CPosRevGeoCodePlugin class.
+*
+*/
+
+#ifndef POSREVGEOCODEPLUGIN_H
+#define POSREVGEOCODEPLUGIN_H
+
+#include "posreversegeocodeinterface.h"
+#include "posrevgeocodehttpclientengine.h"
+#include "posrevgeocodeconnectiontimer.h"
+#include "posrevgeocodexmlparser.h"
+
+
+class CPosRevGeoCodePlugin : public CPosReverseGeocodeInterface,
+ public MPosRevGeoCodeXmlObserver,
+ public MPosRevGeoCodeHTTPClientObserver,
+ public MPosRevGeoCodeTimeoutObserver
+ {
+public:
+ /**
+ * Factory function to create the instance of CPosRevGeoCodePlugin object.
+ */
+ static CPosRevGeoCodePlugin* NewL( MPosReverseGeocodeObserver& aObserver );
+
+ /**
+ * Destructor
+ */
+ ~CPosRevGeoCodePlugin();
+
+ /**
+ * Gets the address information for the given geo coordinates
+ */
+ virtual void GetAddressByCoordinateL( CPosLandmark& aLandmark );
+
+ /**
+ * Cancels the current operation.
+ */
+ virtual void Cancel();
+
+ /**
+ * Function to get the appropriate language for the request.
+ */
+ void GetLanguageForTheRequest( TDes8& aLanguage );
+
+public: // From MPosRevGeoCodeXmlObserver
+ virtual void OnParseCompletedL( TInt aError );
+
+public: // From MPosRevGeoCodeHTTPClientObserver
+ virtual void ClientEvent( const THttpStatus& aEvent );
+
+ virtual void ClientBodyReceived( const TDesC8& aBodyData );
+
+public: // From MPosRevGeoCodeTimeoutObserver
+ virtual void HandleTimedoutEvent( TInt aErrorCode );
+
+private:
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Constructor
+ */
+ CPosRevGeoCodePlugin( MPosReverseGeocodeObserver& aObserver );
+
+ /**
+ * Starts the timer
+ */
+ void StartTimer();
+
+ /**
+ * Closes connection
+ */
+ void CloseConnection();
+
+private: // Data members
+
+ /**
+ * Reference to reverse geocode observer.
+ */
+ MPosReverseGeocodeObserver& iObserver;
+
+ /**
+ * Pointer to HTTP client engine
+ * Own
+ */
+ CPosRevGeoCodeHTTPClientEngine* iHTTPClientEngine;
+
+ /**
+ * Pointer to XML parser
+ * Own
+ */
+ CPosRevGeoCodeXmlParser* iXmlParser;
+
+ /**
+ * Pointer to connection timer
+ * Own
+ */
+ CPosRevGeoCodeConnectionTimer* iConnectionTimer;
+
+ /**
+ * Pointer to client's landmarks object.
+ * Not own.
+ */
+ CPosLandmark* iClientLandmark;
+
+ HBufC8* iXMLBuf;
+
+ TBuf8<KMaxFileName> iQueryString;
+
+ TBuf8<KMaxFileName> iAuthCode;
+
+ TBuf8<KMaxFileName> iRefURL;
+
+ TBuf8<KMaxFileName> iLang;
+
+ };
+
+#endif /* POSREVGEOCODEPLUGIN_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/inc/posrevgeocodexmlparser.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,140 @@
+/*
+* Copyright (c) 2010 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: Declaration of XML parser class.
+*
+*/
+
+#ifndef POSREVGEOCODEXMLPARSER_H
+#define POSREVGEOCODEXMLPARSER_H
+
+#include <e32base.h>
+#include <xml/contenthandler.h>
+#include <xml/parser.h>
+using namespace Xml;
+
+// Forward declarations
+class CPosLandmark;
+
+/**
+ * MPosRevGeoCodeXmlObserver, an observer to CXmlHandler class.
+ */
+class MPosRevGeoCodeXmlObserver
+ {
+public:
+ /*
+ * Signyfys the completion of parsing of the output data.
+ *
+ * @param aError error status of parsing part.
+ */
+ virtual void OnParseCompletedL( TInt aError ) = 0;
+ };
+
+/**
+ * This class parses XML script and fills the information into landmarks structure.
+ */
+class CPosRevGeoCodeXmlParser : public CBase,
+ public MContentHandler
+ {
+ /*
+ * Category of the address information. This is used for
+ * internal parsing procedure.
+ */
+ enum TLocationInfoType
+ {
+ ENone = 0,
+ ECountryName,
+ EState,
+ ECity,
+ EDistrict,
+ EPostalCode,
+ EThoroughfareName,
+ EThoroughfareNumber
+ };
+public:
+ /**
+ * Factory function to create the instance of CPosRevGeoCodeXmlParser object.
+ */
+ static CPosRevGeoCodeXmlParser* NewL( MPosRevGeoCodeXmlObserver& aObserver );
+
+ /**
+ * Destructor
+ */
+ virtual ~CPosRevGeoCodeXmlParser();
+
+public:
+ /**
+ * Starts parsing XML provided through buffer.
+ */
+ void StartParsingL( HBufC8* aXmlInfo,CPosLandmark* aLandmarkInfo );
+
+private:
+ /**
+ * Constructor
+ */
+ CPosRevGeoCodeXmlParser( MPosRevGeoCodeXmlObserver& aObserver );
+
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+private: // from MContentHandler
+ void OnStartDocumentL( const RDocumentParameters &aDocParam, TInt aErrorCode );
+ void OnEndDocumentL( TInt aErrorCode );
+ void OnStartElementL( const RTagInfo &aElement, const RAttributeArray &aAttributes, TInt aErrorCode );
+ void OnEndElementL( const RTagInfo &aElement, TInt aErrorCode );
+ void OnContentL( const TDesC8 &aBytes, TInt aErrorCode );
+ void OnStartPrefixMappingL( const RString &aPrefix, const RString &aUri, TInt aErrorCode );
+ void OnEndPrefixMappingL( const RString &aPrefix, TInt aErrorCode );
+ void OnIgnorableWhiteSpaceL( const TDesC8 &aBytes, TInt aErrorCode );
+ void OnSkippedEntityL( const RString &aName, TInt aErrorCode );
+ void OnProcessingInstructionL( const TDesC8 &aTarget, const TDesC8 &aData, TInt aErrorCode);
+ void OnError( TInt aErrorCode );
+
+ TAny *GetExtendedInterface( const TInt32 aUid );
+
+private://Data members
+ /**
+ * Reference to XML observer
+ */
+ MPosRevGeoCodeXmlObserver& iObserver;
+
+ /**
+ * Pointer to parser
+ * Own
+ */
+ CParser* iParser;
+
+ /**
+ * Buffer the contain XML to parsed
+ */
+ HBufC8* iBuffer;
+
+ /**
+ * Pointer to client's landmarks object.
+ */
+ CPosLandmark* iClientLandmark;
+
+ /**
+ * Current parsing element
+ */
+ TLocationInfoType iCurrentElement;
+
+ /**
+ * Boolean to represent thoroughfare.
+ */
+ TBool iThoroughfare;
+ };
+
+#endif /* POSREVGEOCODEXMLPARSER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/src/posrevgeocodeconnectiontimer.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2010 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: Implementation of connection timer class.
+*
+*/
+
+#include "posrevgeocodeconnectiontimer.h"
+#include "posrevgeocodelogger.h"
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeConnectionTimer::NewL
+//------------------------------------------------------------------------------
+CPosRevGeoCodeConnectionTimer* CPosRevGeoCodeConnectionTimer::NewL(
+ MPosRevGeoCodeTimeoutObserver& aConnectionTimeoutObserver )
+ {
+ FUNC("CPosRevGeoCodeConnectionTimer::NewL");
+ CPosRevGeoCodeConnectionTimer* self = new ( ELeave )
+ CPosRevGeoCodeConnectionTimer( aConnectionTimeoutObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeConnectionTimer::CPosRevGeoCodeConnectionTimer
+//------------------------------------------------------------------------------
+CPosRevGeoCodeConnectionTimer::CPosRevGeoCodeConnectionTimer(
+ MPosRevGeoCodeTimeoutObserver& aConnectionTimeoutObserver ):
+ CTimer( EPriorityStandard ),
+ iConnectionTimeoutObserver ( aConnectionTimeoutObserver )
+ {
+ FUNC("CPosRevGeoCodeConnectionTimer::CPosRevGeoCodeConnectionTimer");
+ CActiveScheduler::Add(this);
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeConnectionTimer::~CPosRevGeoCodeConnectionTimer
+//------------------------------------------------------------------------------
+CPosRevGeoCodeConnectionTimer::~CPosRevGeoCodeConnectionTimer()
+ {
+ FUNC("CPosRevGeoCodeConnectionTimer::~CPosRevGeoCodeConnectionTimer");
+ Cancel();
+ }
+
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeConnectionTimer::ConstructL
+//------------------------------------------------------------------------------
+
+void CPosRevGeoCodeConnectionTimer::ConstructL()
+ {
+ FUNC("CPosRevGeoCodeConnectionTimer::ConstructL");
+ CTimer::ConstructL();
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeConnectionTimer::StartTimer
+//------------------------------------------------------------------------------
+TInt CPosRevGeoCodeConnectionTimer::StartTimer(const TInt aTimeoutVal)
+ {
+ FUNC("CPosRevGeoCodeConnectionTimer::StartTimer");
+ if( IsActive() )
+ {
+ // If the timer is already running, return error code.
+ return KErrInUse;
+ }
+ After(aTimeoutVal);
+ return KErrNone;
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeConnectionTimer::NewL
+//------------------------------------------------------------------------------
+
+void CPosRevGeoCodeConnectionTimer::RunL( )
+ {
+ FUNC("CPosRevGeoCodeConnectionTimer::RunL");
+ iConnectionTimeoutObserver.HandleTimedoutEvent( iStatus.Int() );
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/src/posrevgeocodehttpclientengine.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,491 @@
+/*
+* Copyright (c) 2010 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: Implementation of HTTP client engine class.
+*
+*/
+
+//Symbian headers
+#include "posrevgeocodehttpclientengine.h"
+#include "posrevgeocodelogger.h"
+
+#include <http.h>
+#include <CommDbConnPref.h>
+#include <connpref.h>
+#include <extendedconnpref.h>
+#include <cmgenconnsettings.h>
+
+// Used user agent for requests
+_LIT8(KUserAgent, "ReverseGeoCode 1.0");
+
+// This client accepts all content types.
+_LIT8(KAccept, "*/*");
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::NewL()
+// ----------------------------------------------------------------------------
+CPosRevGeoCodeHTTPClientEngine* CPosRevGeoCodeHTTPClientEngine::NewL(
+ MPosRevGeoCodeHTTPClientObserver& aObserver )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::NewL");
+ CPosRevGeoCodeHTTPClientEngine* self = new ( ELeave )
+ CPosRevGeoCodeHTTPClientEngine( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::CPosRevGeoCodeHTTPClientEngine()
+// ----------------------------------------------------------------------------
+CPosRevGeoCodeHTTPClientEngine::CPosRevGeoCodeHTTPClientEngine(
+ MPosRevGeoCodeHTTPClientObserver& aObserver ):
+ CActive( CActive::EPriorityStandard ),
+ iObserver( aObserver ),
+ iConnectionSetupDone( EFalse ),
+ iPrevProfileId( -1 ),
+ iMobility(NULL),
+ iTransactionOpen( EFalse ),
+ iUri(NULL)
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::CPosRevGeoCodeHTTPClientEngine");
+ CActiveScheduler::Add(this);
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::~CPosRevGeoCodeHTTPClientEngine()
+// ----------------------------------------------------------------------------
+CPosRevGeoCodeHTTPClientEngine::~CPosRevGeoCodeHTTPClientEngine()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::~CPosRevGeoCodeHTTPClientEngine");
+ Cancel();
+
+ if( iMobility )
+ {
+ iMobility->Cancel();
+ delete iMobility;
+ }
+
+ if ( iTransactionOpen )
+ {
+ iTransaction.Close();
+ }
+
+
+ iSession.Close();
+ iConnection.Close();
+ iSocketServ.Close();
+
+ delete iUri;
+
+ iCmManager.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::ConstructL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::ConstructL()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::ConstructL");
+ iCmManager.OpenL();
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::CloseConnection()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::CloseConnection()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::CloseConnection");
+ if ( iTransactionOpen )
+ {
+ iTransaction.Close();
+ iTransactionOpen = EFalse;
+ }
+
+ if ( iMobility )
+ {
+ iMobility->Cancel();
+ delete iMobility;
+ iMobility = NULL;
+ }
+
+ iSession.Close();
+ iConnection.Close();
+ iSocketServ.Close();
+ iConnectionSetupDone = EFalse;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::SetupConnectionL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::SetupConnectionL()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::SetupConnectionL");
+ if ( iConnectionSetupDone )
+ {
+ // Connection setup is done
+ User::Leave(KErrAlreadyExists);
+ }
+
+
+ // Open HTTP Session
+ iSession.OpenL();
+
+ User::LeaveIfError(iSocketServ.Connect());
+ User::LeaveIfError(iConnection.Open(iSocketServ));
+
+ TConnPrefList prefList;
+ TExtendedConnPref prefs;
+ prefs.SetSnapPurpose( CMManager::ESnapPurposeInternet );
+ prefs.SetForcedRoaming( EFalse );
+ prefs.SetBearerSet( TExtendedConnPref::EExtendedConnBearerCellular |
+ TExtendedConnPref::EExtendedConnBearerWLAN );
+ prefList.AppendL( &prefs );
+
+ iConnection.Start( prefList,iStatus );
+ SetActive();
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::SetHeaderL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::SetHeaderL( RHTTPHeaders aHeaders, TInt aHdrField, const TDesC8& aHdrValue )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::SetHeaderL");
+ RStringF valStr = iSession.StringPool().OpenFStringL( aHdrValue );
+ CleanupClosePushL( valStr );
+ THTTPHdrVal val(valStr);
+ aHeaders.SetFieldL( iSession.StringPool().StringF( aHdrField, RHTTPSession::GetTable()), val);
+ CleanupStack::PopAndDestroy(); // valStr
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::IssueHTTPGetL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::IssueHTTPGetL( const TDesC8& aUri )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::IssueHTTPGetL");
+ if ( IsActive() )
+ {
+ return;
+ }
+
+ iEngineState = EGet;
+
+ delete iUri;
+ iUri = NULL;
+ iUri = aUri.AllocL();
+ // Create HTTP connection
+ TRAPD( err, SetupConnectionL() );
+ //If the Err is KErrNone, It will lead to RunL and
+ //hence jump to the DoHTTPGetL() from there.
+
+ if( err == KErrAlreadyExists )
+ {
+ DoHTTPGetL();
+ }
+ else if( err != KErrNone )
+ {
+ //If Setup Connection fails
+ iObserver.ClientEvent( EHttpConnectionFailure );
+ User::Leave(err);
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::DoHTTPGetL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::DoHTTPGetL()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::DoHTTPGetL");
+ // Parse string to URI (as defined in RFC2396)
+ TUriParser8 uri;
+ uri.Parse( *iUri );
+
+ // Get request method string for HTTP GET
+ RStringF method = iSession.StringPool().StringF( HTTP::EGET,RHTTPSession::GetTable() );
+ CleanupClosePushL( method );
+ // Open transaction with previous method and parsed uri. This class will
+ // receive transaction events in MHFRunL and MHFRunError.
+ iTransaction = iSession.OpenTransactionL( uri, *this, method );
+ iTransactionOpen = ETrue;
+
+ // Set headers for request; user agent and accepted content type
+ RHTTPHeaders hdr = iTransaction.Request().GetHeaderCollection();
+ SetHeaderL( hdr, HTTP::EUserAgent, KUserAgent );
+ SetHeaderL( hdr, HTTP::EAccept, KAccept );
+
+ // Submit the transaction. After this the framework will give transaction
+ // events via MHFRunL and MHFRunError.
+ iTransaction.SubmitL();
+ CleanupStack::PopAndDestroy( 1 ); // method
+ iObserver.ClientEvent( EHttpConnecting );
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::CancelTransaction()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::CancelTransaction()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::CancelTransaction");
+ iEngineState = EIdle;
+ delete iUri;
+ iUri = NULL;
+
+ // Close() also cancels transaction (Cancel() can also be used but
+ // resources allocated by transaction must be still freed with Close())
+ if( iTransactionOpen )
+ {
+ iTransaction.Close();
+ iTransactionOpen = EFalse;
+
+ iObserver.ClientEvent( EHttpTxCancelled );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::MHFRunL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::MHFRunL( RHTTPTransaction aTransaction, const THTTPEvent& aEvent )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::MHFRunL");
+ switch ( aEvent.iStatus )
+ {
+ case THTTPEvent::EGotResponseHeaders:
+ {
+ // HTTP response headers have been received. Use
+ // aTransaction.Response() to get the response. However, it's not
+ // necessary to do anything with the response when this event occurs.
+ iObserver.ClientEvent( EHttpHdrReceived );
+ break;
+ }
+ case THTTPEvent::EGotResponseBodyData:
+ {
+ // Part (or all) of response's body data received. Use
+ // aTransaction.Response().Body()->GetNextDataPart() to get the actual
+ // body data.
+
+ // Get the body data supplier
+ MHTTPDataSupplier* body = aTransaction.Response().Body();
+ TPtrC8 dataChunk;
+
+ // GetNextDataPart() returns ETrue, if the received part is the last
+ // one.
+ TBool isLast = body->GetNextDataPart(dataChunk);
+ iObserver.ClientBodyReceived(dataChunk);
+
+ iObserver.ClientEvent( EHttpBytesReceieved );
+
+ // NOTE: isLast may not be ETrue even if last data part received.
+ // (e.g. multipart response without content length field)
+ // Use EResponseComplete to reliably determine when body is completely
+ // received.
+ if( isLast )
+ {
+ iObserver.ClientEvent( EHttpBodyReceieved );
+ }
+ // Always remember to release the body data.
+ body->ReleaseData();
+ break;
+ }
+ case THTTPEvent::EResponseComplete:
+ {
+ // Indicates that header & body of response is completely received.
+ // No further action here needed.
+
+ iObserver.ClientEvent( EHttpTxCompleted );
+ break;
+ }
+ case THTTPEvent::ESucceeded:
+ {
+ // Indicates that transaction succeeded.
+ iObserver.ClientEvent( EHttpTxSuccess );
+ // Transaction can be closed now. It's not needed anymore.
+ aTransaction.Close();
+ iTransactionOpen = EFalse;
+ break;
+ }
+ case THTTPEvent::EFailed:
+ {
+ // Transaction completed with failure.
+ iObserver.ClientEvent( EHttpTxFailed );
+ aTransaction.Close();
+ iTransactionOpen = EFalse;
+ break;
+ }
+ default:
+ // There are more events in THTTPEvent, but they are not usually
+ // needed. However, event status smaller than zero should be handled
+ // correctly since it's error.
+ {
+ if ( aEvent.iStatus < 0 )
+ {
+ iObserver.ClientEvent( EHttpConnectionFailure );
+ // Close the transaction on errors
+ aTransaction.Close();
+ iTransactionOpen = EFalse;
+ }
+ break;
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::MHFRunError()
+// ----------------------------------------------------------------------------
+TInt CPosRevGeoCodeHTTPClientEngine::MHFRunError( TInt /*aError*/,
+ RHTTPTransaction /*aTransaction*/,
+ const THTTPEvent& /*aEvent*/ )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::MHFRunError");
+ // Just notify about the error and return KErrNone.
+ CloseConnection();
+ iObserver.ClientEvent(EHttpMhfRunError);
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::PreferredCarrierAvailable()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::PreferredCarrierAvailable(
+ TAccessPointInfo /*aOldAPInfo*/,
+ TAccessPointInfo /*aNewAPInfo*/,
+ TBool /*aIsUpgrade*/,
+ TBool aIsSeamless )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::PreferredCarrierAvailable");
+ if( !aIsSeamless && iMobility)
+ {
+ iMobility->MigrateToPreferredCarrier();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::NewCarrierActive()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::NewCarrierActive( TAccessPointInfo /*aNewAPInfo*/,
+ TBool aIsSeamless )
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::NewCarrierActive");
+ if( !aIsSeamless && iMobility)
+ {
+ iMobility->NewCarrierAccepted();
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::Error()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::Error(TInt /*aError*/)
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::Error");
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::DoCancel()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::DoCancel()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::DoCancel");
+ iConnection.Stop();
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::DoCancel()
+// ----------------------------------------------------------------------------
+TInt CPosRevGeoCodeHTTPClientEngine::RunError(TInt /*aError*/)
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::RunError");
+ // Just notify about the error and return KErrNone.
+ CloseConnection();
+ iObserver.ClientEvent( EHttpTxFailed );
+ return KErrNone;
+ }
+
+// ----------------------------------------------------------------------------
+// CPosRevGeoCodeHTTPClientEngine::RunL()
+// ----------------------------------------------------------------------------
+void CPosRevGeoCodeHTTPClientEngine::RunL()
+ {
+ FUNC("CPosRevGeoCodeHTTPClientEngine::RunL");
+ TInt statusCode = iStatus.Int();
+
+ if ( statusCode == KErrNone )
+ {
+ // Connection done ok
+ iConnectionSetupDone = ETrue;
+
+ RStringPool strPool = iSession.StringPool();
+ CleanupClosePushL( strPool );
+ // Remove first session properties just in case.
+ RHTTPConnectionInfo connInfo = iSession.ConnectionInfo();
+
+ // Clear RConnection and Socket Server instances
+ connInfo.RemoveProperty(strPool.StringF(HTTP::EHttpSocketServ,RHTTPSession::GetTable()));
+ connInfo.RemoveProperty(strPool.StringF(HTTP::EHttpSocketConnection,RHTTPSession::GetTable()));
+
+ // Clear the proxy settings
+ connInfo.RemoveProperty(strPool.StringF(HTTP::EProxyUsage,RHTTPSession::GetTable()));
+ connInfo.RemoveProperty(strPool.StringF(HTTP::EProxyAddress,RHTTPSession::GetTable()));
+
+ // RConnection and Socket Server
+ connInfo.SetPropertyL ( strPool.StringF(HTTP::EHttpSocketServ,
+ RHTTPSession::GetTable()),
+ THTTPHdrVal (iSocketServ.Handle()) );
+
+ TInt connPtr1 = REINTERPRET_CAST(TInt, &iConnection);
+ connInfo.SetPropertyL ( strPool.StringF(HTTP::EHttpSocketConnection,
+ RHTTPSession::GetTable() ), THTTPHdrVal (connPtr1) );
+
+ // Register for mobility API
+ delete iMobility;
+ iMobility = NULL;
+ iMobility = CActiveCommsMobilityApiExt::NewL( iConnection, *this );
+ CleanupStack::Pop( &strPool ); // strPool
+
+ // Start selected HTTP action
+ switch( iEngineState )
+ {
+ case EIdle:
+ {
+ //
+ CancelTransaction();
+ break;
+ }
+ case EGet:
+ {
+ DoHTTPGetL();
+ break;
+ }
+ };
+ }
+ else
+ {
+ //handle error
+ if ( statusCode == KErrPermissionDenied )
+ {
+ iObserver.ClientEvent( EHttpAuthFailed );
+ }
+ else
+ {
+ //Throw some general Transaction falure error!
+ iObserver.ClientEvent( EHttpTxFailed );
+ }
+ CloseConnection();
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/src/posrevgeocodeplugin.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,389 @@
+/*
+* Copyright (c) 2010 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: Implementation of CPosRevGeoCodePlugin class.
+*
+*/
+
+#include "posrevgeocodeplugin.h"
+#include "posrevgeocodelogger.h"
+
+#include <lbsposition.h>
+
+//Maximum length for the response buffer size
+const int KMaxResponseLength = 2048;
+//Authentication token for the Maps server
+//This authentication in specific to our photo-tagging feature
+_LIT8( KAuthenticationToken, "88dedc61fb43c924aa39a873dadd41f4" );
+//Static RefererURL which shows that request has been made from this app
+_LIT8( KRefererURL, "nokia_positioningIndicator" );
+
+//Language option for the REST request
+_LIT8( KDefaultLanguage, "eng" );
+
+
+//Format of the HTTP request for the reverse geocode
+_LIT8( KRequestFormat, "http://loc.mobile.maps.svc.ovi.com/geocoder/rgc/1.0?token=%S&referer=%S&n=10&lat=%f&long=%f&lg=%S&output=xml" );
+
+
+// http://www.loc.gov/marc/languages/
+// These are the nokia language id converted to MARC language strings.
+ static const char Marc_Table[ 104 ][ 4 ] = {
+ " ", // dummy
+ "ENG", // 1 English
+ "FRE", // 2 French
+ "GER", // 3 German
+ "SPA", // 4 Spanish
+ "ITA", // 5 Italian
+ "SWE", // 6 Swedish
+ "DAN", // 7 Danish
+ "NOR", // 8 Norwegian
+ "FIN", // 9 Finnish
+ "010", // 10 American
+ "011", // 11 Swiss French
+ "GSW", // 12 Swiss German
+ "POR", // 13 Portuguese
+ "TUR", // 14 Turkish
+ "ICE", // 15 Icelandic
+ "RUS", // 16 Russian
+ "HUN", // 17 Hungarian
+ "DUT", // 18 Dutch
+ "019", // 19 Flemish
+ "020", // 20 Australian English
+ "021", // 21 Belgian French
+ "022", // 22 Austrian German
+ "023", // 23 New Zealand English
+ "FRE", // 24 International French
+ "CZE", // 25 Czech
+ "SLO", // 26 Slovak
+ "POL", // 27 Polish
+ "SLV", // 28 Slovenian
+ "029", // 29 TaiwanChinese
+ "CHT", // 30 HongKongChinese
+ "CHI", // 31 PeoplesRepublicOfChina Chinese
+ "JPN", // 32 Japanese
+ "THA", // 33 Thai
+ "AFR", // 34 Afrikaans
+ "ALB", // 35 Albanian
+ "AMH", // 36 Amharic
+ "ARA", // 37 Arabic
+ "ARM", // 38 Armenian
+ "TGL", // 39 Tagalog
+ "BEL", // 40 Belarusian
+ "BEN", // 41 Bengali
+ "BUL", // 42 Bulgarian
+ "BUR", // 43 Burmese
+ "CAT", // 44 Catalan
+ "SCR", // 45 Croatian
+ "046", // 46 Canadian English
+ "ENG", // 47 International English
+ "048", // 48 SouthAfrican English
+ "EST", // 49 Estonian
+ "PER", // 50 Persian (Farsi)
+ "051", // 51 Canadian French
+ "GAE", // 52 Scots Gaelic
+ "GEO", // 53 Georgian
+ "GRE", // 54 Greek
+ "055", // 55 Cyprus Greek
+ "GUJ", // 56 Gujarati
+ "HEB", // 57 Hebrew
+ "HIN", // 58 Hindi
+ "IND", // 59 Bahasa indonesia
+ "GLE", // 60 Irish
+ "061", // 61 Swiss Italian
+ "KAN", // 62 Kannada
+ "KAZ", // 63 Kazakh
+ "KHM", // 64 Khmer
+ "KOR", // 65 Korean
+ "LAO", // 66 Lao
+ "LAV", // 67 Latvian
+ "LIT", // 68 Lithuanian
+ "MAC", // 69 Macedonian
+ "070", // 70 Bahasa Malaysia
+ "MAL", // 71 Malayalam
+ "MAR", // 72 Marathi
+ "MOL", // 73 Moldavian
+ "MON", // 74 Mongolian
+ "NNO", // 75 Norwegian Nynorsk
+ "076", // 76 Brazilian Portuguese
+ "PAN", // 77 Punjabi
+ "RUM", // 78 Romanian
+ "SCC", // 79 Serbian
+ "SNH", // 80 Sinhalese
+ "SOM", // 81 Somali
+ "082", // 82 International Spanish
+ "083", // 83 LatinAmerican Spanish
+ "SWA", // 84 Swahili
+ "085", // 85 Finland Swedish
+ "TAJ", // 86 Tajik
+ "TAM", // 87 Tamil
+ "TEL", // 88 Telugu
+ "TIB", // 89 Tibetan
+ "TIR", // 90 Tigrinya
+ "091", // 91 Cyprus Turkish
+ "TUK", // 92 Turkmen
+ "UKR", // 93 Ukrainian
+ "URD", // 94 Urdu
+ "UZB", // 95 Uzbek
+ "VIE", // 96 Vietnamese
+ "WEL", // 97 Welsh
+ "ZUL", // 98 Zulu
+ "UND", // 99 Other
+ "UND", // 100 Undef
+ "UND", // 101 Undef
+ "BAQ", // 102 Basque
+ "103", // 103 Galician
+ };
+
+// Timer interval
+const TInt KTimeOutInterval = 60000000; // 60 seconds
+
+
+// ECOM implementation specifics
+static const TImplementationProxy implTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY( 0x2002E693, CPosRevGeoCodePlugin::NewL )
+ };
+
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(implTable) / sizeof(TImplementationProxy);
+
+ return implTable;
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::NewL
+//------------------------------------------------------------------------------
+CPosRevGeoCodePlugin* CPosRevGeoCodePlugin::NewL( MPosReverseGeocodeObserver& aObserver )
+ {
+ FUNC("CPosRevGeoCodePlugin::NewL");
+ CPosRevGeoCodePlugin *self = new (ELeave) CPosRevGeoCodePlugin( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::CPosRevGeoCodePlugin
+//------------------------------------------------------------------------------
+CPosRevGeoCodePlugin::CPosRevGeoCodePlugin( MPosReverseGeocodeObserver& aObserver ):
+ iObserver( aObserver ),
+ iHTTPClientEngine ( NULL ),
+ iXmlParser ( NULL ),
+ iConnectionTimer( NULL ),
+ iXMLBuf ( NULL )
+ {
+ FUNC("CPosRevGeoCodePlugin::CPosRevGeoCodePlugin");
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::~CPosRevGeoCodePlugin
+//------------------------------------------------------------------------------
+CPosRevGeoCodePlugin::~CPosRevGeoCodePlugin()
+ {
+ FUNC("CPosRevGeoCodePlugin::~CPosRevGeoCodePlugin");
+
+ delete iConnectionTimer;
+ iConnectionTimer = NULL;
+
+ delete iXMLBuf;
+ iXMLBuf = NULL;
+
+ delete iXmlParser;
+ iXmlParser = NULL;
+
+ delete iHTTPClientEngine;
+ iHTTPClientEngine = NULL;
+ FUNC("out>>CPosRevGeoCodePlugin");
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::GetAddressByCoordinateL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::GetAddressByCoordinateL( CPosLandmark& aLandmark )
+ {
+ FUNC("CPosRevGeoCodePlugin::GetAddressByCoordinateL");
+ // Store the landmark object.
+ iClientLandmark = &aLandmark;
+
+ TLocality locality;
+ User::LeaveIfError( aLandmark.GetPosition( locality ) );
+ TReal64 latitude = locality.Latitude();
+ TReal64 longitude = locality.Longitude();
+
+ iAuthCode.Copy( KAuthenticationToken );
+ iRefURL.Copy( KRefererURL );
+
+ GetLanguageForTheRequest( iLang );
+
+ //Form the request URI
+ iQueryString.Format( KRequestFormat, &iAuthCode, &iRefURL, latitude, longitude, &iLang );
+
+ iHTTPClientEngine->IssueHTTPGetL( iQueryString );
+
+ if ( iConnectionTimer && iConnectionTimer->IsActive() )
+ {
+ iConnectionTimer->Cancel();
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::Cancel()
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::Cancel()
+ {
+ if( iHTTPClientEngine->IsActive() )
+ {
+ iHTTPClientEngine->CancelTransaction();
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::ConstructL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::ConstructL()
+ {
+ FUNC("CPosRevGeoCodePlugin::ConstructL");
+ iXMLBuf = HBufC8::NewL( KMaxResponseLength );
+
+ iXmlParser = CPosRevGeoCodeXmlParser::NewL( *this );
+
+ iHTTPClientEngine = CPosRevGeoCodeHTTPClientEngine::NewL( *this );
+
+ iConnectionTimer = CPosRevGeoCodeConnectionTimer::NewL(*this);
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::OnParseCompletedL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::OnParseCompletedL( TInt aError )
+ {
+ FUNC("CPosRevGeoCodePlugin::OnParseCompletedL");
+ StartTimer();
+ iObserver.ReverseGeocodeComplete( aError );
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::ClientEvent
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::ClientEvent( const THttpStatus& aEvent )
+ {
+ FUNC("CPosRevGeoCodePlugin::ClientEvent");
+ TInt error;
+ switch( aEvent )
+ {
+ case EHttpTxCompleted:
+ //Reading is done
+ //Parse the String and get the restults
+ if( iXmlParser )
+ {
+ TRAP_IGNORE( iXmlParser->StartParsingL( iXMLBuf,iClientLandmark ) );
+ }
+ break;
+ //All these cases will in turn lead to
+ //generic failure due to connection/Tx related problems
+ case EHttpConnectionFailure:
+ // May happen if Socket connection fails
+ error = KErrCouldNotConnect;
+ iObserver.ReverseGeocodeComplete( error );
+ break;
+ case EHttpTxFailed:
+ case EHttpMhfRunError:
+ // May happen if Socket connection fails
+ // Complete the RGC with generic error.
+ error = KErrGeneral;
+ iObserver.ReverseGeocodeComplete( error );
+ break;
+ case EHttpTxCancelled:
+ //On Cancellation of request.
+ error = KErrCancel;
+ iObserver.ReverseGeocodeComplete( error );
+ break;
+ case EHttpAuthFailed:
+ //On authentication failed.
+ error = KErrPermissionDenied;
+ iObserver.ReverseGeocodeComplete( error );
+ break;
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::ClientBodyReceived
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::ClientBodyReceived( const TDesC8& aBodyData )
+ {
+ FUNC("CPosRevGeoCodePlugin::ClientBodyReceived");
+ //Dump the contents here
+ TPtr8 ptr = iXMLBuf->Des();
+ ptr.Zero();
+ ptr.Append( aBodyData );
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::GetLanguageForTheRequest
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::GetLanguageForTheRequest( TDes8& aLanguage )
+ {
+ FUNC("CPosRevGeoCodePlugin::GetLanguageForTheRequest");
+ // Get the current phone langauge
+ TInt phoneLangIndex = User::Language();
+
+ // Get the converted language
+ if ( phoneLangIndex < sizeof( Marc_Table ) / sizeof( Marc_Table[ 0 ] ) )
+ {
+ aLanguage = (const TUint8*) Marc_Table[ phoneLangIndex ];
+ }
+ else
+ {
+ //By default language will be Eng
+ aLanguage.Copy( KDefaultLanguage );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::CloseConnection
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::CloseConnection()
+ {
+ FUNC("CPosRevGeoCodePlugin::CloseConnection");
+ if( iHTTPClientEngine )
+ {
+ iHTTPClientEngine->CloseConnection();
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::StartTimer
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::StartTimer()
+ {
+ FUNC("CPosRevGeoCodePlugin::StartTimer");
+ if( iConnectionTimer )
+ {
+ iConnectionTimer->StartTimer( KTimeOutInterval );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodePlugin::HandleTimedoutEvent
+//------------------------------------------------------------------------------
+void CPosRevGeoCodePlugin::HandleTimedoutEvent(TInt /*aErrorCode*/)
+ {
+ FUNC("CPosRevGeoCodePlugin::HandleTimedoutEvent");
+ CloseConnection();
+ }
+
+//end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/posreversegeocodeplugin/src/posrevgeocodexmlparser.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,355 @@
+/*
+* Copyright (c) 2010 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: Implementation of XML parser class.
+*
+*/
+
+#include "posrevgeocodexmlparser.h"
+#include "posrevgeocodelogger.h"
+
+
+#include <utf.h>
+#include <EPos_CPosLandmark.h>
+
+// CONSTANTS
+_LIT8( KXmlMimeType, "text/xml" );
+_LIT8( KCountry, "country" );
+_LIT8( KState, "state" );
+_LIT8( KDistrict, "district" );
+_LIT8( KCity, "city" );
+_LIT8( KPostalCode, "postCode" );
+_LIT8( KThoroughfare, "thoroughfare" );
+_LIT8( KNameTag, "name" );
+_LIT8( KNumberTag, "number" );
+
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::NewL
+//------------------------------------------------------------------------------
+CPosRevGeoCodeXmlParser* CPosRevGeoCodeXmlParser::NewL( MPosRevGeoCodeXmlObserver& aObserver )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::NewL");
+ CPosRevGeoCodeXmlParser* self = new ( ELeave ) CPosRevGeoCodeXmlParser( aObserver );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::~CPosRevGeoCodeXmlParser
+//------------------------------------------------------------------------------
+CPosRevGeoCodeXmlParser::~CPosRevGeoCodeXmlParser()
+ {
+ FUNC("CPosRevGeoCodeXmlParser::~CPosRevGeoCodeXmlParser");
+ delete iParser;
+ delete iBuffer;
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::CPosRevGeoCodeXmlParser
+//------------------------------------------------------------------------------
+CPosRevGeoCodeXmlParser::CPosRevGeoCodeXmlParser( MPosRevGeoCodeXmlObserver& aObserver ):
+ iObserver( aObserver ),
+ iParser( NULL ),
+ iBuffer( NULL ),
+ iThoroughfare( EFalse )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::CPosRevGeoCodeXmlParser");
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::ConstructL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::ConstructL()
+ {
+ FUNC("CPosRevGeoCodeXmlParser::ConstructL");
+ iParser = CParser::NewL( KXmlMimeType,*this );
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::StartParsingL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::StartParsingL( HBufC8 *aXmlInfo,
+ CPosLandmark* aLandmarkInfo )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::StartParsingL");
+ // Store client's landmark
+ iClientLandmark = aLandmarkInfo;
+
+ if( iBuffer )
+ {
+ delete iBuffer;
+ iBuffer = NULL;
+ }
+
+ iBuffer = HBufC8::NewL( aXmlInfo->Size() );
+ TPtr8 ptr = iBuffer->Des();
+ ptr.Copy( aXmlInfo->Ptr(),aXmlInfo->Size() );
+
+ // Now, we have the whole file content in iBuffer.
+ // We are ready to parse the XML content.
+ iParser->ParseBeginL();
+ iParser->ParseL( *iBuffer );
+
+ // Since we read the whole file contents within one-shot,
+ // we can call ParseEndL() right after calling ParseL().
+ iParser->ParseEndL();
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnStartDocumentL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnStartDocumentL( const RDocumentParameters& /*aDocParam*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnStartDocumentL");
+ if( aErrorCode != KErrNone )
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnEndDocumentL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnEndDocumentL( TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnEndDocumentL");
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnStartElementL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnStartElementL( const RTagInfo& aElement,
+ const RAttributeArray& /*aAttributes*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnStartElementL");
+ if ( aErrorCode == KErrNone )
+ {
+ // If we find the start of an element, we write to the screen,
+ // for example: "<tag>"
+
+ if( !aElement.LocalName().DesC().Compare( KCountry ) )
+ {
+ iCurrentElement = ECountryName;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KState ) )
+ {
+ iCurrentElement = EState;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KCity ) )
+ {
+ iCurrentElement = ECity;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KDistrict ) )
+ {
+ iCurrentElement = EDistrict;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KPostalCode ) )
+ {
+ iCurrentElement = EPostalCode;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KThoroughfare ) )
+ {
+ iThoroughfare = ETrue;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KNameTag ) && iThoroughfare )
+ {
+ iCurrentElement = EThoroughfareName;
+ }
+ else if( !aElement.LocalName().DesC().Compare( KNumberTag ) && iThoroughfare )
+ {
+ iCurrentElement = EThoroughfareNumber;
+ }
+ else
+ {
+ // Nothing to be done here.
+ }
+ }
+ else
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnEndElementL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnEndElementL( const RTagInfo& /*aElement*/, TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnEndElementL");
+ if( aErrorCode == KErrNone )
+ {
+ // at the end of the tag </tag>
+ //Set it to ENone
+ iCurrentElement = ENone;
+ iThoroughfare = EFalse;
+ }
+ else
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnContentL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnContentL( const TDesC8 &aBytes, TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnContentL");
+ if( aErrorCode == KErrNone )
+ {
+
+ if( iCurrentElement == ENone )
+ {
+ //ignore if the current element is not there
+ return;
+ }
+
+ // convert the content to UCS-2
+ // from UTF-8
+ RBuf buffer;
+ CleanupClosePushL(buffer);
+ buffer.CreateL( aBytes.Length() );
+ CnvUtfConverter::ConvertToUnicodeFromUtf8( buffer,aBytes );
+
+ if( iCurrentElement == ECountryName )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldCountry,buffer );
+ }
+ else if( iCurrentElement == EState )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldState,buffer );
+ }
+ else if( iCurrentElement == EDistrict )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldDistrict,buffer );
+ }
+ else if( iCurrentElement == ECity )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldCity,buffer );
+ }
+ else if( iCurrentElement == EPostalCode )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldPostalCode,buffer );
+ }
+ else if( iCurrentElement == EThoroughfareName )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldStreet,buffer );
+ }
+ else if( iCurrentElement == EThoroughfareNumber )
+ {
+ iClientLandmark->SetPositionFieldL( EPositionFieldStreetExtension,buffer );
+ }
+ else
+ {
+ // Nothing to be done here.
+ }
+ CleanupStack::PopAndDestroy( &buffer );
+ }
+ else
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnStartPrefixMappingL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnStartPrefixMappingL( const RString& /*aPrefix*/,
+ const RString& /*aUri*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnStartPrefixMappingL");
+ if( aErrorCode != KErrNone )
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnEndPrefixMappingL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnEndPrefixMappingL( const RString& /*aPrefix*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnEndPrefixMappingL");
+ if( aErrorCode != KErrNone )
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnIgnorableWhiteSpaceL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnIgnorableWhiteSpaceL( const TDesC8& /*aBytes*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnIgnorableWhiteSpaceL");
+ if( aErrorCode != KErrNone )
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnSkippedEntityL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnSkippedEntityL( const RString& /*aName*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnSkippedEntityL");
+ if( aErrorCode != KErrNone )
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnProcessingInstructionL
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnProcessingInstructionL( const TDesC8& /*aTarget*/,
+ const TDesC8& /*aData*/,
+ TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnProcessingInstructionL");
+ if( aErrorCode != KErrNone )
+ {
+ iObserver.OnParseCompletedL( aErrorCode );
+ }
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::OnError
+//------------------------------------------------------------------------------
+void CPosRevGeoCodeXmlParser::OnError( TInt aErrorCode )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::OnError");
+ TRAP_IGNORE( iObserver.OnParseCompletedL( aErrorCode ) );
+ }
+
+//------------------------------------------------------------------------------
+// CPosRevGeoCodeXmlParser::GetExtendedInterface
+//------------------------------------------------------------------------------
+TAny* CPosRevGeoCodeXmlParser::GetExtendedInterface( const TInt32 /*aUid*/ )
+ {
+ FUNC("CPosRevGeoCodeXmlParser::GetExtendedInterface");
+ return NULL;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/posindicator/rom/posindicator.iby Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2010 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: Image description file for project position indicator
+*
+*/
+
+
+#ifndef POSITIONINDICATOR_IBY
+#define POSITIONINDICATOR_IBY
+
+#include <data_caging_paths_for_iby.hrh>
+#include <bldvariant.hrh>
+
+// Position indicator
+file=ABI_DIR\BUILD_DIR\posindicator.dll SHARED_LIB_DIR\posindicator.dll
+
+// Position indicator helper client library
+file=ABI_DIR\BUILD_DIR\posindicatorhelper.dll SHARED_LIB_DIR\posindicatorhelper.dll
+
+// Position indicator helper server
+file=ABI_DIR\BUILD_DIR\posindicatorhelperserver.exe SHARED_LIB_DIR\posindicatorhelperserver.exe
+
+// Position reverse geo-code interface
+file=ABI_DIR\BUILD_DIR\posreversegeocodeinterface.dll SHARED_LIB_DIR\posreversegeocodeinterface.dll
+
+// Position reverse geo-code plugin
+ECOM_PLUGIN( posrevgeocodeplugin.dll,posrevgeocodeplugin.rsc )
+
+// Position indicator plugin
+data=\epoc32\data\z\resource\plugins\indicators\posindicator.qtplugin \resource\plugins\indicators\posindicator.qtplugin
+
+// stub sis
+data=DATAZ_\system\install\posindicator_stub.sis system\install\posindicator_stub.sis
+
+#endif // POSITIONINDICATOR_IBY
Binary file locationsystemui/locationsysui/possettings/conf/positioningsettings.confml has changed
Binary file locationsystemui/locationsysui/possettings/conf/positioningsettings_2002E685.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/inc/possettingsadvinterface.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2010 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: Positioning settings advanced interface class.
+*
+*/
+
+#ifndef POSSETTINGSENGADVANCEDINTERFACE_H
+#define POSSETTINGSENGADVANCEDINTERFACE_H
+
+#include "possettingsadvop.h"
+#include <QtPlugin>
+
+
+
+//Provider id and version
+static const char* KAdvancedInterfaceId =
+ "com.nokia.PosSettingsAdvInterface/1.0";
+
+
+/**
+ * Settings UI ECom plug-in interface
+ *
+ * PosSettingsAdvInterface class tdefines interface for Advanced
+ * positioning settings UI. Any Settings UI component should derive from this
+ * class and implement the abstract functions.
+ *
+ */
+class PosSettingsAdvInterface
+ {
+
+public:
+ /**
+ * Destructor
+ */
+ virtual ~PosSettingsAdvInterface(){}
+
+
+ /**
+ * This method performs operations required to display advanced settings UI
+ * The operations would involve the following :
+ * - add data model items
+ * - add connections for the data model items
+ * - add actions for menu items ( if any )
+ * - add connection to the view using the slot updateAdvancedView
+ * to update the view when the form is updated.
+ */
+ virtual int initialise( PosSettingsAdvOp* operation ) = 0;
+
+ };
+
+
+// MACROS
+Q_DECLARE_INTERFACE( PosSettingsAdvInterface,KAdvancedInterfaceId );
+
+#endif /* POSSETTINGSENGADVANCEDINTERFACE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/inc/possettingsadvop.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,114 @@
+/*
+* 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: Positioning settings advanced operation class.
+*
+*/
+
+#ifndef POSSETTINGSENGADVANCEDOPERATION_H
+#define POSSETTINGSENGADVANCEDOPERATION_H
+
+
+#include "possettingsglobal.h"
+#include <qobject.h>
+#include <hbview.h>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <hbdataformmodelitem.h>
+
+class POSSETTINGS_EXPORT PosSettingsAdvOp : public QObject
+ {
+ Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ PosSettingsAdvOp(HbView* view);
+
+ /**
+ * Destructor
+ */
+ ~PosSettingsAdvOp();
+
+ /**
+ * Appends dataform model item to the dataform model.
+ */
+ void appendDataFormItem( HbDataFormModelItem *data,
+ HbDataFormModelItem *parent = 0 );
+
+ /***
+ * Makes connections for the data form model items
+ */
+ void addConnection( HbDataFormModelItem *item, const char* signal,
+ QObject *receiver, const char* slot );
+
+ /**
+ * Used to add menue items & actions
+ */
+ void addAction( HbAction *action, HbView::ActionContainer
+ preferedActionContainer );
+ /**
+ * Gets the index of a particular data form model item
+ * @param[in] item - data form model item whose index is required
+ * @return - index of the data form model item within the data form model
+ */
+ QModelIndex indexFromItem(const HbDataFormModelItem * item );
+ /**
+ * Removes connection that were already made
+ */
+ void removeConnection(HbDataFormModelItem *item, const char *signal, QObject *receiver, const char *slot);
+ /**
+ * Sets the model item to be expanded/collapsed
+ */
+ void setExpanded(const QModelIndex &index, bool expanded);
+ /**
+ * Checks if a particualr data model item is expanded
+ */
+ bool isExpanded (const QModelIndex &index) const;
+ /**
+ * Removes a particualr data form model item from the model
+ */
+ bool removeItem(HbDataFormModelItem* item);
+ /**
+ * set prototype for data form
+ */
+ void setItemPrototypes(QList<HbAbstractViewItem *> &protoTypeList);
+
+ /**
+ * gets prototype list for the data form
+ */
+ void itemPrototypes(QList<HbAbstractViewItem *> &protoTypeList);
+private:
+
+ /**
+ * Pointer to view.
+ * Not own.
+ */
+ HbView* mView;
+
+ /**
+ * Pointer to data form
+ * Not own.
+ */
+ HbDataForm* mDataForm;
+
+ /**
+ * Pointer to data form model.
+ * Not own.
+ */
+ HbDataFormModel* mDataFormModel;
+ };
+
+
+#endif /* POSSETTINGSENGADVANCEDOPERATION_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/inc/possettingscrkey.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,59 @@
+/*
+* 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: Central Repository Key definition for ordering of the
+* positioning settings plugins displayed in the advaced
+* settings view
+*
+*/
+
+#ifndef POSSETTINGSCRKEY_H
+#define POSSETTINGSCRKEY_H
+
+#include <e32base.h>
+
+/*
+ * UID of the Positioning Settings Central Repository Key.
+ * This key defines the position of the positioning settings plugins that are shown
+ * in the advanced settings view of Positioning.
+ */
+const TUid KCRUidPositioningSettings = {0x2002E685};
+
+/*
+ * Key for listing the positioning settings plugins in the advacned view of Positioning.
+ * This key is a Read only key and the default values for the Keys is configured by the device
+ * manufacturer while flashing the device. They cannot be dynamically configured.
+ * The keys contains a string which contains a list of Unique Identifers for the Positioning settings
+ * plugins in the order in which the device manufacturer wants these plugins to be displayed.
+ * The maximum length of this string is 1024 characters
+ * The format of this Key is defined as
+ * | Count | Length(1) | Dllname(1) | Length(2) | Dllname(2) | ... | Length( Count ) | Dllname( Count ) |
+ * where,
+ * Count ( 4 digits ) - The number of positioning Settings plugins which are predefined to be displayed in
+ * the Advanced Settings view, in the Decimal format.
+ * Length(n) ( 4 digits ) - Length of the plugin's dll name in the string format. This field contains the length
+ * in the in the Decimal format.
+ * String(n) - Dll name of the positioning settings plugins encoded as a string.
+ */
+const TUint32 KPositioningSettingsPlugins = 0x00000001;
+
+/*
+ * Key for storing old state of background positioning in main view.
+ * This key is a Read/Write key and the default value for the key is one [i.e. enabled]
+ * The key contains integer which can be either 0 [disabled] or 1 [enabled]
+ * The key value is modified only when user marks/unmarks background positioning checkbox in the main view
+ * The key value is NOT modified when background positioning checkbox is removed/inserted
+ */
+const TUint32 KPositioningSettingsBackgroundServicesStatus = 0x00000002;
+
+#endif //POSSETTINGSCRKEY_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/inc/possettingsglobal.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef POSSETTINGS_GLOBAL_H
+#define POSSETTINGS_GLOBAL_H
+
+#ifdef BUILD_POSSETTINGS
+ #define POSSETTINGS_EXPORT Q_DECL_EXPORT
+#else
+ #define POSSETTINGS_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/inc/possettingsview.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2010 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 is the first view for Positioning Settings plugin
+*
+*/
+
+#ifndef POSSETTINGSVIEW_H
+#define POSSETTINGSVIEW_H
+
+#include "possettingsglobal.h"
+
+#include<QObject>
+#include <cpbasesettingview.h>
+
+// Forward declaration
+class PosSettingsEngine;
+class PosSettingsForm;
+class HbGroupBox;
+class QGraphicsLinearLayout;
+
+class POSSETTINGS_EXPORT PosSettingsView: public CpBaseSettingView
+ {
+public:
+ /**
+ * Constructor
+ */
+ explicit PosSettingsView( QGraphicsItem *parent = 0 );
+
+ /**
+ * Destructor
+ */
+ ~PosSettingsView();
+
+private: // Data members
+ /**
+ * Pointer to settings engine object
+ * Own
+ */
+ PosSettingsEngine* mSettingsEngine;
+
+ /**
+ * Pointer to settings form object.
+ */
+ PosSettingsForm* mSettingsForm;
+ };
+
+#endif // POSSETTINGSVIEW_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/locationservicescustomviewitem.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2010 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 class to be used to create group items for location services
+ *
+ */
+#ifndef LOCATIONSERVICES_CUSTOMVIEWITEM_H
+#define LOCATIONSERVICES_CUSTOMVIEWITEM_H
+
+#include <hbdataformviewitem.h>
+#include <hbdataformmodelitem.h>
+#include <HbWidget>
+
+
+//dataItemType for Location services custom widget
+const int LocationServicesCustomItem = HbDataFormModelItem::CustomItemBase
+ + 15;
+
+class LocationServicesCustomViewItem : public HbDataFormViewItem
+ {
+Q_OBJECT
+public:
+ /**
+ * Constructor
+ */
+ explicit LocationServicesCustomViewItem(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ ~LocationServicesCustomViewItem();
+
+protected:
+
+ /**
+ * This method is used to create the Custom widget for location services
+ * @returns - HbAbstractButton, instance of the custom widget
+ */
+ virtual HbWidget* createCustomWidget();
+
+ /**
+ *
+ */
+ virtual HbAbstractViewItem* createItem();
+
+ /**
+ *
+ */
+ virtual bool canSetModelIndex(const QModelIndex &index) const;
+public slots:
+ virtual void restore();
+ //virtual void save();
+private:
+ /**
+ * instance of HbAbstractButton
+ */
+ HbWidget *mPushWidget;
+ };
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/locationserviceswidget.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2010 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 header file is for creating the custom widget for location services
+ * for Advanced view of Positioning settings
+ *
+ */
+
+#ifndef LOCATIONSERVICESWIDGET_H
+#define LOCATIONSERVICESWIDGET_H
+
+#include <QObject>
+#include <hbabstractbutton.h>
+
+class HbTextItem;
+
+class LocationServicesWidget : public HbAbstractButton
+ {
+Q_OBJECT
+
+// It is possible to set initial value to properties from the application designer.
+Q_PROPERTY(QString primarytext READ primaryText WRITE setPrimaryText)
+Q_PROPERTY(QString sectext READ secText WRITE setSecText)
+Q_PROPERTY(QString sec2text READ sec2Text WRITE setSec2Text)
+
+public:
+ /**
+ * Constructor
+ */
+ LocationServicesWidget(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor
+ */
+ ~LocationServicesWidget();
+
+public:
+
+ /**
+ * Sets the primary text for the widget
+ * @param [in] - primaryText, primary text for the widget
+ */
+ void setPrimaryText(const QString &primaryText);
+
+ /**
+ * Gets the primary text for the widget
+ * @returns - QString containing the primary text
+ */
+ QString primaryText() const;
+
+ /**
+ * Sets the primary text for the widget
+ * @param [in] - secText, secondry(second line) text for the widget
+ */
+ void setSecText(const QString &secText);
+
+ /**
+ * Gets the primary text for the widget
+ * @returns - QString containing the secondry text
+ */
+ QString secText() const;
+
+ /**
+ * Sets the primary text for the widget
+ * @param [in] - secText, secondry(third line) text for the widget
+ */
+ void setSec2Text(const QString &secText);
+
+ /**
+ * Gets the primary text for the widget
+ * @returns - QString containing the secondry2 text
+ */
+ QString sec2Text() const;
+
+private:
+
+ /**
+ * Primary Text item
+ * Does not own
+ */
+ HbTextItem* mPrimaryTextItem;
+
+ /**
+ * Secondry Text item
+ * Does not own
+ */
+ HbTextItem* mSecondryTextItem;
+
+ /**
+ * Secondry (third item) Text item
+ * Does not own
+ */
+ HbTextItem* mSecondry2TextItem;
+ };
+
+#endif // LOCATIONSERVICESWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/poslocationservices.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2010 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 is for Location Based Servies Settings plugin
+ * for Advanced View
+ *
+ */
+
+#ifndef POSLOCATIONSERVICES_PLUGIN_H
+#define POSLOCATIONSERVICES_PLUGIN_H
+
+#include "poslocationservicesengine.h"
+
+#include <QObject>
+#include <hbdataformmodelitem.h>
+#include <possettingsadvinterface.h>
+#include <hbdataformviewitem.h>
+#include <qsignalmapper.h>
+
+
+//Forward Declaration
+class PosSettingsAdvOp;
+class PosSettingsSignalMapper;
+class HbMessageBox;
+class HbAction;
+
+class PosLocationServices : public QObject, public PosSettingsAdvInterface
+ {
+Q_OBJECT
+ Q_INTERFACES( PosSettingsAdvInterface)
+public:
+ /**
+ * Constructor
+ */
+ PosLocationServices();
+
+ /**
+ * Destructor
+ */
+ ~PosLocationServices();
+public:
+ /*
+ * Derived from PosSettingsAdvInterface
+ */
+ virtual int initialise(PosSettingsAdvOp* operation);
+
+private:
+ /**
+ * This method is used to list all the location services that are running
+ */
+ void listServices();
+
+ /**
+ * This method constructs the string for update interval to be displayed in
+ * the second line of the widget.
+ * @param [in]- updateInterval, update interval is seconds, gets from the engine
+ * @param [out]- updateIntervalString, string to be displayed, depending on the update
+ * interval is in day, hour, minute or second
+ */
+ void getUpdateIntervalString(int updateInterval, QString& updateIntervalString);
+
+private slots:
+ /**
+ * This is slot, which is called when the user selects the
+ * service to be deleted
+ */
+ void stopService(int serviceId);
+
+ /**
+ * This is slot, which is called whenever there is a new location service added or
+ * a server in the list is stopped. This refreshes the view.
+ */
+ void updateList();
+
+ /**
+ * This slot is used to stop sessions.
+ * @param[in] action - Button which is pressed on messagebox dialog
+ */
+ void stopSession(HbAction* action);
+
+private:
+
+ /**
+ * an object if the location services setting engine class
+ */
+ PosLocationServicesEngine* mLocationServiceEngine;
+
+ /**
+ * an object of data form model item class
+ */
+ HbDataFormModelItem * mGroup;
+
+ /**
+ * Holds the params of the list of location services
+ */
+ QList<PosLocationServiceInfo> mServiceList;
+
+ /**
+ * Handle to PosSettingsAdvOp object
+ */
+ PosSettingsAdvOp * mOperation;
+
+ /**
+ * an object of QSignalMapper
+ */
+ QSignalMapper * mSignalMapper;
+
+ /**
+ * hold the signal mapper objects of PosPsySettingsSignalMapper
+ */
+ QList<PosSettingsSignalMapper*> mSignalMapperList;
+
+
+
+ /**
+ * holds the stop service query dialog
+ * Owns
+ */
+ HbMessageBox * mStopQuery;
+
+ /**
+ * holds service id to be stop
+ */
+ int mServiceId;
+ };
+#endif // POSLOCATIONSERVICES_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/poslocationservicescommon.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 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 header defines set of data structures used in
+* locaion services plugin.
+*
+*/
+
+#ifndef POSLOCATIONSERVICESCOMMON_H
+#define POSLOCATIONSERVICESCOMMON_H
+
+#include <QString>
+#include <QDateTime>
+
+struct PosLocationServiceInfo
+ {
+ /**
+ * Location service Id.
+ */
+ int mServiceId;
+ /**
+ * Location service name.
+ */
+ QString mServiceName;
+
+ /**
+ * Update interval.
+ */
+ int mUpdateInterval;
+
+ /**
+ * Date and time on which service ends.
+ */
+ QDateTime mEndDateTime;
+ };
+
+#endif //POSLOCATIONSERVICESCOMMON_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/poslocationservicesengine.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 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: Class declaration of PosLocationServicesEngine.
+*
+*/
+#ifndef POSLOCATIONSERVICESENGINE_H
+#define POSLOCATIONSERVICESENGINE_H
+
+#include "poslocationservicesengineprivate.h"
+#include <QObject>
+
+
+
+/**
+ * PosLocationServicesEngine class provides interface to location services.
+ * Using this interface. This interface provides services like list, delete
+ * etc..
+ */
+class PosLocationServicesEngine : public QObject,
+ public PosLocationServiceUpdateObserver
+ {
+ Q_OBJECT
+public:
+ /**
+ * Constructor
+ */
+ PosLocationServicesEngine();
+
+ /**
+ * Destructor
+ */
+ virtual ~PosLocationServicesEngine();
+
+ /**
+ * Retrieves all location services info.
+ *
+ * @param[out] locationServiceList List of location
+ * services info.
+ * @return - KErrNone if location services information retrieved successfully.
+ * - KErrNotFound if there are no location services.
+ * otherwise system wide error codes.
+ */
+ int getLocationServices( QList<PosLocationServiceInfo>&
+ locationServiceList );
+
+ /**
+ * Removes location service based on the service Id.
+ *
+ * @param [in] serviceId Location service Id.
+ *
+ * @return following error codes
+ * - KErrNone if successful
+ * - KErrNotFound if service is not found
+ * otherwise system wide error codes.
+ */
+ int removeLocationService( int serviceId );
+
+public:// From PosLocationServiceUpdateObserver
+ void handleLocationServiceUpdate();
+
+signals:
+ /**
+ * This signal is emitted when there is update in the
+ * location services.
+ */
+ void locationServiceUpdate();
+
+private:// Data members
+ /**
+ * Pointer to PosLocationServicesEnginePrivate object.
+ * Own
+ */
+ PosLocationServicesEnginePrivate* d_ptr;
+ };
+
+#endif /* POSLOCATIONSERVICESENGINE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/poslocationservicesengineprivate.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2010 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: Class declaration of PosLocationServicesEnginePrivate.
+*
+*/
+#ifndef POSLOCATIONSERVICESENGINEPRIVATE_H
+#define POSLOCATIONSERVICESENGINEPRIVATE_H
+
+#include "poslocationservicescommon.h"
+#include <epos_msuplsessionobserver.h>
+
+// Forward declaration
+class CSuplSettings;
+
+/**
+ * The class defines the interface to get notification on location
+ * service update.The class interested in location service update
+ * should inherit from this class.
+ */
+class PosLocationServiceUpdateObserver
+ {
+public:
+ virtual void handleLocationServiceUpdate() = 0;
+ };
+
+
+/**
+ * PosLocationServicesEnginePrivate class implements the engine logic.This
+ * provides wrapper over SUPL settings API
+ */
+class PosLocationServicesEnginePrivate : public MSuplSessionObserver
+ {
+public:
+ /**
+ * Constructor
+ */
+ PosLocationServicesEnginePrivate( PosLocationServiceUpdateObserver&
+ aObserver );
+
+ /**
+ * Destructor
+ */
+ virtual ~PosLocationServicesEnginePrivate();
+
+ /**
+ * Retrieves all location services info.
+ *
+ * @param[out] locationServiceList List of location
+ * services info.
+ * @return - KErrNone if location services information retrieved successfully.
+ * - KErrNotFound if there are no location services.
+ * otherwise system wide error codes.
+ */
+ int GetLocationServices( QList<PosLocationServiceInfo>&
+ aLocationServiceList );
+
+ /**
+ * Retrieves all location services info.
+ *
+ * @param[out] locationServiceList List of location
+ * services info.
+ * @leaves - KErrNone if location services information retrieved successfully.
+ * - KErrNotFound if there are no location services.
+ * otherwise system wide error codes.
+ */
+ void GetLocationServicesL( QList<PosLocationServiceInfo>&
+ aLocationServiceList );
+ /**
+ * Removes location service based on the service Id.
+ *
+ * @param [in] serviceId Location service Id.
+ *
+ * @return following error codes
+ * - KErrNone if successful
+ * - KErrNotFound if service is not found
+ * otherwise system wide error codes.
+ */
+ int RemoveLocationService( int aServiceId );
+
+public: // From MSuplSessionObserver
+ virtual void HandleSuplSessionChangeL(
+ TSuplSessionEventType aEvent,TInt64 aSessionId );
+
+private:// Data members
+
+ /**
+ * Reference to location service update observer.
+ */
+ PosLocationServiceUpdateObserver& mObserver;
+
+ /**
+ * Pointer to SUPL settings object.
+ * Own
+ */
+ CSuplSettings* mSuplSettings;
+ };
+
+#endif /* POSLOCATIONSERVICESENGINEPRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/inc/possettingssignalmapper.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 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: Declaration of the Positioning Settings signal mapper
+ * used to map the signals of each check box item to the index
+ *
+ */
+
+#ifndef POSSETTINGSSIGNALMAPPER_H
+#define POSSETTINGSSIGNALMAPPER_H
+
+#include <QObject>
+
+class PosSettingsSignalMapper : public QObject
+ {
+ Q_OBJECT
+public:
+ /*
+ * constructor
+ */
+ PosSettingsSignalMapper();
+ /**
+ * destructor
+ */
+ ~PosSettingsSignalMapper();
+public:
+signals:
+ /**
+ * signal emitted by the slot of this class
+ */
+ void signalmapped();
+public slots:
+ /**
+ * slot to be called on a change in state of checkbox.
+ * this in turn calls the signal signalmapped()
+ */
+ void signalmap();
+ };
+
+#endif //POSSETTINGSSIGNALMAPPER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/poslocationservices.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,71 @@
+#
+# Copyright (c) 2010 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: Location Based Services Plugin pro file
+#
+
+TEMPLATE = lib
+TARGET = poslocationservices
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += ../possettingsengine/inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+CONFIG += hb \
+ plugin
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RCC_DIR = rcc
+RESOURCES = poslocationservices.qrc
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+LIBS += -lcpframework \
+ -lpossettingsengine \
+ -lepos_suplsettings \
+ -lflogger
+
+# Input
+SOURCES += src/poslocationservices.cpp
+SOURCES += src/poslocationservicesengine.cpp
+SOURCES += src/poslocationservicesengineprivate.cpp
+SOURCES += src/locationservicescustomviewitem.cpp
+SOURCES += src/locationserviceswidget.cpp
+SOURCES += src/possettingssignalmapper.cpp
+
+HEADERS += inc/poslocationservices.h
+HEADERS += inc/poslocationservicescommon.h
+HEADERS += inc/poslocationservicesengine.h
+HEADERS += inc/poslocationservicesengineprivate.h
+HEADERS += inc/locationservicescustomviewitem.h
+HEADERS += inc/locationserviceswidget.h
+HEADERS += inc/possettingssignalmapper.h
+
+symbian: {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += PLUGINUID3=0x2002DCEB
+ TARGET.UID3 = 0x2002DCEB
+}
+symbian {
+ deploy.path = C:
+ qtplugins.path = /resource/qt/plugins/positioningsettings
+ qtplugins.sources += qmakepluginstubs/poslocationservices.qtplugin
+
+ # This is for new exporting system coming in garden
+ for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin $$deploy.path$$qtplugins.path/$$basename(qtplugin)"
+}
+TARGET.CAPABILITY = All \
+ -TCB
+plugin.sources = poslocationservices.dll
+plugin.path = \resource\qt\plugins\positioningsettings
+DEPLOYMENT += plugin
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/poslocationservices.qrc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/data" >
+ <file alias="locationserviceswidget.widgetml">resources/locationserviceswidget.widgetml</file>
+ <file alias="locationserviceswidget.css">resources/locationserviceswidget.css</file>
+ <file alias="locationservicesviewitemwidget.css">resources/locationservicesviewitemwidget.css</file>
+ </qresource>
+ <qresource prefix="/" >
+ <file>resources/qgn_note_warning.svg</file>
+ </qresource>
+</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/resources/locationservicesviewitemwidget.css Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+LocationServicesCustomViewItem::dataItem_ContentWidget
+{
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-right);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/resources/locationserviceswidget.css Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,36 @@
+LocationServicesWidget {
+ layout: default
+}
+
+LocationServicesWidget::text_box1 {
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-right);
+ top: -var(hb-param-margin-gene-top);
+ bottom: var(hb-param-margin-gene-bottom);
+ pref-width: 36un;
+ pref-height: var(hb-param-text-height-secondary);
+ font-variant: primary;
+ text-height: var(hb-param-text-height-secondary);
+}
+
+LocationServicesWidget::text_box2 {
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-right);
+ top: -var(hb-param-margin-gene-top);
+ bottom: var(hb-param-margin-gene-bottom);
+ pref-width: 36un;
+ pref-height: var(hb-param-text-height-secondary);
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+}
+
+LocationServicesWidget::text_box3 {
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-right);
+ top: -var(hb-param-margin-gene-top);
+ bottom: var(hb-param-margin-gene-bottom);
+ pref-width: 36un;
+ pref-height: var(hb-param-text-height-secondary);
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/resources/locationserviceswidget.widgetml Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbwidget type="LocationServicesWidget" version="0.1">
+ <layout name="default" type="mesh">
+ <meshitem dst="" dstEdge="LEFT" src="text_box1" srcEdge="LEFT" />
+ <meshitem dst="" dstEdge="TOP" src="text_box1" srcEdge="TOP" />
+ <meshitem dst="" dstEdge="RIGHT" src="text_box1" srcEdge="RIGHT" />
+
+ <meshitem dst="" dstEdge="LEFT" src="text_box2" srcEdge="LEFT" />
+ <meshitem dst="" dstEdge="RIGHT" src="text_box2" srcEdge="RIGHT" />
+ <meshitem dst="text_box1" dstEdge="BOTTOM" src="text_box2" srcEdge="TOP" />
+
+ <meshitem dst="" dstEdge="LEFT" src="text_box3" srcEdge="LEFT" />
+ <meshitem dst="" dstEdge="RIGHT" src="text_box3" srcEdge="RIGHT" />
+ <meshitem dst="text_box2" dstEdge="BOTTOM" src="text_box3" srcEdge="TOP" />
+ <meshitem dst="" dstEdge="BOTTOM" src="text_box3" srcEdge="BOTTOM" />
+
+ </layout>
+</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/resources/qgn_note_warning.svg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
+<svg baseProfile="tiny" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="60" height="80" viewBox="0 0 60 80">
+<linearGradient id="XMLID_68_" gradientUnits="userSpaceOnUse" x1="26.0703" y1="-2273.4072" x2="31.9835" y2="-2285.0527" gradientTransform="matrix(1 0 0 -1 0.2632 -2209.7959)">
+<stop offset="0" style="stop-color:#A2C2DD"/>
+<stop offset="0.1" style="stop-color:#A2C2DD"/>
+<stop offset="0.7135" style="stop-color:#6C83BB"/>
+<stop offset="0.9888" style="stop-color:#003D6D"/>
+</linearGradient>
+<circle fill="url(#XMLID_68_)" cx="29.29" cy="69.434" r="6.529"/>
+<g>
+<rect fill="none" width="60" height="80"/>
+</g>
+<linearGradient id="XMLID_69_" gradientUnits="userSpaceOnUse" x1="30.415" y1="1559.0273" x2="40.6636" y2="1579.2108" gradientTransform="matrix(1 0 0 1 0.1504 -1525.8203)">
+<stop offset="0" style="stop-color:#A2C2DD"/>
+<stop offset="0.1" style="stop-color:#A2C2DD"/>
+<stop offset="0.7135" style="stop-color:#6C83BB"/>
+<stop offset="0.9888" style="stop-color:#003D6D"/>
+</linearGradient>
+<path fill="url(#XMLID_69_)" d="M19.666,13.492c-0.396,0.462-0.428,0.882-0.385,1.153l4.14,39.044 c0.198,1.199,0.643,2.05,1.402,2.69c1.008,1.083,2.547,1.694,4.421,1.739c1.117,0,2.189-0.212,3.107-0.613 c1.604-0.646,2.549-1.824,2.775-3.511l3.584-39.309c0.061-0.329,0.016-0.752-0.396-1.216c-1.232-1.409-5.063-2.393-9.311-2.393 C24.722,11.083,20.878,12.073,19.666,13.492z"/>
+<g>
+<g>
+<linearGradient id="XMLID_70_" gradientUnits="userSpaceOnUse" x1="14.7363" y1="776.8535" x2="33.5391" y2="801.0286" gradientTransform="matrix(1 0 0 1 0.0752 -762.9102)">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.05" style="stop-color:#FFFFFF"/>
+<stop offset="1" style="stop-color:#A2C2DD"/>
+</linearGradient>
+<path fill="url(#XMLID_70_)" d="M37.949,14.62l-3.178,39.271c-0.277,2.805-3.086,3.885-5.521,3.885 c-2.58-0.063-4.746-1.237-5.355-3.849l-4.029-38.819C23.36,17.514,33.879,18.064,37.949,14.62z"/>
+<linearGradient id="XMLID_71_" gradientUnits="userSpaceOnUse" x1="37.4512" y1="796.1699" x2="-11.1774" y2="805.2171" gradientTransform="matrix(1 0 0 1 0.0752 -762.9102)">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.35" style="stop-color:#A2C2DD"/>
+<stop offset="0.7" style="stop-color:#6C83BB"/>
+<stop offset="1" style="stop-color:#003D6D"/>
+</linearGradient>
+<path fill="url(#XMLID_71_)" d="M25.46,17.253l1.585,40.042c-1.518-0.785-2.883-1.27-3.276-3.645L19.64,14.501 C20.06,14.847,24.262,16.785,25.46,17.253z"/>
+<linearGradient id="XMLID_72_" gradientUnits="userSpaceOnUse" x1="25.5776" y1="799.0352" x2="53.4279" y2="798.3287" gradientTransform="matrix(1 0 0 1 0.0752 -762.9102)">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.35" style="stop-color:#A2C2DD"/>
+<stop offset="0.7" style="stop-color:#6C83BB"/>
+<stop offset="1" style="stop-color:#003D6D"/>
+</linearGradient>
+<path fill="url(#XMLID_72_)" d="M32.047,57.261c1.309-0.479,2.479-1.429,2.738-3.308l3.597-39.45c0,0-3.825,1.754-4.456,2.15 L32.047,57.261z"/>
+<linearGradient id="XMLID_73_" gradientUnits="userSpaceOnUse" x1="19.8716" y1="772.9834" x2="42.9158" y2="784.152" gradientTransform="matrix(1 0 0 1 0.0752 -762.9102)">
+<stop offset="0" style="stop-color:#FFFFFF"/>
+<stop offset="0.05" style="stop-color:#FFFFFF"/>
+<stop offset="1" style="stop-color:#A2C2DD"/>
+</linearGradient>
+<path fill="url(#XMLID_73_)" d="M38.389,14.591c-0.209,1.578-4.394,2.859-9.345,2.859c-4.952,0-9.167-1.281-9.417-2.859 c-0.248-1.579,3.976-3.158,9.385-3.158C34.42,11.433,38.596,13.012,38.389,14.591z"/>
+</g>
+</g>
+<g>
+<g>
+<radialGradient id="XMLID_74_" cx="26.4556" cy="-2274.9688" r="6.3101" gradientTransform="matrix(1 0 0 -1 0.2632 -2209.7959)" gradientUnits="userSpaceOnUse">
+<stop offset="0" style="stop-color:#E3DFE4"/>
+<stop offset="1" style="stop-color:#C03A3A"/>
+</radialGradient>
+<circle fill="url(#XMLID_74_)" cx="29.271" cy="69.457" r="6.171"/>
+</g>
+</g>
+<rect fill="none" width="60" height="80"/>
+</svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/src/locationservicescustomviewitem.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,150 @@
+/*
+ * Copyright (c) 2010 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 is extended as HbDataFormViewItem to be used to create
+ * group items for location services
+ *
+ */
+
+
+#include "locationservicescustomviewitem.h"
+#include "locationserviceswidget.h"
+#include <hbdataformmodel.h>
+#include <hbabstractitemview.h>
+#include <qmetaobject.h>
+
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::LocationServicesCustomViewItem
+// ---------------------------------------------------------------------------
+//
+LocationServicesCustomViewItem::LocationServicesCustomViewItem(
+ QGraphicsItem *parent) :
+ HbDataFormViewItem(parent)
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::~LocationServicesCustomViewItem
+// ---------------------------------------------------------------------------
+//
+LocationServicesCustomViewItem::~LocationServicesCustomViewItem()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::createItem
+// ---------------------------------------------------------------------------
+//
+HbAbstractViewItem* LocationServicesCustomViewItem::createItem()
+{
+ return new LocationServicesCustomViewItem(*this);
+}
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::canSetModelIndex
+// ---------------------------------------------------------------------------
+//
+bool LocationServicesCustomViewItem::canSetModelIndex(const QModelIndex &index) const
+{
+ int type = index.data(HbDataFormModelItem::ItemTypeRole).toInt();
+ if (type == LocationServicesCustomItem) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::createCustomWidget
+// ---------------------------------------------------------------------------
+//
+HbWidget * LocationServicesCustomViewItem::createCustomWidget()
+ {
+ //get the type of the model
+ int type = modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt();
+ if (type == LocationServicesCustomItem)
+ {
+ //create the instance of location widget
+ LocationServicesWidget* locationservicesWidget =
+ new LocationServicesWidget();
+ mPushWidget = locationservicesWidget;
+ return mPushWidget;
+ }
+ else
+ {
+ //else return 0
+ return 0;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::restore
+// ---------------------------------------------------------------------------
+//
+void LocationServicesCustomViewItem::restore()
+{
+ HbDataFormViewItem::restore();
+ if (mPushWidget) {
+ HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
+ modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ if(itemType == LocationServicesCustomItem) {
+
+ QModelIndex itemIndex = modelIndex();
+ HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
+ HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
+ model->itemFromIndex(itemIndex));
+
+ const QMetaObject *metaObj = mPushWidget->metaObject();
+ int count = metaObj->propertyCount();
+ for (int i = 0; i < count; ++i) {
+ QMetaProperty metaProperty = metaObj->property(i);
+ if (metaProperty.isValid() && metaProperty.isWritable()) {
+ metaProperty.write(mPushWidget,modelItem->contentWidgetData(metaProperty.name()));
+ }
+
+ }
+ }
+ }
+}
+
+// ---------------------------------------------------------------------------
+// LocationServicesCustomViewItem::save
+// ---------------------------------------------------------------------------
+//
+/*void LocationServicesCustomViewItem::save()
+{
+ HbDataFormViewItem::save();
+ if (mPushWidget) {
+ HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
+ modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ if(itemType == LocationServicesCustomItem) {
+
+ QModelIndex itemIndex = modelIndex();
+ HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
+ HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
+ model->itemFromIndex(itemIndex));
+ if (LocationServicesWidget *locationservicesWidget = qobject_cast<LocationServicesWidget *>(mPushWidget)) {
+ modelItem->setContentWidgetData("primarytext",locationservicesWidget->primaryText());
+ modelItem->setContentWidgetData("sectext",locationservicesWidget->secText());
+ modelItem->setContentWidgetData("sec2text",locationservicesWidget->sec2Text());
+ }
+ }
+ }
+}*/
+
+//-------------End of File--------------------------
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/src/locationserviceswidget.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2010 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 is for creating the custom widget for location services
+ * for Advanced view of Positioning settings
+ *
+ */
+
+#include "locationserviceswidget.h"
+
+#include <QtGui>
+#include <hbfontspec.h>
+#include <hbstyleloader.h>
+#include <hbstyle.h>
+#include <hbtextitem.h>
+
+
+static const QString FILE_PATH_WIDGETML =
+ ":/data/locationserviceswidget.widgetml";
+static const QString FILE_PATH_CSS = ":/data/locationserviceswidget.css";
+
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::LocationServicesWidget
+// ---------------------------------------------------------------------------
+//
+LocationServicesWidget::LocationServicesWidget(QGraphicsItem *parent) :
+ HbAbstractButton(parent)
+ {
+ // Path for widgetml and css files.
+ HbStyleLoader::registerFilePath(FILE_PATH_WIDGETML);
+ HbStyleLoader::registerFilePath(FILE_PATH_CSS);
+
+ //Create the primary and secondry text items
+ mPrimaryTextItem = new HbTextItem(QString("New"), this);
+ HbStyle::setItemName(mPrimaryTextItem, "text_box1");
+ mPrimaryTextItem->setFontSpec(HbFontSpec(HbFontSpec::Primary));
+
+ mSecondryTextItem = new HbTextItem(QString("New"), this);
+ HbStyle::setItemName(mSecondryTextItem, "text_box2");
+ mSecondryTextItem->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+
+ mSecondry2TextItem = new HbTextItem(QString("New"), this);
+ HbStyle::setItemName(mSecondry2TextItem, "text_box3");
+ mSecondry2TextItem->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::LocationServicesWidget
+// ---------------------------------------------------------------------------
+//
+LocationServicesWidget::~LocationServicesWidget()
+ {
+ HbStyleLoader::unregisterFilePath(FILE_PATH_WIDGETML);
+ HbStyleLoader::unregisterFilePath(FILE_PATH_CSS);
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::setPrimaryText
+// ---------------------------------------------------------------------------
+//
+void LocationServicesWidget::setPrimaryText(const QString &primaryText)
+ {
+ mPrimaryTextItem->setText(primaryText);
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::primaryText
+// ---------------------------------------------------------------------------
+//
+QString LocationServicesWidget::primaryText() const
+ {
+ return mPrimaryTextItem->text();
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::setSecText
+// ---------------------------------------------------------------------------
+//
+void LocationServicesWidget::setSecText(const QString& secText)
+ {
+ mSecondryTextItem->setText(secText);
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::secText
+// ---------------------------------------------------------------------------
+//
+QString LocationServicesWidget::secText() const
+ {
+ return mSecondryTextItem->text();
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::setSec2Text
+// ---------------------------------------------------------------------------
+//
+void LocationServicesWidget::setSec2Text(const QString& secText)
+ {
+ mSecondry2TextItem->setText(secText);
+ }
+// ---------------------------------------------------------------------------
+// LocationServicesWidget::sec2Text
+// ---------------------------------------------------------------------------
+//
+QString LocationServicesWidget::sec2Text() const
+ {
+ return mSecondry2TextItem->text();
+ }
+
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/src/poslocationservices.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,478 @@
+/*
+ * Copyright (c) 2010 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 is for Location Services Settings plugin
+ * for Positioning Settings's Advanced view
+ *
+ */
+
+#include "poslocationservices.h"
+#include "possettingsadvop.h"
+#include "locationservicescustomviewitem.h"
+#include "possettingssignalmapper.h"
+
+#include <QtCore>
+#include <QTranslator>
+#include <QDebug>
+
+#include <hbaction.h>
+#include <hbpushbutton.h>
+#include <hbmessagebox.h>
+#include <hbicon.h>
+#include <hbextendedlocale.h>
+
+// constants
+const int KMinToSecs = 60;
+const int KHourToSecs = 3600;
+const int KOneDay = 24;
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::PosLocationServices
+// ---------------------------------------------------------------------------
+//
+PosLocationServices::PosLocationServices() :
+ mLocationServiceEngine(0), mGroup(0), mOperation(0), mSignalMapper(0),
+ mStopQuery(0), mServiceId(0)
+ {
+ mLocationServiceEngine = new PosLocationServicesEngine();
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::~PosLocationServices
+// ---------------------------------------------------------------------------
+//
+PosLocationServices::~PosLocationServices()
+ {
+ qDebug() << "+PosLocationServices::~PosLocationServices()";
+
+ if (mLocationServiceEngine)
+ {
+ delete mLocationServiceEngine;
+ mLocationServiceEngine = 0;
+ }
+
+ if (mGroup)
+ {
+ if (mOperation)
+ {
+ mOperation->removeItem(mGroup);
+ }
+ }
+
+ if (mSignalMapper)
+ {
+ delete mSignalMapper;
+ mSignalMapper = 0;
+ }
+
+ if (mStopQuery)
+ {
+ delete mStopQuery;
+ mStopQuery = 0;
+ }
+
+ //Clear the list
+ mServiceList.clear();
+
+ //clear the signal mapper list
+ int count = mSignalMapperList.count();
+ qDebug() << "mSignalMapperList.count() = " << count;
+
+ for (int i = 0; i < count; ++i)
+ {
+ delete mSignalMapperList[i];
+ mSignalMapperList[i] = 0;
+ }
+ mSignalMapperList.clear();
+
+ qDebug() << "-PosLocationServices::~PosLocationServices()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::initialise
+// ---------------------------------------------------------------------------
+//
+int PosLocationServices::initialise(PosSettingsAdvOp* operation)
+ {
+ qDebug() << "+PosLocationServices::initialise()";
+
+ int result = 0;
+
+ // Assign to the member variable
+ mOperation = operation;
+
+ //get the prototype list from the data form and append the custom control to the list
+ QList<HbAbstractViewItem *> protoTypeList;
+ mOperation->itemPrototypes(protoTypeList);
+
+ LocationServicesCustomViewItem* item =
+ new LocationServicesCustomViewItem();
+
+ protoTypeList.append(item);
+
+ mOperation->setItemPrototypes(protoTypeList);
+
+ // create the signal mapper
+ mSignalMapper = new QSignalMapper();
+
+ //get the list of location services
+ mServiceList.clear();
+ if (mLocationServiceEngine)
+ {
+ result = mLocationServiceEngine->getLocationServices(mServiceList);
+ }
+
+ qDebug() << "PosLocationServices::initialise(): result" << result;
+
+ // if no error while getting the services list then add the group
+ // for Location based services
+ if (result == 0)
+ {
+ mGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+ hbTrId("txt_loe_subtitle_background_positioning"), 0);
+
+ //Add the group to the data form
+ mOperation->appendDataFormItem(mGroup);
+
+ //list all the location services inside the group
+ listServices();
+ }
+ QObject::connect(mLocationServiceEngine, SIGNAL(locationServiceUpdate()),
+ this, SLOT(updateList()));
+
+ qDebug() << "-PosLocationServices::initialise()";
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::listServices
+// ---------------------------------------------------------------------------
+//
+void PosLocationServices::listServices()
+ {
+ qDebug() << "+PosLocationServices::listServices()";
+ qDebug() << "No of Location Services = " << mServiceList.count();
+
+ QList<PosLocationServiceInfo>::const_iterator serviceIterator;
+
+ qDebug() << "Appending the services in group ";
+
+ // Get the location services names and display
+ for (serviceIterator = mServiceList.begin(); serviceIterator
+ != mServiceList.end(); ++serviceIterator)
+ {
+ qDebug() << "serviceIterator->mServiceId = "
+ << serviceIterator->mServiceId;
+
+ qDebug() << "serviceIterator->mServiceName = "
+ << serviceIterator->mServiceName;
+
+ qDebug() << "serviceIterator->mEndDateTime = "
+ << serviceIterator->mEndDateTime.date().toString();
+
+ qDebug() << "serviceIterator->mEndDateTime.isValid() = "
+ << serviceIterator->mEndDateTime.date().isValid();
+
+ qDebug() << "serviceIterator->mUpdateInterval = "
+ << serviceIterator->mUpdateInterval;
+
+ // if any of the fields are invalid then skip listing
+ if (serviceIterator->mUpdateInterval > 0)
+ {
+ qDebug() << "creating services";
+
+ //for each services create new custom item
+ HbDataFormModelItem
+ * service =
+ new HbDataFormModelItem(
+ static_cast<HbDataFormModelItem::DataItemType> (LocationServicesCustomItem));
+
+ if(!serviceIterator->mServiceName.isEmpty())
+ //set the widget data to the server name
+ service->setContentWidgetData("primarytext",
+ serviceIterator->mServiceName);
+ else
+ service->setContentWidgetData("primarytext",
+ QString(hbTrId("txt_loe_info_unknown_requestor")));
+
+ QString updateIntervalString;
+ //get the update interval String
+ getUpdateIntervalString(serviceIterator->mUpdateInterval,
+ updateIntervalString);
+ service->setContentWidgetData("sectext", updateIntervalString);
+
+ //get the validity end date from the engine and convert to string
+ QString validity(serviceIterator->mEndDateTime.date().toString(
+ Qt::ISODate));
+
+ service->setContentWidgetData("sec2text", QString(hbTrId(
+ "txt_loe_list_valid_until_2")).arg(validity));
+
+ qDebug() << "Adding service into the group";
+ mOperation->appendDataFormItem(service, mGroup);
+
+ //create an object of dummy signal mapper class
+ //this is done to send the index info to the slots
+ //since checkbox is not of QObject type and dummy class is
+ // created.
+ PosSettingsSignalMapper* signalMapper =
+ new PosSettingsSignalMapper();
+
+ qDebug() << "Adding the signalMapper into mSignalMapperList";
+ mSignalMapperList.append(signalMapper);
+
+ //add connection for clicked for the custom item, depending on which the
+ //add connections to launch the dialog for the stopping the service
+ mOperation->addConnection(
+ service,
+ SIGNAL(clicked(bool)),
+ mSignalMapperList[serviceIterator - mServiceList.begin()],
+ SLOT(signalmap()));
+
+ QObject::connect(mSignalMapperList[serviceIterator
+ - mServiceList.begin()], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+
+ // set mapping of each check box item to its index
+ if (mSignalMapper)
+ {
+ qDebug() << "mSignalMapper->setMapping ";
+ mSignalMapper->setMapping(mSignalMapperList[serviceIterator
+ - mServiceList.begin()], (serviceIterator
+ - mServiceList.begin()));
+ }
+ }
+ }
+
+ qDebug() << "mGroup->childCount() = " << mGroup->childCount();
+
+ if (mGroup->childCount() == 0)
+ {
+ qDebug() << "mOperation->removeItem mGroup";
+ mOperation->removeItem(mGroup);
+ mGroup = NULL;
+ }
+ else
+ {
+ //use signal mapper to connect
+ qDebug() << "use signal mapper to use stop service";
+ QObject::connect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(stopService(int)));
+ }
+ qDebug() << "-PosLocationServices::listServices()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::updateList
+// ---------------------------------------------------------------------------
+//
+void PosLocationServices::updateList()
+ {
+ qDebug() << "+PosLocationServices::updateList()";
+ int result = 0;
+ int oldChildCount = 0;
+
+ //store the current state (expanded) of the group
+ if (mGroup)
+ {
+ qDebug() << "Store the group info";
+
+ oldChildCount = mGroup->childCount();
+
+ // remove all connections
+ int count = mSignalMapperList.count();
+ qDebug() << "mSignalMapperList.count() = " << count;
+
+ if (count > 0)
+ {
+ for (TInt i = 0; i < count; ++i)
+ {
+ QObject::disconnect(mSignalMapperList[i],
+ SIGNAL(signalmapped()), mSignalMapper, SLOT(map()));
+ }
+ QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(stopService(int)));
+ }
+ mSignalMapperList.clear();
+
+ qDebug() << " oldChildCount" << oldChildCount;
+ if (oldChildCount > 0)
+ {
+ qDebug() << "Removing the old children";
+ //mGroup->removeChildren(0, oldChildCount);
+ //ToDo: Hack from HbDataForm team
+ for (int i = 0; i < oldChildCount; ++i)
+ {
+ qDebug() << "remove chile index " << i;
+ mGroup->removeChild(0);
+ }
+ }
+
+ }
+ else
+ {
+ // this part of code is called when the services are added and
+ // Advanced view is in the background. Since there is no group
+ // a new group has to be created to add the services.
+ qDebug() << "Creating new group";
+ mGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+ hbTrId("txt_loe_subtitle_background_positioning"), 0);
+ mOperation->appendDataFormItem(mGroup);
+ }
+
+ qDebug() << "oldChildCount = " << oldChildCount;
+ qDebug() << "mServiceList.count() before update = "
+ << mServiceList.count();
+
+ //clear the list and get the list of server present for positioning
+ mServiceList.clear();
+ if (mLocationServiceEngine)
+ {
+ result = mLocationServiceEngine->getLocationServices(mServiceList);
+ }
+
+ qDebug() << "PosLocationServices::listServices(): result" << result;
+
+ //update the new list to the group
+ if (result == 0)
+ {
+ listServices();
+ }
+ if (result == -1)
+ {
+ //remove the group
+ mOperation->removeItem(mGroup);
+ mGroup = NULL;
+ }
+
+ qDebug() << "-PosLocationServices::updateList()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::stopService
+// ---------------------------------------------------------------------------
+//
+void PosLocationServices::stopService(int serviceId)
+ {
+ qDebug() << "+PosLocationServices::stopService() service Id" << serviceId;
+
+ mServiceId = serviceId;
+
+ //Construct the display string
+ QString displayString;
+ displayString.append(QString(hbTrId("txt_loe_info_stop_service_1")).arg(
+ mServiceList[serviceId].mServiceName));
+
+ //create the message mStopQuery dialog
+ //HbMessageBox * mStopQuery = new HbMessageBox();
+
+ if (mStopQuery == 0)
+ {
+ mStopQuery = new HbMessageBox();
+ mStopQuery->setTimeout(HbDialog::NoTimeout);
+
+ //the secondry action that will come in the SK2 of the Dialog box
+ mStopQuery->addAction(new HbAction(QString(hbTrId(
+ "txt_common_button_cancel"))));
+
+ //To-Do: set the actual stop service icon after released in sdk
+ QIcon stopServiceIcon(":/resources/qgn_note_warning.svg");
+ mStopQuery->setIcon(HbIcon(stopServiceIcon));
+ }
+
+ //set the mStopQuery text
+ mStopQuery->setText(displayString);
+ mStopQuery->open(this,SLOT(stopSession(HbAction*)));
+
+ qDebug() << "-PosLocationServices::stopService()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::stopSession
+// ---------------------------------------------------------------------------
+//
+void PosLocationServices::stopSession(HbAction* action)
+ {
+ qDebug() << " + PosLocationServices::stopSession()";
+
+ //if LSK is pressed
+ if ((action == mStopQuery->actions().at(0)) && mLocationServiceEngine)
+ {
+ //stop the session
+ mLocationServiceEngine->removeLocationService(
+ mServiceList[mServiceId].mServiceId);
+ }
+ qDebug() << " - PosLocationServices::stopSession()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosLocationServices::getUpdateIntervalString
+// ---------------------------------------------------------------------------
+//
+void PosLocationServices::getUpdateIntervalString(int updateInterval,
+ QString& updateIntervalString)
+ {
+ qDebug()
+ << "+PosLocationServices::getUpdateIntervalString(): updateInterval"
+ << updateInterval;
+
+ //To-Do: clarification needed from chelli
+ if (updateInterval / KMinToSecs < 1)
+ {
+ //seconds
+ QVariant var(updateInterval);
+ updateIntervalString = QString(hbTrId(
+ "txt_loe_list_updates_every_l1_seconds")).arg(var.toString());
+ }
+ else if (updateInterval / KHourToSecs < 1)
+ {
+ //minutes
+ int minutes = (updateInterval / KMinToSecs);
+ int seconds = (updateInterval % KMinToSecs);
+ QVariant varMinutes(minutes);
+ QVariant varSeconds(seconds);
+ updateIntervalString = QString(hbTrId(
+ "txt_loe_list_updates_every_l1_minutes_and_l2_sec")).arg(
+ varMinutes.toString()).arg(varSeconds.toString());
+ }
+ else if (updateInterval / (KHourToSecs * KOneDay) < 1)
+ {
+ //hour
+ int hours = (updateInterval / KHourToSecs);
+ int minutes = (updateInterval % KHourToSecs) / KMinToSecs;
+ QVariant varhour(hours);
+ QVariant varMinutes(minutes);
+
+ updateIntervalString = QString(hbTrId(
+ "txt_loe_list_updates_every_l1_hours_and_l2_minut")).arg(
+ varhour.toString()).arg(varMinutes.toString());
+ }
+ else
+ {
+ //days
+ int days = (updateInterval / (KHourToSecs * KOneDay));
+ int hours = (updateInterval % (KHourToSecs * KOneDay)) / KMinToSecs;
+ QVariant varDays(days);
+ QVariant varHours(hours);
+ updateIntervalString = QString(hbTrId(
+ "txt_loe_list_updates_every_l1_days_and_l2_hours")).arg(
+ varDays.toString()).arg(varHours.toString());
+ }
+
+ qDebug() << "-PosLocationServices::updateInterval()";
+
+ }
+
+Q_EXPORT_PLUGIN2(poslocationservices, PosLocationServices)
+;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/src/poslocationservicesengine.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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: Implementation of PosLocationServicesEngine class.
+*
+*/
+#include "poslocationservicesengine.h"
+
+
+//----------------------------------------------------------------------
+// PosLocationServicesEngine::PosLocationServicesEngine
+//----------------------------------------------------------------------
+PosLocationServicesEngine::PosLocationServicesEngine()
+ {
+ d_ptr = new PosLocationServicesEnginePrivate( *this );
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEngine::~PosLocationServicesEngine
+//----------------------------------------------------------------------
+PosLocationServicesEngine::~PosLocationServicesEngine()
+ {
+ delete d_ptr;
+ d_ptr = NULL;
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEngine::getLocationServices
+//----------------------------------------------------------------------
+int PosLocationServicesEngine::getLocationServices(
+ QList<PosLocationServiceInfo>&
+ locationServiceList )
+ {
+ return d_ptr->GetLocationServices( locationServiceList );
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEngine::removeLocationService
+//----------------------------------------------------------------------
+int PosLocationServicesEngine::removeLocationService( int serviceId )
+ {
+ return d_ptr->RemoveLocationService( serviceId );
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEngine::handleLocationServiceUpdate
+//----------------------------------------------------------------------
+void PosLocationServicesEngine::handleLocationServiceUpdate()
+ {
+ emit locationServiceUpdate();
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/src/poslocationservicesengineprivate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2010 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: Implementation of PosLocationServicesEnginePrivate class.
+ *
+ */
+#include "poslocationservicesengineprivate.h"
+
+#include <epos_csuplsettings.h>
+#include <epos_csuplsettingparams.h>
+#include <epos_csuplsettingsconstants.h>
+
+//----------------------------------------------------------------------
+// PosLocationServicesEnginePrivate::PosLocationServicesEnginePrivate
+//----------------------------------------------------------------------
+PosLocationServicesEnginePrivate::PosLocationServicesEnginePrivate(
+ PosLocationServiceUpdateObserver& aObserver) :
+ mObserver(aObserver)
+ {
+ QT_TRAP_THROWING( mSuplSettings = CSuplSettings::NewL();
+ mSuplSettings->SetSessionObserverL( *this ) );
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEnginePrivate::~PosLocationServicesEnginePrivate
+//----------------------------------------------------------------------
+PosLocationServicesEnginePrivate::~PosLocationServicesEnginePrivate()
+ {
+ mSuplSettings->RemoveSessionObserver();
+ delete mSuplSettings;
+ mSuplSettings = NULL;
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEnginePrivate::GetLocationServices
+//----------------------------------------------------------------------
+int PosLocationServicesEnginePrivate::GetLocationServices(QList<
+ PosLocationServiceInfo>& aLocationServiceList)
+ {
+ int err = 0;
+ TRAP(err, GetLocationServicesL(aLocationServiceList));
+ return err;
+ }
+//----------------------------------------------------------------------
+// PosLocationServicesEnginePrivate::GetLocationServicesL
+//----------------------------------------------------------------------
+void PosLocationServicesEnginePrivate::GetLocationServicesL(QList<
+ PosLocationServiceInfo>& aLocationServiceList)
+ {
+ RPointerArray<CTriggerParams> triggerParams;
+ CleanupClosePushL(triggerParams);
+ int error = mSuplSettings->GetTriggerParams(triggerParams);
+
+ int count = triggerParams.Count();
+
+ //if there are no trigger params then leave with KErrNotFound
+ if (count <= 0)
+ {
+ User::Leave(KErrNotFound);
+ }
+
+ //for each entry in the paramlist populate the locationservice list
+ for (int i = 0; i < count; ++i)
+ {
+
+ TInt64 sessionId;
+ TUint64 outstandingTrigger;
+ TUint64 interval;
+ TTime endTime;
+ TBool notificationPresent;
+ TBool triggerNotificationStatus;
+ CTriggerParams::TTriggerType triggerType;
+ CTriggerParams::TRequestType requestType;
+ HBufC* sessionName = HBufC::NewLC(
+ KMaxTriggerSessionNameLen);
+
+ error = triggerParams[i]->Get(sessionId, sessionName->Des(),
+ notificationPresent, triggerNotificationStatus, triggerType,
+ requestType, outstandingTrigger, interval);
+ triggerParams[i]->GetTriggerEndTime(endTime);
+
+ if (error == KErrNone)
+ {
+ PosLocationServiceInfo serviceInfo;
+ serviceInfo.mServiceId = sessionId;
+ QString sName((QChar*) (sessionName->Ptr()),
+ sessionName->Length());
+
+ serviceInfo.mServiceName.append(sName);
+ serviceInfo.mUpdateInterval = interval;
+ serviceInfo.mEndDateTime.setDate(QDate(endTime.DateTime().Year(),
+ endTime.DateTime().Month() + 1, endTime.DateTime().Day()
+ + 1));
+ serviceInfo.mEndDateTime.setTime(QTime(endTime.DateTime().Hour(),
+ endTime.DateTime().Minute(), endTime.DateTime().Second(),
+ endTime.DateTime().MicroSecond()));
+
+ aLocationServiceList.append(serviceInfo);
+ }
+ CleanupStack::PopAndDestroy(sessionName);
+ }
+ CleanupStack::Pop(&triggerParams);
+ triggerParams.ResetAndDestroy();
+
+ //leave if there is an error
+ User::LeaveIfError(error);
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEnginePrivate::RemoveLocationService
+//----------------------------------------------------------------------
+int PosLocationServicesEnginePrivate::RemoveLocationService(int aServiceId)
+ {
+ return mSuplSettings->CancelTriggerSession(aServiceId);
+ }
+
+//----------------------------------------------------------------------
+// PosLocationServicesEnginePrivate::HandleSuplSessionChangeL
+//----------------------------------------------------------------------
+void PosLocationServicesEnginePrivate::HandleSuplSessionChangeL(
+ TSuplSessionEventType /*aEvent*/, TInt64 /*aSessionId*/)
+ {
+ mObserver.handleLocationServiceUpdate();
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/poslocationservices/src/possettingssignalmapper.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: Implementation of Positioning settings signal mapper class
+ *
+ */
+
+
+#include "possettingssignalmapper.h"
+
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+// Constructor
+//---------------------------------------------------------------------
+PosSettingsSignalMapper::PosSettingsSignalMapper()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+// destructor
+//---------------------------------------------------------------------
+PosSettingsSignalMapper::~PosSettingsSignalMapper()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+//
+//---------------------------------------------------------------------
+void PosSettingsSignalMapper::signalmap()
+ {
+ emit signalmapped();
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/inc/pospsysettingscommon.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: Contains the common data structures & Enum
+ *
+ */
+
+#ifndef POSPSYSETTINGSCOMMON_H
+#define POSPSYSETTINGSCOMMON_H
+
+#include <e32cmn.h>
+#include <qstring.h>
+
+/**
+ * Enumeration to indicate the state of the Psy
+ */
+enum PosPsyState
+ {
+ PsyEnable,
+
+ PsyDisable
+ };
+/**
+ * Struct that contains all the info related to each Psy
+ * - uid of Psy
+ * - name
+ * - state of the Psy whether enabled/disabled
+ */
+struct PosPsyInfo
+ {
+ TUid mPsyModuelId;
+
+ QString mPsyName;
+
+ PosPsyState mPsyState;
+ };
+
+#endif /* POSPSYSETTINGSCOMMON_H */
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/inc/pospsysettingsengine.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,83 @@
+/*
+ * Copyright (c) 2010 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: Declaration of the Positioning Methods engine class
+ * used to get the list of available Psy & to manipulate
+ * the state of the Psy.
+ *
+ *
+ */
+
+#ifndef POSPSYSETTINGSENGINE_H
+#define POSPSYSETTINGSENGINE_H
+
+#include "pospsysettingsengineprivate.h"
+
+#include <QObject>
+#include <qglobal.h>
+
+class PosPsySettingsEngine : public QObject,
+ public PositionTechnologyChangeObserver
+ {
+Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ PosPsySettingsEngine();
+
+ /**
+ * Destructor
+ */
+
+ ~PosPsySettingsEngine();
+
+ /**
+ * This method lists all the PSY that are available
+ * @param[out] psyList - Contains the list of psys that are available
+ * @return - KErrNone - if successfully finds any Psy
+ * KErrNotFound - if no Psy available.
+ */
+ int listPsys(QList<PosPsyInfo>& psyList);
+
+ /**
+ * This method is used to change the state of the Psy based on the user's
+ * action of either enabling/disabling the Psy.
+ * @param[in] psyModuleId - the uid of the Psy whose state is to be changed.
+ * @param[in] psyState - The value of state to which the Psy has to be changed.
+ */
+
+ int changePsyState(TUid psyModuleId, PosPsyState psyState);
+
+public: // from PositionTechnologyChangeObserver
+ void handlePositionTechnologyChange();
+
+private:
+signals:
+ /**
+ * This signal is emitted when there is change in PSY wrt to
+ * its availabilty, state etc..
+ */
+ void PSYChange();
+private:
+ Q_DECLARE_PRIVATE_D(d_ptr, PosPsySettingsEngine)
+private:
+ /**
+ * POinter to the PosPsySettingsEnginePrivate
+ * Owns
+ */
+ PosPsySettingsEnginePrivate* d_ptr;
+ };
+
+#endif /* POSPSYSETTINGSENGINE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/inc/pospsysettingsengineprivate.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2010 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: Declaration of the Positioning Methods private engine class
+ * used to get the list of available Psy & to manipulate
+ * the state of the Psy by using the location framework apis.
+ *
+ *
+ */
+
+#ifndef POSPSYSETTINGSENGINEPRIVATE_H
+#define POSPSYSETTINGSENGINEPRIVATE_H
+
+#include "pospsysettingscommon.h"
+
+#include <qlist.h>
+#include <qstring.h>
+#include <EPos_MPosModulesObserver.h>
+
+/**
+ * The class defines the interface for receiving position
+ * technology change event.The class interested in position
+ * technology change should inherit from this class.
+ */
+class PositionTechnologyChangeObserver
+ {
+public:
+ virtual void handlePositionTechnologyChange() = 0;
+ };
+
+
+// Forward declarations
+class CPosModules;
+class PosPsySettingsEngine;
+
+class PosPsySettingsEnginePrivate : public MPosModulesObserver
+ {
+public:
+ /**
+ * Constructor
+ */
+ PosPsySettingsEnginePrivate( PositionTechnologyChangeObserver&
+ posTechChangeObserver);
+
+ /**
+ * Destructor
+ */
+
+ ~PosPsySettingsEnginePrivate();
+
+ /**
+ * This method lists all the PSY that are available
+ * @param[out] psyList - Contains the list of psys that are available
+ * @return - KErrNone - if successfully finds any Psy
+ * KErrNotFound - if no Psy available.
+ */
+ int listPsys( QList<PosPsyInfo>& psyList );
+
+ /**
+ * This method is used to change the state of the Psy based on the user's
+ * action of either enabling/disabling the Psy.
+ * @param[in] psyModuleId - the uid of the Psy whose state is to be changed.
+ * @param[in] psyState - The value of state to which the Psy has to be changed.
+ */
+
+ int changePsyState( TUid psyModuleId, PosPsyState psyState );
+
+public: // from MPosModulesObserver
+ virtual void HandleSettingsChangeL( TPosModulesEvent aEvent );
+
+private:
+ /**
+ * This method uses the location framework apis to get the list of available psy
+ */
+ void listPsysL();
+ /**
+ * This method uses the location framework apis to manipulate the state of the Psy
+ */
+ void changePsyStateL( TUid psyModuleId, PosPsyState psyState );
+private :
+ /**
+ * Pointer to CPosModules
+ * Owns
+ */
+ CPosModules* mPosModules;
+
+ /**
+ * Contains list of PSY info
+ * Own
+ */
+ RArray<PosPsyInfo> mPsyInfoList;
+ /**
+ * Reference to position technology change observer.
+ */
+ PositionTechnologyChangeObserver& mPosTechChangeObserver;
+ /*
+ * POinter to the name of the psy
+ * ToDo: Should be removed
+ */
+ QList<QString*> mNameList;
+
+ friend class PosPsySettingsEngine;
+ };
+
+#endif /* POSPSYSETTINGSENGINEPRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/inc/pospsysettingsplugin.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2010 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: Declaration of the Positioning Methods plugin to the
+ * Avanced settings view
+ *
+ */
+
+#ifndef POSPSYSETTINGSPLUGIN_H
+#define POSPSYSETTINGSPLUGIN_H
+
+
+#include "possettingsadvinterface.h"
+#include "pospsysettingscommon.h"
+#include "possettingssignalmapper.h"
+
+#include <QObject>
+#include <QSignalMapper>
+#include <hbdataformmodelitem.h>
+
+// Forward Declaration
+class PosPsySettingsEngine;
+class PosSettingsAdvOp;
+class PosSettingsSignalMapper;
+
+class PosPsySettingsPlugin : public QObject, public PosSettingsAdvInterface
+{
+Q_OBJECT
+ Q_INTERFACES( PosSettingsAdvInterface )
+public:
+ /**
+ * Constructor
+ */
+ PosPsySettingsPlugin();
+ /**
+ * Destructor
+ */
+ ~PosPsySettingsPlugin();
+public:
+ /**
+ * Derived from PosSettingsAdvInterface
+ */
+ int initialise( PosSettingsAdvOp* operation );
+
+private slots:
+ /**
+ * This will be called when any of the positioning methods checkbox is clicked.
+ * @param[in] state - indicates the state of the checkbox,whether enabled/disabled
+ * @param[in] psyUid - indicates the Uid of the Psy that has been clciked.
+ */
+ void onPsyPressed(int index);
+ /**
+ * This method will be called on a change in any of the psy info.
+ * It willbe used to update the positioning methods group to reflect
+ * the latest available info of psys.
+ */
+ void updateGroup();
+
+private:
+ /**
+ * adds items to the group & make connections
+ */
+ void addItems();
+
+
+private:
+ /**
+ * Pointer to the PosPsySettingsEngine
+ * Owns
+ */
+ PosPsySettingsEngine* mEngine;
+ /**
+ * List of available Positioning methods
+ */
+ QList<PosPsyInfo> mPsyList;
+ /**
+ * pointer to the HbDataFormModelItem
+ * Does not own
+ */
+ HbDataFormModelItem* mGroup;
+ /**
+ * Signal mapper used to map the signal emitted from
+ * each of the psy check box to the slot
+ * Owns
+ */
+ QSignalMapper *mSignalMapper;
+ /**
+ * List of psy signal mapper class
+ */
+ QList<PosSettingsSignalMapper*> mPsySignalMapperList;
+ /**
+ * reference to PosSettingsAdvOp
+ */
+ PosSettingsAdvOp* mOperation;
+
+};
+#endif // POSPSYSETTINGSPLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/inc/possettingssignalmapper.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 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: Declaration of the Positioning Methods plugin signal mapper
+ * used to map the signals of each check box item to the index
+ *
+ */
+
+#ifndef PosSettingsSignalMapper_H
+#define PosSettingsSignalMapper_H
+
+#include <QObject>
+
+class PosSettingsSignalMapper : public QObject
+ {
+ Q_OBJECT
+public:
+ /*
+ * constructor
+ */
+ PosSettingsSignalMapper();
+ /**
+ * destructor
+ */
+ ~PosSettingsSignalMapper();
+private:
+signals:
+ /**
+ * signal emitted by the slot of this class
+ */
+ void signalmapped();
+public slots:
+ /**
+ * slot to be called on a change in state of checkbox.
+ * this in turn calls the signal signalmapped()
+ */
+ void signalmap();
+ };
+
+#endif //PosSettingsSignalMapper_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/pospsysettings.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,65 @@
+#
+# Copyright (c) 2010 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: PosPsySetting pro file
+#
+
+TEMPLATE = lib
+TARGET = pospsysettings
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+CONFIG += hb \
+ plugin
+
+#Uncomment following line to disable logging
+#DEFINES += QT_NO_DEBUG_OUTPUT
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RCC_DIR = rcc
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+LIBS += -lcpframework \
+ -llbs \
+ -leposmodset \
+ -lpossettingsengine
+
+# Input
+SOURCES += src/possettingssignalmapper.cpp \
+ src/pospsysettingsplugin.cpp \
+ src/pospsysettingsengine.cpp \
+ src/pospsysettingsengineprivate.cpp
+HEADERS += inc/possettingssignalmapper.h \
+ inc/pospsysettingsplugin.h \
+ inc/pospsysettingsengine.h \
+ inc/pospsysettingsengineprivate.h \
+ inc/pospsysettingscommon.h
+symbian: {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += PLUGINUID3=0x2002C31A
+ TARGET.UID3 = 0x2002C31A
+}
+symbian {
+ deploy.path = C:
+ qtplugins.path = /resource/qt/plugins/positioningsettings
+ qtplugins.sources += qmakepluginstubs/pospsysettings.qtplugin
+
+ # This is for new exporting system coming in garden
+ for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin $$deploy.path$$qtplugins.path/$$basename(qtplugin)"
+}
+TARGET.CAPABILITY = All -TCB
+plugin.sources = pospsysettings.dll
+plugin.path = \resource\qt\plugins\positioningsettings
+DEPLOYMENT += plugin
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsengine.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2010 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: Implementation of psy settings engine class.
+ *
+ */
+
+#include "pospsysettingsengine.h"
+#include <QDebug>
+
+//---------------------------------------------------------------------
+// PosPsySettingsEngine::PosPsySettingsEngine()
+// Constructor
+//---------------------------------------------------------------------
+PosPsySettingsEngine::PosPsySettingsEngine()
+ {
+ qDebug() << "+ PosSettingsEngine::PosPsySettingsEngine()";
+ d_ptr = new PosPsySettingsEnginePrivate(*this);
+ qDebug() << "- PosSettingsEngine::PosPsySettingsEngine()";
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEngine::~PosPsySettingsEngine()
+// Destructor
+//---------------------------------------------------------------------
+PosPsySettingsEngine::~PosPsySettingsEngine()
+ {
+ qDebug() << "+ PosSettingsEngine::~PosPsySettingsEngine()";
+ delete d_ptr;
+ d_ptr = NULL;
+ qDebug() << "- PosSettingsEngine::~PosPsySettingsEngine()";
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEngine::listPsys( QList<PosPsyInfo>& psyList )
+//
+//---------------------------------------------------------------------
+int PosPsySettingsEngine::listPsys(QList<PosPsyInfo>& psyList)
+ {
+ qDebug() << "+ PosSettingsEngine::listPsys()";
+ int ret = d_ptr->listPsys(psyList);
+ qDebug() << "- PosSettingsEngine::listPsys()" << ret;
+ return ret;
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEngine::changePsyState( TUid psyModuleId, PosPsyState psyState )
+//
+//---------------------------------------------------------------------
+int PosPsySettingsEngine::changePsyState(TUid psyModuleId,
+ PosPsyState psyState)
+ {
+ qDebug() << "+ PosSettingsEngine::changePsyState()";
+ qDebug() << "psystate = " << psyState;
+ int ret = d_ptr->changePsyState(psyModuleId, psyState);
+ qDebug() << "- PosSettingsEngine::changePsyState()" << ret;
+ return ret;
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEngine::handlePositionTechnologyChange
+//
+//---------------------------------------------------------------------
+void PosPsySettingsEngine::handlePositionTechnologyChange()
+ {
+ qDebug() << "+ PosSettingsEngine::handlePositionTechnologyChange()";
+ // emit the signal when there is a change in the list of available psys
+ emit PSYChange();
+ qDebug() << "- PosSettingsEngine::handlePositionTechnologyChange()";
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsengineprivate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 2010 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: Implementation of psy settings engine private class.
+ *
+ */
+
+
+#include "pospsysettingsengineprivate.h"
+#include "pospsysettingsengine.h"
+
+#include <qglobal.h>
+#include <EPos_CPosModules.h>
+#include <EPos_CPosModuleIdList.h>
+#include <EPos_CPosModuleUpdate.h>
+
+// constants
+const TInt KNameLength = 50;
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::PosPsySettingsEnginePrivate()
+// Constructor
+//---------------------------------------------------------------------
+PosPsySettingsEnginePrivate::PosPsySettingsEnginePrivate(
+ PositionTechnologyChangeObserver& posTechChangeObserver) :
+ mPosTechChangeObserver(posTechChangeObserver)
+ {
+
+ // initialize the CPosModules pointer
+ QT_TRAP_THROWING ( mPosModules = CPosModules::OpenL();
+ // Register for settings change.
+ mPosModules->SetObserverL( *this ));
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::~PosPsySettingsEnginePrivate()
+// Destructor
+//---------------------------------------------------------------------
+PosPsySettingsEnginePrivate::~PosPsySettingsEnginePrivate()
+ {
+ // delete mPosModules
+ if (mPosModules)
+ {
+ // remove the observer
+ mPosModules->RemoveObserver();
+ delete mPosModules;
+ mPosModules = NULL;
+ }
+ // delete the psyname
+ TInt cnt = mNameList.count();
+ for(TInt i=0;i<cnt;++i)
+ {
+ delete mNameList[i];
+ mNameList[i] = NULL;
+ }
+ mNameList.clear();
+
+ // delete the list of psy info
+ mPsyInfoList.Reset();
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::listPsys( QList<PosPsyInfo>& psyList )
+//
+//---------------------------------------------------------------------
+int PosPsySettingsEnginePrivate::listPsys(QList<PosPsyInfo>& psyList)
+ {
+ // Get the list of available psy
+ TRAPD( error, listPsysL() );
+
+ if (error == KErrNone)
+ {
+ // copy the psy from RArray to the Qlist
+ TInt cnt = mPsyInfoList.Count();
+ for (TInt i = 0; i < cnt; ++i)
+ {
+ psyList.append(mPsyInfoList[i]);
+ }
+ return KErrNone;
+ }
+ else
+ {
+ return error;
+ }
+
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::changePsyState( TUid psyModuleId, PosPsyState psyState )
+//
+//---------------------------------------------------------------------
+int PosPsySettingsEnginePrivate::changePsyState(TUid psyModuleId,
+ PosPsyState psyState)
+ {
+ // update the psy state
+ TRAPD( error, changePsyStateL( psyModuleId, psyState ) );
+ return error;
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::listPsysL( )
+//
+//---------------------------------------------------------------------
+void PosPsySettingsEnginePrivate::listPsysL()
+ {
+ // reset the list of psyinfo
+ mPsyInfoList.Reset();
+
+ // get the list of psy module ids
+ CPosModuleIdList* idList = mPosModules->ModuleIdListLC();
+ // for each psy in the list,do the following :
+ // - get module info
+ // - check visibility of psy,if true then do the following :
+ // -> store the uid,name, state of psy in the PosPsyInfo structure
+ // -> append to the list of psys.
+ TInt cnt = idList->Count();
+ for (TInt i = 0; i < cnt; ++i)
+ {
+ TPositionModuleInfo moduleInfo;
+ mPosModules->GetModuleInfoL((*idList)[i], moduleInfo);
+
+ // check visibility
+ if (mPosModules->IsModuleVisibleL((*idList)[i]))
+ {
+
+ PosPsyInfo psyInfo;
+ // Set the module Id.
+ psyInfo.mPsyModuelId = moduleInfo.ModuleId();
+
+ // Set module name
+ TBuf<KNameLength> moduleName;
+ moduleInfo.GetModuleName(moduleName);
+ // converting Tbuf to qstring
+ QString* name = new QString((QChar*) moduleName.Ptr(),
+ moduleName.Length());
+ mNameList.append( name );
+ psyInfo.mPsyName = *name;
+
+ // Set the state of the psy
+ if (moduleInfo.IsAvailable())
+ {
+ psyInfo.mPsyState = PsyEnable;
+ }
+ else
+ {
+ psyInfo.mPsyState = PsyDisable;
+ }
+
+ // append the psyinfo to the list
+ mPsyInfoList.AppendL(psyInfo);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(idList);
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::changePsyStateL( TUid psyModuleId, PosPsyState psyState )
+//
+//---------------------------------------------------------------------
+void PosPsySettingsEnginePrivate::changePsyStateL(TUid psyModuleId,
+ PosPsyState psyState)
+ {
+ // create an instance of CPosModuleUpdate to help in updating the attributes
+ // of Psy
+ CPosModuleUpdate* updateParams = CPosModuleUpdate::NewLC();
+ // Depending on the changed state update the availability of the psy
+ // i.e enable/disable
+ if (psyState == PsyEnable)
+ {
+ updateParams->SetUpdateAvailability(ETrue);
+ }
+ else
+ {
+ updateParams->SetUpdateAvailability(EFalse);
+ }
+ // update the state of the psy whose id is mentioned
+ mPosModules->UpdateModuleL(psyModuleId, *updateParams);
+
+ CleanupStack::PopAndDestroy(updateParams);
+
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsEnginePrivate::changePsyStateL( TUid psyModuleId, PosPsyState psyState )
+//
+//---------------------------------------------------------------------
+void PosPsySettingsEnginePrivate::HandleSettingsChangeL(
+ TPosModulesEvent aEvent)
+ {
+ // Check the event type,only for installation,removal,
+ // change in visibility,
+ // get the newly available list of psy
+ if (aEvent.iType == EPosModulesEventModuleInstalled ||
+ aEvent.iType == EPosModulesEventModuleRemoved ||
+ aEvent.iType == EPosModulesEventVisibilityChanged)
+ {
+ listPsysL();
+ // call the engine's handlePositionTechnologyChange
+ mPosTechChangeObserver.handlePositionTechnologyChange();
+ }
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/src/pospsysettingsplugin.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,276 @@
+/*
+ * Copyright (c) 2010 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: Implementation of psy settings plugin class.
+ *
+ */
+#include "pospsysettingsplugin.h"
+#include "pospsysettingsengine.h"
+
+#include <QDebug>
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::PosPsySettingsPlugin()
+// Constructor
+//---------------------------------------------------------------------
+PosPsySettingsPlugin::PosPsySettingsPlugin():
+mGroup(NULL),
+mSignalMapper(NULL),
+mOperation(NULL)
+ {
+ qDebug() << "================ PSY Plug-in loaded ==============================";
+ qDebug() << "+ PosPsySettingsPlugin::PosPsySettingsPlugin()";
+ mEngine = new PosPsySettingsEngine();
+ qDebug() << "- PosPsySettingsPlugin::PosPsySettingsPlugin()";
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::~PosPsySettingsPlugin()
+// Destructor
+//---------------------------------------------------------------------
+PosPsySettingsPlugin::~PosPsySettingsPlugin()
+ {
+ qDebug() << "- PosPsySettingsPlugin::~PosPsySettingsPlugin()";
+ //Note: no need to call mOperation->removeConnection() as it is already handled in advview's destructor
+ if (mEngine)
+ {
+ delete mEngine;
+ mEngine = NULL;
+ }
+
+ // delete the group
+ if(mGroup)
+ {
+ mOperation->removeItem( mGroup );
+ }
+
+ // clear the list of available psys
+ mPsyList.clear();
+
+ QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(onPsyPressed(int)));
+ // delete the QSignalMapper instance
+ if (mSignalMapper)
+ {
+ delete mSignalMapper;
+ mSignalMapper = NULL;
+ }
+
+ // delete the signal mapper instances
+ int cnt = mPsySignalMapperList.count();
+ for (int i = 0; i < cnt ; ++i)
+ {
+ QObject::disconnect(mPsySignalMapperList[i], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+ delete mPsySignalMapperList[i];
+ mPsySignalMapperList[i] = NULL;
+ }
+ // clear the list of signal mapper
+ mPsySignalMapperList.clear();
+
+ qDebug() << "- PosPsySettingsPlugin::~PosPsySettingsPlugin()";
+ qDebug() << "================ PSY Plug-in unloaded ==============================";
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::initialise( PosSettingsAdvOp* operation )
+//
+//---------------------------------------------------------------------
+int PosPsySettingsPlugin::initialise(PosSettingsAdvOp* operation)
+ {
+ qDebug() << "+ PosPsySettingsPlugin::initialise()";
+ mOperation = operation;
+ mPsyList.clear();
+ // get the list of psys
+ int error = mEngine->listPsys(mPsyList);
+ // if the list is not available return error
+ if (error == KErrNone)
+ {
+ // create group
+ mGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem, tr(
+ "Positioning methods"), 0);
+ // append the group to data form using operation
+ operation->appendDataFormItem(mGroup);
+
+ // add group items
+ addItems();
+
+ // make connection to update the group inase of change in availbale list of psy
+ QObject::connect(mEngine, SIGNAL(PSYChange()), this,
+ SLOT(updateGroup()));
+ qDebug() << "- PosPsySettingsPlugin::initialise()";
+ return KErrNone;
+ }
+ qDebug() << "- PosPsySettingsPlugin::initialise()";
+ return error;
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::onPsyPressed( int state, int psyUid )
+//
+//---------------------------------------------------------------------
+void PosPsySettingsPlugin::onPsyPressed(int index)
+ {
+ qDebug() << "+ PosPsySettingsPlugin::onPsyPressed()";
+ // get the check box item using the index
+ HbDataFormModelItem *checkBox = mGroup->childAt(index);
+ // get the psy name for the check box
+ QVariant name(checkBox->contentWidgetData("text"));
+ QString psyName = name.toString();
+ qDebug() << "Psy to be changed:" << psyName;
+
+ // get the psyuid for the psy
+ TUid psyUid = mPsyList.at(index).mPsyModuelId;
+
+ // get the state of the check box
+ QVariant state(checkBox->contentWidgetData(("checkState")));
+ int psyState = state.toInt();
+
+ // change the psy state based on check box state
+ if (psyState == Qt::Checked)
+ {
+ qDebug() << "Psy value:true";
+ int error = mEngine->changePsyState(psyUid, PsyEnable);
+ }
+ else
+ {
+ qDebug() << "Psy value:false";
+ int error = mEngine->changePsyState(psyUid, PsyDisable);
+ }
+ qDebug() << "- PosPsySettingsPlugin::onPsyPressed()";
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::updateGroup
+//
+//---------------------------------------------------------------------
+void PosPsySettingsPlugin::updateGroup()
+ {
+ qDebug() << "+ PosPsySettingsPlugin::updateGroup()";
+ // remove all connections
+ int cnt= mGroup->childCount();
+ for (int i = 0; i < cnt; ++i)
+ {
+ mOperation->removeConnection(mGroup->childAt(i),
+ SIGNAL(stateChanged(int)), mPsySignalMapperList[i],
+ SLOT(signalmap()));
+ }
+ cnt = mPsySignalMapperList.count();
+ for (int i = 0; i < cnt; ++i)
+ {
+ QObject::disconnect(mPsySignalMapperList[i], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+ delete mPsySignalMapperList[i];
+ mPsySignalMapperList[i] = NULL;
+ }
+ mPsySignalMapperList.clear();
+
+ QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(onPsyPressed(int)));
+
+ // delete the QSignalMapper instance
+ if (mSignalMapper)
+ {
+ delete mSignalMapper;
+ mSignalMapper = NULL;
+ }
+
+ // clear list of psys
+ mPsyList.clear();
+ // get the list of psys
+ int error = mEngine->listPsys(mPsyList);
+ // if the list is not available return error
+ if (error == KErrNone )
+ {
+ // remove all group's children
+ //mGroup->removeChildren(0, oldChildCount);
+ //ToDo: Hack from HbDataForm team
+ int cnt = mGroup->childCount();
+ for(int i=0;i<cnt; ++i) {
+ mGroup->removeChild(0);
+ }
+ // add the group items
+ addItems();
+ if (mOperation->isExpanded(mOperation->indexFromItem(mGroup)))
+ {
+ // set as expanded since group was already expanded
+ mOperation->setExpanded(mOperation->indexFromItem(mGroup), true);
+ }
+ }
+ qDebug() << "- PosPsySettingsPlugin::updateGroup()";
+ }
+
+//---------------------------------------------------------------------
+// PosPsySettingsPlugin::addItems
+//
+//---------------------------------------------------------------------
+void PosPsySettingsPlugin::addItems()
+ {
+ qDebug() << "+ PosPsySettingsPlugin::addItems()";
+ // create the signal mapper
+ if(mSignalMapper)
+ {
+ delete mSignalMapper;
+ mSignalMapper = NULL;
+ }
+ mSignalMapper = new QSignalMapper();
+
+ // for each of the psys in the list
+ // - add a check box item with name
+ // - set the checkbox state according to the psy's current state
+ // - make connections
+ // foreach( PosPsyInfo psy, mPsyList )
+ int cnt = mPsyList.count();
+ qDebug() << "No of Psys: " << cnt;
+ for (int i = 0; i < cnt; ++i)
+ {
+ // create the check box item
+ HbDataFormModelItem* checkBox = new HbDataFormModelItem(
+ HbDataFormModelItem::CheckBoxItem, QString());
+ QString psyName = mPsyList.at(i).mPsyName;
+ qDebug() << "Psy Name: " << psyName;
+ checkBox->setContentWidgetData("text", psyName);
+
+ // set the state of checkbox
+ if (mPsyList.at(i).mPsyState == PsyEnable)
+ {
+ checkBox->setContentWidgetData("checkState", Qt::Checked);
+ }
+ else
+ {
+ checkBox->setContentWidgetData("checkState", Qt::Unchecked);
+ }
+ // append the check box item to the group
+ mGroup->appendChild(checkBox);
+
+ // create a new psySignalMapper for each checkbox created
+ PosSettingsSignalMapper* psySignalMapper =
+ new PosSettingsSignalMapper();
+ mPsySignalMapperList.append(psySignalMapper);
+
+ // add connections on change of check box state
+ mOperation->addConnection(checkBox, SIGNAL(stateChanged(int)),
+ mPsySignalMapperList[i], SLOT(signalmap()));
+ QObject::connect(mPsySignalMapperList[i], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+ // set mapping of each check box item to its index
+ mSignalMapper->setMapping(mPsySignalMapperList[i], i);
+
+ }
+ QObject::connect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(onPsyPressed(int)));
+ qDebug() << "- PosPsySettingsPlugin::addItems()";
+ }
+
+Q_EXPORT_PLUGIN2(pospsysettings, PosPsySettingsPlugin)
+;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/posmethodsplugin/src/possettingssignalmapper.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: Implementation of psy settings signal mapper class
+ *
+ */
+
+
+#include "possettingssignalmapper.h"
+
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+// Constructor
+//---------------------------------------------------------------------
+PosSettingsSignalMapper::PosSettingsSignalMapper()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+// destructor
+//---------------------------------------------------------------------
+PosSettingsSignalMapper::~PosSettingsSignalMapper()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+//
+//---------------------------------------------------------------------
+void PosSettingsSignalMapper::signalmap()
+ {
+ emit signalmapped();
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettings.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2010 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: project file for positioing settings in control panel
+#
+
+
+TEMPLATE = subdirs
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+SUBDIRS += possettingsengine/possettingsengine.pro
+SUBDIRS += possettingsplugin/possettingsplugin.pro
+SUBDIRS += posmethodsplugin/pospsysettings.pro
+SUBDIRS += possuplsettingsplugin/possuplsettings.pro
+SUBDIRS += poslocationservices/poslocationservices.pro
+
+DEFINES += BUILD_POSSETTINGS
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+ "possettings_stub.sis /epoc32/data/z/system/install/possettings_stub.sis" \
+ "rom/possettings.iby CORE_MW_LAYER_IBY_EXPORT_PATH(possettings.iby)" \
+ "rom/possettings_resources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(possettings_resources.iby)" \
+ "conf/positioningsettings.confml MW_LAYER_CONFML(positioningsettings.confml)" \
+ "conf/positioningsettings_2002E685.crml MW_LAYER_CRML(positioningsettings_2002E685.crml)"
+
+
\ No newline at end of file
Binary file locationsystemui/locationsysui/possettings/possettings_stub.sis has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/bwins/possettingsengineu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,26 @@
+EXPORTS ?trUtf8@PosSettingsAdvOp@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString PosSettingsAdvOp::trUtf8(char const *, char const *)
+ ?staticMetaObject@PosSettingsAdvOp@@2UQMetaObject@@B @ 2 NONAME ; struct QMetaObject const PosSettingsAdvOp::staticMetaObject
+ ?setExpanded@PosSettingsAdvOp@@QAEXABVQModelIndex@@_N@Z @ 3 NONAME ; void PosSettingsAdvOp::setExpanded(class QModelIndex const &, bool)
+ ?addAction@PosSettingsAdvOp@@QAEXPAVHbAction@@W4ActionContainer@HbView@@@Z @ 4 NONAME ; void PosSettingsAdvOp::addAction(class HbAction *, enum HbView::ActionContainer)
+ ?qt_metacast@PosSettingsAdvOp@@UAEPAXPBD@Z @ 5 NONAME ; void * PosSettingsAdvOp::qt_metacast(char const *)
+ ??_EPosSettingsView@@UAE@I@Z @ 6 NONAME ; PosSettingsView::~PosSettingsView(unsigned int)
+ ?isExpanded@PosSettingsAdvOp@@QBE_NABVQModelIndex@@@Z @ 7 NONAME ; bool PosSettingsAdvOp::isExpanded(class QModelIndex const &) const
+ ?addConnection@PosSettingsAdvOp@@QAEXPAVHbDataFormModelItem@@PBDPAVQObject@@1@Z @ 8 NONAME ; void PosSettingsAdvOp::addConnection(class HbDataFormModelItem *, char const *, class QObject *, char const *)
+ ?tr@PosSettingsAdvOp@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString PosSettingsAdvOp::tr(char const *, char const *, int)
+ ?appendDataFormItem@PosSettingsAdvOp@@QAEXPAVHbDataFormModelItem@@0@Z @ 10 NONAME ; void PosSettingsAdvOp::appendDataFormItem(class HbDataFormModelItem *, class HbDataFormModelItem *)
+ ??1PosSettingsAdvOp@@UAE@XZ @ 11 NONAME ; PosSettingsAdvOp::~PosSettingsAdvOp(void)
+ ?qt_metacall@PosSettingsAdvOp@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 12 NONAME ; int PosSettingsAdvOp::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??0PosSettingsAdvOp@@QAE@PAVHbView@@@Z @ 13 NONAME ; PosSettingsAdvOp::PosSettingsAdvOp(class HbView *)
+ ??_EPosSettingsAdvOp@@UAE@I@Z @ 14 NONAME ; PosSettingsAdvOp::~PosSettingsAdvOp(unsigned int)
+ ??1PosSettingsView@@UAE@XZ @ 15 NONAME ; PosSettingsView::~PosSettingsView(void)
+ ?itemPrototypes@PosSettingsAdvOp@@QAEXAAV?$QList@PAVHbAbstractViewItem@@@@@Z @ 16 NONAME ; void PosSettingsAdvOp::itemPrototypes(class QList<class HbAbstractViewItem *> &)
+ ?removeConnection@PosSettingsAdvOp@@QAEXPAVHbDataFormModelItem@@PBDPAVQObject@@1@Z @ 17 NONAME ; void PosSettingsAdvOp::removeConnection(class HbDataFormModelItem *, char const *, class QObject *, char const *)
+ ?indexFromItem@PosSettingsAdvOp@@QAE?AVQModelIndex@@PBVHbDataFormModelItem@@@Z @ 18 NONAME ; class QModelIndex PosSettingsAdvOp::indexFromItem(class HbDataFormModelItem const *)
+ ?setItemPrototypes@PosSettingsAdvOp@@QAEXAAV?$QList@PAVHbAbstractViewItem@@@@@Z @ 19 NONAME ; void PosSettingsAdvOp::setItemPrototypes(class QList<class HbAbstractViewItem *> &)
+ ??0PosSettingsView@@QAE@PAVQGraphicsItem@@@Z @ 20 NONAME ; PosSettingsView::PosSettingsView(class QGraphicsItem *)
+ ?removeItem@PosSettingsAdvOp@@QAE_NPAVHbDataFormModelItem@@@Z @ 21 NONAME ; bool PosSettingsAdvOp::removeItem(class HbDataFormModelItem *)
+ ?trUtf8@PosSettingsAdvOp@@SA?AVQString@@PBD0H@Z @ 22 NONAME ; class QString PosSettingsAdvOp::trUtf8(char const *, char const *, int)
+ ?tr@PosSettingsAdvOp@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString PosSettingsAdvOp::tr(char const *, char const *)
+ ?getStaticMetaObject@PosSettingsAdvOp@@SAABUQMetaObject@@XZ @ 24 NONAME ; struct QMetaObject const & PosSettingsAdvOp::getStaticMetaObject(void)
+ ?metaObject@PosSettingsAdvOp@@UBEPBUQMetaObject@@XZ @ 25 NONAME ; struct QMetaObject const * PosSettingsAdvOp::metaObject(void) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/eabi/possettingsengineu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,35 @@
+EXPORTS
+ _ZN15PosSettingsViewC1EP13QGraphicsItem @ 1 NONAME
+ _ZN15PosSettingsViewC2EP13QGraphicsItem @ 2 NONAME
+ _ZN15PosSettingsViewD0Ev @ 3 NONAME
+ _ZN15PosSettingsViewD1Ev @ 4 NONAME
+ _ZN15PosSettingsViewD2Ev @ 5 NONAME
+ _ZN16PosSettingsAdvOp10removeItemEP19HbDataFormModelItem @ 6 NONAME
+ _ZN16PosSettingsAdvOp11qt_metacallEN11QMetaObject4CallEiPPv @ 7 NONAME
+ _ZN16PosSettingsAdvOp11qt_metacastEPKc @ 8 NONAME
+ _ZN16PosSettingsAdvOp11setExpandedERK11QModelIndexb @ 9 NONAME
+ _ZN16PosSettingsAdvOp13addConnectionEP19HbDataFormModelItemPKcP7QObjectS3_ @ 10 NONAME
+ _ZN16PosSettingsAdvOp13indexFromItemEPK19HbDataFormModelItem @ 11 NONAME
+ _ZN16PosSettingsAdvOp14itemPrototypesER5QListIP18HbAbstractViewItemE @ 12 NONAME
+ _ZN16PosSettingsAdvOp16removeConnectionEP19HbDataFormModelItemPKcP7QObjectS3_ @ 13 NONAME
+ _ZN16PosSettingsAdvOp16staticMetaObjectE @ 14 NONAME DATA 16
+ _ZN16PosSettingsAdvOp17setItemPrototypesER5QListIP18HbAbstractViewItemE @ 15 NONAME
+ _ZN16PosSettingsAdvOp18appendDataFormItemEP19HbDataFormModelItemS1_ @ 16 NONAME
+ _ZN16PosSettingsAdvOp19getStaticMetaObjectEv @ 17 NONAME
+ _ZN16PosSettingsAdvOp9addActionEP8HbActionN6HbView15ActionContainerE @ 18 NONAME
+ _ZN16PosSettingsAdvOpC1EP6HbView @ 19 NONAME
+ _ZN16PosSettingsAdvOpC2EP6HbView @ 20 NONAME
+ _ZN16PosSettingsAdvOpD0Ev @ 21 NONAME
+ _ZN16PosSettingsAdvOpD1Ev @ 22 NONAME
+ _ZN16PosSettingsAdvOpD2Ev @ 23 NONAME
+ _ZNK16PosSettingsAdvOp10isExpandedERK11QModelIndex @ 24 NONAME
+ _ZNK16PosSettingsAdvOp10metaObjectEv @ 25 NONAME
+ _ZTI15PosSettingsView @ 26 NONAME
+ _ZTI16PosSettingsAdvOp @ 27 NONAME
+ _ZTV15PosSettingsView @ 28 NONAME
+ _ZTV16PosSettingsAdvOp @ 29 NONAME
+ _ZThn16_N15PosSettingsViewD0Ev @ 30 NONAME
+ _ZThn16_N15PosSettingsViewD1Ev @ 31 NONAME
+ _ZThn8_N15PosSettingsViewD0Ev @ 32 NONAME
+ _ZThn8_N15PosSettingsViewD1Ev @ 33 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/checkcustomviewitem.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2010 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:
+ *
+ */
+#ifndef CHECK_CUSTOMVIEWITEM_H
+#define CHECK_CUSTOMVIEWITEM_H
+
+#include <hbdataformviewitem.h>
+#include <hbdataformmodelitem.h>
+
+class HbWidget;
+
+class CheckCustomViewItem: public HbDataFormViewItem
+{
+ Q_OBJECT
+
+public:
+ explicit CheckCustomViewItem(QGraphicsItem *parent = 0);
+ ~CheckCustomViewItem();
+ virtual HbAbstractViewItem* createItem();
+ virtual bool canSetModelIndex(const QModelIndex &index) const;
+};
+#endif // CHECK_CUSTOMVIEWITEM_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingsadvview.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2010 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:Declaration of the Positioning Settings Advanced View class
+ *
+ */
+
+#ifndef POSSETTINGSENG_ADVANCEDVIEW_H
+#define POSSETTINGSENG_ADVANCEDVIEW_H
+
+#include "possettingsadvop.h"
+
+#include <QObject>
+#include <cpbasesettingview.h>
+
+//class PosSettingsAdvancedDataForm;
+class HbDataForm;
+class HbDataFormModel;
+class HbDataFormModelItem;
+class PosSettingsAdvOp;
+class PosSettingsAdvInterface;
+class PosSettingsPluginsLoader;
+class QFileSystemWatcher;
+
+class PosSettingsAdvView : public CpBaseSettingView
+ {
+Q_OBJECT
+
+public:
+ /*
+ * Constructor
+ */
+ PosSettingsAdvView(QGraphicsItem *parent = 0);
+ /*
+ * Destructor
+ */
+ ~PosSettingsAdvView();
+
+private slots:
+ /**
+ * Updates the advanced view in case of change in any of the plugins,
+ * this slot needs to be called
+ */
+ void updateAdvView();
+
+private:
+
+ /**
+ * Handle to Heading groupbox
+ * Not Own
+ */
+ HbDataFormModelItem *mHeading;
+
+
+ /*
+ * Pointer to the HbDataForm
+ * Owns
+ */
+ HbDataForm* mAdvancedDataForm;
+ /*
+ * Pointer to the PosSettingsAdvOp
+ * owns
+ */
+ PosSettingsAdvOp* mAdvancedOperation;
+ /**
+ * List containing the plugins
+ */
+ QList<PosSettingsAdvInterface*> mPluginsList;
+ /**
+ * Pointer to the PosSettingsPluginsLoader
+ */
+ PosSettingsPluginsLoader* mPluginsLoader;
+ /**
+ * Pointer to the QFileSystemWatcher
+ * Owns
+ */
+ QFileSystemWatcher* mWatcher;
+
+ };
+
+#endif //POSSETTINGSENG_ADVANCEDVIEW_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingscommon.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2010 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 header exposes common data structues and enums.
+*
+*/
+
+#ifndef POSSETTINGSCOMMON_H
+#define POSSETTINGSCOMMON_H
+
+#include <e32cmn.h>
+
+/**
+ * This enum defines type of position technology.
+ */
+enum PositionTechnology
+ {
+ /**
+ * Bit mask used to specify GPS technology.
+ */
+ PositionTechnologyGps = 0x01,
+
+ /**
+ * Bit mask used to specify network technology.
+ */
+ PositionTechnologyNetwork = 0x02,
+
+ };
+
+/**
+ * This enum defines different state.
+ */
+enum State
+ {
+ StateEnable,
+
+ StateDisable
+ };
+
+/**
+ * PSY module information
+ */
+struct PsyModuleInfo
+ {
+ /**
+ * Module id of Psy
+ */
+ TUid mPsyModuleId;
+
+ /**
+ * Position technology.
+ */
+ PositionTechnology mPosTech;
+
+ /**
+ * State of Psy
+ */
+ State mState;
+ };
+
+
+#endif /* PosSettingsCOMMON_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingsengine.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,137 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings engine class.
+*
+*/
+
+#ifndef POSITIONINGSETTINGS_ENGINE_H
+#define POSITIONINGSETTINGS_ENGINE_H
+
+
+#include "possettingscommon.h"
+#include "possettingsengineprivate.h"
+#include <QObject>
+#include <qglobal.h>
+
+/**
+ * PositioningSettingsEngine class provides an interface that abstracts client
+ * from different GPS and wireless positioning techniques. This exposes methods
+ * to perform operations on the positioning techniques.
+ */
+
+class PosSettingsEngine : public QObject,
+ public PositionTechnologyChangeObserver
+ {
+ Q_OBJECT
+public:
+ /**
+ * Default constructor
+ * This throws an error if construction fails.
+ */
+ PosSettingsEngine();
+
+ /**
+ * Destructor
+ */
+ ~PosSettingsEngine();
+
+ /**
+ * Returns whether specified position technology is available.
+ * @param[in] posTechnology Position technology of interest.
+ * @return true if specified position technology is available,
+ * false if it is not available.
+ */
+ bool isPositionTechnologyAvailable( PositionTechnology posTechnology );
+
+ /**
+ * Sets the state of position technology.
+ * @param[in] posTechnologyState Resultant state of the position technology
+ * after this operation.
+ * @param[in] posTechnology State of position technology to be changed.
+ * @return KErrNone if successful,
+ * KErrNotFound if specified position technology is not available
+ * Otherwise, standard error code is returned,
+ * KErrServerBusy, etc..
+ */
+ int setPositionTechnologyState( State posTechnologyState,
+ PositionTechnology posTechnology );
+
+ /**
+ * Returns whether specified position technology is enabled. It is recemonded
+ * to use this method after checking the availability of the position technology
+ * using isPositionTechnologyAvailable method.
+ * @param[in] posTechnology Position technology of interest.
+ * @return true if specified position technology is enabled,
+ * false if it is disabled.
+ */
+ bool isPositionTechnologyEnabled( PositionTechnology posTechnology );
+
+ /**
+ * Sets the state of back ground positioning.
+ * @param[in] backGroundPosState Resultant state of back ground positioning.
+ * @return KErrNone if successful,
+ * KErrNotSupported if none of the position type are available,
+ * KErrArgument if none of the position type are enabled
+ * otherwise, standard error code is returned,
+ * KErrServerBusy, etc..
+ */
+ int setBackGroundPositioningState( State backGroundPosState );
+
+ /**
+ * Returns whether back ground positioning is enabled. It is recemonded
+ * to use this method after checking the availability of the position type
+ * using isPositionTypeAvailable method.
+ * @return true if back ground positioning is enabled,
+ * false if it is disabled.
+ */
+ bool isBackGroundPositioningEnabled();
+
+ /**
+ * It will set status of background positioning in CR key
+ * It is required to retain old status when checkbox is inserted/removed
+ *
+ * status [in] - The status of the background positioning in CR key
+ */
+ void setCRBackgroundPositioningStatus(State backGroundPosState);
+
+ /**
+ * It will return status of background positioning in CR key
+ * It is required to retain old status when checkbox is inserted/removed.
+ *
+ * returns true if enabled or false if disabled
+ */
+ bool cRBackgroundPositioningStatus();
+
+public: // from PositionTechnologyChangeObserver
+ void handlePositionTechnologyChange();
+
+private:
+ signals:
+ /**
+ * This signal is emitted when there is change in any of position
+ * technology wrt to its availabilty, state etc..
+ */
+ void positionTechnologyChange();
+
+private:
+ Q_DECLARE_PRIVATE_D(d_ptr, PosSettingsEngine)
+private: // data member
+ /**
+ * Pointer to private implementation.
+ * Own
+ */
+ PosSettingsEnginePrivate* d_ptr;
+ };
+
+#endif /* POSITIONINGSETTINGS_ENGINE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingsengineprivate.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,190 @@
+/*
+* Copyright (c) 2010 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: Positioning settings engine private class.
+*
+*/
+
+#ifndef POSITIONINGSETTINGSENGINE_PRIVATE_H
+#define POSITIONINGSETTINGSENGINE_PRIVATE_H
+
+#include "possettingscommon.h"
+
+#include <EPos_MPosModulesObserver.h>
+#include <lbtserver.h>
+#include <lbtmanager.h>
+
+// Forward declarations
+
+class PosSettingsEngine;
+class CPosModules;
+class CSuplSettings;
+struct TPosModulesEvent;
+
+/**
+ * The class defines the interface for receiving position
+ * technology change event.The class interested in position
+ * technology change should inherit from this class.
+ */
+class PositionTechnologyChangeObserver
+ {
+public:
+ virtual void handlePositionTechnologyChange() = 0;
+ };
+
+/**
+ * PositioningSettingsEnginePrivate is a class that provides implementation
+ * for PositionSettingsEngine class.
+ */
+class PosSettingsEnginePrivate : public MPosModulesObserver
+ {
+public:
+ /**
+ * Default constructor
+ */
+ PosSettingsEnginePrivate( PositionTechnologyChangeObserver&
+ posTechChangeObserver );
+
+ /**
+ * Destructor
+ */
+ ~PosSettingsEnginePrivate();
+
+ /**
+ * Returns whether specified position technology is available.
+ * @param[in] posTechnology Position technology of interest.
+ * @return true if specified position technology is available,
+ * false if it is not available.
+ */
+ bool isPositionTechnologyAvailable( PositionTechnology posTechnology );
+
+ /**
+ * Sets the state of position technology.
+ * @param[in] posTechnologyState Resultant state of the position technology
+ * after this operation.
+ * @param[in] posTechnology State of position technology to be changed.
+ * @return KErrNone if successful,
+ * KErrNotFound if specified position technology is not available
+ * Otherwise, standard error code is returned,
+ * KErrServerBusy, etc..
+ */
+ int setPositionTechnologyState( State posTechnologyState,
+ PositionTechnology posTechnology );
+
+ /**
+ * Returns whether specified position technology is enabled. It is recemonded
+ * to use this method after checking the availability of the position technology
+ * using isPositionTechnologyAvailable method.
+ * @param[in] posTechnology Position technology of interest.
+ * @return true if specified position technology is enabled,
+ * false if it is disabled.
+ */
+ bool isPositionTechnologyEnabled( PositionTechnology posTechnology );
+
+
+ /**
+ * Sets the state of back ground positioning.
+ * @param[in] backGroundPosState Resultant state of back ground positioning.
+ * @return KErrNone if successful,
+ * KErrNotSupported if none of the position type are available,
+ * KErrArgument if none of the position type are enabled
+ * otherwise, standard error code is returned,
+ * KErrServerBusy, etc..
+ */
+ int setBackGroundPositioningState( State backGroundPosState );
+
+ /**
+ * Returns whether back ground positioning is enabled. It is recemonded
+ * to use this method after checking the availability of the position type
+ * using isPositionTypeAvailable method.
+ * @return true if back ground positioning is enabled,
+ * false if it is disabled.
+ */
+ bool isBackGroundPositioningEnabled();
+
+public: // from MPosModulesObserver
+ virtual void HandleSettingsChangeL( TPosModulesEvent aEvent );
+
+private:
+ /**
+ * Sets the state of given positioning technology.
+ * @param[in] posTechnologyState Resultant State of Positioning Technology
+ * StateEnable/StateDisable.
+ * @param[in] posTechnology Positioning Technology Name
+ * PositionTechnologyGps/PositionTechnologyNetwork.
+ */
+ void setPositionTechnologyStateL( State posTechnologyState,
+ PositionTechnology posTechnology );
+ /**
+ * Sets the state of back ground positioning.
+ * @param[in] backGroundPosState Resultant state of back ground positioning.
+ */
+ void setBackGroundPositioningStateL( State backGroundPosState );
+
+ /**
+ * Populates the PSY module information list.
+ */
+ void populatePsyModuleInfoListL();
+
+ /**
+ * Gets the state of back ground positioning.
+ */
+ void GetBackGroundPositioingStateL();
+
+private: //Data members
+
+ /**
+ * Reference to position technology change observer.
+ */
+ PositionTechnologyChangeObserver& mPosTechChangeObserver;
+
+ /**
+ * Pointer to Supl settings object
+ * Own
+ */
+ CSuplSettings* mSuplSettings;
+
+ /**
+ * Pointer to lbt server
+ * Own
+ */
+ RLbtServer mLbtServer;
+
+ /**
+ * Pointer to lbt manager
+ * Own
+ */
+ RLbtManager mLbtManager;
+
+ /**
+ * Pointer to Pos module;
+ * Own
+ */
+ CPosModules* mPosModules;
+
+ /**
+ * List of PSY module info
+ * Own
+ */
+ RArray<PsyModuleInfo> mPsyModuleInfoList;
+
+ /**
+ * State of back ground positioning
+ */
+ State mBackGroundPositioningState;
+
+ friend class PosSettingsEngine;
+ };
+
+
+#endif /* POSITIONINGSETTINGSENGINE_PRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingsform.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,192 @@
+/*
+* Copyright (c) 2010 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: Positioning settings view class.
+*
+*/
+
+#ifndef POSSETTINGSFORM_H
+#define POSSETTINGSFORM_H
+
+#include <hbdataform.h>
+
+class HbDataFormModelItem;
+class PosSettingsEngine;
+class PosSettingsAdvView;
+class HbAction;
+
+class PosSettingsForm : public HbDataForm
+ {
+ Q_OBJECT
+private:
+ /*
+ * Enumarator for the positioning category type
+ */
+ enum PosTypeIndex
+ {
+ /*
+ * The position of GPS in HbDataForm
+ */
+ PosTypeIndexGps = 1,
+
+ /*
+ * The position of Wireless in HbDataForm
+ */
+ PosTypeIndexWireless = 2 ,
+
+ /*
+ * The position of Background in HbDataForm
+ */
+ PosTypeIndexBackground = 3
+ };
+public:
+ /**
+ * Constructor.
+ */
+ explicit PosSettingsForm( PosSettingsEngine& settingsEngine,
+ QGraphicsItem *parent = 0 );
+
+ /**
+ * Destructor
+ */
+ ~PosSettingsForm();
+
+private:
+ /**
+ * It will initiate the basic setting view
+ */
+ void initSettingModel();
+
+ /**
+ * It will validate visibility of Positioning type
+ *
+ * posTypeModelItemIndex[in] - The position at which control should be placed
+ */
+ void validatePosTypeVisibility(PosTypeIndex posTypeModelItemIndex);
+
+ /**
+ * It will insert/remove Positioning type control in HbDataForm
+ *
+ * insert[in] - if true insert control else remove it
+ * posTypeModelItem[in] - HbDataFormModelItem handle for position type
+ * posTypeModelItemIndex[in] - The position at which control should be placed
+ * posIndex[in] - The absolute poisition index at which control should be placed.
+ * It will different from posTypeModelItemIndex for Wireless and Background
+ * depending on GPS, Wireless are visible.
+ */
+ void insertOrRemovePosTypeModelItem(bool insert, HbDataFormModelItem* posTypeModelItem,
+ PosTypeIndex posTypeModelItemIndex, int posIndex);
+ /*
+ * It will create HbDataFormModelItem based on the position specified
+ *
+ * posTypeModelItemIndex [in] - The position at which control should be placed
+ */
+ void createPosTypeModelItem(PosTypeIndex posTypeModelItemIndex);
+
+ /**
+ * It will mark/unmark positioning category checkbox
+ *
+ * posTypeModelItemIndex [in] - The position at which control should be placed
+ */
+ void setPosTypeState(PosTypeIndex posTypeModelItemIndex);
+
+ /**
+ * It will add connection for the given model item
+ *
+ * posTypeModelItem [in] - HbDataFormModelItem handle for position type
+ */
+ void addPosTypeConnection(HbDataFormModelItem* posTypeModelItem);
+
+private slots:
+ /**
+ * It will be called when 'Advanced' push button is pressed
+ */
+ void onPressedAdvanced();
+
+ /**
+ * It will be called when 'GPS' checkbox is clicked
+ */
+ void onPressedGps();
+
+ /**
+ * It will be called when 'Wirelss' checkbox is clicked
+ */
+ void onPressedWireless();
+
+ /*
+ * It will be called when 'Background' checkbox is clicked
+ */
+ void onPressedBackground();
+ /*
+ * It will be called when the Back Button is pressed to dismiss the
+ * advanced view
+ */
+ void closeAdvancedView();
+
+ /**
+ * It will validate visibility of all positioning type controls
+ * It will also be called when new positioning technology is
+ * added at runtime
+ */
+ void validateVisibility();
+
+private: // Data memebers
+ /**
+ * Handle to engine
+ * Not Own
+ */
+ PosSettingsEngine& mSettingsEngine;
+
+ /**
+ * Handle to 'GPS' checkbox
+ * Not Own
+ */
+ HbDataFormModelItem *mGpsPosType;
+
+ /**
+ * Handle to 'Wireless' checkbox
+ * Not Own
+ */
+ HbDataFormModelItem *mWirelessPosType;
+
+ /**
+ * Handle to 'Background' checkbox
+ * Not Own
+ */
+ HbDataFormModelItem *mBgPosType;
+
+ /**
+ * Handle to 'Advanced' push button
+ * Not Own
+ */
+ HbDataFormModelItem *mAdvancedSettings;
+
+ /**
+ * Handle to Heading groupbox
+ * Not Own
+ */
+ HbDataFormModelItem *mHeading;
+
+ /**
+ * Pointer to Advanced view class
+ * Owns this pointer.
+ */
+ PosSettingsAdvView* mAdvancedView;
+
+ /**
+ * handle to the Back Action
+ */
+ HbAction* mBackAction;
+
+ };
+#endif // POSSETTINGSFORM_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingsgroupboxitem.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 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 class provides custom list item
+* for the groupbox on the DataForm
+*/
+
+#ifndef POSSETTINGS_GROUPBOXITEM_H
+#define POSSETTINGS_GROUPBOXITEM_H
+
+#include <QObject>
+
+#include <hbdataformviewitem.h>
+#include <hbdataformmodelitem.h>
+
+const int GroupboxItem = HbDataFormModelItem::CustomItemBase+12;
+
+class PosSettingsGroupboxItem : public HbDataFormViewItem
+{
+Q_OBJECT
+
+public: //constructor and destructor
+ PosSettingsGroupboxItem(QGraphicsItem *parent);
+ ~PosSettingsGroupboxItem();
+public: //from HbDataFormViewItem
+ /*
+ * It will return custom control item
+ */
+ virtual HbAbstractViewItem* createItem();
+ virtual bool canSetModelIndex(const QModelIndex &index) const;
+ virtual void restore();
+protected:
+ /*
+ * It will define the custom control item
+ */
+ virtual HbWidget* createCustomWidget();
+
+private:
+ /*
+ * Does not own
+ */
+ HbWidget* mWidget;
+};
+
+#endif // POSSETTINGS_GROUPBOXITEM_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingspluginsloader.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2010 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:Declaration of the Positioning Settings PLugins loader
+ *
+ */
+
+#ifndef PosSettingsPluginsLoader_H
+#define PosSettingsPluginsLoader_H
+
+#include "possettingsadvinterface.h"
+
+#include <QObject>
+#include <e32cmn.h>
+
+class PosSettingsPluginsLoader
+ {
+
+public:
+ /**
+ * Constructor
+ */
+ PosSettingsPluginsLoader();
+ /**
+ * Destructor
+ */
+ ~PosSettingsPluginsLoader();
+ /*
+ * Detects & loads the plugins that implement the
+ * PosSettingsAdvInterface class
+ */
+ QList<PosSettingsAdvInterface*> loadPlugins();
+private:
+ /**
+ * Reads the cenrep key value to obtain the default order in which
+ * the positioning settings plugins need to be loaded.
+ */
+ void ParseCenRepKey();
+
+private:
+ /**
+ * Contains list of plugin's dll name in the order in which it
+ * is supposed to be displayed in the advanced view
+ */
+ QList<QString> mDllNameList;
+
+
+ };
+
+#endif //PosSettingsPluginsLoader_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/inc/possettingspushbuttonitem.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2010 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 class provides custom list item
+* for the push button on the DataForm
+*/
+
+#ifndef POSSETTINGS_PUSHBUTTONITEM_H
+#define POSSETTINGS_PUSHBUTTONITEM_H
+
+#include <QObject>
+
+#include <hbdataformviewitem.h>
+#include <hbdataformmodelitem.h>
+
+const int PushButtonItem = HbDataFormModelItem::CustomItemBase+11;
+
+class PosSettingsPushButtonItem : public HbDataFormViewItem
+{
+Q_OBJECT
+
+public: //constructor and destructor
+ PosSettingsPushButtonItem(QGraphicsItem *parent);
+ ~PosSettingsPushButtonItem();
+public: //from HbDataFormViewItem
+ /*
+ * It will return custom control item
+ */
+ virtual HbAbstractViewItem* createItem();
+ virtual bool canSetModelIndex(const QModelIndex &index) const;
+ virtual void restore();
+protected:
+ /*
+ * It will define the custom control item
+ */
+ virtual HbWidget* createCustomWidget();
+
+private:
+ /*
+ * Does not own
+ */
+ HbWidget* mWidget;
+};
+
+#endif // POSSETTINGS_PUSHBUTTONITEM_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/possettings.qrc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+<RCC>
+ <qresource prefix="/data" >
+ <file alias="pushbuttoncustomviewitem.css">resources/pushbuttoncustomviewitem.css</file>
+ <file alias="groupboxcustomviewitem.css">resources/groupboxcustomviewitem.css</file>
+ <file alias="checkcustomviewitem.css">resources/checkcustomviewitem.css</file>
+ </qresource>
+</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/possettingsengine.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,74 @@
+#
+# Copyright (c) 2010 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: PosSettingsEngine pro file
+#
+
+TEMPLATE = lib
+TARGET = possettingsengine
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+CONFIG += hb
+
+
+
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RCC_DIR = rcc
+RESOURCES = possettings.qrc
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+LIBS += -lcpframework \
+ -llbt \
+ -llbs \
+ -llbtmanager \
+ -leposmodset \
+ -lepos_suplsettings \
+ -lxqsettingsmanager
+
+# Input
+SOURCES += src/possettingspluginsloader.cpp \
+ src/possettingspushbuttonitem.cpp \
+ src/possettingsgroupboxitem.cpp \
+ src/possettingsform.cpp \
+ src/possettingsview.cpp \
+ src/possettingsengineprivate.cpp \
+ src/possettingsengine.cpp \
+ src/possettingsadvview.cpp \
+ src/possettingsadvop.cpp \
+ src/checkcustomviewitem.cpp
+HEADERS += inc/possettingspluginsloader.h \
+ inc/possettingspushbuttonitem.h \
+ inc/possettingsgroupboxitem.h \
+ inc/possettingsform.h \
+ inc/possettingsengineprivate.h \
+ inc/possettingsengine.h \
+ inc/possettingscommon.h \
+ inc/possettingsadvview.h \
+ ../inc/possettingsadvop.h \
+ inc/checkcustomviewitem.h
+symbian: {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += BUILD_POSSETTINGS
+ DEFINES += PLUGINUID3=0x2002C319
+ TARGET.UID3 = 0x2002C319
+}
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>"
+
+TARGET.CAPABILITY = All -TCB
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/resources/checkcustomviewitem.css Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+CheckCustomViewItem::dataItem_ContentWidget
+{
+ left: 0.0un;
+ right: var(hb-param-margin-gene-right);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/resources/groupboxcustomviewitem.css Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,6 @@
+PosSettingsGroupboxItem::dataItem_ContentWidget
+{
+ left: 0.0un;
+ right: var(hb-param-margin-gene-right);
+ top: 0.0un;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/resources/pushbuttoncustomviewitem.css Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+PosSettingsPushButtonItem::dataItem_ContentWidget
+{
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-right);
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/checkcustomviewitem.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0""
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include "checkcustomviewitem.h"
+#include <hbdataformmodelitem.h>
+#include <hbdataformmodel.h>
+#include <hbabstractitemview.h>
+#include <QMetaProperty>
+
+
+CheckCustomViewItem::CheckCustomViewItem(QGraphicsItem *parent )
+ : HbDataFormViewItem(parent)
+
+{
+}
+CheckCustomViewItem::~CheckCustomViewItem()
+{
+}
+HbAbstractViewItem* CheckCustomViewItem::createItem()
+{
+ return new CheckCustomViewItem(*this);
+}
+bool CheckCustomViewItem::canSetModelIndex(const QModelIndex &index) const
+{
+ int type = index.data(HbDataFormModelItem::ItemTypeRole).toInt();
+ if ( type == HbDataFormModelItem::CheckBoxItem ) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsadvop.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,164 @@
+/*
+ * Copyright (c) 2010 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: Implementation of Positioning settings advanced
+ * operation class.
+ *
+ */
+
+#include "possettingsadvop.h"
+#include "possettingsadvview.h"
+#include <QDebug>
+#include <hbdataformviewitem.h>
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::PosSettingsAdvOp()
+// Constructor
+//---------------------------------------------------------------------
+PosSettingsAdvOp::PosSettingsAdvOp(HbView* view) : mView(view)
+ {
+ qDebug() << "+ PosSettingsAdvOp::PosSettingsAdvOp()";
+ mDataForm = qobject_cast<HbDataForm*>(mView->widget());
+ mDataFormModel = static_cast<HbDataFormModel*>(mDataForm->model());
+ qDebug() << "- PosSettingsAdvOp::PosSettingsAdvOp()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::~PosSettingsAdvOp()
+// Destructor
+//---------------------------------------------------------------------
+PosSettingsAdvOp::~PosSettingsAdvOp()
+ {
+ qDebug() << "+ PosSettingsAdvOp::~PosSettingsAdvOp()";
+ qDebug() << "- PosSettingsAdvOp::~PosSettingsAdvOp()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::appendDataFormItem
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::appendDataFormItem(HbDataFormModelItem *data,
+ HbDataFormModelItem *parent)
+ {
+ qDebug() << "+ PosSettingsAdvOp::appendDataFormItem()";
+ mDataFormModel->appendDataFormItem(data, parent);
+ qDebug() << "- PosSettingsAdvOp::appendDataFormItem()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::addConnection
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::addConnection(HbDataFormModelItem *item,
+ const char* signal, QObject *receiver, const char* slot)
+ {
+ qDebug() << "+ PosSettingsAdvOp::addConnection()";
+ mDataForm->addConnection(item, signal, receiver, slot);
+ qDebug() << "- PosSettingsAdvOp::addConnection()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::addAction
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::addAction(HbAction *action,
+ HbView::ActionContainer preferedActionContainer)
+ {
+ qDebug() << "+ PosSettingsAdvOp::addAction()";
+ mView->addAction(action, preferedActionContainer);
+ qDebug() << "- PosSettingsAdvOp::addAction()";
+ }
+
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::indexFromItem
+//
+//---------------------------------------------------------------------
+QModelIndex PosSettingsAdvOp::indexFromItem(const HbDataFormModelItem * item)
+ {
+ qDebug() << "+ PosSettingsAdvOp::indexFromItem()";
+ qDebug() << "- PosSettingsAdvOp::indexFromItem()";
+ return mDataFormModel->indexFromItem(item);
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::removeConnection
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::removeConnection(HbDataFormModelItem *item,
+ const char* signal, QObject *receiver, const char* slot)
+ {
+ qDebug() << "+ PosSettingsAdvOp::removeConnection()";
+ mDataForm->removeConnection(item, signal, receiver, slot);
+ qDebug() << "- PosSettingsAdvOp::removeConnection()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::setExpanded
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::setExpanded(const QModelIndex &index, bool expanded)
+ {
+ qDebug() << "+ PosSettingsAdvOp::setExpanded()";
+ mDataForm->setExpanded( index,expanded);
+ qDebug() << "- PosSettingsAdvOp::setExpanded()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::isExpanded
+//
+//---------------------------------------------------------------------
+bool PosSettingsAdvOp::isExpanded(const QModelIndex &index)const
+ {
+ qDebug() << "+ PosSettingsAdvOp::isExpanded()";
+ qDebug() << "- PosSettingsAdvOp::isExpanded()";
+ return mDataForm->isExpanded(index);
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::removeItem
+//
+//---------------------------------------------------------------------
+bool PosSettingsAdvOp::removeItem(HbDataFormModelItem* item)
+ {
+ qDebug() << "+ PosSettingsAdvOp::removeItem()";
+ qDebug() << "- PosSettingsAdvOp::removeItem()";
+ return mDataFormModel->removeItem(item);
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::removeItem
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::setItemPrototypes(
+ QList<HbAbstractViewItem *> &protoTypeList)
+ {
+ qDebug() << "+ PosSettingsAdvOp::setItemPrototypes()";
+ QList<HbAbstractViewItem *> oldProtoTypeList = mDataForm->itemPrototypes();
+ oldProtoTypeList.append(protoTypeList);
+ mDataForm->setItemPrototypes(oldProtoTypeList);
+ qDebug() << "- PosSettingsAdvOp::setItemPrototypes()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvOp::itemPrototypes
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvOp::itemPrototypes(
+ QList<HbAbstractViewItem *> &protoTypeList)
+ {
+ qDebug() << "+ PosSettingsAdvOp::itemPrototypes()";
+ protoTypeList = mDataForm->itemPrototypes();
+ qDebug() << "- PosSettingsAdvOp::itemPrototypes()";
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsadvview.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,163 @@
+/*
+ * Copyright (c) 2010 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:Implementation of the Positioning Settings Advanced View class
+ *
+ */
+
+#include "possettingsadvview.h"
+#include "possettingspluginsloader.h"
+#include "possettingsgroupboxitem.h"
+#include <QDebug>
+#include <QFileSystemWatcher>
+
+#ifdef Q_OS_SYMBIAN
+#define PLUGIN_PATH QString("\\resource\\qt\\plugins\\positioningsettings")
+
+#else
+#define PLUGIN_PATH QString("C:\\qt\\plugins\\positioningsettings")
+#endif
+
+//---------------------------------------------------------------------
+// PosSettingsAdvView::PosSettingsAdvView()
+// Constructor
+//---------------------------------------------------------------------
+PosSettingsAdvView::PosSettingsAdvView( QGraphicsItem *parent ):
+CpBaseSettingView(0,parent)
+ {
+ qDebug() << "+ PosSettingsAdvView::PosSettingsAdvView()";
+ // create instance of HbDataForm
+ mAdvancedDataForm = new HbDataForm();
+
+ // Create an instance of HbDataFormModel
+ HbDataFormModel* advancedDataFormModel = new HbDataFormModel();
+
+ // set the model
+ mAdvancedDataForm->setModel( advancedDataFormModel );
+
+ // set the Advanced settings form for this view
+ this->setWidget( mAdvancedDataForm );
+
+ //set prototype for custom controls
+ QList<HbAbstractViewItem *> protoTypeList = mAdvancedDataForm->itemPrototypes();
+ protoTypeList.append(new PosSettingsGroupboxItem(this));
+ mAdvancedDataForm->setItemPrototypes(protoTypeList);
+
+ //Heading
+ mHeading = advancedDataFormModel->appendDataFormItem(static_cast<HbDataFormModelItem::DataItemType>(GroupboxItem),
+ QString(),
+ advancedDataFormModel->invisibleRootItem());
+ mHeading->setContentWidgetData("heading",
+ hbTrId("txt_loe_subtitle_advanced_positioning_settings"));
+
+
+
+ // Create an instance of PosSettingsAdvancedOperation
+ mAdvancedOperation = new PosSettingsAdvOp(this);
+
+
+ mPluginsLoader = new PosSettingsPluginsLoader();
+ // load the plugins
+ mPluginsList = mPluginsLoader->loadPlugins();
+
+ // for each plugin detected call the plugin's initialize method
+
+ int cnt = mPluginsList.count();
+ int error = 0;
+ for(int i=0;i<cnt;i++)
+ {
+ error = mPluginsList[i]->initialise(mAdvancedOperation );
+ //pluging is unloaded if the there is an error, with exception for not found.
+ if (error != 0 && error != -1)
+ {
+ delete mPluginsList[i];
+ mPluginsList[i] = 0;
+ mPluginsList.removeAt(i);
+ --cnt;
+ --i;
+ }
+ }
+ // create a QFileSystemWatcher instance
+ mWatcher = new QFileSystemWatcher();
+ mWatcher->addPath(PLUGIN_PATH);
+
+ // make connection to update the advanced view on change in the plugins
+ QObject::connect(mWatcher,SIGNAL(fileChanged ( const QString & path )),
+ this,SLOT(updateAdvView()));
+ qDebug() << "- PosSettingsAdvView::PosSettingsAdvView()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvView::~PosSettingsAdvView()
+// Destructor
+//---------------------------------------------------------------------
+PosSettingsAdvView::~PosSettingsAdvView()
+ {
+ qDebug() << "+ PosSettingsAdvView::~PosSettingsAdvView()";
+ // mAdvancedDataForm->removeAllConnection();
+ delete mAdvancedDataForm;
+ mAdvancedDataForm = NULL;
+
+
+ delete mAdvancedOperation;
+ mAdvancedOperation = NULL;
+
+ delete mPluginsLoader;
+ mPluginsLoader = NULL;
+
+ // delete the list of plugins
+ foreach( PosSettingsAdvInterface *plugin, mPluginsList )
+ {
+ delete plugin;
+ plugin = 0;
+ }
+ mPluginsList.clear();
+
+ //ToDo: disconnect mWatcher'signal
+ delete mWatcher;
+ mWatcher = NULL;
+ qDebug() << "- PosSettingsAdvView::~PosSettingsAdvView()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsAdvView::updateAdvView()
+//
+//---------------------------------------------------------------------
+void PosSettingsAdvView::updateAdvView()
+ {
+ qDebug() << "+ PosSettingsAdvView::updateAdvView()";
+ // clear the plugins list
+ foreach( PosSettingsAdvInterface *plugin, mPluginsList )
+ {
+ delete plugin;
+ plugin= NULL;
+ }
+ mPluginsList.clear();
+
+ // reload the plugins again
+ mPluginsList = mPluginsLoader->loadPlugins();
+
+ int count = mPluginsList.count();
+
+ // for each plugin detected call the plugin's initialize method
+ for( int i=0;i<count;++i )
+ {
+ int error = mPluginsList[i]->initialise( mAdvancedOperation );
+ if( error != KErrNone )
+ {
+ delete mPluginsList[i];
+ mPluginsList[i] =NULL;
+ }
+ }
+ qDebug() << "- PosSettingsAdvView::updateAdvView()";
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsengine.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,174 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings engine class.
+*
+*/
+
+
+#include "possettingsengine.h"
+#include "possettingscrkey.h"
+#include <QDebug>
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
+
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::PosSettingsEngine()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+PosSettingsEngine::PosSettingsEngine()
+ {
+ qDebug() << "+ PosSettingsEngine::PosSettingsEngine()";
+ d_ptr = new PosSettingsEnginePrivate( *this );
+ qDebug() << "- PosSettingsEngine::PosSettingsEngine()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::~PosSettingsEngine()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+PosSettingsEngine::~PosSettingsEngine()
+ {
+ qDebug() << "+ PosSettingsEngine::~PosSettingsEngine()";
+ delete d_ptr;
+ d_ptr = NULL;
+ qDebug() << "- PosSettingsEngine::~PosSettingsEngine()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::isPositionTechnologyAvailable()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsEngine::isPositionTechnologyAvailable(
+ PositionTechnology posTechnology )
+ {
+ qDebug() << "+ PosSettingsEngine::isPositionTechnologyAvailable()";
+ bool err = d_ptr->isPositionTechnologyAvailable( posTechnology );
+ qDebug() << "- PosSettingsEngine::isPositionTechnologyAvailable() retvat: " << err;
+ return err;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::setPositionTechnologyState()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSettingsEngine::setPositionTechnologyState(
+ State posTechnologyState,
+ PositionTechnology posTechnology )
+ {
+ qDebug() << "+ PosSettingsEngine::setPositionTechnologyState()";
+ qDebug() << "posTechnologyState: " << posTechnologyState;
+ int ret = d_ptr->setPositionTechnologyState( posTechnologyState,
+ posTechnology );
+ qDebug() << "- PosSettingsEngine::setPositionTechnologyState()" << ret;
+ return ret;
+ }
+
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::isPositionTechnologyEnabled()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsEngine::isPositionTechnologyEnabled(
+ PositionTechnology posTechnology )
+ {
+ qDebug() << "+ PosSettingsEngine::isPositionTechnologyEnabled()";
+ bool ret = d_ptr->isPositionTechnologyEnabled( posTechnology );
+ qDebug() << "- PosSettingsEngine::isPositionTechnologyEnabled() retval= " << ret;
+ return ret;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::setBackGroundPositioningState()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSettingsEngine::setBackGroundPositioningState(
+ State backGroundPosState )
+ {
+ qDebug() << "+ PosSettingsEngine::setBackGroundPositioningState()";
+ qDebug() << "backGroundPosState: " << backGroundPosState;
+ int ret = d_ptr->setBackGroundPositioningState( backGroundPosState );
+ qDebug() << "- PosSettingsEngine::setBackGroundPositioningState() retval= " << ret;
+ return ret;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::isPositionTechnologyEnabled()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsEngine::isBackGroundPositioningEnabled()
+ {
+ qDebug() << "+ PosSettingsEngine::isBackGroundPositioningEnabled()";
+ bool ret = d_ptr->isBackGroundPositioningEnabled();
+ qDebug() << "- PosSettingsEngine::isBackGroundPositioningEnabled() retval= " << ret;
+ return ret;
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsEngine::backgroundPositioningStatus
+// ---------------------------------------------------------------------------
+bool PosSettingsEngine::cRBackgroundPositioningStatus()
+ {
+ qDebug() << "+ PosSettingsEngine::isBackGroundPositioningEnabled()";
+ // create a XQSettingsManager instance
+ XQSettingsManager* manager = new XQSettingsManager();
+ // create a XQSettingsKey object to read the cenrep key value
+ XQSettingsKey cenrepKey(XQSettingsKey::TargetCentralRepository,
+ KCRUidPositioningSettings.iUid, KPositioningSettingsBackgroundServicesStatus);
+ // read the cenrep key value
+ QVariant key(manager->readItemValue(cenrepKey,XQSettingsManager::TypeInt));
+ // convert the key value to string
+ int keyIntValue = key.toInt();
+
+ delete manager;
+ manager = 0;
+
+ qDebug() << "- PosSettingsEngine::cRBackgroundPositioningStatus()";
+ return keyIntValue;
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsEngine::setCRBackgroundPositioningStatus
+// ---------------------------------------------------------------------------
+void PosSettingsEngine::setCRBackgroundPositioningStatus(State backGroundPosState)
+ {
+ qDebug() << "+ PosSettingsEngine::isBackGroundPositioningEnabled()";
+ // create a XQSettingsManager instance
+ XQSettingsManager* manager = new XQSettingsManager();
+ // create a XQSettingsKey object to read the cenrep key value
+ XQSettingsKey cenrepKey(XQSettingsKey::TargetCentralRepository,
+ KCRUidPositioningSettings.iUid, KPositioningSettingsBackgroundServicesStatus);
+
+ // write the cenrep key value
+ if(backGroundPosState == StateEnable)
+ QVariant key(manager->writeItemValue(cenrepKey,QVariant(1)));
+ else
+ QVariant key(manager->writeItemValue(cenrepKey,QVariant(0)));
+
+ delete manager;
+ manager = 0;
+ qDebug() << "- PosSettingsEngine::setCRBackgroundPositioningStatus()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEngine::handlePositionTechnologyChange()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSettingsEngine::handlePositionTechnologyChange()
+ {
+ qDebug() << "+ PosSettingsEngine::handlePositionTechnologyChange()";
+ emit positionTechnologyChange();
+ qDebug() << "- PosSettingsEngine::handlePositionTechnologyChange()";
+ }
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsengineprivate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,329 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings engine private class.
+*
+*/
+
+#include "possettingsengineprivate.h"
+#include "possettingsengine.h"
+#include <qglobal.h>
+#include <EPos_CSuplSettings.h>
+#include <lbtcommon.h>
+#include <EPos_CPosModules.h>
+#include <EPos_CPosModuleIdList.h>
+#include <EPos_CPosModuleUpdate.h>
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::PosSettingsEnginePrivate()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+PosSettingsEnginePrivate::PosSettingsEnginePrivate(
+ PositionTechnologyChangeObserver&
+ posTechChangeObserver):
+ mPosTechChangeObserver(
+ posTechChangeObserver )
+ {
+ // Open session to LBT server.
+ int error = mLbtServer.Connect();
+ if( error != KErrNone )
+ {
+ throw( error );
+ }
+ //Open subsession to LBT server.
+ error = mLbtManager.Open( mLbtServer );
+ if( error != KErrNone )
+ {
+ throw( error );
+ }
+ QT_TRAP_THROWING( mSuplSettings = CSuplSettings::NewL();
+ mPosModules = CPosModules::OpenL();
+
+ populatePsyModuleInfoListL();
+ // Get back ground position status
+ GetBackGroundPositioingStateL();
+ // Register for settings change.
+ mPosModules->SetObserverL( *this )
+ );
+ }
+
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::~PosSettingsEnginePrivate()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+PosSettingsEnginePrivate::~PosSettingsEnginePrivate()
+ {
+ mLbtManager.Close();
+ mLbtServer.Close();
+ delete mSuplSettings;
+ mSuplSettings = NULL;
+ // remove observer
+ mPosModules->RemoveObserver();
+ delete mPosModules;
+ mPosModules = NULL;
+
+ mPsyModuleInfoList.Close();
+ }
+
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::isPositionTechnologyAvailable()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsEnginePrivate::isPositionTechnologyAvailable(
+ PositionTechnology posTechnology )
+ {
+ // Iterate through the PSY list to find the specified position
+ // technology.
+ TInt cnt = mPsyModuleInfoList.Count();
+ for( TInt i=0;i<cnt;++i )
+ {
+ if( mPsyModuleInfoList[i].mPosTech == posTechnology )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::setPositionTypeState()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSettingsEnginePrivate::setPositionTechnologyState(
+ State posTechnologyState,
+ PositionTechnology posTechnology )
+ {
+ // If the specified position technology is unavailable, return error.
+ if( !isPositionTechnologyAvailable( posTechnology ) )
+ {
+ return KErrNotFound;
+ }
+
+ int error = KErrNone;
+ TRAP( error,setPositionTechnologyStateL( posTechnologyState,posTechnology ) );
+ return error;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::isPositionTechnologyEnabled()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsEnginePrivate::isPositionTechnologyEnabled(
+ PositionTechnology posTechnology )
+ {
+ // Iterate through the PSY info list to find specified position
+ // technology and its corresponding state.
+ TInt cnt = mPsyModuleInfoList.Count();
+ for( TInt i=0;i<cnt;++i )
+ {
+ if( mPsyModuleInfoList[i].mPosTech == posTechnology &&
+ mPsyModuleInfoList[i].mState == StateEnable )
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::setBackGroundPositioningState()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSettingsEnginePrivate::setBackGroundPositioningState(
+ State backGroundPosState )
+ {
+ // Check if any of the position technology are available.
+ if( !mPsyModuleInfoList.Count() )
+ {
+ return KErrNotSupported;
+ }
+ int error = KErrNone;
+ // Change the state of back ground positioning only if its current
+ // state is different from the requested state.
+ if( backGroundPosState != mBackGroundPositioningState )
+ {
+ TRAP( error,setBackGroundPositioningStateL( backGroundPosState ) );
+ }
+ return error;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::isBackGroundPositioningEnabled()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsEnginePrivate::isBackGroundPositioningEnabled()
+ {
+ if( mBackGroundPositioningState == StateEnable )
+ {
+ return true;
+ }
+ return false;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::HandleSettingsChangeL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSettingsEnginePrivate::HandleSettingsChangeL(
+ TPosModulesEvent aEvent )
+ {
+ // Reset the module info list and repopulate again.
+ mPsyModuleInfoList.Reset();
+ populatePsyModuleInfoListL();
+
+ if( aEvent.iType == EPosModulesEventModuleInstalled || aEvent.iType == EPosModulesEventModuleRemoved
+ || aEvent.iType == EPosModulesEventVisibilityChanged )
+ {
+ mPosTechChangeObserver.handlePositionTechnologyChange();
+ }
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::setPositionTechnologyStateL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSettingsEnginePrivate::setPositionTechnologyStateL(
+ State posTechnologyState,
+ PositionTechnology posTechnology )
+ {
+ CPosModuleUpdate* updateParams = CPosModuleUpdate::NewLC();
+
+ if( posTechnologyState == StateEnable )
+ {
+ updateParams->SetUpdateAvailability( ETrue );
+ }
+ else
+ {
+ updateParams->SetUpdateAvailability( EFalse );
+ }
+ TInt cnt = mPsyModuleInfoList.Count();
+ for( TInt i=0;i<cnt;++i )
+ {
+ // Change the state only if position technology of PSY matches
+ // with the position technology specified and if the state of
+ // the PSY is different from the requested state.
+ if( mPsyModuleInfoList[i].mPosTech == posTechnology &&
+ mPsyModuleInfoList[i].mState != posTechnologyState )
+ {
+ mPosModules->UpdateModuleL( mPsyModuleInfoList[i].mPsyModuleId,
+ *updateParams );
+ mPsyModuleInfoList[i].mState = posTechnologyState;
+ }
+ }
+ CleanupStack::PopAndDestroy( updateParams );
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::setBackGroundPositioningStateL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSettingsEnginePrivate::setBackGroundPositioningStateL(
+ State backGroundPosState )
+ {
+ if( backGroundPosState == StateEnable )
+ {
+ mLbtManager.SetTriggeringMechanismStateL(
+ ETriggeringMechanismOn );
+ User::LeaveIfError( mSuplSettings->SetSuplTriggeredServiceStatus(
+ CSuplSettings::ESuplTriggerOn ) );
+ mBackGroundPositioningState = StateEnable;
+ }
+ else
+ {
+ mLbtManager.SetTriggeringMechanismStateL(
+ ETriggeringMechanismOff );
+ User::LeaveIfError( mSuplSettings->SetSuplTriggeredServiceStatus(
+ CSuplSettings::ESuplTriggerOff ) );
+ mBackGroundPositioningState = StateDisable;
+ }
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::populatePsyModuleInfoListL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSettingsEnginePrivate::populatePsyModuleInfoListL()
+ {
+ CPosModuleIdList* idList = mPosModules->ModuleIdListLC();
+ TInt cnt = idList->Count();
+ for ( TInt i = 0; i < cnt; ++i )
+ {
+ TPositionModuleInfo moduleInfo;
+ mPosModules->GetModuleInfoL( (*idList)[i], moduleInfo );
+
+ // Psy module info hold the information regarding PSY that are
+ // essential for our operation.
+ PsyModuleInfo psyModuleInfo;
+
+ // Set the module Id.
+ psyModuleInfo.mPsyModuleId = moduleInfo.ModuleId();
+
+ // Set position technology type.
+ if( moduleInfo.TechnologyType() == TPositionModuleInfo::ETechnologyTerminal ||
+ moduleInfo.TechnologyType() == TPositionModuleInfo::ETechnologyAssisted )
+ {
+ psyModuleInfo.mPosTech = PositionTechnologyGps;
+ }
+ else if ( moduleInfo.TechnologyType() == TPositionModuleInfo::ETechnologyNetwork )
+ {
+ psyModuleInfo.mPosTech = PositionTechnologyNetwork;
+ }
+
+ // Set state of Psy.
+ if( moduleInfo.IsAvailable() )
+ {
+ psyModuleInfo.mState = StateEnable;
+ }
+ else
+ {
+ psyModuleInfo.mState = StateDisable;
+ }
+
+ mPsyModuleInfoList.Append( psyModuleInfo );
+ }
+ CleanupStack::PopAndDestroy( idList );
+ }
+
+
+//---------------------------------------------------------------------
+// PosSettingsEnginePrivate::GetBackGroundPositioingStateL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSettingsEnginePrivate::GetBackGroundPositioingStateL()
+ {
+ // Get the SUPL service status.
+ CSuplSettings::TSuplTriggerStatus suplTriggerStatus;
+ User::LeaveIfError( mSuplSettings->GetSuplTriggeredServiceStatus(
+ suplTriggerStatus ) );
+
+ // Get LBT service status.
+ TLbtTriggeringSystemManagementSettings triggeringSystemSettings;
+ mLbtManager.GetTriggeringSystemSettingsL( triggeringSystemSettings );
+
+ // Back ground positioning state is considered to be enabled only
+ // if both LBT and SUPL services are enabled.
+ if( suplTriggerStatus == CSuplSettings::ESuplTriggerOn &&
+ triggeringSystemSettings.TriggeringMechanismState() ==
+ ETriggeringMechanismOn )
+ {
+ mBackGroundPositioningState = StateEnable;
+ }
+ else
+ {
+ mBackGroundPositioningState = StateDisable;
+ }
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsform.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,464 @@
+/*
+* Copyright (c) 2010 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 class is for first basic view for positioning settings
+*
+*/
+
+
+#include "possettingsform.h"
+#include "possettingspushbuttonitem.h"
+#include "possettingsgroupboxitem.h"
+#include "checkcustomviewitem.h"
+#include "possettingsengine.h"
+#include "possettingsadvview.h"
+#include <QDebug>
+#include <hbdataformmodelitem.h>
+#include <hbdataformmodel.h>
+#include <hbinstance.h>
+#include <hbaction.h>
+#include <hbstyleloader.h>
+
+static const QString FILE_PATH_CSS = ":/data";
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::PosSettingsForm
+// Constructor
+// ---------------------------------------------------------------------------
+PosSettingsForm::PosSettingsForm(
+ PosSettingsEngine& settingsEngine,
+ QGraphicsItem *parent ):
+ HbDataForm( parent ),mSettingsEngine( settingsEngine )
+ {
+ qDebug() << "+ PosSettingsForm::PosSettingsForm()";
+ //initialize the form model
+ initSettingModel();
+
+ // slots for required signals on required controls
+ addConnection( mGpsPosType, SIGNAL(released()),
+ this, SLOT(onPressedGps()) );
+ addConnection( mWirelessPosType, SIGNAL(released()),
+ this, SLOT(onPressedWireless()) );
+ addConnection( mBgPosType, SIGNAL(released()),
+ this, SLOT(onPressedBackground()) );
+ addConnection( mAdvancedSettings, SIGNAL(clicked()),
+ this, SLOT(onPressedAdvanced()) );
+
+ //to check runtime if any positioning technology installed/removed or if its visibility is changed.
+ connect(&mSettingsEngine, SIGNAL(positionTechnologyChange()),this, SLOT(validateVisibility()) );
+
+ //validate visibility of controls based on visibility of positioning technology
+ validateVisibility();
+ qDebug() << "- PosSettingsForm::PosSettingsForm()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::~PosSettingsForm
+// Destructor
+// ---------------------------------------------------------------------------
+PosSettingsForm::~PosSettingsForm()
+ {
+ qDebug() << "+ PosSettingsForm::PosSettingsForm()";
+ // Remove custom layouts
+ HbStyleLoader::unregisterFilePath(FILE_PATH_CSS);
+
+ //TODO Disconnect of mSettingsEngine positionTechnologyChange
+
+ removeConnection( mAdvancedSettings, SIGNAL(clicked()),
+ this, SLOT(onPressedAdvanced()) );
+ removeConnection( mGpsPosType, SIGNAL(released),
+ this, SLOT(onPressedGps()) );
+ removeConnection( mWirelessPosType, SIGNAL(released),
+ this, SLOT(onPressedWireless()) );
+ removeConnection( mBgPosType, SIGNAL(released),
+ this, SLOT(onPressedBackground()) );
+
+ //ToDo: removeAllConnection crashes with Kern-Exec3 error
+ //removeAllConnection();
+ qDebug() << "- PosSettingsForm::PosSettingsForm()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::initSettingModel
+// ---------------------------------------------------------------------------
+void PosSettingsForm::initSettingModel()
+ {
+ qDebug() << "+ PosSettingsForm::initSettingModel()";
+ HbDataFormModel *model = new HbDataFormModel(0);
+ this->setModel(model);
+
+ //set prototype for custom controls
+ QList<HbAbstractViewItem *> protoTypeList = this->itemPrototypes();
+ protoTypeList.append(new PosSettingsPushButtonItem(this) );
+ protoTypeList.append(new CheckCustomViewItem());
+ protoTypeList.append(new PosSettingsGroupboxItem(this));
+ this->setItemPrototypes(protoTypeList);
+
+ // Set custom layouts
+ HbStyleLoader::registerFilePath(FILE_PATH_CSS);
+
+ //Heading
+ mHeading = model->appendDataFormItem(static_cast<HbDataFormModelItem::DataItemType>(GroupboxItem),
+ QString(),
+ model->invisibleRootItem());
+ mHeading->setContentWidgetData("heading",
+ hbTrId("txt_loe_subtitle_positioning_settings"));
+
+
+
+ //GPS
+ createPosTypeModelItem(PosTypeIndexGps);
+ model->appendDataFormItem(mGpsPosType, model->invisibleRootItem());
+ //Wireless
+ createPosTypeModelItem(PosTypeIndexWireless);
+ model->appendDataFormItem(mWirelessPosType, model->invisibleRootItem());
+ //Background
+ createPosTypeModelItem(PosTypeIndexBackground);
+ model->appendDataFormItem(mBgPosType, model->invisibleRootItem());
+
+ //Advance
+ mAdvancedSettings = model->appendDataFormItem(static_cast<HbDataFormModelItem::DataItemType>(PushButtonItem),
+ QString(),
+ model->invisibleRootItem());
+ mAdvancedSettings->setContentWidgetData("text",
+ hbTrId("txt_loe_button_advanced"));
+
+
+ setPosTypeState(PosTypeIndexGps);
+ setPosTypeState(PosTypeIndexWireless);
+ setPosTypeState(PosTypeIndexBackground);
+ qDebug() << "- PosSettingsForm::initSettingModel()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::onPressedAdvanced
+// ---------------------------------------------------------------------------
+void PosSettingsForm::onPressedAdvanced()
+{
+ qDebug() << "+ PosSettingsForm::onPressedAdvanced()";
+ mAdvancedView = new PosSettingsAdvView();
+ HbMainWindow* mainWindow = hbInstance->allMainWindows().at(0);
+
+ mainWindow->addView(mAdvancedView);
+ mainWindow->setCurrentView(mAdvancedView);
+
+ //take back action from controlpanel main window.
+ mBackAction = new HbAction(Hb::BackNaviAction ,mAdvancedView);
+ mAdvancedView->setNavigationAction(mBackAction);
+
+ connect(mBackAction, SIGNAL(triggered()), this, SLOT(closeAdvancedView()));
+ mAdvancedView->show();
+ qDebug() << "- PosSettingsForm::onPressedAdvanced()";
+}
+// ---------------------------------------------------------------------------
+// PosSettingsForm::closeAdvancedView
+// ---------------------------------------------------------------------------
+//
+void PosSettingsForm::closeAdvancedView()
+ {
+ qDebug() << "+ PosSettingsForm::closeAdvancedView()";
+ disconnect(mBackAction, SIGNAL(triggered()), this, SLOT(closeAdvancedView()));
+
+ HbMainWindow* mainWindow = hbInstance->allMainWindows().at(0);
+ mainWindow->removeView(mAdvancedView);
+
+ mAdvancedView->setParent(NULL);
+
+ delete mAdvancedView;
+ mAdvancedView = NULL;
+
+ // refresh first view
+ setPosTypeState( PosTypeIndexGps);
+ setPosTypeState( PosTypeIndexWireless);
+ setPosTypeState( PosTypeIndexBackground);
+ validatePosTypeVisibility(PosTypeIndexBackground);
+ qDebug() << "- PosSettingsForm::closeAdvancedView()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::onPressedGps
+// ---------------------------------------------------------------------------
+void PosSettingsForm::onPressedGps()
+ {
+ qDebug() << "+ PosSettingsForm::onPressedGps()";
+ validatePosTypeVisibility(PosTypeIndexBackground);
+
+ int state = mGpsPosType->contentWidgetData("checkState").toInt();
+ if(state == Qt::Checked)
+ { //if Gps enable
+ mSettingsEngine.setPositionTechnologyState(StateEnable, PositionTechnologyGps);
+ }
+ else
+ { //if Gps disable
+ mSettingsEngine.setPositionTechnologyState(StateDisable, PositionTechnologyGps);
+ }
+ qDebug() << "- PosSettingsForm::onPressedGps()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::onPressedWireless
+// ---------------------------------------------------------------------------
+void PosSettingsForm::onPressedWireless()
+ {
+ qDebug() << "+ PosSettingsForm::onPressedWireless()";
+ validatePosTypeVisibility(PosTypeIndexBackground);
+ int state = mWirelessPosType->contentWidgetData("checkState").toInt();
+ if(state == Qt::Checked)
+ {
+ //if Wireless enable
+ mSettingsEngine.setPositionTechnologyState(StateEnable, PositionTechnologyNetwork);
+ }
+ else
+ { //if Wireless disable
+ mSettingsEngine.setPositionTechnologyState(StateDisable, PositionTechnologyNetwork);
+ }
+ qDebug() << "- PosSettingsForm::onPressedWireless()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::onPressedBackground
+// ---------------------------------------------------------------------------
+void PosSettingsForm::onPressedBackground()
+ {
+ qDebug() << "+ PosSettingsForm::onPressedBackground()";
+ int state = mBgPosType->contentWidgetData("checkState").toInt();
+ if(state == Qt::Checked)
+ {
+ //if Bg enable
+ mSettingsEngine.setBackGroundPositioningState(StateEnable);
+ mSettingsEngine.setCRBackgroundPositioningStatus(StateEnable);
+ }
+ else
+ { //if Bg disable;
+ mSettingsEngine.setBackGroundPositioningState(StateDisable);
+ mSettingsEngine.setCRBackgroundPositioningStatus(StateDisable);
+ }
+ qDebug() << "- PosSettingsForm::onPressedBackground()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::validatePosTypeVisibility
+// ---------------------------------------------------------------------------
+//
+void PosSettingsForm::validatePosTypeVisibility(PosTypeIndex posTypeModelItemIndex)
+ {
+ qDebug() << "+ PosSettingsForm::validatePosTypeVisibility()";
+ bool valid = false;
+ HbDataFormModelItem* posTypeModelItem = NULL; //does not own
+ int posIndex = posTypeModelItemIndex;
+ switch(posTypeModelItemIndex) {
+ case PosTypeIndexGps: {
+ valid = mSettingsEngine.isPositionTechnologyAvailable(PositionTechnologyGps);
+ posTypeModelItem = mGpsPosType;
+ break;
+ }
+ case PosTypeIndexWireless: {
+ valid = mSettingsEngine.isPositionTechnologyAvailable(PositionTechnologyNetwork);
+ posTypeModelItem = mWirelessPosType;
+ HbDataFormModel* model = static_cast<HbDataFormModel*>(this->model());
+ //if GPS is not there, it will be at position 1
+ if(!model->indexFromItem(mGpsPosType).isValid()) {
+ --posIndex ;
+ }
+ break;
+ }
+ case PosTypeIndexBackground: {
+ //if Gps and Wireless are not marked, then make Background invisible
+ valid = (mGpsPosType->contentWidgetData("checkState").toInt() == Qt::Checked ||
+ mWirelessPosType->contentWidgetData("checkState").toInt() == Qt::Checked);
+ posTypeModelItem = mBgPosType;
+ HbDataFormModel* model = static_cast<HbDataFormModel*>(this->model());
+
+ //if GPS is not there, decremenet position
+ if(!model->indexFromItem(mGpsPosType).isValid()) {
+ --posIndex;
+ }
+ //if Wireless is not there, decremenet position
+ if(!model->indexFromItem(mWirelessPosType).isValid()) {
+ --posIndex;
+ }
+ //if no gps no wireless, quit control-panel application
+ if(posIndex == PosTypeIndexGps-1) {
+ qApp->quit();
+ }
+ break;
+ }
+ default:{
+ break;
+ }
+
+ }
+ qDebug() << "valid =" << valid;
+ insertOrRemovePosTypeModelItem(valid, posTypeModelItem, posTypeModelItemIndex, posIndex);
+ qDebug() << "- PosSettingsForm::validatePosTypeVisibility()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::InsertOrRemovePosTypeModelItem
+// ---------------------------------------------------------------------------
+//
+void PosSettingsForm::insertOrRemovePosTypeModelItem(bool insert, HbDataFormModelItem* posTypeModelItem,
+ PosTypeIndex posTypeModelItemIndex, int posIndex)
+ {
+ qDebug() << "+ PosSettingsForm::insertOrRemovePosTypeModelItem()";
+ HbDataFormModel* model = static_cast<HbDataFormModel*>(this->model());
+ if(!insert) {
+ if(model->indexFromItem(posTypeModelItem).isValid()) {
+ if(model->removeItem(posTypeModelItem)) {
+ //Note: In removeItem, modelitem is removed and then deleted too.
+ // So next time when we want to check if it is present, we have to create dummy modelitem
+ // else with existing handle, we will get kern exec 3 error
+ createPosTypeModelItem(posTypeModelItemIndex);
+ if(posTypeModelItem == mBgPosType) {
+ mSettingsEngine.setBackGroundPositioningState(StateDisable);
+ }
+ }
+ }
+ }
+ else {
+ if(!model->indexFromItem(posTypeModelItem).isValid()) {
+ model->insertDataFormItem(posIndex,posTypeModelItem,model->invisibleRootItem());
+ addPosTypeConnection(posTypeModelItem);
+
+ if(posTypeModelItem == mBgPosType) {
+ //Restore to old state in case of background positioning.
+ if(mSettingsEngine.cRBackgroundPositioningStatus()) {
+ mSettingsEngine.setBackGroundPositioningState(StateEnable);
+ }
+ else {
+ mSettingsEngine.setBackGroundPositioningState(StateDisable);
+ }
+ setPosTypeState(PosTypeIndexBackground);
+ }
+ else //Restore old state of GPS/Wireless
+ setPosTypeState(posTypeModelItemIndex);
+ }
+ }
+ qDebug() << "- PosSettingsForm::insertOrRemovePosTypeModelItem()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::createPosTypeModelItem
+// ---------------------------------------------------------------------------
+//
+void PosSettingsForm::createPosTypeModelItem(PosTypeIndex posTypeModelItemIndex)
+ {
+ qDebug() << "+ PosSettingsForm::createPosTypeModelItem()";
+ HbDataFormModel* model = static_cast<HbDataFormModel*>(this->model());
+ switch(posTypeModelItemIndex) {
+ case PosTypeIndexGps: {
+
+ mGpsPosType = new HbDataFormModelItem(HbDataFormModelItem::CheckBoxItem,
+ QString());
+ mGpsPosType->setData(HbDataFormModelItem::DescriptionRole, hbTrId("txt_loe_info_enable_for_most_accurate_positioning"));
+ mGpsPosType->setContentWidgetData("text", hbTrId("txt_loe_list_gps"));
+ break;
+ }
+ case PosTypeIndexWireless: {
+
+ mWirelessPosType = new HbDataFormModelItem(HbDataFormModelItem::CheckBoxItem,
+ QString());
+ mWirelessPosType->setData(HbDataFormModelItem::DescriptionRole, hbTrId("txt_loe_info_use_wifi_and_mobile_networks_to_get"));
+ mWirelessPosType->setContentWidgetData("text", hbTrId("txt_loe_list_wireless_networks"));
+ break;
+ }
+ case PosTypeIndexBackground:{
+ mBgPosType = new HbDataFormModelItem(HbDataFormModelItem::CheckBoxItem,
+ QString());
+ mBgPosType->setData(HbDataFormModelItem::DescriptionRole, hbTrId("txt_loe_info_enable_applications_and_services_upda"));
+ mBgPosType->setContentWidgetData("text", hbTrId("txt_loe_list_background_positioning"));
+ break;
+ }
+ default: {
+ break;
+ }
+ }
+ qDebug() << "- PosSettingsForm::createPosTypeModelItem()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::validateVisibility
+// ---------------------------------------------------------------------------
+//
+void PosSettingsForm::validateVisibility()
+ {
+ qDebug() << "+ PosSettingsForm::validateVisibility()";
+ validatePosTypeVisibility(PosTypeIndexGps);
+ validatePosTypeVisibility(PosTypeIndexWireless);
+ validatePosTypeVisibility(PosTypeIndexBackground);
+ qDebug() << "- PosSettingsForm::validateVisibility()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::setPosTypeState
+// ---------------------------------------------------------------------------
+void PosSettingsForm::setPosTypeState(PosTypeIndex posTypeModelItemIndex)
+ {
+ qDebug() << "+ PosSettingsForm::setPosTypeState()";
+ int state = Qt::Unchecked;
+ switch(posTypeModelItemIndex){
+ case PosTypeIndexGps: {
+ if(mSettingsEngine.isPositionTechnologyEnabled(PositionTechnologyGps))
+ state = Qt::Checked;
+ mGpsPosType->setContentWidgetData("checkState", state);
+ break;
+ }
+ case PosTypeIndexWireless: {
+ if(mSettingsEngine.isPositionTechnologyEnabled(PositionTechnologyNetwork))
+ state = Qt::Checked;
+ mWirelessPosType->setContentWidgetData("checkState",state);
+ break;
+ }
+ case PosTypeIndexBackground: {
+ if(mSettingsEngine.isBackGroundPositioningEnabled())
+ state = Qt::Checked;
+ mBgPosType->setContentWidgetData("checkState",state);
+ break;
+ }
+ default : {
+ break;
+ }
+ }
+ qDebug() << "- PosSettingsForm::setPosTypeState()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsForm::addPosTypeConnection
+// ---------------------------------------------------------------------------
+void PosSettingsForm::addPosTypeConnection(HbDataFormModelItem* posTypeModelItem)
+ {
+ qDebug() << "+ PosSettingsForm::addPosTypeConnection()";
+ if(posTypeModelItem == mGpsPosType)
+ {
+ addConnection( mGpsPosType, SIGNAL(released()),
+ this, SLOT(onPressedGps()) );
+ qDebug() << "- PosSettingsForm::addPosTypeConnection()";
+ return;
+ }
+
+ if(posTypeModelItem == mWirelessPosType)
+ {
+ addConnection( mWirelessPosType, SIGNAL(released()),
+ this, SLOT(onPressedWireless()) );
+ qDebug() << "- PosSettingsForm::addPosTypeConnection()";
+ return;
+ }
+ if(posTypeModelItem == mBgPosType)
+ {
+ addConnection( mBgPosType, SIGNAL(released()),
+ this, SLOT(onPressedBackground()) );
+ qDebug() << "- PosSettingsForm::addPosTypeConnection()";
+ return;
+ }
+ }
+//EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsgroupboxitem.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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 class provides custom list item for the
+* DataForm
+*
+*/
+
+#include <possettingsgroupboxitem.h>
+#include <hbdataformmodelitem.h>
+#include <hbgroupbox.h>
+#include <hbabstractitemview.h>
+#include <QMetaProperty>
+#include <hbdataformmodel.h>
+
+// ---------------------------------------------------------------------------
+// PosSettingsGroupboxItem:::PosSettingsGroupboxItem
+// ---------------------------------------------------------------------------
+//
+PosSettingsGroupboxItem::PosSettingsGroupboxItem(QGraphicsItem *parent) :
+HbDataFormViewItem(parent)
+{
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsGroupboxItem:::~PosSettingsGroupboxItem
+// ---------------------------------------------------------------------------
+//
+PosSettingsGroupboxItem::~PosSettingsGroupboxItem()
+{
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsGroupboxItem:::createItem
+// ---------------------------------------------------------------------------
+//
+HbAbstractViewItem* PosSettingsGroupboxItem::createItem()
+{
+ return new PosSettingsGroupboxItem(*this);
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsGroupboxItem:::canSetModelIndex
+// ---------------------------------------------------------------------------
+
+bool PosSettingsGroupboxItem::canSetModelIndex(const QModelIndex &index) const
+{
+ int type = index.data(HbDataFormModelItem::ItemTypeRole).toInt();
+ if (type == GroupboxItem ) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsGroupboxItem:::createCustomWidget
+// ---------------------------------------------------------------------------
+//
+HbWidget* PosSettingsGroupboxItem::createCustomWidget()
+{
+ HbDataFormModelItem::DataItemType itemType =
+ static_cast<HbDataFormModelItem::DataItemType>
+ ( modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt() );
+
+ switch (itemType) {
+ case GroupboxItem:
+ {
+ //custom button
+ QString str =
+ modelIndex().data(HbDataFormModelItem::PropertyRole).toString();
+ HbGroupBox* groupbox = new HbGroupBox(this);
+ // Use the Groupbox widget for heading
+ groupbox->setHeading(str);
+ mWidget = groupbox;
+ return mWidget;
+ }
+ default:
+ return 0;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsGroupboxItem:::restore
+// ---------------------------------------------------------------------------
+//
+void PosSettingsGroupboxItem::restore()
+{
+ HbDataFormViewItem::restore();
+ if (mWidget) {
+ HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
+ modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ if(itemType == GroupboxItem) {
+
+ QModelIndex itemIndex = modelIndex();
+ HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
+ HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
+ model->itemFromIndex(itemIndex));
+
+ const QMetaObject *metaObj = mWidget->metaObject();
+ int count = metaObj->propertyCount();
+ for (int i = 0; i < count; ++i) {
+ QMetaProperty metaProperty = metaObj->property(i);
+ if (metaProperty.isValid() && metaProperty.isWritable()) {
+ metaProperty.write(mWidget,modelItem->contentWidgetData(metaProperty.name()));
+ }
+ }
+ }
+ }
+}
+
+//EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingspluginsloader.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,161 @@
+/*
+ * Copyright (c) 2010 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: Implementation of the Positioning Settings Plugins Loader class
+ *
+ */
+
+
+#include "possettingspluginsloader.h"
+#include "possettingscrkey.h"
+#include <QDir>
+#include <QFileInfoList>
+#include <QFileInfo>
+#include <QPluginLoader>
+#include <QDebug>
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
+
+
+#ifdef Q_OS_SYMBIAN
+#define PLUGIN_PATH QString("\\resource\\qt\\plugins\\positioningsettings")
+
+#else
+#define PLUGIN_PATH QString("C:\\qt\\plugins\\positioningsettings")
+#endif
+
+// constants
+const int KNoOfDigits = 4;
+
+//---------------------------------------------------------------------
+// PosSettingsPluginsLoader::PosSettingsPluginsLoader
+//
+//---------------------------------------------------------------------
+PosSettingsPluginsLoader::PosSettingsPluginsLoader()
+ {
+ qDebug() << "+ PosSettingsPluginsLoader::PosSettingsPluginsLoader()";
+ qDebug() << "- PosSettingsPluginsLoader::PosSettingsPluginsLoader()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsPluginsLoader::~PosSettingsPluginsLoader
+//
+//---------------------------------------------------------------------
+PosSettingsPluginsLoader::~PosSettingsPluginsLoader()
+ {
+ qDebug() << "+ PosSettingsPluginsLoader::~PosSettingsPluginsLoader()";
+ mDllNameList.clear();
+ qDebug() << "- PosSettingsPluginsLoader::~PosSettingsPluginsLoader()";
+ }
+//---------------------------------------------------------------------
+// PosSettingsPluginsLoader::loadPlugins
+//
+//---------------------------------------------------------------------
+QList<PosSettingsAdvInterface*> PosSettingsPluginsLoader::loadPlugins()
+ {
+ qDebug() << "+ PosSettingsPluginsLoader::loadPlugins()";
+ // parse the default cen rep key value which is used to determine
+ // the order of loading the default positioning settings plugins
+ ParseCenRepKey();
+ // List containing the plugins implementing the PositioningSettingsAdvancedInterface
+ QList<PosSettingsAdvInterface*> pluginsList;
+ // Check for the files under the positioningsettings directory
+ QDir pluginsDir(PLUGIN_PATH + QDir::separator());
+ QFileInfoList fileInfoList = pluginsDir.entryInfoList();
+ // check each file in this directory,only if its a dll give it to the
+ // plugin loader
+ foreach ( const QFileInfo &fileInfo, fileInfoList )
+ {
+ QString fileName = fileInfo.absoluteFilePath();
+ qDebug() << "Filename: " << fileName;
+
+ if (!QLibrary::isLibrary(fileName))
+ {
+ continue;
+ }
+ // load the dlls using QPluginLoader
+ QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName));
+ qDebug() << "Plugin Filename: " << pluginsDir.absoluteFilePath(fileName);
+ QObject *plugin = pluginLoader.instance();
+ // Check if the plugin found is an implementation of the
+ // PosSettingsAdvInterface,if yes add it to the plugins list
+
+ if (plugin)
+ {
+ PosSettingsAdvInterface* advancedInterface = qobject_cast<
+ PosSettingsAdvInterface *> (plugin);
+
+ if (advancedInterface)
+ {
+
+ QString dllName = fileInfo.baseName();
+ // check the position into which the plugin needs to be
+ // inserted if it is one of the default plugins
+ for (int i = 0; i < mDllNameList.count(); i++)
+ {
+ if (dllName.compare(mDllNameList[i],Qt::CaseInsensitive) == KErrNone)
+ {
+ pluginsList.insert(i, advancedInterface);
+ break;
+ }
+ }
+ }
+ }
+ }
+ qDebug() << "- PosSettingsPluginsLoader::loadPlugins()";
+ return pluginsList;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsPluginsLoader::ParseCenRepKey
+//
+//---------------------------------------------------------------------
+void PosSettingsPluginsLoader::ParseCenRepKey()
+ {
+ qDebug() << "+ PosSettingsPluginsLoader::ParseCenRepKey()";
+ // create a XQSettingsManager instance
+ XQSettingsManager* manager = new XQSettingsManager();
+ // create a XQSettingsKey object to read the cenrep key value
+ XQSettingsKey cenrepKey(XQSettingsKey::TargetCentralRepository,
+ KCRUidPositioningSettings.iUid, KPositioningSettingsPlugins);
+ // read the cenrep key value
+ QVariant key(manager->readItemValue(cenrepKey,XQSettingsManager::TypeString));
+ // convert the key value to string
+ QString keyStringValue = key.toString();
+ // if the length of default value is less than 4 digits then return
+ if (keyStringValue.size() < KNoOfDigits)
+ {
+ qDebug() << "- PosSettingsPluginsLoader::ParseCenRepKey()";
+ return;
+ }
+ // get the count of the number of plugin dlls
+ int dllCount = keyStringValue.left(KNoOfDigits).toInt();
+ // initialise current index to 4
+ int currentIndex = KNoOfDigits;
+ // extract the name of each of the dll from the cenrep key value
+ for (int i = 0; i < dllCount; i++)
+ {
+ // extract length of dll name
+ int length = keyStringValue.mid(currentIndex, KNoOfDigits).toInt();
+ // increment the current index value
+ currentIndex += KNoOfDigits;
+ // get the dll name
+ QString dllName = keyStringValue.mid(currentIndex, length);
+ // append to list of dll names
+ mDllNameList.append(dllName);
+ // increment the value of currentIndex by length of name
+ currentIndex += length;
+ }
+ qDebug() << "- PosSettingsPluginsLoader::ParseCenRepKey()";
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingspushbuttonitem.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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 class provides custom list item for the
+* DataForm
+*
+*/
+
+#include <possettingspushbuttonitem.h>
+#include <hbdataformmodelitem.h>
+#include <hbpushbutton.h>
+#include <hbabstractitemview.h>
+#include <QMetaProperty>
+#include <hbdataformmodel.h>
+
+// ---------------------------------------------------------------------------
+// PosSettingsPushButtonItem:::PosSettingsPushButtonItem
+// ---------------------------------------------------------------------------
+//
+PosSettingsPushButtonItem::PosSettingsPushButtonItem(QGraphicsItem *parent) :
+HbDataFormViewItem(parent)
+{
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsPushButtonItem:::~PosSettingsPushButtonItem
+// ---------------------------------------------------------------------------
+//
+PosSettingsPushButtonItem::~PosSettingsPushButtonItem()
+{
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsPushButtonItem:::createItem
+// ---------------------------------------------------------------------------
+//
+HbAbstractViewItem* PosSettingsPushButtonItem::createItem()
+{
+ return new PosSettingsPushButtonItem(*this);
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsPushButtonItem:::canSetModelIndex
+// ---------------------------------------------------------------------------
+
+bool PosSettingsPushButtonItem::canSetModelIndex(const QModelIndex &index) const
+{
+ int type = index.data(HbDataFormModelItem::ItemTypeRole).toInt();
+ if (type == PushButtonItem ) {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsPushButtonItem:::createCustomWidget
+// ---------------------------------------------------------------------------
+//
+HbWidget* PosSettingsPushButtonItem::createCustomWidget()
+{
+ HbDataFormModelItem::DataItemType itemType =
+ static_cast<HbDataFormModelItem::DataItemType>
+ ( modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt() );
+
+ switch (itemType) {
+ case PushButtonItem:
+ {
+ //custom button
+ QString str =
+ modelIndex().data(HbDataFormModelItem::PropertyRole).toString();
+ HbPushButton *button = new HbPushButton(str);
+ mWidget = button;
+ return mWidget;
+ }
+ default:
+ return 0;
+ }
+}
+
+// ---------------------------------------------------------------------------
+// PosSettingsPushButtonItem:::restore
+// ---------------------------------------------------------------------------
+//
+void PosSettingsPushButtonItem::restore()
+{
+ HbDataFormViewItem::restore();
+ if (mWidget) {
+ HbDataFormModelItem::DataItemType itemType = static_cast<HbDataFormModelItem::DataItemType>(
+ modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ if(itemType == PushButtonItem) {
+
+ QModelIndex itemIndex = modelIndex();
+ HbDataFormModel *model = static_cast<HbDataFormModel*>(itemView()->model());;
+ HbDataFormModelItem *modelItem = static_cast<HbDataFormModelItem*>(
+ model->itemFromIndex(itemIndex));
+
+ const QMetaObject *metaObj = mWidget->metaObject();
+ int count = metaObj->propertyCount();
+ for (int i = 0; i < count; i++) {
+ QMetaProperty metaProperty = metaObj->property(i);
+ if (metaProperty.isValid() && metaProperty.isWritable()) {
+ metaProperty.write(mWidget,modelItem->contentWidgetData(metaProperty.name()));
+ }
+ }
+ }
+ }
+}
+
+//EOF
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsengine/src/possettingsview.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2010 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 is the first view for Positioning Settings plugin
+*
+*/
+
+#include "possettingsview.h"
+#include "possettingsengine.h"
+#include "possettingsform.h"
+#include "possettingspushbuttonitem.h"
+#include <QDebug>
+
+// ---------------------------------------------------------------------------
+// PosSettingsView::PosSettingsView
+// ---------------------------------------------------------------------------
+//
+PosSettingsView::PosSettingsView(QGraphicsItem
+ *parent):CpBaseSettingView(0,parent)
+ {
+ qDebug() << "================ Positiong settings is launched ==============================";
+ qDebug() << "+ PosSettingsView::PosSettingsView()";
+ mSettingsEngine = new PosSettingsEngine;
+ if(!mSettingsEngine){
+ qDebug() << "- PosSettingsView::PosSettingsView()";
+ return;
+ }
+
+ mSettingsForm = new PosSettingsForm( *mSettingsEngine, this );
+ if(mSettingsForm)
+ this->setWidget( mSettingsForm );
+ qDebug() << "- PosSettingsView::PosSettingsView()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsView::~PosSettingsViewl
+// ---------------------------------------------------------------------------
+//
+PosSettingsView::~PosSettingsView()
+ {
+ qDebug() << "+ PosSettingsView::~PosSettingsView()";
+ delete mSettingsEngine;
+ mSettingsEngine = NULL;
+
+ delete mSettingsForm;
+ mSettingsForm = NULL;
+
+ qDebug() << "- PosSettingsView::~PosSettingsView()";
+ qDebug() << "================ Positiong settings is closed ==============================";
+ }
+
+//EOF
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/inc/apilogger.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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 class provides function that help in logging entry and exit of APIs of classes
+*
+*/
+
+#ifndef APILOGGER_H
+#define APILOGGER_H
+
+#include <iostream>
+#include <fstream>
+#include <QDebug>
+#include <qfile.h>
+#include <qtextstream.h>
+
+using namespace std;
+
+
+class ApiLogger
+ {
+ public:
+ static void OpenLogFile();
+ static void CloseLogFile();
+ static void MyOutputHandler(QtMsgType type, const char *msg);
+ };
+
+#endif // APILOGGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/inc/possettingsplugin.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2010 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 is for Positioning Settings plugin in ControlPanel
+*
+*/
+
+#ifndef POSSETTINGS_PLUGIN_H
+#define POSSETTINGS_PLUGIN_H
+
+class QTranslator;
+#include <cpplugininterface.h>
+
+class PosSettingsPlugin : public QObject, public CpPluginInterface
+{
+Q_OBJECT
+ Q_INTERFACES(CpPluginInterface)
+public: //constructor and destructor
+ PosSettingsPlugin();
+ virtual ~PosSettingsPlugin();
+public:
+ /*
+ * Derived from CpPluginPlatInterface
+ */
+ virtual QList<CpSettingFormItemData*> createSettingFormItemData(CpItemDataHelper &itemDataHelper) const;
+private:
+ /**
+ * Holds localization translator handle
+ */
+ QTranslator* mTranslator;
+};
+#endif // POSSETTINGS_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/inc/possettingspluginhelper.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 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: Positioning settings plugin helper class.
+*
+*/
+
+#ifndef POSITIONINGSETTINGSPLUGIN_HELPER_H
+#define POSITIONINGSETTINGSPLUGIN_HELPER_H
+
+#include <qglobal.h>
+
+class PosSettingsPluginHelperPrivate;
+/**
+ * PosSettingsPluginHelper is a class that provides helper functions:
+ * To check if feature flag is On/Of
+ * To check if any positioning PSY is visible
+ */
+class PosSettingsPluginHelper
+ {
+public:
+
+
+ /**
+ * Constructor
+ */
+ PosSettingsPluginHelper();
+
+ /**
+ * Destructor
+ */
+ ~PosSettingsPluginHelper();
+
+ /**
+ * Returns whether any position psy is available.
+ * @return true if any position psy is available,
+ * false if it is not available.
+ */
+ bool isPositionPsyAvailable();
+
+ /**
+ * Returns whether feature flag is enabled.
+ * @return true if feature flag is enabled,
+ * false if it is not enabled.
+ */
+ bool isFeatureFlagEnabled();
+
+private:
+ Q_DECLARE_PRIVATE(PosSettingsPluginHelper)
+protected:
+ PosSettingsPluginHelperPrivate* const d_ptr;
+ };
+
+
+#endif /* POSITIONINGSETTINGSPLUGIN_HELPER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/inc/possettingspluginhelper_p.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2010 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: Positioning settings plugin helper private class.
+*
+*/
+
+#ifndef POSITIONINGSETTINGSPLUGIN_HELPERPRIVATE_H
+#define POSITIONINGSETTINGSPLUGIN_HELPERPRIVATE_H
+
+class PosSettingsPluginHelper;
+/**
+ * PosSettingsPluginHelperPrivate is a class that provides helper functions:
+ * To check if feature flag is On/Of
+ * To check if any positioning PSY is visible
+ */
+class PosSettingsPluginHelperPrivate
+ {
+private:
+
+ /**
+ * Returns whether any position psy is available.
+ * @return true if any position psy is available,
+ * false if it is not available.
+ */
+ bool isPositionPsyAvailable();
+
+ /**
+ * Returns whether feature flag is enabled.
+ * @return true if feature flag is enabled,
+ * false if it is not enabled.
+ */
+ bool isFeatureFlagEnabled();
+
+ friend class PosSettingsPluginHelper;
+ };
+
+
+#endif /* POSITIONINGSETTINGSPLUGIN_HELPERPRIVATE_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/possettingsplugin.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,77 @@
+#
+# Copyright (c) 2010 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: project file for positioing settings plugin
+#
+
+TEMPLATE = lib
+TARGET = possettingsplugin
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+
+CONFIG += hb\
+ plugin
+
+#Uncomment following line to disable logging
+#DEFINES += QT_NO_DEBUG_OUTPUT
+
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RCC_DIR = rcc
+RESOURCES += possettingsplugin.qrc
+TRANSLATIONS = lilocationmw.ts
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+
+LIBS += -lcpframework \
+ -lpossettingsengine \
+ -leposmodset \
+ -lfeatmgr
+
+# Input
+SOURCES += src/possettingsplugin.cpp \
+ src/possettingspluginhelper.cpp \
+ src/possettingspluginhelper_p.cpp \
+ src/apilogger.cpp
+
+HEADERS += inc/possettingsplugin.h \
+ inc/possettingspluginhelper.h \
+ inc/possettingspluginhelper_p.h \
+ inc/apilogger.h
+
+symbian {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += PLUGINUID3=0x2002C318
+ TARGET.UID3 = 0x2002C318
+
+ # Add translation files
+ addFiles.sources = translations/possettings.qm
+ addFiles.path = .
+ #DEPLOYMENT += addFiles
+
+ deploy.path = C:
+ qtplugins.path = /resource/qt/plugins/controlpanel
+ qtplugins.sources += qmakepluginstubs/possettingsplugin.qtplugin
+ # This is for new exporting system coming in garden
+ for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin $$deploy.path$$qtplugins.path/$$basename(qtplugin)"
+}
+
+TARGET.CAPABILITY = All -TCB
+plugin.sources = possettingsplugin.dll
+plugin.path = \resource\qt\plugins\controlpanel
+DEPLOYMENT += plugin
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/possettingsplugin.qrc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/translations" >
+ <file alias="possettings">translations/possettings.qm</file>
+ </qresource>
+</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/src/apilogger.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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 class provides function that help in logging entry and exit of APIs of classes
+*
+*/
+
+
+#include "apilogger.h"
+#include <qdatetime.h>
+
+const char* debugFileName("c://logs//lbs//posSettingsEngineLog.txt");
+ofstream logfile;
+
+void ApiLogger::OpenLogFile()
+{
+ logfile.open(debugFileName, ios::app);
+}
+
+void ApiLogger::CloseLogFile()
+{
+ logfile.flush();
+ logfile.close();
+}
+
+void ApiLogger::MyOutputHandler(QtMsgType type, const char *msg)
+{
+ switch (type) {
+ case QtDebugMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Debug: " << msg << "\n";
+ break;
+ case QtCriticalMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Critical: " << msg << "\n";
+ break;
+ case QtWarningMsg:
+ // logfile << QTime::currentTime().toString().toAscii().data() << " Warning: " << msg << "\n";
+ break;
+ case QtFatalMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Fatal: " << msg << "\n";
+ default:
+ break;
+ }
+ logfile.flush();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/src/possettingsplugin.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2010 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 is for Positioning Settings plugin in ControlPanel
+ *
+ */
+
+#include "possettingsplugin.h"
+#include "possettingsview.h"
+#include "possettingspluginhelper.h"
+#include "apilogger.h"
+
+#include <QtCore>
+#include <QDebug>
+#include <QTranslator>
+#include <cpsettingformentryitemdataimpl.h>
+
+
+
+// ---------------------------------------------------------------------------
+// PosSettingsPlugin::PosSettingsPlugin
+// ---------------------------------------------------------------------------
+//
+PosSettingsPlugin::PosSettingsPlugin():mTranslator(0)
+ {
+#ifndef QT_NO_DEBUG_OUTPUT
+ ApiLogger::OpenLogFile();
+ qInstallMsgHandler(ApiLogger::MyOutputHandler);
+#endif
+
+ qDebug() << "+ PosSettingsPluginHelper::PosSettingsPlugin()";
+ mTranslator = new QTranslator();
+
+ QString lang = QLocale::system().name();
+ QString path = "z:/resource/qt/translations/";
+ bool loaded = false;
+ loaded = mTranslator->load(path + QString("lilocationmw_") + lang);
+ if (loaded == false)
+ {
+ loaded = mTranslator->load("possettings", ":/translations");
+ }
+ if (loaded)
+ {
+ qApp->installTranslator(mTranslator);
+ }
+ qDebug() << "- PosSettingsPluginHelper::PosSettingsPlugin()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsPlugin::~PosSettingsPlugin
+// ---------------------------------------------------------------------------
+//
+PosSettingsPlugin::~PosSettingsPlugin()
+ {
+ qDebug() << "+ PosSettingsPluginHelper::~PosSettingsPlugin()";
+ if (mTranslator)
+ {
+ if (mTranslator->isEmpty() == false)
+ qApp->removeTranslator(mTranslator);
+ delete mTranslator;
+ }
+ qDebug() << "- PosSettingsPluginHelper::~PosSettingsPlugin()";
+ #ifndef QT_NO_DEBUG_OUTPUT
+ qInstallMsgHandler(0);
+ ApiLogger::CloseLogFile();
+ #endif
+ }
+
+// ---------------------------------------------------------------------------
+// PosSettingsPlugin::createSettingFormItemData
+// ---------------------------------------------------------------------------
+//
+QList<CpSettingFormItemData*> PosSettingsPlugin::createSettingFormItemData(
+ CpItemDataHelper &itemDataHelper) const
+ {
+ qDebug() << "+ PosSettingsPluginHelper::createSettingFormItemData()";
+ PosSettingsPluginHelper helper;
+ QList<CpSettingFormItemData*> formItemDataList;
+ if (!helper.isFeatureFlagEnabled() && helper.isPositionPsyAvailable())
+ {
+ CpSettingFormItemData *itemData = new CpSettingFormEntryItemDataImpl<
+ PosSettingsView> (itemDataHelper, hbTrId(
+ "txt_cp_dblist_positioning"), hbTrId(
+ "txt_cp_dblist_positioning_val_change_positioning_s"));
+ formItemDataList.append(itemData);
+ }
+ qDebug() << "- PosSettingsPluginHelper::createSettingFormItemData()";
+ return formItemDataList;
+ }
+
+Q_EXPORT_PLUGIN2(possettingsplugin, PosSettingsPlugin)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/src/possettingspluginhelper.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings plugin helper class.
+*
+*/
+
+#include "possettingspluginhelper.h"
+#include "possettingspluginhelper_p.h"
+#include <QDebug>
+
+//-----------------------------------------------------------------
+//PosSettingsPluginHelper::PosSettingsPluginHelper()
+//-----------------------------------------------------------------
+PosSettingsPluginHelper::PosSettingsPluginHelper() :
+ d_ptr(new PosSettingsPluginHelperPrivate())
+ {
+ qDebug() << "+ PosSettingsPluginHelper::PosSettingsPluginHelper()";
+ qDebug() << "- PosSettingsPluginHelper::PosSettingsPluginHelper()";
+ }
+
+//-----------------------------------------------------------------
+//PosSettingsPluginHelper::~PosSettingsPluginHelper()
+//-----------------------------------------------------------------
+PosSettingsPluginHelper::~PosSettingsPluginHelper()
+ {
+ qDebug() << "+ PosSettingsPluginHelper::~PosSettingsPluginHelper()";
+ if (d_ptr)
+ {
+ delete d_ptr;
+ }
+ qDebug() << "- PosSettingsPluginHelper::~PosSettingsPluginHelper()";
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsPluginHelper::populatePsyModuleInfoListL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsPluginHelper::isPositionPsyAvailable()
+ {
+ qDebug() << "+ PosSettingsPluginHelper::isPositionPsyAvailable()";
+ bool ret = d_ptr->isPositionPsyAvailable();
+ qDebug() << "- PosSettingsPluginHelper::isPositionPsyAvailable() ret =" << ret;
+ return ret;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsPluginHelperPrivate::isFeatureFlagEnabledL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsPluginHelper::isFeatureFlagEnabled()
+ {
+ qDebug() << "+ PosSettingsPluginHelper::isFeatureFlagEnabled()";
+ bool ret = d_ptr->isFeatureFlagEnabled();
+ qDebug() << "- PosSettingsPluginHelper::isFeatureFlagEnabled() ret =" << ret;
+ return ret;
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/src/possettingspluginhelper_p.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings plugin helper private class.
+*
+*/
+
+
+#include "possettingspluginhelper_p.h"
+#include "possettingspluginhelper.h"
+#include <EPos_CPosModules.h>
+#include <lbs/epos_cposmoduleidlist.h>
+#include <featmgr.h>
+
+//---------------------------------------------------------------------
+// PosSettingsPluginHelperPrivate::isPositionPsyAvailable()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsPluginHelperPrivate::isPositionPsyAvailable()
+ {
+ TInt cnt = 0;
+ TInt err2 = KErrGeneral;
+ CPosModules* posModules;
+ TRAPD(err1, posModules = CPosModules::OpenL(););
+ if(!posModules)
+ {
+ User::Leave( KErrGeneral );
+ }
+ else
+ {
+ TRAP(err2,
+ CPosModuleIdList* idList = posModules->ModuleIdListLC();
+ cnt = idList->Count();
+ CleanupStack::PopAndDestroy( idList ););
+ }
+ if(err1==KErrNone && err2 ==KErrNone && cnt) //if no error and there
+ return true;
+ else
+ return false;
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsPluginHelperPrivate::isFeatureFlagEnabled()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+bool PosSettingsPluginHelperPrivate::isFeatureFlagEnabled()
+ {
+ TBool flag = EFalse;
+ TRAPD(err,
+ FeatureManager::InitializeLibL();
+ if ( FeatureManager::FeatureSupported( KFeatureIdFfLocationsysuiHidePositioningMenu ) )
+ {
+ flag = ETrue;
+ }
+ FeatureManager::UnInitializeLib();
+ );
+ if(err==KErrNone && flag)
+ return true;
+ else
+ return false;
+ }
+
+// End of file
Binary file locationsystemui/locationsysui/possettings/possettingsplugin/translations/possettings.qm has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possettingsplugin/translations/possettings.ts Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,599 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
+<context>
+<message numerus="no" id="txt_location_notifications_info_your_location_will">
+ <comment>Info text for periodic location request query (Default policy - Reject)</comment>
+ <source>Your location will not be shared periodically by default if you don't respond</source>
+ <translation variants="no">Your location will not be shared periodically by default if you don't respond</translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_03</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_use_1">
+ <comment>Name of the positioning server</comment>
+ <source>Use %1</source>
+ <translation variants="no">Use %1</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_cellular_network">
+ <comment>2G/3G/etc network settings for positionin use</comment>
+ <source>Cellular network</source>
+ <translation variants="no">Cellular network</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_opt_delete_server">
+ <comment>Option menu item</comment>
+ <source>Delete server</source>
+ <translation variants="no">Delete server</translation>
+ <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>opt</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_advanced">
+ <comment>Button - takes to advanced positioning settings</comment>
+ <source>Advanced</source>
+ <translation variants="no">Advanced</translation>
+ <extra-loc-layout_id>qtl_dataform_button_sec </extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_settings">
+ <comment>Button for accessing settings in control palel</comment>
+ <source>Settings</source>
+ <translation variants="no">Settings</translation>
+ <extra-loc-layout_id>txt_lint_button_settings</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_seconds">
+ <comment>Update interval value when update happens in seconds (59s or less)</comment>
+ <source>Updates every %L1 seconds</source>
+ <translation variants="no">Updates every %L1 seconds</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4e">
+ <comment>Coordinates</comment>
+ <source>L1%?L2%'L3%.L4%"E</source>
+ <translation variants="no">L1%?L2%'L3%.L4%"E</translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4e</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_reject">
+ <comment>Location request query dialog - Softkey button. Allows the user to reject the suggested operation.</comment>
+ <source>Reject</source>
+ <translation variants="no">Reject</translation>
+ <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_cp_dblist_positioning_val_change_positioning_s">
+ <comment>Control panel item in CP main view</comment>
+ <source>Change positioning settings</source>
+ <translation variants="no">Change positioning settings</translation>
+ <extra-loc-layout_id>qtl_list_sec_large_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>cp_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
+ <extra-loc-feature>cp</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_days_and_l2_hours">
+ <comment>Update interval value when interval is in days</comment>
+ <source>Updates every %L1 days and %L2 hours</source>
+ <translation variants="no">Updates every %L1 days and %L2 hours</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_accuracy_l1_meters">
+ <comment>Accuracy information in meters. Displayed when value is 999 meters or less</comment>
+ <source>Accuracy: %L1 meters</source>
+ <translation variants="no">Accuracy: %L1 meters</translation>
+ <extra-loc-layout_id>txt_lint_accuracy_1_meters</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_positioning_methods">
+ <comment>Group heading for positioning methods</comment>
+ <source>Positioning methods</source>
+ <translation variants="no">Positioning methods</translation>
+ <extra-loc-layout_id>qtl_groupbox_expand_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_cancel">
+ <comment>Button. Note! Use this text ID only if there are max. two buttons in the dialog. Allows the user to cancel the action or process.</comment>
+ <source>Cancel</source>
+ <translation variants="no">Cancel</translation>
+ <extra-loc-layout_id>None</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_accuracy_l1_kilometers">
+ <comment>Accuracy information in kilometers. Displayed when over 999 meters</comment>
+ <source>Accuracy: %L1 kilometers</source>
+ <translation variants="no">Accuracy: %L1 kilometers</translation>
+ <extra-loc-layout_id>txt_lint_list_accuracy_1_kilometers</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_list_time">
+ <comment>Primary text in list widget. Notification recieved time</comment>
+ <source><Time></source>
+ <translation variants="no"><Time></translation>
+ <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_internal_gps">
+ <comment>Internal GPS chipset - enabling or disabling that</comment>
+ <source>Internal GPS</source>
+ <translation variants="no">Internal GPS</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_wifi">
+ <comment>Wi-FI - enable/disable wifi usage in positioning context</comment>
+ <source>Wi-Fi</source>
+ <translation variants="no">Wi-Fi</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_dpophead_your_location">
+ <comment>Location notification heading text </comment>
+ <source>Your location not sent to :</source>
+ <translation variants="no">Your location not sent to :</translation>
+ <extra-loc-layout_id>qtl_notifdialog_pri</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_04</extra-loc-viewid>
+ <extra-loc-positionid>dpophead</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_enable_for_most_accurate_positioning">
+ <comment>Description text for GPS under the checkbox item</comment>
+ <source>Enable for most accurate positioning</source>
+ <translation variants="no">Enable for most accurate positioning</translation>
+ <extra-loc-layout_id>qtl_dataform_description_sec </extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_positioning_servers">
+ <comment>Group heading positioning servers</comment>
+ <source>Positioning servers</source>
+ <translation variants="no">Positioning servers</translation>
+ <extra-loc-layout_id>qtl_groupbox_expand_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_use_wifi_and_mobile_networks_to_get">
+ <comment>Description text for wireless networks under the checkbox item</comment>
+ <source>Use WI-FI and mobile networks to get position information</source>
+ <translation variants="no">Use WI-FI and mobile networks to get position information</translation>
+ <extra-loc-layout_id>qtl_dataform_description_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_button_clear_logs">
+ <comment>Single toolbar item to clear logs in Location notification log view</comment>
+ <source>Clear logs</source>
+ <translation variants="no">Clear logs</translation>
+ <extra-loc-layout_id>qtl_toolbar_tiny1_1</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_subhead_logs">
+ <comment>Sub heading text for Location notification logs view</comment>
+ <source>Logs</source>
+ <translation variants="no">Logs</translation>
+ <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>subhead</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_save">
+ <comment>Save button for saving current position</comment>
+ <source>Save</source>
+ <translation variants="no">Save</translation>
+ <extra-loc-layout_id>txt_loe_button_save</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_select_server_to_delete">
+ <comment>Dialog text for server deletion</comment>
+ <source>Select server to delete</source>
+ <translation variants="no">Select server to delete</translation>
+ <extra-loc-layout_id>qtl_dialog_pri3</extra-loc-layout_id>
+ <extra-loc-viewid>loe_011</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_delete">
+ <comment>Button. Note! Use this text ID only if there are max. two buttons in the dialog. Allows the user to delete an item. Note that deleting removes the item permanently from memory.</comment>
+ <source>Delete</source>
+ <translation variants="no">Delete</translation>
+ <extra-loc-layout_id>None</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_valid_until_2">
+ <comment>value that tells the date until service will be active</comment>
+ <source>Valid until %2</source>
+ <translation variants="no">Valid until %2</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_title_positioning">
+ <comment>Heading for the positioning info dialog</comment>
+ <source>Positioning</source>
+ <translation variants="no">Positioning</translation>
+ <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
+ <extra-loc-viewid>loe_001</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="yes" id="txt_location_notifications_dblist_ln_location_not">
+ <comment>Location notification primarry text in Universal Indicator Menu</comment>
+ <source>%Ln Location notifications</source>
+ <translation>
+ <numerusform variants="no">(s)%Ln Location notifications</numerusform>
+ <numerusform variants="no">(p)%Ln Location notifications</numerusform>
+ </translation>
+ <extra-loc-layout_id>qtl_indimenu_pri_medium_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_05</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_assisted_gps">
+ <comment>Assisted GPS - enabling or disabling</comment>
+ <source>Assisted GPS</source>
+ <translation variants="no">Assisted GPS</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_background_positioning">
+ <comment>Group heading for location based services</comment>
+ <source>Background positioning</source>
+ <translation variants="no">Background positioning</translation>
+ <extra-loc-layout_id>qtl_groupbox_expand_pri</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_positioning_settings">
+ <comment>subtitle for positioning settings main view</comment>
+ <source>Positioning settings</source>
+ <translation variants="no">Positioning settings</translation>
+ <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_info_location_was_reque">
+ <comment>Requestor info text in Location request query dialog</comment>
+ <source>Location was requested by : </source>
+ <translation variants="no">Location was requested by : </translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_01</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_subtitle_advanced_positioning_settings">
+ <comment>Button - takes to advanced positioning settings</comment>
+ <source>Advanced positioning settings</source>
+ <translation variants="no">Advanced positioning settings</translation>
+ <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>subtitle</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_title_location_request">
+ <comment>Title text in Location request query dialog</comment>
+ <source>Location request</source>
+ <translation variants="no">Location request</translation>
+ <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_01</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_background_positioning">
+ <comment>Checkbox item for enabling/disabling Background positioning</comment>
+ <source>Background positioning</source>
+ <translation variants="no">Background positioning</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_hours_and_l2_minut">
+ <comment>Update interval value when interval is hours (not days or months etc)</comment>
+ <source>Updates every %L1 hours and %L2 minutes</source>
+ <translation variants="no">Updates every %L1 hours and %L2 minutes</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_minutes_and_l2_sec">
+ <comment>Update interval value when interval is in minutes</comment>
+ <source>Updates every %L1 minutes and %L2 seconds</source>
+ <translation variants="no">Updates every %L1 minutes and %L2 seconds</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_gps">
+ <comment>Checkbox item for enabling/disabling GPS</comment>
+ <source>GPS</source>
+ <translation variants="no">GPS</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_info_you_location_will">
+ <comment>Info text for periodic location request query - No default policy</comment>
+ <source>You location will be shared periodically with :</source>
+ <translation variants="no">You location will be shared periodically with :</translation>
+ <extra-loc-layout_id>qtl_dialog_pri5</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_02</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4w">
+ <comment>Coordinates</comment>
+ <source>L1%?L2%'L3%.L4%"W</source>
+ <translation variants="no">L1%?L2%'L3%.L4%"W</translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4w</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4n">
+ <comment>Coordinates</comment>
+ <source>L1%?L2%'L3%.L4%"N</source>
+ <translation variants="no">L1%?L2%'L3%.L4%"N</translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4n</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_title_save_as">
+ <comment>Query header for save dialog</comment>
+ <source>Save as</source>
+ <translation variants="no">Save as</translation>
+ <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
+ <extra-loc-viewid>loe_005</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_updates_every_l1_months_and_l2_days">
+ <comment>Update interval value when interval is months</comment>
+ <source>Updates every %L1 months and %L2 days</source>
+ <translation variants="no">Updates every %L1 months and %L2 days</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_bluetooth_gps">
+ <comment>Bluetooth GPS - enabling/disabling external BT GPS device usage</comment>
+ <source>Bluetooth GPS</source>
+ <translation variants="no">Bluetooth GPS</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_008</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_wireless_networks">
+ <comment>Checkbox item for enabling/disabling Wireless positioning</comment>
+ <source>Wireless networks</source>
+ <translation variants="no">Wireless networks</translation>
+ <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_list_timedate">
+ <comment>Primary text in list widget. Notification received time and ate</comment>
+ <source><Time><Date></source>
+ <translation variants="no"><Time><Date></translation>
+ <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_cp_dblist_positioning">
+ <comment>Control panel item in CP main view</comment>
+ <source>Positioning</source>
+ <translation variants="no">Positioning</translation>
+ <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>cp_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1</extra-loc-positionid>
+ <extra-loc-feature>cp</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_list_your_location_sent">
+ <comment>Multiline secondary text in a list item</comment>
+ <source>Your location sent to : </source>
+ <translation variants="no">Your location sent to : </translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_button_accept">
+ <comment>Location request query dialog - Softkey button. Allows the user to accept the location request</comment>
+ <source>Accept</source>
+ <translation variants="no">Accept</translation>
+ <extra-loc-layout_id>qtl_dialog_softkey</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_01</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_list_l1l2l3l4s">
+ <comment>Coordinates</comment>
+ <source>L1%?L2%'L3%.L4%"S</source>
+ <translation variants="no">L1%?L2%'L3%.L4%"S</translation>
+ <extra-loc-layout_id>txt_loe_list_l1l2l3l4s</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_dblist_positioning">
+ <comment>UniversalIndicatorMenu item text. </comment>
+ <source>Positioning</source>
+ <translation variants="no">Positioning</translation>
+ <extra-loc-layout_id>qtl_indimenu_pri_medium_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>loe_001</extra-loc-viewid>
+ <extra-loc-positionid>dblist_1</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_button_done">
+ <comment>Button in dialog for closing the Positioning info dialog</comment>
+ <source>Done</source>
+ <translation variants="no">Done</translation>
+ <extra-loc-layout_id>qtl_dialog_softkey_1</extra-loc-layout_id>
+ <extra-loc-viewid>loe_002</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_stop_service_1">
+ <comment>Confirmation about stopping service</comment>
+ <source>Stop service %1</source>
+ <translation variants="no">Stop service %1</translation>
+ <extra-loc-layout_id>qtl_dialog_pri3_large_graphic</extra-loc-layout_id>
+ <extra-loc-viewid>loe_010</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_loe_info_enable_applications_and_services_upda">
+ <comment>Description text for Location based services & background applications</comment>
+ <source>Enable applications and services update and retrieve location information</source>
+ <translation variants="no">Enable applications and services update and retrieve location information</translation>
+ <extra-loc-layout_id>qtl_dataform_description_sec</extra-loc-layout_id>
+ <extra-loc-viewid>loe_007</extra-loc-viewid>
+ <extra-loc-positionid>info</extra-loc-positionid>
+ <extra-loc-feature>lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_list_your_location_not">
+ <comment>Multiline secondary text in a list item</comment>
+ <source>Your location not sent to:</source>
+ <translation variants="no">Your location not sent to:</translation>
+ <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>list</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_location_notifications_title_location_notifica">
+ <comment>Title text for Location notifications log view</comment>
+ <source>Location notifications</source>
+ <translation variants="no">Location notifications</translation>
+ <extra-loc-layout_id>qtl_chrome_title</extra-loc-layout_id>
+ <extra-loc-viewid>Location notifications_06</extra-loc-viewid>
+ <extra-loc-positionid>title</extra-loc-positionid>
+ <extra-loc-feature>Lo</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+<message numerus="no" id="txt_common_button_ok">
+ <comment>Button. Note! Use this text ID only if there are max. two buttons in the dialog. When this button is pressed, the focused item or operation will be selected or accepted.</comment>
+ <source>OK</source>
+ <translation variants="no">OK</translation>
+ <extra-loc-layout_id>qtl_dialog_softkey_2</extra-loc-layout_id>
+ <extra-loc-viewid>common</extra-loc-viewid>
+ <extra-loc-positionid>button</extra-loc-positionid>
+ <extra-loc-feature>co</extra-loc-feature>
+ <extra-loc-blank>False</extra-loc-blank>
+</message>
+</context>
+</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/inc/possettingssignalmapper.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2010 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: Declaration of the Positioning Settings signal mapper
+ * used to map the signals of each check box item to the index
+ *
+ */
+
+#ifndef POSSETTINGSSIGNALMAPPER_H
+#define POSSETTINGSSIGNALMAPPER_H
+
+#include <QObject>
+
+class PosSettingsSignalMapper : public QObject
+ {
+ Q_OBJECT
+public:
+ /*
+ * constructor
+ */
+ PosSettingsSignalMapper();
+ /**
+ * destructor
+ */
+ ~PosSettingsSignalMapper();
+public:
+signals:
+ /**
+ * signal emitted by the slot of this class
+ */
+ void signalmapped();
+public slots:
+ /**
+ * slot to be called on a change in state of checkbox.
+ * this in turn calls the signal signalmapped()
+ */
+ void signalmap();
+ };
+
+#endif //POSSETTINGSSIGNALMAPPER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/inc/possuplsettings.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,177 @@
+/*
+ * Copyright (c) 2010 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 is for SUPL Positioning Settings plugin
+ * for Advanced View
+ *
+ */
+
+#ifndef POSSUPLSETTINGS_PLUGIN_H
+#define POSSUPLSETTINGS_PLUGIN_H
+
+//User Includes
+#include "possuplsettingscommon.h"
+#include "possettingssignalmapper.h"
+
+#include <QObject>
+#include <hbdataformmodelitem.h>
+#include <possettingsadvinterface.h>
+#include <qsignalmapper.h>
+#include <hbdataformviewitem.h>
+
+//Forward Declaration
+class PosSettingsAdvOp;
+class PosSuplSettingsEngine;
+class QModelIndex;
+class HbRadioButtonList;
+class HbDialog;
+
+class PosSuplSettingsPlugin : public QObject, public PosSettingsAdvInterface
+
+ {
+Q_OBJECT
+ Q_INTERFACES( PosSettingsAdvInterface )
+public:
+ /**
+ * Constructor
+ */
+ PosSuplSettingsPlugin();
+
+ /**
+ * Destructor
+ */
+ ~PosSuplSettingsPlugin();
+public:
+ /*
+ * Derived from PosSettingsAdvInterface
+ */
+ virtual int initialise(PosSettingsAdvOp* operation);
+
+private:
+ /**
+ * This method is used to list all the server that are present for
+ * positioing. Depending on whether the server is enabled/disabled for positioning
+ * the corresponding checkboxes are marked.
+ */
+ void listServers();
+
+ /**
+ * This method creates menu to delete the servers
+ */
+ void createMenu();
+
+private slots:
+ /**
+ * This is used as a slot whenever the checkbox is marked/unmarked.
+ * On changing the state of the checkbox the corresponding positioning
+ * server is enabled/disabled
+ * @param [in] - slpid for the server to be enababled/disabled
+ */
+ void changeServerUsage(int slpid);
+
+ /**
+ * This is slot, which is called whenever there is a new server added or
+ * a server in the list is deleted. This refreshes the view.
+ */
+ void updateList();
+
+ /**
+ * This is slot, which is called when the user selects the
+ * server to be deleted
+ */
+ void onDeleteServer();
+
+ /**
+ * This slot is used to enable the primary Action wheneven
+ * a server is selected from the list of servers to be deleted
+ * @param [in] - index of the server to be deleted
+ */
+ void setPrimaryAction(int itemSelected);
+
+ /**
+ * This slot is used to delete the server whenever
+ * a server is selected from the list of servers to be deleted
+ */
+ void deleteServer();
+
+private:
+
+ /**
+ * an object if the supl setting engine class
+ * Owns
+ */
+ PosSuplSettingsEngine* mSuplSettingsEngine;
+
+ /**
+ * an object of data form model item class
+ * Owns
+ */
+ HbDataFormModelItem * mGroup;
+
+ /**
+ * Holds the params of the list of servers
+ * Owns
+ */
+ QList<PosServerParams> mServerList;
+
+ /**
+ * hold the signal mapper objects of PosPsySettingsSignalMapper
+ * Owns
+ */
+ QList<PosSettingsSignalMapper*> mSignalMapperList;
+
+ /**
+ * Handle to PosSettingsAdvOp object
+ * Does not own
+ */
+ PosSettingsAdvOp * mOperation;
+
+ /**
+ * an object of QSignalMapper
+ * Owns
+ */
+ QSignalMapper * mSignalMapper;
+
+ /**
+ * an object on HbMenu
+ * Owns
+ */
+ HbMenu* mMainMenu;
+
+ /**
+ * list of servers that can be deleted
+ * Owns
+ */
+ QList<PosServerParams> mDeleteableServerList;
+
+ /**
+ * an instance of HBAction, used for SK1 in
+ * the delete server Dialog box
+ * Owns
+ */
+ HbAction* mPrimaryAction;
+
+ /**
+ * an instance of HbRadioButtonList, used to add server
+ * in the delete server selection Dialog box
+ * Owns
+ */
+ HbRadioButtonList *mRadioButtonList;
+
+ /**
+ * holds the server delete query dialog
+ * Owns
+ */
+ HbDialog *mDeleteQuery;
+ };
+#endif // POSSUPLSETTINGS_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/inc/possuplsettingscommon.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2010 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 is a common header for SUPL Positioning Settings plugin
+ * for Advanced View
+ *
+ */
+
+#ifndef POSSUPLSETTINGS_COMMON_H
+#define POSSUPLSETTINGS_COMMON_H
+
+#include <qstring.h>
+
+/**
+ * Contains info related to each SUPL Servers
+ * - SLP id
+ * - Server Address
+ * - Access Point
+ * - Server Usage State(enabled/disabled)
+ * - Sim Change Remove (Yes/No)
+ * - Usage is Home Network(Yes/No)
+ * - editable (Yes/No)
+ */
+class PosServerParams
+ {
+public:
+ long slpId;
+ QString serverAdd;
+ QString iap;
+ bool serverEnabled;
+ };
+
+#endif //POSSUPLSETTINGS_COMMON_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/inc/possuplsettingsengine.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2010 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 is the engine header for SUPL Positioning Settings plugin
+ *
+ */
+
+#ifndef POSSUPLSETTINGS_ENGINE_H
+#define POSSUPLSETTINGS_ENGINE_H
+
+
+//User Includes
+#include "possuplsettingsengineprivate.h"
+#include "possuplsettingscommon.h"
+
+#include <e32base.h>
+#include <QObject>
+#include <qstringlist.h>
+#include <epos_csuplsettingparams.h>
+
+//Forward Declarations
+class PosSuplSettingsEnginePrivate;
+class MSuplSettingsObserver;
+
+class PosSuplSettingsEngine : public QObject, public PosSuplSettingsChangeObserver
+ {
+Q_OBJECT
+
+public:
+
+ /**
+ * Constructor
+ */
+ PosSuplSettingsEngine();
+
+ /**
+ * Destructor
+ */
+ ~PosSuplSettingsEngine();
+
+ /**
+ * This method Lists all the Server that are present for Positioning.
+ * @param [out] - aServerList. Contains the servers that are present.
+ * @returns - KErrNone if successful
+ * - KErrNotfound is no servers are present
+ */
+
+ int suplServerList(QList<PosServerParams>& serverList);
+
+ /**
+ * This method Lists all the Server that are present for Positioning.
+ * @param [out] - aServerList. Contains the servers that are present.
+ * @returns - KErrNone if successful
+ * - KErrNotfound is no servers are present
+ */
+
+ int deletableServerList(QList<PosServerParams>& serverList);
+
+
+ /**
+ * This method enables/disables the server in use for postioning.
+ * If the server is disabled, it will not be used for positioning unless enabled.
+ * @param [in] - aServerIndex. The server index which has to be enabled/disabled.
+ * @param [in] - aValue. true/false.
+ * @returns - KErrNone if enabling/disabling is successful
+ * - KErrArgument if the SLP ID passed is not valid/out of bounds
+ * - KErrGeneral if changing SUPL settings has failed
+ */
+ int enableServer(int aServerIndex, bool aValue);
+
+ /**
+ * This method is used to delete the server.
+ * @param [in] - aServerIndex. The server index which has to be deleted.
+ * @returns - KErrNone if the deletion is successful
+ * - KErrNotFound if the server at the index in missing/out of bounds.
+ * - KErrPermissionDenied if the sever cannot be deleted
+ * - KErrGeneral is other cases
+ */
+ int deleteServer(int aServerIndex);
+
+
+public:
+
+ /**
+ * Inherited from PosSuplSettingsChangeObserver
+ */
+ void handleSuplSettingsChange( MSuplSettingsObserver::TSuplSettingsEventType event,int slpId);
+signals:
+ /**
+ * This signal is emitted when the server is deleted/added.
+ */
+ void serverListUpdated();
+
+private:
+ /**
+ * pointer to private implementation class
+ */
+ Q_DECLARE_PRIVATE_D(d_ptr, PosSuplSettingsEngine)
+ PosSuplSettingsEnginePrivate * d_ptr;
+ };
+#endif // POSSUPLSETTINGS_ENGINE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/inc/possuplsettingsengineprivate.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2010 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: Positioning settings engine private class header.
+*
+*/
+
+#ifndef POSSUPLSETTINGSENGINEPRIVATE_H
+#define POSSUPLSETTINGSENGINEPRIVATE_H
+
+#include "possuplsettingscommon.h"
+#include <QList>
+#include <epos_msuplsettingsobserver.h>
+
+class CServerParams;
+class CSuplSettings;
+
+//Constants
+const int KMaxHSLPAddrLen = 256;
+const int KMaxIAPLen = 256;
+/**
+ * The class defines the interface for receiving SUPL settings
+ * change event.
+ */
+class PosSuplSettingsChangeObserver
+ {
+public:
+ virtual void handleSuplSettingsChange( MSuplSettingsObserver::TSuplSettingsEventType aEvent,int aSlpId) = 0;
+ };
+
+
+/**
+ * The class defines the interface for listing,enabling\disabling and deleting
+ * SLP servers.
+ */
+class PosSuplSettingsEnginePrivate : public MSuplSettingsObserver
+ {
+public:
+ /**
+ * Default constructor
+ */
+ PosSuplSettingsEnginePrivate();
+
+ /**
+ * Destructor
+ */
+ ~PosSuplSettingsEnginePrivate();
+
+ /**
+ * Returns properties of all servers from SUPL settings storage..
+ * @[OUT] paramValues Array of retrieved server entries
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if the settings does not have any server entry
+ */
+ int GetServerList( QList<PosServerParams>& aParamValues );
+
+ /**
+ * This method is used to change parameter which indicates whether server
+ * can be used for SUPL session or not.
+ *
+ * @param [IN] slpId SLP ID for which the parameter needs to be changed
+ * @param [IN] enableFlag Flag to indicate whether server can be enabled or not
+ * @return one of the following error codes:
+ * - KErrNone if SUPL settings are changed successfully.
+ * - KErrArgument if the SLP ID passed is not valid
+ * - KErrGeneral if changing SUPL settings has failed
+ */
+ int SetServerStatus( int aSlpId,
+ bool aEnableFlg
+ );
+
+
+ /**
+ * This method is deletes server entry from SUPL settings storage.
+ *
+ * @param [IN] slpId Server identity for which the entery needs to be deleted from the SUPL settings storage
+ *
+ * @return one of the following error codes:
+ * - KErrNone if entry is deleted successfully
+ * - KErrNotFound if the specified server identity does not exists in settings storage
+ * - KErrGeneral if changing SUPL settings has failed
+ *
+ */
+ int RemoveServer( int aSlpId);
+
+ /**
+ * Returns list all servers from SUPL settings storage that can be deleted.Operator configured servers will be omitted from
+ * this list.
+ * @[OUT] paramValues Array of retrieved server entries
+ * - KErrNone if SUPL settings are retrieved successfully.
+ * - KErrNotFound if the list does not have any server entry
+ */
+ int GetRemovableServerList( QList<PosServerParams>& aParamValues );
+
+ /* @param [IN] observer The observing object.
+ * @return one of the following values
+ * - KErrNone if setting observer is successful
+ * - KErrAlreadyExists if observer is already set
+ *
+ */
+ int SetObserver( PosSuplSettingsChangeObserver* aObserver );
+
+
+public:
+ void HandleSuplSettingsChangeL( TSuplSettingsEventType aEvent,TInt aSlpId );
+ void HandleSuplTriggerStatusChangeL( CSuplSettings::TSuplTriggerStatus aSuplTriggerStatus );
+
+
+private: //Data members
+
+ /**
+ * Reference to position technology change observer.
+ * Does not own
+ */
+ PosSuplSettingsChangeObserver* mPosSuplSettingsObserver;
+
+ /**
+ * Pointer to Supl settings object
+ * Owns
+ */
+ CSuplSettings* mSuplSettings;
+
+ /**
+ * Pointer to Supl Server List
+ * Owns
+ */
+ RPointerArray<CServerParams> mServerList;
+ };
+
+
+
+#endif /* POSSUPLSETTINGSENGINEPRIVATE_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/possuplsettings.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,63 @@
+#
+# Copyright (c) 2010 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: Positioning Servers Plugin pro file
+#
+TEMPLATE = lib
+TARGET = possuplsettings
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += ../possettingsengine/inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+CONFIG += hb \
+ plugin
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RCC_DIR = rcc
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+LIBS += -lcpframework \
+ -lpossettingsengine \
+ -lepos_suplsettings
+
+# Input
+SOURCES += src/possuplsettings.cpp
+SOURCES += src/possuplsettingsengine.cpp
+SOURCES += src/possuplsettingsengineprivate.cpp
+SOURCES += src/possettingssignalmapper.cpp
+
+HEADERS += inc/possuplsettingscommon.h \
+ inc/possuplsettings.h
+HEADERS += inc/possuplsettingsengine.h
+HEADERS += inc/possuplsettingsengineprivate.h
+HEADERS += inc/possettingssignalmapper.h
+symbian: {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += PLUGINUID3=0x2002C31B
+ TARGET.UID3 = 0x2002C31B
+}
+symbian {
+ deploy.path = C:
+ qtplugins.path = /resource/qt/plugins/positioningsettings
+ qtplugins.sources += qmakepluginstubs/possuplsettings.qtplugin
+
+ # This is for new exporting system coming in garden
+ for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin $$deploy.path$$qtplugins.path/$$basename(qtplugin)"
+}
+TARGET.CAPABILITY = All \
+ -TCB
+plugin.sources = possuplsettings.dll
+plugin.path = \resource\qt\plugins\positioningsettings
+DEPLOYMENT += plugin
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/src/possettingssignalmapper.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: Implementation of positioning settings signal mapper class
+ *
+ */
+
+
+#include "possettingssignalmapper.h"
+
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+// Constructor
+//---------------------------------------------------------------------
+PosSettingsSignalMapper::PosSettingsSignalMapper()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+// destructor
+//---------------------------------------------------------------------
+PosSettingsSignalMapper::~PosSettingsSignalMapper()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// PosSettingsSignalMapper::PosSettingsSignalMapper()
+//
+//---------------------------------------------------------------------
+void PosSettingsSignalMapper::signalmap()
+ {
+ emit signalmapped();
+ }
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/src/possuplsettings.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,516 @@
+/*
+ * Copyright (c) 2010 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 is for Positioning Supl Settings plugin
+ * for Positioning Settings's Advanced view
+ *
+ */
+#include "possuplsettings.h"
+#include "possuplsettingsengine.h"
+#include "possettingsadvop.h"
+
+#include <QtCore>
+#include <QDebug>
+#include <hbcheckbox.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <hbradiobuttonlist.h>
+#include <hblabel.h>
+#include <hbdialog.h>
+
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::PosSuplSettingsPlugin
+// ---------------------------------------------------------------------------
+//
+PosSuplSettingsPlugin::PosSuplSettingsPlugin() :
+ mSuplSettingsEngine(0), mGroup(0), mOperation(0), mSignalMapper(0),
+ mMainMenu(0), mPrimaryAction(0), mRadioButtonList(0),
+ mDeleteQuery(0)
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::PosSuplSettingsPlugin()";
+ mSuplSettingsEngine = new PosSuplSettingsEngine();
+ qDebug() << "- PosSuplSettingsPlugin::PosSuplSettingsPlugin()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::~PosSuplSettingsPlugin
+// ---------------------------------------------------------------------------
+//
+PosSuplSettingsPlugin::~PosSuplSettingsPlugin()
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::~PosSuplSettingsPlugin()";
+
+ if (mSuplSettingsEngine)
+ {
+ delete mSuplSettingsEngine;
+ mSuplSettingsEngine = 0;
+ }
+
+ if (mGroup && mOperation)
+ {
+ mOperation->removeItem(mGroup);
+ mGroup = 0;
+ }
+
+ if (mMainMenu)
+ {
+ delete mMainMenu;
+ mMainMenu = 0;
+ }
+ /////
+ QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(changeServerUsage(int)));
+
+ if (mSignalMapper)
+ {
+ delete mSignalMapper;
+ mSignalMapper = NULL;
+ }
+
+ if (mPrimaryAction)
+ {
+ delete mPrimaryAction;
+ mPrimaryAction = 0;
+ }
+
+ if (mRadioButtonList)
+ {
+ mRadioButtonList->reset();
+ delete mRadioButtonList;
+ }
+
+ if (mDeleteQuery)
+ {
+ delete mDeleteQuery;
+ }
+ ///
+
+ // delete the signal mapper instances
+ int cnt = mSignalMapperList.count();
+ for (int i = 0; i < cnt ; ++i)
+ {
+ QObject::disconnect(mSignalMapperList[i], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+ delete mSignalMapperList[i];
+ mSignalMapperList[i] = NULL;
+ }
+
+ ///
+
+ mServerList.clear();
+ mSignalMapperList.clear();
+ mDeleteableServerList.clear();
+ qDebug() << "- PosSuplSettingsPlugin::~PosSuplSettingsPlugin()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::initialise
+// ---------------------------------------------------------------------------
+//
+int PosSuplSettingsPlugin::initialise(PosSettingsAdvOp* operation)
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::initialise()";
+
+ int result = 0;
+ // Assign to the member variable
+ mOperation = operation;
+
+ // create the signal mapper
+ mSignalMapper = new QSignalMapper();
+
+ //get the list of server present for positioning
+ if (mSuplSettingsEngine)
+ {
+ result = mSuplSettingsEngine->suplServerList(mServerList);
+ }
+
+ // if no error while getting the server list then add the group
+ // for Positioning servers
+ if (result == 0)
+ {
+ mGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+ hbTrId("txt_loe_subtitle_positioning_servers"), 0);
+ //Add the group to the data form
+ operation->appendDataFormItem(mGroup);
+ //list all the server inside the group
+ listServers();
+ }
+ QObject::connect(mSuplSettingsEngine, SIGNAL(serverListUpdated()), this,
+ SLOT(updateList()));
+
+ qDebug() << "- PosSuplSettingsPlugin::initialise()" << "result = "
+ << result;
+
+ return result;
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::ChangeServerUsage
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::changeServerUsage(int value)
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::changeServerUsage()";
+ //toggle the value based on the slpid
+ if (!mServerList[value].serverEnabled)
+ {
+ mSuplSettingsEngine->enableServer(mServerList[value].slpId, true);
+ }
+ else
+ {
+ mSuplSettingsEngine->enableServer(mServerList[value].slpId, false);
+ }
+ qDebug() << "- PosSuplSettingsPlugin::changeServerUsage()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::listServers
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::listServers()
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::listServers()";
+
+ qDebug() << "mServerList.count = " << mServerList.count();
+
+ //create a serverlist iterator
+ QList<PosServerParams>::const_iterator serveriterator;
+
+ // Get the server names and display
+ for (serveriterator = mServerList.begin(); serveriterator
+ != mServerList.end(); ++serveriterator)
+ {
+ qDebug() << "server name = " << serveriterator->serverAdd;
+ if (serveriterator->serverAdd.length() > 0)
+ {
+ //for each server create new checkbox item
+ HbDataFormModelItem* checkBox = new HbDataFormModelItem(
+ HbDataFormModelItem::CheckBoxItem, QString(), 0);
+
+ //set the widget data to the server name
+ checkBox->setContentWidgetData("text", QString(hbTrId(
+ "txt_loe_list_use_1")).arg(serveriterator->serverAdd));
+
+ //if the server is enabled set the initial state of the checkbox
+ if (serveriterator->serverEnabled)
+ {
+ checkBox->setContentWidgetData("checkState", Qt::Checked);
+ }
+ else
+ {
+ checkBox->setContentWidgetData("checkState", Qt::Unchecked);
+ }
+
+ qDebug() << "Adding checkbox in the group";
+
+ //this part of code is called when the servers are added and
+ //Advanced view is in the background. Since there is no group
+ // a new group has to be created to add the servers
+ mOperation->appendDataFormItem(checkBox, mGroup);
+
+ //create an object of dummy signal mapper class
+ //this is done to send the index info to the slots
+ //since checkbox is not of QObject type and dummy class is
+ // created.
+ PosSettingsSignalMapper* signalMapper =
+ new PosSettingsSignalMapper();
+ mSignalMapperList.append(signalMapper);
+
+ //add connection for statechanged of the checkbox, depending on which the
+ // add connections on change of check box state
+ mOperation->addConnection(checkBox, SIGNAL(stateChanged(int)),
+ mSignalMapperList[serveriterator - mServerList.begin()],
+ SLOT(signalmap()));
+
+ QObject::connect(mSignalMapperList[serveriterator
+ - mServerList.begin()], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+
+ // set mapping of each check box item to its index
+ if (mSignalMapper)
+ {
+ mSignalMapper->setMapping(mSignalMapperList[serveriterator
+ - mServerList.begin()], (serveriterator
+ - mServerList.begin()));
+ }
+ }
+ }
+
+ //use signal mapper to connect
+ QObject::connect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(changeServerUsage(int)));
+
+ qDebug() << "mDeleteableServerList.count before reset = "
+ << mDeleteableServerList.count();
+
+ //refresh the list of deleteable servers in case any deleteable server is added
+ mDeleteableServerList.clear();
+
+ if (mSuplSettingsEngine)
+ {
+ mSuplSettingsEngine->deletableServerList(mDeleteableServerList);
+ }
+
+ qDebug() << "mDeleteableServerList.count after fetch = "
+ << mDeleteableServerList.count();
+
+ //if the server list is <=1 while updating the list the menu is destroyed
+ if (mDeleteableServerList.count() == 0)
+ {
+ if (mMainMenu)
+ {
+ delete mMainMenu;
+ mMainMenu = 0;
+ }
+ }
+ else
+ {
+ delete mMainMenu;
+ mMainMenu = 0;
+ createMenu();
+ }
+ qDebug() << "- PosSuplSettingsPlugin::listServers()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::updateList
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::updateList()
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::updateList()";
+ int result = 0;
+ int oldChildCount = 0;
+
+ if (mGroup)
+ {
+ qDebug() << "Store the group info";
+
+ oldChildCount = mGroup->childCount();
+
+ // remove all connections
+ int count = mSignalMapperList.count();
+ qDebug() << "mSignalMapperList.count() = " << count;
+
+ for (int i = 0; i < count; ++i)
+ {
+ QObject::disconnect(mSignalMapperList[i], SIGNAL(signalmapped()),
+ mSignalMapper, SLOT(map()));
+ }
+ QObject::disconnect(mSignalMapper, SIGNAL(mapped(int)), this,
+ SLOT(changeServerUsage(int)));
+
+ qDebug() << "oldChildCount = " << oldChildCount;
+
+ //remove the children in the group
+ if (oldChildCount > 0)
+ {
+ qDebug() << "removing the children";
+ //mGroup->removeChildren(0, oldChildCount);
+ //ToDo: Hack from HbDataForm team
+ for (int i = 0; i < oldChildCount; ++i)
+ {
+ mGroup->removeChild(0);
+ }
+ }
+ }
+ else
+ {
+ qDebug() << "Creating new group ";
+
+ mGroup = new HbDataFormModelItem(HbDataFormModelItem::GroupItem,
+ hbTrId("txt_loe_subtitle_positioning_servers"), 0);
+ mOperation->appendDataFormItem(mGroup);
+ }
+
+ qDebug() << "mServerList.count() before clean = " << mServerList.count();
+
+ //clear the list and get the list of server present for positioning
+ mServerList.clear();
+ if (mSuplSettingsEngine)
+ {
+ result = mSuplSettingsEngine->suplServerList(mServerList);
+ }
+ qDebug() << "result = " << result;
+
+ //update the new list to the group
+ if (result == 0)
+ {
+ listServers();
+ }
+ if (result == -1)
+ {
+ qDebug() << "Removing the group from form";
+ //remove the group
+ mOperation->removeItem(mGroup);
+ mGroup = 0;
+ // delete the menu
+ if (mMainMenu)
+ {
+ delete mMainMenu;
+ mMainMenu = 0;
+ }
+ }
+ qDebug() << "- PosSuplSettingsPlugin::updateList()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::onDeleteServer
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::onDeleteServer()
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::onDeleteServer()";
+ //list that will contain the deleteable servers names
+ QStringList contentList;
+
+ //get the deleteable server list from the engine
+ QList<PosServerParams>::const_iterator iterator;
+
+ qDebug() << "mDeleteableServerList.count = "
+ << mDeleteableServerList.count();
+
+ //add the server names to the string list
+ for (iterator = mDeleteableServerList.constBegin(); iterator
+ != mDeleteableServerList.constEnd(); ++iterator)
+ {
+ //Copy the address to Qstring object
+ qDebug() << "deletable server = " << iterator->serverAdd;
+ contentList << iterator->serverAdd;
+ }
+
+ // delete the mRadioButtonList before creating it,each time the delete
+ // query needs to be popped up
+ if (mRadioButtonList != 0)
+ {
+ delete mRadioButtonList;
+ mRadioButtonList = 0;
+ }
+ //create a radion button list of the deletable servers
+ mRadioButtonList = new HbRadioButtonList();
+ mRadioButtonList->setItems(contentList);
+ QObject::connect(mRadioButtonList, SIGNAL(itemSelected(int)), this,
+ SLOT(setPrimaryAction(int)));
+
+ // delete the mDeleteQuery before creating it,each time the delete
+ // query needs to be popped up
+
+ if (mDeleteQuery != 0)
+ {
+ delete mDeleteQuery;
+ mDeleteQuery = 0;
+ }
+ //create the query dialog and attach the radio button to the dialog
+ mDeleteQuery = new HbDialog();
+
+ mDeleteQuery->setTimeout(HbDialog::NoTimeout);
+
+ //set the proper layout for the mDeleteQuery dialog
+ qreal lMargin = 0;
+ qreal rMargin = 0;
+ qreal tMargin = 0;
+
+ if (mDeleteQuery->style()->parameter("hb-param-margin-gene-left",
+ lMargin) && mDeleteQuery->style()->parameter(
+ "hb-param-margin-gene-right", rMargin)
+ && mDeleteQuery->style()->parameter(
+ "hb-param-margin-gene-top", tMargin))
+ {
+ HbLabel * heading = new HbLabel(QString(hbTrId(
+ "txt_loe_info_select_server_to_delete")));
+ heading->setContentsMargins(lMargin, tMargin, rMargin, 0);
+ mDeleteQuery->setHeadingWidget(heading);
+ }
+
+ // delete the mPrimaryAction before creating it,each time the delete
+ // query needs to be popped up
+ if (mPrimaryAction != 0)
+ {
+ delete mPrimaryAction;
+ mPrimaryAction = 0;
+ }
+ //the primary action that will come in the SK1 of the Dialog box
+ mPrimaryAction
+ = new HbAction(QString(hbTrId("txt_common_button_delete")));
+
+ mDeleteQuery->addAction(mPrimaryAction);
+ mDeleteQuery->addAction(new HbAction(QString(hbTrId(
+ "txt_common_button_cancel"))));
+ QObject::connect(mPrimaryAction, SIGNAL(triggered()), this,
+ SLOT(deleteServer()));
+
+ //set the content Widget
+ mDeleteQuery->setContentWidget(mRadioButtonList);
+
+ //the Primary action is disabled since no server from the list is selected
+ mPrimaryAction->setDisabled(true);
+
+ mDeleteQuery->show();
+
+ qDebug() << "- PosSuplSettingsPlugin::onDeleteServer()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::createMenu
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::createMenu()
+ {
+ qDebug() << "+ PosSuplSettingsPlugin::createMenu()";
+ mMainMenu = new HbMenu();
+ HbAction* action = mMainMenu->addAction(hbTrId(
+ "txt_loe_opt_delete_server"));
+
+ QObject::connect(action, SIGNAL(triggered()), this,
+ SLOT(onDeleteServer()));
+
+ mOperation->addAction(action, HbView::OptionsMenu);
+ qDebug() << "- PosSuplSettingsPlugin::createMenu()";
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::setPrimaryAction
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::setPrimaryAction(int /*itemSelected*/)
+ {
+ //enable the primary Action
+ if (mPrimaryAction)
+ {
+ mPrimaryAction->setEnabled(true);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// PosSuplSettingsPlugin::deleteServer
+// ---------------------------------------------------------------------------
+//
+void PosSuplSettingsPlugin::deleteServer()
+ {
+ //get the index of the selected servers
+ int serverIndex = mRadioButtonList->selected();
+
+ if( serverIndex != -1 )
+ {
+ if (mSuplSettingsEngine)
+ {
+ //delete the server
+ mSuplSettingsEngine->deleteServer(
+ mDeleteableServerList[serverIndex].slpId);
+ }
+ }
+ }
+Q_EXPORT_PLUGIN2(possuplsettings, PosSuplSettingsPlugin)
+;
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/src/possuplsettingsengine.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2010 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 is the engine for Positioning Supl Settings plugin
+ * for Positioning Settings's Advanced view
+ *
+ */
+#include "possuplsettingsengine.h"
+#include "possuplsettingsengineprivate.h"
+
+#include <QDebug>
+
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::PosSuplSettingsEngine()
+//-----------------------------------------------------------------
+PosSuplSettingsEngine::PosSuplSettingsEngine() :
+ d_ptr(0)
+ {
+ qDebug() << "+ PosSuplSettingsEngine::PosSuplSettingsEngine()";
+ d_ptr = new PosSuplSettingsEnginePrivate();
+ //Set the PosSuplSettingsChangeObserver
+ if (d_ptr)
+ {
+ d_ptr->SetObserver(this);
+ }
+ qDebug() << "- PosSuplSettingsEngine::PosSuplSettingsEngine()";
+ }
+
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::~PosSuplSettingsEngine()
+//-----------------------------------------------------------------
+PosSuplSettingsEngine::~PosSuplSettingsEngine()
+ {
+ qDebug() << "+ PosSuplSettingsEngine::~PosSuplSettingsEngine()";
+ if (d_ptr)
+ {
+ delete d_ptr;
+ d_ptr = 0;
+ }
+ qDebug() << "- PosSuplSettingsEngine::~PosSuplSettingsEngine()";
+ }
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::suplServerList
+//-----------------------------------------------------------------
+int PosSuplSettingsEngine::suplServerList(QList<PosServerParams>& serverList)
+ {
+ qDebug() << "+ PosSuplSettingsEngine::suplServerList()";
+ int result = 0;
+ //Clear the server list to remove any junk
+ //serverList.clear();
+ if (d_ptr)
+ {
+ result = d_ptr->GetServerList(serverList);
+ }
+ qDebug() << "- PosSuplSettingsEngine::suplServerList() result = %d" << result;
+ return result;
+ }
+
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::deletableServerList
+//-----------------------------------------------------------------
+int PosSuplSettingsEngine::deletableServerList(
+ QList<PosServerParams>& serverList)
+ {
+ qDebug() << "+ PosSuplSettingsEngine::deletableServerList()";
+ int result = 0;
+ //Clear the server list to remove any junk
+ serverList.clear();
+ if (d_ptr)
+ {
+ result = d_ptr->GetRemovableServerList(serverList);
+ }
+ qDebug() << "- PosSuplSettingsEngine::deletableServerList() result =%d" << result;
+ return result;
+ }
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::enableServer
+//-----------------------------------------------------------------
+int PosSuplSettingsEngine::enableServer(int serverIndex, bool value)
+ {
+ qDebug() << "+ PosSuplSettingsEngine::enableServer()";
+ int result = 0;
+ if (d_ptr)
+ {
+ result = d_ptr->SetServerStatus(serverIndex, value);
+ }
+ qDebug() << "- PosSuplSettingsEngine::enableServer() result =%d" << result;
+ return result;
+ }
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::deleteServer
+//-----------------------------------------------------------------
+int PosSuplSettingsEngine::deleteServer(int serverIndex)
+ {
+ qDebug() << "+ PosSuplSettingsEngine::deleteServer()";
+ int result = 0;
+ if (d_ptr)
+ {
+ result = d_ptr->RemoveServer(serverIndex);
+ }
+ qDebug() << "- PosSuplSettingsEngine::deleteServer() result =%d" << result;
+ //Check where to return KErrPermissionDenied
+ return result;
+ }
+//-----------------------------------------------------------------
+//PosSuplSettingsEngine::handleSuplSettingsChange
+//-----------------------------------------------------------------
+void PosSuplSettingsEngine::handleSuplSettingsChange(
+ MSuplSettingsObserver::TSuplSettingsEventType /*event*/, int /**slpId*/)
+ {
+ qDebug() << "+ PosSuplSettingsEngine::handleSuplSettingsChange()";
+ emit serverListUpdated();
+ qDebug() << "- PosSuplSettingsEngine::handleSuplSettingsChange()";
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/possuplsettingsplugin/src/possuplsettingsengineprivate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,259 @@
+/*
+ * Copyright (c) 2010 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: Implementation of positioning settings engine private class.
+ *
+ */
+#include "possuplsettingsengineprivate.h"
+
+#include <epos_csuplsettings.h>
+#include <epos_csuplsettingparams.h>
+#include <QDebug>
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::PosSuplSettingsEnginePrivate()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+PosSuplSettingsEnginePrivate::PosSuplSettingsEnginePrivate() :
+ mPosSuplSettingsObserver(NULL), mSuplSettings(NULL)
+ {
+ QT_TRAP_THROWING( mSuplSettings = CSuplSettings::NewL();
+ mSuplSettings->SetObserverL(*this);
+ );
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::~PosSuplSettingsEnginePrivate()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+PosSuplSettingsEnginePrivate::~PosSuplSettingsEnginePrivate()
+ {
+
+
+ mServerList.ResetAndDestroy();
+
+ if (mSuplSettings)
+ {
+ mSuplSettings->RemoveObserver();
+ delete mSuplSettings;
+ mSuplSettings = NULL;
+ }
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::GetServerList()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSuplSettingsEnginePrivate::GetServerList(
+ QList<PosServerParams> & aParamValues)
+ {
+ TInt64 slpId;
+ HBufC* serverAddress = HBufC::New(KMaxHSLPAddrLen);
+ HBufC* iapName = HBufC::New(KMaxIAPLen);
+ TBool serverEnabled;
+ TBool simChangeRemove;
+ TBool usageInHomeNw;
+ TBool editable;
+
+ if (!serverAddress || !iapName)
+ {
+ delete serverAddress;
+ delete iapName;
+ return KErrNoMemory;
+ }
+
+ mServerList.ResetAndDestroy();
+
+ TInt error = mSuplSettings->GetAllSlp(mServerList); //handle return value...
+ if (error!=KErrNone)
+ {
+ delete serverAddress;
+ delete iapName;
+ mServerList.Close();
+ mServerList.ResetAndDestroy();
+ return error;
+ }
+
+ TInt count = mServerList.Count();
+ for(TInt i = 0; i < count; ++i )
+ {
+ PosServerParams params;
+ error = mServerList[i]->Get(
+ slpId,
+ serverAddress->Des(),
+ iapName->Des(),
+ serverEnabled,
+ simChangeRemove,
+ usageInHomeNw,
+ editable);
+
+ if (error == 0)
+ {
+// QString sName((QChar*) (serverAddress->Ptr()),
+// serverAddress->Length());
+
+ QString sName = QString::fromUtf16(serverAddress->Ptr(), serverAddress->Length());
+
+ params.slpId = slpId;
+ params.serverAdd = sName;
+ params.serverEnabled = serverEnabled;
+
+ aParamValues.append(params);
+ }
+ }
+
+ delete serverAddress;
+ delete iapName;
+
+ return KErrNone;
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::SetServerStatus()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSuplSettingsEnginePrivate::SetServerStatus(int aSlpId, bool aEnableFlg)
+ {
+ return (mSuplSettings->SetServerEnabledFlag(aSlpId, aEnableFlg));
+ }
+
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::RemoveServer()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSuplSettingsEnginePrivate::RemoveServer(int aSlpId)
+ {
+ return (mSuplSettings->RemoveServer(aSlpId));
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::GetRemovableServerList()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSuplSettingsEnginePrivate::GetRemovableServerList(QList<
+ PosServerParams>& aParamValues)
+ {
+ qDebug() << "+ PosSuplSettingsEnginePrivate::getRemovableServerList()";
+ TInt64 slpId;
+ HBufC* serverAddress = HBufC::New(KMaxHSLPAddrLen);
+ HBufC* iapName = HBufC::New(KMaxIAPLen);
+ TBool serverEnabled;
+ TBool simChangeRemove;
+ TBool usageInHomeNw;
+ TBool editable;
+ TBool productConfigured;
+
+ if (!serverAddress || !iapName)
+ {
+ delete serverAddress;
+ delete iapName;
+ return KErrNoMemory;
+ }
+
+ mServerList.ResetAndDestroy();
+
+ TInt error = mSuplSettings->GetAllSlp(mServerList); //handle return value...
+ if (error!=KErrNone)
+ {
+ delete serverAddress;
+ delete iapName;
+ mServerList.Close();
+ mServerList.ResetAndDestroy();
+ return error;
+ }
+
+ TInt count = mServerList.Count();
+ qDebug() << "Deleteable server list count = " << count;
+ for(TInt i = 0; i < count; ++i )
+ {
+
+ PosServerParams params;
+ error = mServerList[i]->Get(slpId,
+ serverAddress->Des(),
+ iapName->Des(),
+ serverEnabled,
+ simChangeRemove,
+ usageInHomeNw,
+ editable);
+ TInt err = mServerList[i]->GetServerConfigurationType(productConfigured);
+ qDebug()<< "GetServerConfigurationType returns error = "<< err;
+ if (error == 0)
+ {
+ QString sName = QString::fromUtf16(serverAddress->Ptr(), serverAddress->Length());
+
+ params.slpId = slpId;
+ params.serverAdd = sName;
+ params.serverEnabled = serverEnabled;
+
+ if (!productConfigured)
+ {
+ aParamValues.append(params);
+ }
+ }
+ }
+
+ delete serverAddress;
+ delete iapName;
+ qDebug() << "- PosSuplSettingsEnginePrivate::getRemovableServerList()";
+ return KErrNone;
+
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::SetObserver()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+int PosSuplSettingsEnginePrivate::SetObserver(
+ PosSuplSettingsChangeObserver* aObserver)
+ {
+ TInt ret;
+ if (!mPosSuplSettingsObserver)
+ {
+ mPosSuplSettingsObserver = aObserver;
+ ret = KErrNone;
+ }
+ else
+ {
+ ret = KErrAlreadyExists;
+ }
+ return ret;
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::HandleSuplSettingsChangeL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSuplSettingsEnginePrivate::HandleSuplSettingsChangeL(
+ MSuplSettingsObserver::TSuplSettingsEventType aEvent, TInt aSlpId)
+ {
+ if (aEvent == MSuplSettingsObserver::ESuplSettingsDBAddEvent || aEvent
+ == MSuplSettingsObserver::ESuplSettingsDBDeleteEvent)
+ {
+ if (mPosSuplSettingsObserver)
+ {
+ mPosSuplSettingsObserver->handleSuplSettingsChange(aEvent, aSlpId);
+ }
+ }
+ }
+
+//---------------------------------------------------------------------
+// PosSuplSettingsEnginePrivate::HandleSuplTriggerStatusChangeL()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void PosSuplSettingsEnginePrivate::HandleSuplTriggerStatusChangeL(
+ CSuplSettings::TSuplTriggerStatus /*aSuplTriggerStatus*/)
+ {
+ }
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/rom/possettings.iby Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef __POSSETTINGS_IBY__
+#define __POSSETTINGS_IBY__
+
+#ifdef __LOCATIONSYSUI
+
+#include <bldvariant.hrh>
+file=ABI_DIR\BUILD_DIR\possettingsengine.dll SHARED_LIB_DIR\possettingsengine.dll
+file=ABI_DIR\BUILD_DIR\possettingsplugin.dll SHARED_LIB_DIR\possettingsplugin.dll
+file=ABI_DIR\BUILD_DIR\pospsysettings.dll SHARED_LIB_DIR\pospsysettings.dll
+file=ABI_DIR\BUILD_DIR\possuplsettings.dll SHARED_LIB_DIR\possuplsettings.dll
+file=ABI_DIR\BUILD_DIR\poslocationservices.dll SHARED_LIB_DIR\poslocationservices.dll
+data=DATAZ_\system\install\possettings_stub.sis system\install\possettings_stub.sis
+data=\epoc32\data\c\resource\qt\plugins\controlpanel\possettingsplugin.qtplugin resource\qt\plugins\controlpanel\possettingsplugin.qtplugin
+data=\epoc32\data\c\resource\qt\plugins\positioningsettings\pospsysettings.qtplugin resource\qt\plugins\positioningsettings\pospsysettings.qtplugin
+data=\epoc32\data\c\resource\qt\plugins\positioningsettings\possuplsettings.qtplugin resource\qt\plugins\positioningsettings\possuplsettings.qtplugin
+data=\epoc32\data\c\resource\qt\plugins\positioningsettings\poslocationservices.qtplugin resource\qt\plugins\positioningsettings\poslocationservices.qtplugin
+
+#endif // (__LOCATIONSYSUI)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/possettings/rom/possettings_resources.iby Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: Positioning Settings Resources iby file
+*
+*/
+
+
+#ifndef __POSSETTINGSPLUGIN_RESOURCES_IBY__
+#define __POSSETTINGSPLUGIN_RESOURCES_IBY__
+
+#ifdef __LOCATIONSYSUI
+
+#include <data_caging_paths_for_iby.hrh>
+
+// <-- QT POSSETTINGS START -->
+data=DATAZ_\QT_TRANSLATIONS_DIR\lilocationmw.qm QT_TRANSLATIONS_DIR\lilocationmw.qm
+// <-- QT POSSETTINGS END -->
+
+#endif // (__LOCATIONSYSUI)
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/contactresolversession/bwins/locnotificationclientu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,6 @@
+EXPORTS
+ ?Close@RContactResolverSession@@QAEXXZ @ 1 NONAME ; void RContactResolverSession::Close(void)
+ ?Connect@RContactResolverSession@@QAEHXZ @ 2 NONAME ; int RContactResolverSession::Connect(void)
+ ??0RContactResolverSession@@QAE@XZ @ 3 NONAME ; RContactResolverSession::RContactResolverSession(void)
+ ?ResolveRequestorsL@RContactResolverSession@@QAEXAAV?$RPointerArray@VCPosRequestor@@@@@Z @ 4 NONAME ; void RContactResolverSession::ResolveRequestorsL(class RPointerArray<class CPosRequestor> &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/contactresolversession/eabi/locnotificationclientu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _ZN23RContactResolverSession18ResolveRequestorsLER13RPointerArrayI13CPosRequestorE @ 1 NONAME
+ _ZN23RContactResolverSession5CloseEv @ 2 NONAME
+ _ZN23RContactResolverSession7ConnectEv @ 3 NONAME
+ _ZN23RContactResolverSessionC1Ev @ 4 NONAME
+ _ZN23RContactResolverSessionC2Ev @ 5 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/contactresolversession/group/contactresolversession.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2010 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: Project definition file for Contact Resolver clientlib
+*
+*/
+
+
+// INCLUDES
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh> // For the MW_LAYER_SYSTEMINCLUDE
+
+TARGET locnotificationclient.dll
+TARGETTYPE DLL
+UID 0x1000008d 0xEF2227BD
+
+CAPABILITY All -Tcb
+
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../src
+SOURCE contactresolversession.cpp
+
+
+
+// System Include
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE .
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+
+LIBRARY euser.lib
+LIBRARY eiksrv.lib
+LIBRARY eposprvtyp.lib
+LIBRARY estor.lib bafl.lib
+LIBRARY flogger.lib
+
+EPOCALLOWDLLDATA
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/contactresolversession/inc/contactresolversession.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2010 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: RContactResolverSession
+ * This class provides the client-side interface to the server session
+ */
+#ifndef CONTACTRESOLVERSESSION_H
+#define CONTACTRESOLVERSESSION_H
+
+#include <e32std.h>
+
+class CPosRequestor;
+
+class RContactResolverSession : public RSessionBase
+ {
+public:
+ // Constructors and destructors
+
+ /**
+ * Default constructor.
+ * Constructs the object.
+ */
+ IMPORT_C RContactResolverSession();
+
+public:
+ // New functions
+
+ /**
+ * Connect.
+ * Connects to the server and create a session.
+ * @return Error code.
+ */
+ IMPORT_C TInt Connect();
+
+ /**
+ * Resolve the requestors.
+ * @param[IN,OUT] aRequestors Array of Requestors
+ */
+ IMPORT_C void ResolveRequestorsL(
+ RPointerArray<CPosRequestor>& aRequestors);
+
+ /**
+ * closes the session.
+ */
+ IMPORT_C void Close();
+
+ /**
+ * Starts the server process if not already started.
+ */
+ static TInt StartServer();
+
+ /**
+ * creates the server process.
+ */
+ static TInt CreateServerProcess();
+
+private:
+ /**
+ * Version.
+ * Gets the version number.
+ * @return The version.
+ */
+ TVersion Version() const;
+
+ };
+
+#endif //CONTACTRESOLVERSESSION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/contactresolversession/src/contactresolversession.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,228 @@
+/*
+ * Copyright (c) 2010 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: client-side interface implementation for server session.
+ *
+ */
+
+#include "contactresolversession.h"
+#include "locprivacyinternal.h"
+#include "locprivacycommon.h"
+
+#include <lbs/epos_cposrequestor.h>
+#include <lbs/EPos_RPosRequestorStack.h>
+#include <e32cmn.h>
+#include <s32strm.h>
+#include <s32mem.h>
+
+
+TInt KDefaultMessageSlots = 255;
+const TUid KServerUid3 =
+ {
+ 0x101f7a86
+ };
+_LIT(KServerFilename, "locnotificationserver.exe");
+
+// -----------------------------------------------------------------------------
+// RContactResolverSession::RContactResolverSession()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RContactResolverSession::RContactResolverSession() :
+ RSessionBase()
+ {
+ // No implementation required
+ }
+
+// -----------------------------------------------------------------------------
+// RContactResolverSession::ResolveRequestorsL()
+// Issues a request for the time to the server.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void RContactResolverSession::ResolveRequestorsL(RPointerArray<
+ CPosRequestor>& aRequestors)
+ {
+
+ RPosRequestorStack* requestors = new (ELeave) RPosRequestorStack;
+ CleanupStack::PushL(requestors);
+
+ //-------------------------------------------------------------
+ // getting size from the server in first IPC
+ CBufFlat* buffer = CBufFlat::NewL(512);
+ CleanupStack::PushL(buffer);
+ RBufWriteStream writeStream;
+ writeStream.Open(*buffer);
+ CleanupClosePushL(writeStream);
+
+ TInt count = aRequestors.Count();
+ for (TInt i = 0; i < count; ++i)
+ {
+ requestors->Append(aRequestors[i]);
+ }
+ requestors->ExternalizeL(writeStream);
+ writeStream.CommitL();
+
+ TPtr8 ptr = buffer->Ptr(0);
+
+ TIpcArgs args;
+ TInt size = 0;
+ TPckg<TInt> sizePkg(size);
+ args.Set(0, &sizePkg);
+ args.Set(1, &ptr);
+
+ TInt in = SendReceive(ELocPrivacyGetSize, args);
+
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(buffer);
+ CleanupStack::PopAndDestroy(requestors);
+ //-------------------------------------------------------------
+ //-------------------------------------------------------------
+ // allocating the buffer of the size obtained in the first IPC
+ // and getting the data from the server in the 2nd IPC
+
+ // This call waits for the server to complete the request before
+ // proceeding. When it returns, the new time will be in aTime.
+
+
+ CBufFlat* buffer1 = CBufFlat::NewL(512);
+ CleanupStack::PushL(buffer1);
+ buffer1->ResizeL(size);
+
+ TPtr8 bufPtr = buffer1->Ptr(0);
+ TIpcArgs ipcArgs;
+ ipcArgs.Set(0, &bufPtr);
+ in = SendReceive(ELocPrivacyResolve, ipcArgs);
+
+ //-------------------------------------------------------------
+
+ RBufReadStream readStream;
+ readStream.Open(*buffer1);
+ CleanupClosePushL(readStream);
+ RPosRequestorStack* requestors2 = new (ELeave) RPosRequestorStack;
+ CleanupStack::PushL(requestors2);
+ requestors2->InternalizeL(readStream);
+ TInt cnt = requestors2->Count();
+ aRequestors.Reset();
+ for (TInt i = 0; i < cnt; ++i)
+ {
+ CPosRequestor * entry = requestors2->operator [](i);
+ aRequestors.Append(entry);
+ }
+ CleanupStack::PopAndDestroy(requestors2);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(buffer1);
+
+ }
+
+// -----------------------------------------------------------------------------
+// RContactResolverSession::Connect()
+// Connects to the server and create a session.
+// -----------------------------------------------------------------------------
+
+EXPORT_C TInt RContactResolverSession::Connect()
+ {
+ TInt error = StartServer();
+
+ if (KErrNone == error)
+ {
+ error = CreateSession(KLocPrivacyServerName, Version(),
+ KDefaultMessageSlots);
+ }
+ return error;
+ }
+
+// -----------------------------------------------------------------------------
+// StartServer()
+// Starts the server if it is not already running
+// -----------------------------------------------------------------------------
+//
+TInt RContactResolverSession::StartServer()
+ {
+ TInt result;
+
+ TFindServer findServer(KLocPrivacyServerName);
+ TFullName name;
+
+ result = findServer.Next(name);
+ if (result == KErrNone)
+ {
+ // Server already running
+ return KErrNone;
+ }
+
+ result = CreateServerProcess();
+ if (result != KErrNone)
+ {
+ return result;
+ }
+
+ return KErrNone;
+ }
+
+// -----------------------------------------------------------------------------
+// CreateServerProcess()
+// Creates a server process
+// -----------------------------------------------------------------------------
+//
+TInt RContactResolverSession::CreateServerProcess()
+ {
+ TInt result;
+
+ const TUidType serverUid(KNullUid, KNullUid, KServerUid3);
+
+ RProcess server;
+ TRequestStatus status;
+ result = server.Create(KServerFilename, KNullDesC, serverUid);
+
+ if (result != KErrNone)
+ {
+ server.Close();
+ return KErrNotFound;
+ }
+
+ server.Rendezvous(status);
+
+ if (status != KRequestPending)
+ {
+ User::WaitForRequest(status);
+ server.Kill(KErrNone);
+ server.Close();
+ return (status.Int());
+ }
+ else
+ {
+ server.Resume();
+ }
+
+ User::WaitForRequest(status);
+ server.Close();
+
+ if (status != KErrNone)
+ {
+ return (status.Int());
+ }
+
+ return KErrNone;
+ }
+
+TVersion RContactResolverSession::Version() const
+ {
+ return TVersion(KLocPrivacyServerMajorVersionNumber,
+ KLocPrivacyServerMinorVersionNumber,
+ KLocPrivacyServerBuildVersionNumber);
+ }
+
+EXPORT_C void RContactResolverSession::Close()
+ {
+ RSessionBase::Close();
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/inc/contactresolversession.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2010 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: RContactResolverSession
+ * This class provides the client-side interface to the server session
+ */
+#ifndef CONTACTRESOLVERSESSION_H
+#define CONTACTRESOLVERSESSION_H
+
+#include <e32std.h>
+
+class CPosRequestor;
+
+class RContactResolverSession : public RSessionBase
+ {
+public:
+ // Constructors and destructors
+
+ /**
+ * Default constructor.
+ * Constructs the object.
+ */
+ IMPORT_C RContactResolverSession();
+
+public:
+ // New functions
+
+ /**
+ * Connect.
+ * Connects to the server and create a session.
+ * @return Error code.
+ */
+ IMPORT_C TInt Connect();
+
+ /**
+ * Resolve the requestors.
+ * @param[IN,OUT] aRequestors Array of Requestors
+ */
+ IMPORT_C void ResolveRequestorsL(
+ RPointerArray<CPosRequestor>& aRequestors);
+
+ /**
+ * closes the session.
+ */
+ IMPORT_C void Close();
+
+ /**
+ * Starts the server process if not already started.
+ */
+ static TInt StartServer();
+
+ /**
+ * creates the server process.
+ */
+ static TInt CreateServerProcess();
+
+private:
+ /**
+ * Version.
+ * Gets the version number.
+ * @return The version.
+ */
+ TVersion Version() const;
+
+ };
+
+#endif //CONTACTRESOLVERSESSION_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/inc/locprivacycommon.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: Server name and version definition.
+*
+*/
+
+#ifndef PRIVACYCOMMON_H
+#define PRIVACYCOMMON_H
+
+#include <e32cmn.h>
+
+// CONSTANTS
+_LIT(KLocPrivacyServerName, "!locnotificationserver");
+
+const TUint KLocPrivacyServerMajorVersionNumber = 0;
+const TUint KLocPrivacyServerMinorVersionNumber = 0;
+const TUint KLocPrivacyServerBuildVersionNumber = 0;
+
+#endif // PRIVACYCOMMON_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/inc/locprivacyinternal.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: IPC enumerations and constant definition for server.
+*
+*/
+
+#ifndef PRIVACYINTERNAL_H
+#define PRIVACYINTERNAL_H
+
+
+
+//CONSTANTS
+
+// IPC enumerations
+enum TPosPrivacyClientServer
+ {
+ // To get the size of modified buffer containing resolved requestors.
+ ELocPrivacyGetSize = 0,
+ // To get the resolved requestors.
+ ELocPrivacyResolve
+ };
+
+// Buffer granularity
+const TInt KPosBufFlatExpandSize = 100;
+
+#endif // PRIVACYINTERNAL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/inc/locutilsdebug.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2010 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: LocUtilsDebug contains debug macros.
+*
+*/
+
+
+#ifndef LOCUTILSDEBUG_H
+#define LOCUTILSDEBUG_H
+
+// INCLUDES
+#include "locutilsdebugconfig.hrh"
+
+#include <e32std.h>
+
+
+// MACROS
+#define DEBUG(TEXT) { \
+ _LIT( KText, #TEXT ); \
+ Debug(KText) \
+ }
+
+#define LOC(TEXT, ARG1) { \
+ _LIT( KText, #TEXT ); \
+ Debug( KText, (ARG1) ); \
+ }
+
+#define LOC2(TEXT, ARG1, ARG2) { \
+ _LIT( KText, #TEXT ); \
+ Debug( KText,(ARG1), (ARG2) ); \
+ }
+
+#define LOC3(TEXT, ARG1, ARG2, ARG3) { \
+ _LIT( KText, #TEXT ); \
+ Debug( KText, (ARG1), (ARG2), (ARG3) ); \
+ }
+
+IMPORT_C void Debug( TRefByValue<const TDesC> aText, ...);
+
+/**
+* By using component specific debug macros unnecessary
+* debug prints can be avoided.
+* Also component specific debugging is possible by compiling
+* only certain components when LOC_ENABLE_DEBUG_PRINT is defined.
+*/
+
+#ifdef LOC_ENABLE_DEBUG_PRINT
+
+#define LOCUTILSDEBUG(TEXT) DEBUG(TEXT);
+#define LOCUTILSDEBUG1(TEXT, ARG1) LOC(TEXT, ARG1);
+#define LOCUTILSDEBUG2(TEXT, ARG1, ARG2) LOC2(TEXT, ARG1, ARG2);
+#define LOCUTILSDEBUG3(TEXT, ARG1, ARG2, ARG3) LOC3(TEXT, ARG1, ARG2, ARG3);
+
+#else
+
+#define LOCUTILSDEBUG(TEXT) ;
+#define LOCUTILSDEBUG1(TEXT, ARG1) ;
+#define LOCUTILSDEBUG2(TEXT, ARG1, ARG2) ;
+#define LOCUTILSDEBUG3(TEXT, ARG1, ARG2, ARG3) ;
+
+#endif
+
+#endif // LOCUTILSDEBUG_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/inc/locutilsdebugconfig.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 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 is the main build-time configuration file of Loc Utils
+*
+*/
+
+
+#ifndef LOCUTILSDEBUGCONFIG_HRH_
+#define LOCUTILSDEBUGCONFIG_HRH_
+
+// INCLUDES
+
+// Flags for development:
+
+
+// Defined LOC_ENABLE_DEBUG_PRINT flag enables debug prints to a file.
+
+//#define LOC_ENABLE_DEBUG_PRINT
+
+#endif // LOCUTILSDEBUGCONFIG_HRH_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/install/privacydialogs_stub.pkg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,40 @@
+;
+; Copyright (c) 2010 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: Stub Package file for Privacy dialogs
+;
+;
+; Languages
+&EN
+
+; Header
+#{"privacydialog"}, (0x101f7a86), 1, 0, 0, TYPE = SA
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Hb custom device dialog plugin
+"" - "z:\sys\bin\posverificationdialogplugin.dll"
+"" - "z:\resource\plugins\devicedialogs\posverificationdialogplugin.qtplugin"
+
+; Qt engine dll
+"" - "z:\sys\bin\locnotificationengine.dll"
+
+;Symbian components
+"" - "z:\sys\bin\contactresolversession.dll"
+"" - "z:\sys\bin\locprivacysrv.exe"
+"" - "z:\sys\bin\locutils.dll"
+"" - "z:\sys\bin\locverifierdlg.dll"
Binary file locationsystemui/locationsysui/privacyverifiernotifierui/install/privacydialogs_stub.sis has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/bwins/locnotificationengineu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+ ?ResolveRequestorsL@CLocRequestorUtilsResolver@@QAEXAAV?$RPointerArray@VCPosRequestor@@@@@Z @ 1 NONAME ; void CLocRequestorUtilsResolver::ResolveRequestorsL(class RPointerArray<class CPosRequestor> &)
+ ?NewL@CLocRequestorUtilsResolver@@SAPAV1@XZ @ 2 NONAME ; class CLocRequestorUtilsResolver * CLocRequestorUtilsResolver::NewL(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/eabi/locnotificationengineu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+ _ZN26CLocRequestorUtilsResolver18ResolveRequestorsLER13RPointerArrayI13CPosRequestorE @ 1 NONAME
+ _ZN26CLocRequestorUtilsResolver4NewLEv @ 2 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/inc/locrequestorutilsresolver.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2010 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: Requestor utilities, supports Resolving of Requestors.
+*
+*/
+
+
+#ifndef CLOCREQUESTORUTILSRESOLVER_H
+#define CLOCREQUESTORUTILSRESOLVER_H
+
+// INCLUDES
+#include <e32base.h>
+
+//FORWARD DECLARATION
+class CPosRequestor;
+class QLocNotificationEngine;
+
+// CLASS DECLARATION
+
+/**
+*
+*
+*
+*/
+class CLocRequestorUtilsResolver : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Symbian OS constructor
+ * @param None
+ * @return new object
+ */
+ IMPORT_C static CLocRequestorUtilsResolver* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CLocRequestorUtilsResolver();
+
+ public: // Implement base class virtual methods
+ /**
+ * Resolve the requestors.
+ * @param[IN,OUT] aRequestors Array of Requestors,ownership is transferred to caller
+
+ */
+ IMPORT_C void ResolveRequestorsL(
+ RPointerArray<CPosRequestor>& aRequestors );
+
+
+ private: // Constructors
+ /**
+ * C++ default constructor.
+ */
+ CLocRequestorUtilsResolver();
+
+ /**
+ * The Symbian 2nd Phase Constructor is always Private
+ */
+ void ConstructL();
+
+
+
+ private: // member data
+
+ // Qt implementation class for notification engine.Ownership remains with object
+ QLocNotificationEngine* iEngine;
+ };
+
+#endif // CLOCREQUESTORUTILSRESOLVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/inc/qlocnotificationengine.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings engine class.
+*
+*/
+
+#ifndef QLOCNOTIFICATIONENGINE_H
+#define QLOCNOTIFICATIONENGINE_H
+
+#include <qcontactrequests.h>
+
+class QContactManager;
+
+/**
+ * This class is used as a container for Pos requestor data which needs to be resolved.
+ * After resolution the result is returned in the same class. QPosRequestorData is used
+ * so as to avoid exposing CPosRequestorData to
+ */
+
+class QPosRequestorData
+ {
+
+public :
+ enum IdFormat
+ {
+ /** The requestor ID format is unknown. */
+ EIdFormatUnknown,
+ /** The requestor is identified by name. */
+ EIdFormatGenericName,
+ /** The requestor is identified by phone number. */
+ EIdFormatPhoneNumber,
+ /** The requestor is identified by URL. */
+ EIdFormatUrl,
+ /** The requestor is identified by email address. */
+ EIdFormatEmail,
+ /** The requestor is identified by the URL of the SIP session. */
+ EIdFormatSIPUrl,
+ /** The requestor is identified by the IMS public identity. */
+ EIdFormatIMSPublicIdentity,
+ /** The requestor is identified by Mobile identification Number. */
+ EIdFormatMIN,
+ /** The requestor is identified by Mobile Directory Number. */
+ EIdFormatMDN
+ };
+public:
+ /*
+ * Default construtor
+ */
+ QPosRequestorData();
+
+ /*
+ * Destructor for QPosRequestorData
+ */
+ ~QPosRequestorData();
+
+public:
+ /*
+ * Setter method for QPosRequestorData
+ * @param idFormat - Field in which string needs to be searched for resolution
+ * @param idString - String which needs to be resolved
+ */
+ void setPosRequestorData(const QPosRequestorData::IdFormat& idFormat, const QString& idString);
+
+ /*
+ * Getter method for QPosRequestorData
+ * @param idFormat - Field in which string needs to be searched for resolution
+ * @param idString - String which needs to be resolved \ after resolution the result is stored in this
+ */
+ void getPosRequestorData(QPosRequestorData::IdFormat& idFormat, QString& idString) const;
+
+private:
+
+ // contains string to be resolve - string after resolution is stored in this
+ QString mIdString;
+ //idformat of the string to be searched - indicates in what field the string needs to be searched in
+ IdFormat mIdFormat;
+ };
+
+/**
+ * QLocNotificationEngine class provides a Qt interface to perform operations such as
+ * requestor resolution, activating indicators for missed location notfications etc.
+ *
+ */
+
+class QLocNotificationEngine
+ {
+
+public:
+ /**
+ * Default constructor
+ * This throws an error if construction fails.
+ */
+ QLocNotificationEngine();
+
+ /**
+ * Destructor
+ */
+ ~QLocNotificationEngine();
+
+public:
+ /*
+ * Resolves requestor from phoebook
+ * @param[IN,OUT] posRequestorData resolved requestors
+ */
+ void processRequestors(QPosRequestorData& posRequestorData);
+
+private: // data member
+ // Contact manager instance
+ QtMobility::QContactManager* mContactManager;
+
+ };
+
+#endif // QLOCNOTIFICATIONENGINE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/locnotificationengine.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,43 @@
+# 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: LocNotificationEngine pro file
+TEMPLATE = lib
+TARGET = locnotificationengine
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+CONFIG += hb
+CONFIG += mobility
+MOBILITY = contacts
+
+# Uncomment following line to disable logging
+# DEFINES += QT_NO_DEBUG_OUTPUT
+MOC_DIR = moc
+OBJECTS_DIR = obj
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+LIBS += -leposprvtyp
+
+# Input
+SOURCES += src/locrequestorutilsresolver.cpp \
+ src/qlocnotificationengine.cpp
+HEADERS += inc/locrequestorutilsresolver.h \
+ inc/qlocnotificationengine.h
+symbian: {
+ TARGET.EPOCALLOWDLLDATA = 1
+ DEFINES += BUILD_POSSETTINGS
+ DEFINES += PLUGINUID3=0x2002E705
+ TARGET.UID3 = 0x2002E705
+}
+
+TARGET.CAPABILITY = All \
+ -TCB
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/src/locrequestorutilsresolver.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2010 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: Implementation of location notification engine class.
+*
+*/
+
+
+// INCLUDE FILES
+
+
+#include "locrequestorutilsresolver.h"
+#include "qlocnotificationengine.h"
+
+#include <e32base.h>
+#include <barsread.h>
+
+
+#include <lbs/epos_cposrequestor.h>
+#include <lbs/epos_cposservicerequestor.h>
+#include <lbs/epos_cposcontactrequestor.h>
+
+
+
+
+// ============= CLocRequestorUtilsResolver MEMBER FUNCTIONS =================
+
+// ---------------------------------------------------------------------------
+// CLocRequestorUtilsResolver::NewL
+// 2 Phase Constructor
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CLocRequestorUtilsResolver* CLocRequestorUtilsResolver::NewL()
+ {
+ CLocRequestorUtilsResolver* self =
+ new(ELeave) CLocRequestorUtilsResolver();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// ---------------------------------------------------------------------------
+// destructor
+// ---------------------------------------------------------------------------
+//
+CLocRequestorUtilsResolver::~CLocRequestorUtilsResolver()
+ {
+ delete iEngine;
+ iEngine = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// The method resolves requestors by delegating requests to QPosRequestorData
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CLocRequestorUtilsResolver::ResolveRequestorsL(
+ RPointerArray<CPosRequestor>& aRequestors )
+ {
+ //resolve requestors one by one by extracting the idFormat and idString
+ //from the requestor array
+ TInt count = aRequestors.Count();
+ for(TInt iter = 0; iter < count; ++iter)
+ {
+ CPosRequestor::TRequestorIdFormat idFormat = aRequestors[iter]->RequestorIdFormat();
+ QPosRequestorData::IdFormat qposidformat;
+ switch(idFormat)
+ {
+
+ case CPosRequestor::EIdFormatGenericName:
+ qposidformat=QPosRequestorData::EIdFormatGenericName;
+ break;
+
+ case CPosRequestor::EIdFormatPhoneNumber:
+ qposidformat=QPosRequestorData::EIdFormatPhoneNumber;
+ break;
+ case CPosRequestor::EIdFormatUrl:
+ qposidformat=QPosRequestorData::EIdFormatUrl;
+ break;
+ case CPosRequestor::EIdFormatEmail:
+ qposidformat=QPosRequestorData::EIdFormatEmail;
+ break;
+ case CPosRequestor::EIdFormatSIPUrl:
+ qposidformat=QPosRequestorData::EIdFormatSIPUrl;
+ break;
+ case CPosRequestor::EIdFormatIMSPublicIdentity:
+ qposidformat=QPosRequestorData::EIdFormatIMSPublicIdentity;
+ break;
+ case CPosRequestor::EIdFormatMIN:
+ qposidformat=QPosRequestorData::EIdFormatMIN;
+ break;
+ case CPosRequestor::EIdFormatMDN:
+ qposidformat=QPosRequestorData::EIdFormatMDN;
+ break;
+ case CPosRequestor::EIdFormatUnknown:
+ default:
+ qposidformat=QPosRequestorData::EIdFormatUnknown;
+ break;
+ }
+ //right now the phonebook has fields corresponding to email,phone number, URL only
+ //other cases are not supported by the phonebook
+ if(qposidformat == QPosRequestorData::EIdFormatEmail ||
+ qposidformat == QPosRequestorData::EIdFormatPhoneNumber ||
+ qposidformat == QPosRequestorData::EIdFormatUrl )
+ {
+ //convert TDes to QString
+ QString qReqString((QChar*)aRequestors[iter]->RequestorIdString().Ptr(),aRequestors[iter]->RequestorIdString().Length());
+
+ QPosRequestorData posRequestor;
+ posRequestor.setPosRequestorData(qposidformat,qReqString);
+
+ iEngine->processRequestors(posRequestor);
+
+ QString retString;
+ posRequestor.getPosRequestorData(qposidformat,retString);
+
+ //convert QString to TDes
+ TPtrC16 textPtr(reinterpret_cast<const TUint16*>(retString.utf16()));
+
+ aRequestors[iter]->SetRequestorIdL(idFormat,textPtr);
+ }
+ }
+ }
+
+
+// ---------------------------------------------------------------------------
+// CLocRequestorUtilsResolver::CLocRequestorUtilsResolver
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------------------------
+//
+CLocRequestorUtilsResolver::CLocRequestorUtilsResolver()
+ {
+ // Nothing to do.
+ }
+
+// ---------------------------------------------------------------------------
+// CLocRequestorUtilsResolver::ConstructL
+// Symbian Second Phase COnstructor
+// ---------------------------------------------------------------------------
+//
+void CLocRequestorUtilsResolver::ConstructL()
+ {
+ try
+ {
+ iEngine = new QLocNotificationEngine();
+ }
+ catch( int error )
+ {
+ User::Leave(error);
+ }
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locnotificationengine/src/qlocnotificationengine.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2010 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: Implementation of positioning settings engine class.
+*
+*/
+
+#include "qlocnotificationengine.h"
+
+#include <QDebug>
+#include <QLocale>
+
+#include <qcontactrequests.h>
+#include <qcontactfilters.h>
+#include <qcontact.h>
+#include <qcontactname.h>
+#include <qcontactemailaddress.h>
+#include <qcontactphonenumber.h>
+#include <qcontacturl.h>
+#include <qcontactmanager.h>
+#include <qcontactdisplaylabel.h>
+
+#include <hbnumbergrouping.h>
+
+
+
+//---------------------------------------------------------------------
+// QLocNotificationEngine::QLocNotificationEngine()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+QLocNotificationEngine::QLocNotificationEngine()
+ {
+ //"symbian" is the string used to load the contact manager corresponding to the phonebook database
+ mContactManager = new QtMobility::QContactManager("symbian");
+ }
+
+//------QLocNotificationEngine-----------------------------------------
+// QLocNotificationEngine::~QLocNotificationEngine()
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+QLocNotificationEngine::~QLocNotificationEngine()
+ {
+ delete mContactManager;
+ }
+
+//------QLocNotificationEngine-----------------------------------------
+// QLocNotificationEngine::processRequestors
+// Used to resolve requestors
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void QLocNotificationEngine::processRequestors(QPosRequestorData& posRequestorData)
+ {
+
+ QtMobility::QContactDetailFilter filter;
+
+ QString idString;
+ QPosRequestorData::IdFormat idFormat = QPosRequestorData::EIdFormatUnknown;
+ posRequestorData.getPosRequestorData(idFormat,idString);
+
+ switch(idFormat) // set definition name based on the idformat to be searched for
+ {
+ case QPosRequestorData::EIdFormatPhoneNumber:
+ {
+ filter.setDetailDefinitionName(QtMobility::QContactPhoneNumber::DefinitionName, QtMobility::QContactPhoneNumber::FieldNumber);
+ }
+ break;
+
+ case QPosRequestorData::EIdFormatEmail:
+ {
+ filter.setDetailDefinitionName(QtMobility::QContactEmailAddress::DefinitionName, QtMobility::QContactEmailAddress::FieldEmailAddress);
+ }
+ break;
+ case QPosRequestorData::EIdFormatUrl:
+ {
+ filter.setDetailDefinitionName(QtMobility::QContactUrl::DefinitionName,QtMobility::QContactUrl::ContextHome);
+ }
+ break;
+
+ //other cases are not supported by the phonebook
+ default: //this case wont arise as other values will already have been filtered out
+
+ break;
+ }
+ filter.setMatchFlags(QtMobility::QContactFilter::MatchExactly);
+ filter.setValue(idString);
+
+ QList<QtMobility::QContactLocalId> matchingContacts = mContactManager->contactIds(filter);
+
+ if (matchingContacts.size() > 0) //if any contacts were found
+ {
+
+ QtMobility::QContact match = mContactManager->contact(matchingContacts.at(0)); //return the first contact among the ones found
+
+ // QtMobility::QContactDisplayLabel cdl = match.detail(QtMobility::QContactDisplayLabel::DefinitionName);
+ QString labelDetail = match.displayLabel();
+ posRequestorData.setPosRequestorData(idFormat,labelDetail); //set back result
+ }
+ else
+ {
+ // if no contacts were found
+
+ if( QPosRequestorData::EIdFormatPhoneNumber == idFormat )
+ {
+ // Group the phone number according to current system locale
+ /*
+ QString isStringPh = HbNumberGrouping::formatPhoneNumber(idString,QLocale::system().country());
+ posRequestorData.setPosRequestorData(idFormat,isStringPh); //set back result
+ */
+ posRequestorData.setPosRequestorData(idFormat,idString); //set back result
+ }
+ }
+
+ }
+
+//---------------------------------------------------------------------
+// QPosRequestorData::QPosRequestorData()
+// Constructor for QPosRequestorData
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+QPosRequestorData::QPosRequestorData()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// QPosRequestorData::~QPosRequestorData()
+// Destructor for QPosRequestorData
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+QPosRequestorData::~QPosRequestorData()
+ {
+
+ }
+
+//---------------------------------------------------------------------
+// QPosRequestorData::setPosRequestorData()
+// Settermethod for QPosRequestorData
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void QPosRequestorData::setPosRequestorData(const QPosRequestorData::IdFormat& idFormat, const QString& idString)
+ {
+ mIdFormat = idFormat;
+ mIdString = idString;
+ }
+
+//---------------------------------------------------------------------
+// QPosRequestorData::getPosRequestorData()
+// Gettermethod for QPosRequestorData
+// (other items were commented in a header).
+//---------------------------------------------------------------------
+void QPosRequestorData::getPosRequestorData(QPosRequestorData::IdFormat& idFormat, QString& idString) const
+ {
+ idFormat = mIdFormat;
+ idString = mIdString;
+ }
+
+// End of file.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/group/locprivacyserver.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2010 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: Project definition file for server
+*
+*/
+
+#include <platform_paths.hrh>
+
+TARGET locnotificationserver.exe
+EPOCSTACKSIZE 0x5000
+TARGETTYPE exe
+UID 0x00000000 0x101f7a86
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_SERVER
+
+SOURCEPATH ../src
+SOURCE locprivacyserverstartup.cpp
+SOURCE locprivacyserver.cpp
+SOURCE locprivacyserversession.cpp
+
+
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+USERINCLUDE ../../locnotificationengine/inc
+
+MW_LAYER_SYSTEMINCLUDE
+
+LIBRARY bafl.lib
+LIBRARY euser.lib
+LIBRARY eposprvtyp.lib
+LIBRARY eposutils.lib
+LIBRARY efsrv.lib
+LIBRARY estor.lib
+LIBRARY locnotificationengine.lib
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/inc/locprivacycommon.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 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: Server name and version definition.
+*
+*/
+
+#ifndef PRIVACYCOMMON_H
+#define PRIVACYCOMMON_H
+
+#include <e32cmn.h>
+
+// CONSTANTS
+_LIT(KLocPrivacyServerName, "!locnotificationserver");
+
+const TUint KLocPrivacyServerMajorVersionNumber = 0;
+const TUint KLocPrivacyServerMinorVersionNumber = 0;
+const TUint KLocPrivacyServerBuildVersionNumber = 0;
+
+#endif // PRIVACYCOMMON_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/inc/locprivacyinternal.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: IPC enumerations and constant definition for server.
+*
+*/
+
+#ifndef PRIVACYINTERNAL_H
+#define PRIVACYINTERNAL_H
+
+
+
+//CONSTANTS
+
+// IPC enumerations
+enum TPosPrivacyClientServer
+ {
+ // To get the size of modified buffer containing resolved requestors.
+ ELocPrivacyGetSize = 0,
+ // To get the resolved requestors.
+ ELocPrivacyResolve
+ };
+
+// Buffer granularity
+const TInt KPosBufFlatExpandSize = 100;
+
+#endif // PRIVACYINTERNAL_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/inc/locprivacyserver.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2010 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: server class definition.
+*
+*/
+
+#ifndef CLOCPRIVACYSERVER_H
+#define CLOCPRIVACYSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <locprivacyinternal.h>
+
+// FORWARD DECLARATIONS
+class CLocPrivacyServerSession;
+
+// CLASS DECLARATION
+
+/**
+ * The main server side class.
+ */
+class CLocPrivacyServer : public CServer2
+ {
+public:
+ // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ */
+ static CLocPrivacyServer* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CLocPrivacyServer();
+
+private:
+
+ /**
+ * C++ constructor.
+ *
+ * @param aPriority Priority at which to run the server active object.
+ */
+ CLocPrivacyServer(
+ /* IN */TInt aPriority);
+
+ /**
+ * EPOC default constructor.
+ */
+ void ConstructL();
+
+public:
+ // New functions
+
+ // Server priority. 950 is standard value.
+ enum
+ {
+ EPriority = 950
+ };
+
+ /**
+ * Increment number of sessions.
+ */
+ void IncrementSessions();
+
+ /**
+ * Decrement number of sessions.
+ *
+ * @param aSession Pointer to session that is calling
+ * DecrementSessions().It will be used in future.
+ */
+ void DecrementSessions(
+ /* IN */CLocPrivacyServerSession* /*aSession */);
+
+public:
+ // Functions from base classes
+
+ /**
+ * From CServer.
+ *
+ * @param aVersion the server version.
+ * @param aMessage The connect message from the client.
+ * @return a new session
+ */
+ CSession2* NewSessionL(
+ /* IN */const TVersion& aVersion,
+ /* IN */const RMessage2& aMessage) const;
+
+ /**
+ * From CActive.
+ *
+ * @param aError the error code of the server leave.
+ * @return always KErrNone.
+ */
+ TInt RunError(
+ /* IN */TInt aError);
+
+private:
+
+ // By default, prohibit copy constructor
+ CLocPrivacyServer(const CLocPrivacyServer&);
+ // Prohibit assigment operator
+ CLocPrivacyServer& operator=(const CLocPrivacyServer&);
+
+private:
+ // Data
+ TInt iNumSessions;
+ };
+
+#endif // CLOCPRIVACYSERVER_H
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/inc/locprivacyserverdebugpanic.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 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: Panic code definitions for server.
+*
+*/
+
+#ifndef LOCPRIVACYSERVERDEBUGPANIC_H
+#define LOCPRIVACYSERVERDEBUGPANIC_H
+
+#include <e32def.h>
+
+_LIT(KLocPrivSrvDebugPanicCategory, "Loc Priv debug");
+
+enum TLocPrivSrvDebugPanic
+ {
+ // Unknown request recieved from client.
+ ELocPrivSrvPanicUnknownActivity = 0
+ };
+
+#endif // LOCPRIVACYSERVERDEBUGPANIC_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/inc/locprivacyserversession.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,109 @@
+/*
+* Copyright (c) 2010 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: Server session class definition.
+*
+*/
+
+
+#ifndef CLOCPRIVACYSERVERSESSION_H
+#define CLOCPRIVACYSERVERSESSION_H
+
+// INCLUDES
+#include <e32base.h>
+#include <lbs/epos_cposrequestor.h>
+
+// FORWARD DECLARATIONS
+class CPosPrivacyServer;
+//class CPosPrivManager;
+class RPosRequestorStack;
+
+// CLASS DECLARATION
+
+/**
+ * The EPos privacy server session class.
+ *
+ */
+class CLocPrivacyServerSession : public CSession2
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aServer Reference to the server Active Object
+ * @return Pointer to a new instance of CPosPrivacyServerSession
+ */
+ static CLocPrivacyServerSession* NewL(
+ /* IN */ CLocPrivacyServer& aServer
+ );
+
+ /**
+ * C++ destructor
+ */
+ ~CLocPrivacyServerSession();
+
+ private: // Private Constructing
+
+ /**
+ * C++ private constructor
+ */
+ CLocPrivacyServerSession();
+
+ /**
+ * EPOC default constructor.
+ * @param aServer Reference to the server Active Object
+ */
+ void ConstructL(
+ /* IN */ CLocPrivacyServer& aServer
+ );
+
+ public: // Functions from base classes
+
+ /**
+ * From CSession2.
+ * This function services all requests from clients.
+ *
+ * @param aMessage the message that should be serviced
+ */
+ void ServiceL(
+ /* IN */ const RMessage2& aMessage
+ );
+
+ private: // New functions
+
+ /**
+ * Closes the session.
+ */
+ void CloseSession();
+
+ // Contains the actual ServiceL code.
+ //
+ void DispatchL(const RMessage2& aMessage);
+
+
+
+ private:
+
+ // By default, prohibit copy constructor
+ CLocPrivacyServerSession( const CLocPrivacyServerSession& );
+ // Prohibit assigment operator
+ CLocPrivacyServerSession& operator= ( const CLocPrivacyServerSession& );
+
+ private: // Data
+ // Buffer for hoding resolved requestors
+ CBufFlat* iBufFlat;
+ };
+
+#endif // CLOCPRIVACYSERVERSESSION_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/inc/locprivacyserverstartup.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 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: Class definition for server startup .
+*
+*/
+
+#ifndef LOCPRIVACYSERVERSTARTUP_H
+#define LOCPRIVACYSERVERSTARTUP_H
+
+// INCLUDES
+#include <e32base.h>
+
+// CLASS DECLARATION
+
+/**
+* This class contains static functions which handles server startup.
+*/
+class LocPrivacyServerStartup
+ {
+
+ public: // New functions
+
+ /**
+ * Server thread entry point
+ *
+ * @return error code
+ */
+ static TInt StartServer();
+
+ private: // New functions
+
+ static void StartServerL();
+
+ };
+
+#endif // LOCPRIVACYSERVERSTARTUP_H
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/src/locprivacyserver.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2010 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: server class implementation.
+*
+*/
+
+// INCLUDE FILES
+
+#include "locprivacyserver.h"
+#include "locprivacycommon.h"
+#include "locprivacyserversession.h"
+#include "locprivacyserverdebugpanic.h"
+
+
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CLocPrivacyServer::CLocPrivacyServer(TInt aPriority)
+ : CServer2(aPriority),
+ iNumSessions(0)
+ {
+ // This does not do anything.
+ __DECLARE_NAME(_S("CLocPrivacyServer"));
+ }
+
+// EPOC default constructor can leave.
+void CLocPrivacyServer::ConstructL()
+ {
+ User::LeaveIfError(Start(KLocPrivacyServerName));
+ }
+
+// Two-phased constructor
+CLocPrivacyServer* CLocPrivacyServer::NewL()
+ {
+ CLocPrivacyServer* self = new (ELeave) CLocPrivacyServer(EPriority);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+CLocPrivacyServer::~CLocPrivacyServer()
+ {
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServer::IncrementSessions
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLocPrivacyServer::IncrementSessions()
+ {
+ iNumSessions++;
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServer::DecrementSessions
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLocPrivacyServer::DecrementSessions(
+ CLocPrivacyServerSession* /*aSession*/)
+ {
+ iNumSessions--;
+ if (iNumSessions == 0)
+ {
+ // Shutdown the server by shutting down the active scheduler.
+ CActiveScheduler::Stop();
+ }
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServer::NewSessionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+CSession2* CLocPrivacyServer::NewSessionL(
+ const TVersion& /*aVersion*/,
+ const RMessage2& /*aMessage*/) const
+ {
+
+ // Make new session
+ CLocPrivacyServerSession* newSession = CLocPrivacyServerSession::NewL(
+ const_cast<CLocPrivacyServer&>(*this));
+
+ return newSession;
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServer::RunError
+// This method is called by the active scheduler whenever an
+// untrapped leave occurs in the server active object.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CLocPrivacyServer::RunError(TInt aError)
+ {
+ Message().Complete(aError);
+ ReStart();
+ return KErrNone;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/src/locprivacyserversession.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,176 @@
+/*
+* Copyright (c) 2010 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: Server session class implementation.
+*
+*/
+
+// INCLUDE FILES
+#include <s32mem.h>
+#include <lbs/EPos_RPosRequestorStack.h>
+#include "locprivacyinternal.h"
+#include "locprivacyserver.h"
+#include "locprivacyserversession.h"
+#include "locprivacyserverdebugpanic.h"
+#include "locrequestorutilsresolver.h"
+// CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor
+CLocPrivacyServerSession* CLocPrivacyServerSession::NewL(
+ CLocPrivacyServer& aServer)
+ {
+ CLocPrivacyServerSession* self = new (ELeave) CLocPrivacyServerSession();
+ CleanupStack::PushL(self);
+ self->ConstructL(aServer);
+ CleanupStack::Pop();
+ return self;
+ }
+
+// Destructor
+CLocPrivacyServerSession::~CLocPrivacyServerSession()
+ {
+ CloseSession();
+ delete iBufFlat;
+ iBufFlat = NULL;
+ }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CLocPrivacyServerSession::CLocPrivacyServerSession() :
+ CSession2(), iBufFlat(NULL)
+ {
+ // Doesn't really do anything according to the header file (e32def.h,
+ // lines 139 and 184) and the documentation doesn't mention it.
+ __DECLARE_NAME(_S("CLocPrivacyServerSession"));
+ }
+
+// EPOC default constructor
+void CLocPrivacyServerSession::ConstructL(CLocPrivacyServer& aServer)
+ {
+ aServer.IncrementSessions();
+ iBufFlat = CBufFlat::NewL(KPosBufFlatExpandSize);
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServerSession::ServiceL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLocPrivacyServerSession::ServiceL(const RMessage2& aMessage)
+ {
+ TRAPD(err, DispatchL(aMessage));
+
+ aMessage.Complete(err);
+
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServerSession::CloseSession
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLocPrivacyServerSession::CloseSession()
+ {
+ CLocPrivacyServer
+ * server =
+ static_cast<CLocPrivacyServer*> (const_cast<CServer2*> (Server()));
+ server->DecrementSessions(this);
+ }
+
+// ---------------------------------------------------------
+// CLocPrivacyServerSession::DispatchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CLocPrivacyServerSession::DispatchL(const RMessage2& aMessage)
+ {
+ switch ( aMessage.Function() )
+ {
+ case ELocPrivacyGetSize:
+
+ {
+ TInt desLength=0;
+ desLength = aMessage.GetDesLength( 1 );
+
+ CBufFlat* bufFlat1 = CBufFlat::NewL(desLength);
+ CleanupStack::PushL(bufFlat1);
+ bufFlat1->ResizeL(desLength);
+
+ TPtr8 ptr(bufFlat1->Ptr(0));
+ // Copy content to local buffer
+ aMessage.ReadL(1, ptr);
+
+ RBufReadStream readStream(*bufFlat1);
+ CleanupClosePushL(readStream);
+
+ RPosRequestorStack* requestors1 = new (ELeave) RPosRequestorStack;
+ CleanupStack::PushL(requestors1);
+ requestors1->InternalizeL(readStream);
+
+ CLocRequestorUtilsResolver* res =
+ CLocRequestorUtilsResolver::NewL();
+ CleanupStack::PushL(res);
+
+ res->ResolveRequestorsL(*requestors1);
+
+
+ // use data member buffer and externalize
+
+ RBufWriteStream writeStream;
+ // Reset the buffer
+ iBufFlat->Reset();
+ writeStream.Open(*iBufFlat);
+ CleanupClosePushL(writeStream);
+
+ requestors1->ExternalizeL(writeStream);
+ writeStream.CommitL();
+
+ // Find the new size
+
+ TInt newsize = iBufFlat->Size();
+
+ CleanupStack::PopAndDestroy(&writeStream);
+ CleanupStack::PopAndDestroy(res);
+ CleanupStack::PopAndDestroy(requestors1);
+ CleanupStack::PopAndDestroy(&readStream);
+ CleanupStack::PopAndDestroy(bufFlat1);
+
+ // write back new size
+ TPtr8 ptr1(reinterpret_cast<TUint8*> (&newsize),
+ sizeof(newsize), sizeof(newsize));
+
+ aMessage.WriteL(0, ptr1);
+ }
+ break;
+
+ case ELocPrivacyResolve:
+ {
+ TPtr8 ptr2 = iBufFlat->Ptr(0);
+ aMessage.WriteL(0, ptr2);
+ }
+ break;
+
+ default:
+ aMessage.Panic(KLocPrivSrvDebugPanicCategory,
+ ELocPrivSrvPanicUnknownActivity);
+ break;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locprivacyserver/src/locprivacyserverstartup.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,90 @@
+/*
+* Copyright (c) 2010 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: Implementation for server startup .
+*
+*/
+
+// INCLUDE FILES
+#include "locprivacyserverstartup.h"
+#include "locprivacyserver.h"
+#include "locprivacycommon.h"
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// LocPrivacyServerStartup::StartServer
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt LocPrivacyServerStartup::StartServer()
+ {
+ __UHEAP_MARK;
+
+ CTrapCleanup* cleanupStack = CTrapCleanup::New();
+
+ TInt ret = KErrNoMemory;
+
+ if (cleanupStack)
+ {
+ TRAP(ret, StartServerL());
+ delete cleanupStack;
+ }
+
+ __UHEAP_MARKEND;
+
+ return ret;
+ }
+
+// -----------------------------------------------------------------------------
+// LocPrivacyServerStartup::StartServerL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void LocPrivacyServerStartup::StartServerL()
+ {
+ // Rename thread to aid debugging
+ User::LeaveIfError(User::RenameThread(KLocPrivacyServerName));
+
+ // start scheduler and server
+ CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+ CleanupStack::PushL(scheduler);
+ CActiveScheduler::Install(scheduler);
+
+ CLocPrivacyServer* server = CLocPrivacyServer::NewL();
+ CleanupStack::PushL(server);
+
+ CleanupStack::Pop(2, scheduler); // server
+
+ RProcess::Rendezvous(KErrNone);
+
+ CActiveScheduler::Start();
+
+ delete server;
+ delete scheduler;
+ }
+
+// -----------------------------------------------------------------------------
+// E32Main
+// Server process entry-point
+// Recover the startup parameters and run the server
+// -----------------------------------------------------------------------------
+//
+TInt E32Main()
+ {
+ return LocPrivacyServerStartup::StartServer();
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/bwins/locutils_32u.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?Debug@@YAXV?$TRefByValue@$$CBVTDesC16@@@@ZZ @ 1 NONAME ; void Debug(class TRefByValue<class TDesC16 const >, ...)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/eabi/locutils_32u.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z5Debug11TRefByValueIK7TDesC16Ez @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/group/locutils.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2010 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: Project definition file for Location Utils
+*
+*/
+
+
+// INCLUDES
+#include "../inc/locutilsuid.hrh"
+
+#include <data_caging_paths.hrh>
+#include <bldvariant.hrh>
+#include <platform_paths.hrh> // For the MW_LAYER_SYSTEMINCLUDE
+
+TARGET locutils.dll
+TARGETTYPE dll
+UID 0x0 0x101F84FB
+
+VENDORID VID_DEFAULT
+CAPABILITY CAP_GENERAL_DLL
+
+SOURCEPATH ../src
+
+#ifdef LOC_ENABLE_DEBUG_PRINT
+SOURCE locutilsdebug.cpp
+#else
+SOURCE locutilsdebugdummy.cpp
+#endif
+
+// System Include
+MW_LAYER_SYSTEMINCLUDE
+
+USERINCLUDE .
+USERINCLUDE ../inc
+
+LIBRARY euser.lib
+LIBRARY bafl.lib
+LIBRARY efsrv.lib
+LIBRARY sysutil.lib
+LIBRARY eposprvtyp.lib
+
+#ifdef LOC_ENABLE_DEBUG_PRINT
+LIBRARY flogger.lib
+#endif
+
+LIBRARY CenRepNotifHandler.lib
+LIBRARY CentralRepository.lib
+
+#if defined(WINS)
+deffile ../bwins/locutils_32.def
+#elif defined(EABI)
+deffile ../eabi/locutils_32.def
+#endif
+
+// End of file
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/inc/locutilsdebug.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2010 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: LocUtilsDebug contains debug macros.
+*
+*/
+
+
+#ifndef LOCUTILSDEBUG_H
+#define LOCUTILSDEBUG_H
+
+// INCLUDES
+#include "locutilsdebugconfig.hrh"
+
+#include <e32std.h>
+
+
+// MACROS
+#define DEBUG(TEXT) { \
+ _LIT( KText, #TEXT ); \
+ Debug(KText) \
+ }
+
+#define LOC(TEXT, ARG1) { \
+ _LIT( KText, #TEXT ); \
+ Debug( KText, (ARG1) ); \
+ }
+
+#define LOC2(TEXT, ARG1, ARG2) { \
+ _LIT( KText, #TEXT ); \
+ Debug( KText,(ARG1), (ARG2) ); \
+ }
+
+#define LOC3(TEXT, ARG1, ARG2, ARG3) { \
+ _LIT( KText, #TEXT ); \
+ Debug( KText, (ARG1), (ARG2), (ARG3) ); \
+ }
+
+IMPORT_C void Debug( TRefByValue<const TDesC> aText, ...);
+
+/**
+* By using component specific debug macros unnecessary
+* debug prints can be avoided.
+* Also component specific debugging is possible by compiling
+* only certain components when LOC_ENABLE_DEBUG_PRINT is defined.
+*/
+
+#ifdef LOC_ENABLE_DEBUG_PRINT
+
+#define LOCUTILSDEBUG(TEXT) DEBUG(TEXT);
+#define LOCUTILSDEBUG1(TEXT, ARG1) LOC(TEXT, ARG1);
+#define LOCUTILSDEBUG2(TEXT, ARG1, ARG2) LOC2(TEXT, ARG1, ARG2);
+#define LOCUTILSDEBUG3(TEXT, ARG1, ARG2, ARG3) LOC3(TEXT, ARG1, ARG2, ARG3);
+
+#else
+
+#define LOCUTILSDEBUG(TEXT) ;
+#define LOCUTILSDEBUG1(TEXT, ARG1) ;
+#define LOCUTILSDEBUG2(TEXT, ARG1, ARG2) ;
+#define LOCUTILSDEBUG3(TEXT, ARG1, ARG2, ARG3) ;
+
+#endif
+
+#endif // LOCUTILSDEBUG_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/inc/locutilsdebugconfig.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 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 is the main build-time configuration file of Loc Utils
+*
+*/
+
+
+#ifndef LOCUTILSDEBUGCONFIG_HRH_
+#define LOCUTILSDEBUGCONFIG_HRH_
+
+// INCLUDES
+
+// Flags for development:
+
+
+// Defined LOC_ENABLE_DEBUG_PRINT flag enables debug prints to a file.
+
+//#define LOC_ENABLE_DEBUG_PRINT
+
+#endif // LOCUTILSDEBUGCONFIG_HRH_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/inc/locutilsuid.hrh Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 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: Common header for Location Utils UIDs.
+*
+*/
+
+
+#ifndef LOCUTILSUID_H_
+#define LOCUTILSUID_H_
+
+// MACROS
+
+/// Location utility component UID3
+#define LOCUTILS_UID3 0x101F84FB
+
+#endif // LOCUTILSUID_H_
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/src/locutilsdebug.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2010 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: Contains debugging functions
+*
+*/
+
+
+
+// INCLUDE FILES
+#include "locutilsdebug.h"
+#include <flogger.h>
+#include <e32svr.h>
+// CONSTANTS
+
+/// Folder where the log resides
+_LIT( KLocLogFolder, "Verifier" );
+
+/// The name of the log file
+_LIT( KLocLogFileName, "LocVerifier" );
+
+/// The format in which the time is formatted in log
+_LIT( KLocLogTimeFormat, "%02d.%02d:%02d:%06d ");
+
+/// The length of the string produced by KLocLogTimeFormat
+const TInt KLocLogTimeFormatLength = 16;
+
+/// How many characters a log line can contain
+const TInt KLocLogLineLength = 256;
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+
+// -----------------------------------------------------------------------------
+// Debug
+// Generates a log file if c:\logs\locationsysui\ folder exists
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void Debug( TRefByValue<const TDesC> aText, ... )
+ {
+ VA_LIST args;
+ VA_START( args, aText );
+
+ TBuf<KLocLogLineLength> buf;
+ buf.FormatList( aText, args );
+
+ #ifdef _DEBUG
+ RDebug::Print(buf);
+ #endif
+
+ RFileLogger logger;
+
+ TInt ret=logger.Connect();
+ if (ret==KErrNone)
+ {
+ logger.SetDateAndTime( EFalse,EFalse );
+ logger.CreateLog( KLocLogFolder, KLocLogFileName, EFileLoggingModeAppend );
+ TBuf<KLocLogTimeFormatLength> timeStamp;
+ TTime now;
+ now.HomeTime();
+ TDateTime dateTime;
+ dateTime = now.DateTime();
+ timeStamp.Format( KLocLogTimeFormat,
+ dateTime.Hour(), dateTime.Minute(),
+ dateTime.Second(), dateTime.MicroSecond() );
+ buf.Insert( 0, timeStamp );
+
+ logger.Write(buf);
+ }
+
+ logger.Close();
+
+ VA_END( args );
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locutils/src/locutilsdebugdummy.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2010 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: Contains dummy implementation for debugging function
+*
+*/
+
+
+#include "locutilsdebug.h"
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+// -----------------------------------------------------------------------------
+// Debug
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void Debug( TRefByValue<const TDesC> /*aText*/, ... )
+ {
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/group/locverifierdlg.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2010 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: Project definition file for Location Verification Dialog
+*
+*/
+
+
+// INCLUDES
+#include "../inc/locverifieruid.h"
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+TARGET locverifierdlg.dll
+TARGETTYPE PLUGIN
+UID 0x10009D8D KLocVerifierDlgUID3
+
+CAPABILITY CAP_ECOM_PLUGIN
+
+VENDORID VID_DEFAULT
+
+SOURCEPATH ../src
+SOURCE lpdverifierplugin.cpp
+SOURCE lpdrequestao.cpp
+SOURCE lpdrequestorprocessor.cpp
+SOURCE lpdverifierquerylauncher.cpp
+SOURCE lpdnotifierquerylauncher.cpp
+SOURCE lpdglobalplugindialog.cpp
+SOURCE lpdquerylauncherbase.cpp
+SOURCE lpddllmain.cpp
+
+
+// System Include
+APP_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE \epoc32\include\mw\hb\hbcore
+SYSTEMINCLUDE \epoc32\include\mw\hb\hbwidgets
+
+USERINCLUDE .
+USERINCLUDE ../inc
+USERINCLUDE ../../inc
+USERINCLUDE ../../locnotificationengine/inc
+
+SOURCEPATH ../rss
+START RESOURCE 101f84fc.rss
+TARGET locverifierdlg.rsc
+END
+
+// EPos:
+LIBRARY eposprvqnif.lib
+// Location:
+LIBRARY locnotificationengine.lib
+// Symbian & Hb:
+LIBRARY euser.lib
+LIBRARY eiksrv.lib
+LIBRARY eposprvtyp.lib
+LIBRARY estor.lib bafl.lib
+LIBRARY flogger.lib
+LIBRARY HbCore.lib
+LIBRARY HbWidgets.lib
+LIBRARY QtCore.lib
+LIBRARY locnotificationclient.lib
+LIBRARY systemtoneservice.lib
+LIBRARY locutils.lib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/locverifierdlgdebug.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2010 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: LocVerifierDlgDebug contains debug macros.
+*
+*/
+
+
+#ifndef LOCVERIFIERDLGDEBUG_H
+#define LOCVERIFIERDLGDEBUG_H
+
+// INCLUDES
+#include "locutilsdebug.h"
+#include <e32std.h>
+
+
+// MACROS
+
+/**
+* By using component specific debug macros unnecessary
+* debug prints can be avoided.
+* Also component specific debugging is possible by compiling
+* only certain components when LOC_ENABLE_DEBUG_PRINT is defined.
+*/
+
+#ifdef LOC_ENABLE_DEBUG_PRINT
+#define LOCVERIFIERDLGDEBUG(TEXT) DEBUG(TEXT);
+#define LOCVERIFIERDLGDEBUG1(TEXT, ARG1) LOC(TEXT, ARG1);
+#define LOCVERIFIERDLGDEBUG2(TEXT, ARG1, ARG2) LOC2(TEXT, ARG1, ARG2);
+#define LOCVERIFIERDLGDEBUG3(TEXT, ARG1, ARG2, ARG3) LOC3(TEXT, ARG1, ARG2, ARG3);
+#else
+#define LOCVERIFIERDLGDEBUG(TEXT);
+#define LOCVERIFIERDLGDEBUG1(TEXT, ARG1);
+#define LOCVERIFIERDLGDEBUG2(TEXT, ARG1, ARG2);
+#define LOCVERIFIERDLGDEBUG3(TEXT, ARG1, ARG2, ARG3);
+#endif
+
+#endif /* LOCVERIFIERDLGDEBUG_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/locverifieruid.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2010 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: Common header for Location application UIDs.
+*
+*/
+
+
+#ifndef LOCVERIFIERUID_H
+#define LOCVERIFIERUID_H
+
+/// Location verifier dialog UID3
+#define KLocVerifierDlgUID3 0x101f84fc
+
+#define KNotifierUID2 0x101fdfae
+
+#endif // LOCVERIFIERUID_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpddlgobserver.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2010 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: Callback interface class.
+*
+*/
+
+
+#ifndef MLPDDLGOBSERVER_H
+#define MLPDDLGOBSERVER_H
+
+// INCLUDES
+#include <e32base.h>
+
+
+// CLASS DECLARATION
+
+/**
+* Callback interface class.
+* Implementor of this class gives a reference to itself when
+* creating a global query dialog. A callback method is then
+* called when the query is dismissed.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class MLpdDlgObserver
+ {
+ public:
+
+ /**
+ * Pure virtual callback method.
+ * @param aResult code of the query
+ */
+ virtual void HandleDlgDismissedL( TInt aResult) = 0;
+ };
+
+#endif // MLPDDLGOBSERVER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdglobalplugindialog.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2010 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: List query dialog suitable for verifier plug-in use.
+*
+*/
+
+
+#ifndef CLPDGLOBALPLUGINDIALOG_H
+#define CLPDGLOBALPLUGINDIALOG_H
+
+// INCLUDES
+#include <hbdevicemessageboxsymbian.h>
+#include <hbdevicenotificationdialogsymbian.h>
+#include <hbdevicedialogsymbian.h>
+
+
+const TInt KReqBufferSize = 256;
+// FORWARD DECLARATIONS
+class MLpdDlgObserver;
+class CLpdRequestorProcessor;
+class CHbDeviceDialog;
+// CLASS DECLARATION
+
+/**
+* A list query dialog suitable for verifier plug-in use.
+* utilizes MLpdDlgObserver
+* for notifying when dialog is dismissed.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class CLpdGlobalPluginDialog : public CBase,
+ public MHbDeviceDialogObserver ,
+ public MHbDeviceNotificationDialogObserver
+
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aCallBack is notified when dialog is dismissed
+ * @return created object
+ */
+ static CLpdGlobalPluginDialog* NewL(
+ MLpdDlgObserver& aCallBack);
+
+
+ /**
+ * C++ destructor.
+ */
+ virtual ~CLpdGlobalPluginDialog();
+
+ public: // Functions from base classes
+
+
+ void RunVerificationQueryL();
+
+ void RunNotificationL();
+
+
+ void SetRequestInfoL( CLpdRequestorProcessor* aRequestInfo );
+
+
+ void Cancel();
+
+ void DataReceived(CHbSymbianVariantMap& aData);
+
+ void DeviceDialogClosed(TInt aCompletionCode);
+
+ void AddVerDlgHeadingParamL();
+
+ void AddQueryTextParamL();
+
+ void AddRequestorsParamL();
+
+
+
+ public:
+ void NotificationDialogActivated (const CHbDeviceNotificationDialogSymbian *aDialog);
+
+ void NotificationDialogClosed (const CHbDeviceNotificationDialogSymbian *aDialog, TInt aCompletionCode);
+
+
+
+ private: // Constructors and destructor
+
+ /**
+ * Symbian 2nd Phase Constructor.
+ */
+ void ConstructL();
+
+ /**
+ * C++ constructor.
+ * @param aCallBack is notified when dialog is dismissed
+ */
+ CLpdGlobalPluginDialog(
+ MLpdDlgObserver& aCallBack);
+
+ private: // Data
+
+ // Object which is notified when query is dismissed
+ MLpdDlgObserver& iCallBack;
+ CHbDeviceDialogSymbian* iMsgBox;
+ CHbDeviceNotificationDialogSymbian* iNotification;
+ CLpdRequestorProcessor* iRequestInfo;
+ CHbSymbianVariantMap* mSymbianVariantMap;
+ TBool mDissmissed;
+ TBool isCancelled;
+
+
+ };
+
+#endif // CLPDGLOBALPLUGINDIALOG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdnotifierquerylauncher.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2010 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: Class which handles the dialog and expiration timer.
+*
+*/
+
+
+#ifndef CLPDNOTIFIERQUERYLAUNCHER_H
+#define CLPDNOTIFIERQUERYLAUNCHER_H
+
+// INCLUDES
+#include "lpdquerylauncherbase.h"
+#include <e32base.h>
+#include <lbs/epos_privacy.h>
+
+// FORWARD DECLARATIONS
+
+
+// CLASS DECLARATION
+
+/**
+* Implements functionality for executing notifications.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class CLpdNotifierQueryLauncher :
+public CLpdQueryLauncherBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aHandler of ther query result
+ * @return created object
+ */
+ static CLpdNotifierQueryLauncher* NewL( MLpdResultHandler& aHandler );
+
+ /**
+ * Destructor. Call Cancel() first if you have launched a query.
+ */
+ virtual ~CLpdNotifierQueryLauncher();
+
+
+ protected: // Functions from base classes
+
+ /**
+ * From CLpdQueryLauncherBase, called when dialog is dismissed.
+ */
+ void ExtendedHandleDlgDismissedL();
+
+ void RequestType(TRequestType& aRequestType);
+
+ private: // Constructors and destructors
+
+ /**
+ * C++ constructor.
+ * @param aHandler of the query result
+ */
+ CLpdNotifierQueryLauncher( MLpdResultHandler& aHandler );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+ };
+
+#endif // CLPDNOTIFIERQUERYLAUNCHER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdquerylauncherbase.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2010 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: Abstract base class for queries.
+*
+*/
+
+
+#ifndef CLPDQUERYLAUNCHERBASE_H
+#define CLPDQUERYLAUNCHERBASE_H
+
+// INCLUDES
+#include "lpddlgobserver.h"
+
+#include <e32base.h>
+#include <badesca.h>
+#include <coemain.h>
+
+#include <epos_cposprivacynotifier.h>
+
+
+// SYSTEM INCLUDE
+
+
+// FORWARD DECLARATIONS
+class CLpdGlobalPluginDialog;
+class CLpdMessagePluginDialog;
+class MLpdResultHandler;
+class CLpdRequestorProcessor;
+
+
+// CLASS DECLARATION
+
+/**
+* Base class which handles the dialog and expiration timer.
+* Expiration timer can be used to ensure that if the user doesn't handle
+* a dialog in certain time the dialog is closed. NOTE: In current
+* implementation the timer is not started, i.e. dialogs never expire.
+* Implementations of this class should notify a result handler
+* when dialog result is available. This base class takes care of
+* notifying possible timeout with KErrTimedOut.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class CLpdQueryLauncherBase : public CBase, public MLpdDlgObserver
+ {
+
+protected:
+ enum TRequestType
+ {
+ EVerification = 0,
+ ENotification,
+ EUnknown
+ };
+
+
+ public: // Constructors and destructor
+
+ /**
+ * Destructor. Exits possibly running dialog without callback.
+ */
+ virtual ~CLpdQueryLauncherBase();
+
+
+ public: // New functions, query setup and launching
+
+ /**
+ * Method for setting text array.
+ *
+ */
+ void SetRequestInfoL( CLpdRequestorProcessor* aRequestInfo );
+
+
+ /**
+ * Method for launching query, note that it must have been
+ * correctly prepared first.
+ */
+ void StartQueryL();
+
+
+ virtual void RequestType(TRequestType& aRequestType);
+
+
+ public: // Functions from base classes
+
+ /**
+ * From MLpdDlgObserver, called when dialog is dismissed.
+ * This method calls also pure virtual method
+ * ExtendedHandleDlgDismissedL().
+ * @param aResult code of the query
+ */
+ void HandleDlgDismissedL( TInt aResult);
+
+ public:
+ void Cancel();
+ protected: // Constructors and destructors
+
+ /**
+ * C++ constructor.
+ * @param aHandler of the query result
+ */
+ CLpdQueryLauncherBase( MLpdResultHandler& aHandler );
+
+ void ConstructL();
+
+ protected: // New functions
+
+ /**
+ * This pure virtual method must be implemented
+ * by the derived class to handle the result code
+ * appropriately and to notify the observer of this
+ * class.
+ */
+ virtual void ExtendedHandleDlgDismissedL() = 0;
+
+
+ protected: // Data
+
+ // Reference to the result handler
+ MLpdResultHandler& iHandler;
+
+ // Result code from the dialog
+ TInt iResult;
+
+ // Pointer to the list query dialog
+ CLpdGlobalPluginDialog* iQueryDlg; // owns untils RunLD() called
+
+
+ };
+
+#endif // CLPDQUERYLAUNCHERBASE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdrequestao.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 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: Active object which ensures that current call stack is run to
+* completion before a new request is handled
+*
+*/
+
+
+#ifndef CLPDREQUESTAO_H
+#define CLPDREQUESTAO_H
+
+// INCLUDES
+#include <e32base.h>
+#include <lbs/epos_privacy.h>
+
+
+// FORWARD DECLARATIONS
+class CLpdVerifierPlugin;
+
+// CLASS DECLARATION
+
+/**
+* Active object used by the verifier plugin.
+* Ensures that current call stack is run to completion before a
+* new request is handled. Otherwise access violations might occur.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class CLpdRequestAO : public CActive
+ {
+ public: // Constructors and destructors
+
+ /**
+ * Two-phased constructor.
+ * @param aPlugin reference to the owner of this object
+ * @return created object
+ */
+ static CLpdRequestAO* NewL( CLpdVerifierPlugin& aPlugin );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CLpdRequestAO();
+
+ public: // New functions
+
+ /**
+ * Issues a request and completes it immediatelly, so that it
+ * will be handled as soon as previous request is run to completion.
+ */
+ void ScheduleRequest();
+
+
+ private:
+
+ /**
+ * Private C++ default constructor.
+ * @param aPlugin reference to the owner of this object
+ */
+ CLpdRequestAO( CLpdVerifierPlugin& aPlugin );
+
+ private: // Functions from base classes
+
+ /**
+ * From CActive.
+ */
+ void RunL();
+
+ /**
+ * From CActive.
+ */
+ void DoCancel();
+
+ private: // Data
+
+ // Verifier plugin
+ CLpdVerifierPlugin& iPlugin; // doesn't own
+
+
+};
+
+#endif // CLPDREQUESTAO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdrequestorprocessor.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2010 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: Processes requestor related data.
+*
+*/
+
+
+#ifndef CLPDREQUESTORPROCESSOR_H
+#define CLPDREQUESTORPROCESSOR_H
+
+// INCLUDES
+#include "locrequestorutilsresolver.h"
+#include <e32base.h>
+#include <lbs/epos_rposrequestorstack.h>
+#include <lbs/epos_cposrequestor.h>
+#include <lbs/epos_privacy.h>
+// FORWARD DECLARATIONS
+class CPosPrivacyNotifier;
+
+
+// CLASS DECLARATION
+
+/**
+* This class reads, processes and owns requestor data.
+* @lib locverifierdlg.dll
+* @since 2.1
+*/
+class CLpdRequestorProcessor : public CBase
+ {
+ public: // Constructors and destructor
+
+ enum TDialogType
+ {
+ /** Query dialog requested. */
+ EQuery = 0,
+ /** Notification dialog requested. */
+ ENotification
+ };
+
+
+
+ /**
+ * Two-phased constructor.
+ * @return created object
+ */
+ static CLpdRequestorProcessor* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CLpdRequestorProcessor();
+
+ public: // New functions
+
+ /**
+ * Reads requestor information from the privacy notifier.
+ * Uses RequestorIdValid() for id validity check.
+ * Calls UpdateRuleRequestorsL().
+ * @param aPosNotifier reference
+ * @return ETrue if all requestor id's were valid, EFalse otherwise.
+ */
+ TBool ReadRequestorsL( const CPosPrivacyNotifier& aPosNotifier );
+
+ /**
+ * Returns requestor array for reading.
+ * @return array of requestors
+ */
+ const RPointerArray<CPosRequestor>& Requestors() const;
+
+ /**
+ * Resets requestor arrays and destroys requestor objects.
+ */
+ void ResetAndDestroyRequestors();
+
+
+ protected: // Constructors and destructors
+
+ /**
+ * C++ constructor.
+ */
+ CLpdRequestorProcessor();
+
+ protected: // New methods
+
+ /**
+ * Handles assert errors. Panics in debug build but leaves in release
+ * build, as this component runs in EikSrv and must never panic.
+ */
+ void HandleAssertErrorL() const;
+
+ private:
+ TBool RequestorIdValid(
+ const CPosRequestor& aRequestor );
+
+ public:
+ RPointerArray<CPosRequestor> iRequestors;
+ CPosRequestor::TRequestType iRequestType;
+ TPosRequestDecision iRequestDecision;
+ TDialogType iDialogType;
+ TPosNotificationReason iNotifReason;
+
+ };
+
+#endif // CLPDREQUESTORPROCESSOR_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdresulthandler.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2010 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: Callback interface class.
+*
+*/
+
+
+#ifndef MLPDRESULTHANDLER_H
+#define MLPDRESULTHANDLER_H
+
+// INCLUDES
+#include <e32def.h>
+
+// FORWARD DECLARATIONS
+class CLpdQueryLauncherBase;
+
+
+// CLASS DECLARATION
+
+/**
+* Observer pattern for handling dialog result. Used by several
+* classes deriving from CLpdQueryLauncherBase.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class MLpdResultHandler
+ {
+ public: // New functions
+
+ /**
+ * Pure virtual observer method.
+ * @param aResultCode
+ */
+ virtual void HandleVerificationResultL( TInt aResultCode ) = 0;
+
+ /**
+ * Pure virtual observer method.
+ * @param aResultCode
+ */
+ virtual void HandleNotificationResultL( TInt aResultCode ) = 0;
+
+ /**
+ * Pure virtual observer method. Called if leave occurred in other
+ * callback methods. Used because it is not acceptable to propagate
+ * leave to AVKON dialog, plugin must clean up and continue with
+ * handling of request queue.
+ * @param aError code
+ */
+ virtual void HandleLeave( TInt aError ) = 0;
+ };
+
+#endif // MLPDRESULTHANDLER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdverifierplugin.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,224 @@
+/*
+* Copyright (c) 2010 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: Verifier plug-in which derives from CPosPrivacyNotifier.
+*
+*/
+
+
+// INCLUDES
+
+#ifndef CLPDVERIFIERDLG_H
+#define CLPDVERIFIERDLG_H
+
+#include "lpdrequestao.h"
+#include "lpdresulthandler.h"
+
+#include <epos_cposprivacynotifier.h>
+#include <lbs/epos_privacy.h>
+#include <lbs/epos_cposrequestor.h>
+// SYSTEM INCLUDE
+#include <bldvariant.hrh> // For the 3.2 Flag
+
+
+// FORWARD DECLARATIONS
+class CLpdVerifierQueryLauncher;
+class CLpdNotifierQueryLauncher;
+class CLpdRequestorProcessor;
+class CLocRequestorUtilsResolver;
+
+
+// CLASS DECLARATION
+
+/**
+* Verifier plug-in which derives from CPosPrivacyNotifier.
+* Notifiers are based on RNotifier framework, and this particular
+* notifier is used to launch a privacy query for accepting/rejecting
+* privacy requests. It also shows informational notes and error
+* messages, which are received as notification.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class CLpdVerifierPlugin : public CPosPrivacyNotifier, public MLpdResultHandler
+ {
+ // To allow calls to HandleNextRequest() from active object
+ friend class CLpdRequestAO;
+
+ private:
+
+
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @return created object
+ */
+ static CLpdVerifierPlugin* NewL();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CLpdVerifierPlugin();
+
+ /**
+ * Method for cancelling query or freeing
+ * resources after finishing query.
+ */
+ void FreeQueryResources();
+
+ public: // Functions from base classes
+
+ /**
+ * From CPosPrivacyNotifier, called when a new request arrives.
+ * @param aRequestId identifier of received request
+ */
+ void HandleNewRequestL( TPosQNRequestId aRequestId );
+
+ /**
+ * From CPosPrivacyNotifier, called when request has been cancelled
+ * @param aRequestId identifier of cancelled request
+ */
+ void HandleRequestCancelled( TPosQNRequestId aRequestId );
+
+ /**
+ * From CPosPrivacyNotifier, called when all requests are cancelled.
+ */
+ void HandleAllRequestCancelled();
+
+ /**
+ * From MLpdResultHandler, called when verification result is available.
+ * @param aResultCode
+ */
+ void HandleVerificationResultL( TInt aResultCode );
+
+ /**
+ * From MLpdResultHandler, called when notification has been done.
+ * @param aResultCode
+ */
+ void HandleNotificationResultL( TInt aResultCode );
+
+ /**
+ * From MLpdResultHandler, called if leave occurred in callback method
+ * @param aError code
+ */
+ void HandleLeave( TInt aError );
+
+
+
+
+ protected: // New functions
+
+ /**
+ * Non-leaving internal method for handling next pending request.
+ */
+ void HandleNextRequest();
+
+ /**
+ * Internal method for handling next pending request.
+ */
+ void HandleNextRequestL();
+
+ /**
+ * Internal helper method used by HandleNextRequestL().
+ */
+ void HandleNextVerificationL();
+
+ /**
+ * Internal helper method used by HandleNextRequestL().
+ */
+ void HandleNextNotificationL();
+
+ /**
+ * Internal helper method used by HandleNextNotificationL().
+ */
+ void HandleNextNonPeriodicNotificationL();
+
+
+ /**
+ * Internal helper method.
+ * Completes current request and continues queue handling.
+ */
+ void CompleteCurrentAndContinue( TInt aResultCode );
+
+ /**
+ * Handles assert errors. Panics in debug build but leaves in release
+ * build, as this component runs in EikSrv and must never panic.
+ */
+ void HandleAssertErrorL() const;
+
+ /**
+ * Panics in debug build but does nothing in release build.
+ */
+ void HandleDebugAssertError() const;
+
+
+
+
+ private:
+
+ /**
+ * C++ default constructor.
+ */
+ CLpdVerifierPlugin();
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+
+
+ /**
+ * Checks the type of request and helps to know
+ * if a given request is of SUPL periodic type
+ * @param aCurrentRequest request id
+ * @return CPosRequestor::TRequestType type of request enum
+ */
+ CPosRequestor::TRequestType CheckRequestTypeL();
+
+
+ private: // Data
+
+
+
+ // Identifier of currently handled request
+ TPosQNRequestId iCurrentRequest;
+
+ // Type of the current request, valid if iCurrentRequest valid
+ TRequestType iCurrentRequestType;
+
+ // Result code of verifier query, needed if user cancels rule query
+ TInt iVerifyResult;
+
+
+ // Location request accept/reject query object
+ CLpdVerifierQueryLauncher* iVerifierQuery; // owns
+
+ // Location request accept/reject query object
+ CLpdNotifierQueryLauncher* iNotifier; // owns
+
+ // Active object, used to let requests run to
+ // completion instead of recursive calls.
+ CLpdRequestAO* iRequestActiveObject; // owns
+
+ CLpdRequestorProcessor* iRtorProcessor; // owns
+
+ CLocRequestorUtilsResolver* iUtils; // owns
+
+
+ };
+
+#endif // CLPDVERIFIERDLG_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/inc/lpdverifierquerylauncher.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,88 @@
+/*
+* Copyright (c) 2010 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: Class which handles the dialog and expiration timer.
+*
+*/
+
+
+#ifndef CLPDVERIFIERQUERYLAUNCHER_H
+#define CLPDVERIFIERQUERYLAUNCHER_H
+
+// INCLUDES
+#include "lpdquerylauncherbase.h"
+#include <e32base.h>
+#include <lbs/epos_privacy.h>
+
+
+// FORWARD DECLARATIONS
+class CLpdGlobalPluginDialog;
+
+
+// CLASS DECLARATION
+
+/**
+* Implements functionality for executing verification queries.
+*
+* @lib locverifierdlg.lib
+* @since 2.1
+*/
+class CLpdVerifierQueryLauncher :
+public CLpdQueryLauncherBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Two-phased constructor.
+ * @param aHandler of ther query result
+ * @return created object
+ */
+ static CLpdVerifierQueryLauncher* NewL(
+ MLpdResultHandler& aHandler );
+
+ /**
+ * Destructor. Call Cancel() first if you have launched a query.
+ */
+ virtual ~CLpdVerifierQueryLauncher();
+
+ public: // New functions
+
+
+ protected: // Functions from base classes
+
+ /**
+ * From CLpdQueryLauncherBase, called when dialog is dismissed.
+ */
+ void ExtendedHandleDlgDismissedL();
+
+ void RequestType(TRequestType& aRequestType);
+
+ private: // Constructors and destructors
+
+ /**
+ * C++ constructor.
+ * @param aHandler of the query result
+ */
+ CLpdVerifierQueryLauncher( MLpdResultHandler& aHandler );
+
+ /**
+ * By default Symbian 2nd phase constructor is private.
+ */
+ void ConstructL();
+
+
+ };
+
+#endif // CLPDVERIFIERQUERYLAUNCHER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/rss/101f84fc.rss Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2010 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 specifies the interface and implementation information
+* for BTnotif Ecom Plugins.
+*
+*/
+
+
+#include "ecom/registryinfo.rh"
+#include "uikon.hrh"
+#include <lbs/epos_privacynotifier.hrh>
+
+#define PRINOTDISPLAYNAME "TTNOTIFY2V2 Plugin 1"
+#define PRINOTDEFAULTDATA "TTNOTIFY2V2"
+#define PRINOTOPAQUEDATA "0"
+
+RESOURCE REGISTRY_INFO theInfo
+{
+ dll_uid = 0x101f84fc;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KUikonUidPluginInterfaceNotifiers; // ECOM Notifier Plugin
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x10207243;
+ version_no = 1;
+ display_name = PRINOTDISPLAYNAME;
+ default_data = PRINOTDEFAULTDATA;
+ opaque_data = PRINOTOPAQUEDATA;
+ }
+ };
+ }
+ };
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpddllmain.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2010 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: Dll entry point and plugin creation functions.
+*
+*/
+
+
+// INCLUDE FILES
+#include "lpdverifierplugin.h"
+#include <e32base.h>
+#include <eiknotapi.h>
+#include <ecom/implementationproxy.h>
+
+// ============================= LOCAL FUNCTIONS ===============================
+
+LOCAL_C void CreateNotifiersL(
+ CArrayPtrFlat<MEikSrvNotifierBase2>* aNotifiers )
+ {
+ CLpdVerifierPlugin* notifier = CLpdVerifierPlugin::NewL();
+ CleanupStack::PushL( notifier );
+ aNotifiers->AppendL( notifier->NotifierBase() );
+ CleanupStack::Pop( notifier ); // Do not destroy. This is handled by the FW.
+ }
+
+// ========================== OTHER EXPORTED FUNCTIONS =========================
+
+LOCAL_C CArrayPtr<MEikSrvNotifierBase2>* NotifierArray()
+ {
+ CArrayPtrFlat<MEikSrvNotifierBase2>* notifiers =
+ new CArrayPtrFlat<MEikSrvNotifierBase2>( 1 );
+ if ( notifiers )
+ {
+ TRAPD( err, CreateNotifiersL( notifiers ) );
+ if ( err )
+ { // release any notifiers we have created
+ TInt count = notifiers->Count();
+ while ( --count >= 0 )
+ {
+ ( *notifiers )[count]->Release();
+ }
+ delete notifiers;
+ notifiers = NULL;
+ }
+ }
+ return notifiers;
+ }
+
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ {{0x10207243},(TFuncPtr)NotifierArray}
+#else
+ {{0x10207243},NotifierArray}
+#endif
+ };
+
+// ======== GLOBAL FUNCTIONS ========
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy) ;
+ return ImplementationTable;
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdglobalplugindialog.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,420 @@
+/*
+* Copyright (c) 2010 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: List query dialog suitable for verifier plug-in use.
+*
+*/
+
+
+// INCLUDE FILES
+#include "lpdglobalplugindialog.h"
+#include "lpddlgobserver.h"
+#include "lpdrequestorprocessor.h"
+
+#include <lbs/EPos_CPosContactRequestor.h>
+#include <lbs/EPos_CPosServiceRequestor.h>
+#include <lbs/EPos_CPosRequestor.h>
+#include <hbsymbianvariant.h>
+#include <hbtextresolversymbian.h>
+#include <systemtoneservice.h>
+#include <e32des16.h>
+
+_LIT(KNotifReqSeperator,",");
+_LIT(KHeadingKey, "heading");
+_LIT(KQueryTextKey, "queryText");
+_LIT(KQueryText2Key, "queryText2");
+_LIT(KRequestorKey, "requestor");
+_LIT(KVerificationDlgType, "hb.posverifiction.dialog/1.0");
+_LIT(KLocTsFileName, "lilocationmw_");
+_LIT(KLocTsFilePath, "z://resource/qt/translations/");
+_LIT(KLocTsAFileAltPath, "c://resource/");
+//Translation String Ids
+//Verification Dialog
+_LIT(KRequestHeading, "txt_loe_title_location_request");
+_LIT(KSingleshotDecisionRejected, "txt_loe_info_your_location_will_not_be_shared_by_d");
+_LIT(KSingleshotDecisionAccepted, "txt_loe_info_your_location_will_be_shared_by_defau");
+_LIT(KSingleshotDecisionNotAvailable, "txt_loe_info_your_location_will_be_shared_with");
+_LIT(KPeriodicDecisionRejected, "txt_loe_info_your_location_will_not_be_shared_peri");
+_LIT(KPeriodicDecisionAccepted, "txt_loe_info_your_location_will_be_shared_periodic");
+_LIT(KPeriodicDecisionNotAvailable, "txt_loe_info_you_location_will_be_shared_periodica");
+_LIT(KRequestorText, "txt_loe_info_location_was_requested_by");
+_LIT(KUnknownRequestor, "txt_loe_info_unknown_requestor");
+//Notification
+_LIT(KNotificationNotSent, "txt_loe_dpophead_your_location_not_sent_to");
+_LIT(KNotificationSent, "txt_loe_dpophead_your_location_sent_to");
+
+const TInt KNotificationTimeout = 15000;
+const TInt KMaxSize = 1024;
+const TInt KVariantMaxSize = 256;
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLpdGlobalPluginDialog::CLpdGlobalPluginDialog
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdGlobalPluginDialog::CLpdGlobalPluginDialog(
+ MLpdDlgObserver& aCallBack
+ )
+ : iCallBack( aCallBack ),
+ iMsgBox(NULL),
+ iNotification(NULL),
+ iRequestInfo(NULL)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdGlobalPluginDialog::ConstructL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+void CLpdGlobalPluginDialog::ConstructL()
+ {
+ iMsgBox = CHbDeviceDialogSymbian::NewL();
+ iNotification = CHbDeviceNotificationDialogSymbian::NewL(this);
+ TBool result =
+ HbTextResolverSymbian::Init(KLocTsFileName, KLocTsFilePath);
+ if (!result)
+ {
+ HbTextResolverSymbian::Init(KLocTsFileName, KLocTsAFileAltPath);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdGlobalPluginDialog::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLpdGlobalPluginDialog* CLpdGlobalPluginDialog::NewL(
+ MLpdDlgObserver& aCallBack)
+ {
+ CLpdGlobalPluginDialog* self =
+ new( ELeave ) CLpdGlobalPluginDialog( aCallBack);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+CLpdGlobalPluginDialog::~CLpdGlobalPluginDialog()
+ {
+ delete iMsgBox;
+ iMsgBox = NULL;
+
+ delete iNotification;
+ iNotification = NULL;
+
+ delete iRequestInfo;
+ iRequestInfo=NULL;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdGlobalPluginDialog::RunLD
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdGlobalPluginDialog::RunVerificationQueryL()
+ {
+ mSymbianVariantMap = CHbSymbianVariantMap::NewL();
+ CleanupStack::PushL(mSymbianVariantMap);
+
+ AddVerDlgHeadingParamL();
+ AddQueryTextParamL();
+ AddRequestorsParamL();
+ CSystemToneService* sts = CSystemToneService::Create();
+ iMsgBox->Show(KVerificationDlgType, *mSymbianVariantMap, this);
+ if( sts )
+ {
+ sts->PlayTone(CSystemToneService::ELocationRequest);
+ }
+ CSystemToneService::Delete(sts);
+ CleanupStack::Pop(mSymbianVariantMap);
+ }
+
+void CLpdGlobalPluginDialog::RunNotificationL()
+ {
+ if( EPosDecisionByRequestSource == iRequestInfo->iNotifReason ||
+ EPosVerificationTimeout == iRequestInfo->iNotifReason )
+ {
+ if ( EPosDecisionAccepted == iRequestInfo->iRequestDecision )
+ {
+ HBufC* title = HbTextResolverSymbian::LoadL(KNotificationSent);
+ CleanupStack::PushL(title);
+ iNotification->SetTitleL(title->Des());
+ CleanupStack::PopAndDestroy(title);
+ }
+ if( EPosDecisionRejected == iRequestInfo->iRequestDecision )
+ {
+ HBufC* title = HbTextResolverSymbian::LoadL(KNotificationNotSent);
+ CleanupStack::PushL(title);
+ iNotification->SetTitleL(title->Des());
+ CleanupStack::PopAndDestroy(title);
+ }
+ }
+ else
+ {
+ // Not supported
+ User::Leave(KErrNotSupported);
+ }
+ TBuf<KMaxSize> buf;
+
+ TInt count= iRequestInfo->iRequestors.Count();
+ if( count == 0 )
+ {
+ HBufC* requestor = HbTextResolverSymbian::LoadL(KUnknownRequestor);
+ CleanupStack::PushL(requestor);
+ buf.Append(requestor->Des());
+ CleanupStack::PopAndDestroy(requestor);
+ }
+ else
+ {
+ for(TInt i=0;i< count;i++ )
+ {
+ if(i!=0)
+ {
+ buf.Append(KNotifReqSeperator);
+ }
+ buf.Append(iRequestInfo->iRequestors[i]->RequestorIdString());
+ }
+ }
+ iNotification->SetTextL(buf);
+ iNotification->SetTimeout(KNotificationTimeout);
+ iNotification->EnableTouchActivation(ETrue);
+ iNotification->ShowL();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdGlobalPluginDialog::SetMessageTextL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdGlobalPluginDialog::SetRequestInfoL( CLpdRequestorProcessor* aRequestInfo )
+ {
+ if(iRequestInfo)
+ {
+ // clear and create again if already has been set before
+ delete iRequestInfo;
+ iRequestInfo=NULL;
+ }
+ iRequestInfo=CLpdRequestorProcessor::NewL();
+
+ iRequestInfo->iDialogType=aRequestInfo->iDialogType;
+ iRequestInfo->iNotifReason=aRequestInfo->iNotifReason;
+ iRequestInfo->iRequestDecision=aRequestInfo->iRequestDecision;
+ iRequestInfo->iRequestType=aRequestInfo->iRequestType;
+
+ const RPointerArray<CPosRequestor>& requestors = aRequestInfo->iRequestors;
+
+ TInt count = requestors.Count();
+ for(TInt i=0; i< count; i++ )
+ {
+ CPosRequestor::TRequestorIdFormat idFormat;
+ TPtrC idString;
+ idFormat=requestors[i]->RequestorIdFormat();
+ idString.Set(requestors[i]->RequestorIdString());
+
+ if( CPosRequestor::ERequestorService==requestors[i]->RequestType())
+ {
+ CPosServiceRequestor* service = CPosServiceRequestor::NewL(idFormat,idString);
+ CleanupStack::PushL(service);
+ // Ownership transferred
+ iRequestInfo->iRequestors.Append(service);
+ CleanupStack::Pop(service);
+ }
+ else
+ {
+ CPosContactRequestor* contact = CPosContactRequestor::NewL(idFormat,idString);
+ CleanupStack::PushL(contact);
+ // Ownership transferred
+ iRequestInfo->iRequestors.Append(contact);
+ CleanupStack::Pop(contact);
+ }
+
+ }
+ }
+
+
+
+void CLpdGlobalPluginDialog::Cancel()
+ {
+ // Close any running dialogs if any.Close() doesnt have any effect if dialog is not running
+ isCancelled = ETrue;
+ iMsgBox->Cancel();
+ iNotification->Close();
+ }
+
+void CLpdGlobalPluginDialog::NotificationDialogActivated(
+ const CHbDeviceNotificationDialogSymbian */*aDialog*/)
+ {
+ // Complete with KErrNone now
+ TRAP_IGNORE(iCallBack.HandleDlgDismissedL( KErrNone ));
+ }
+
+void CLpdGlobalPluginDialog::NotificationDialogClosed(
+ const CHbDeviceNotificationDialogSymbian */*aDialog*/,
+ TInt aCompletionCode)
+ {
+ TRAP_IGNORE(iCallBack.HandleDlgDismissedL( aCompletionCode ));
+ }
+
+void CLpdGlobalPluginDialog::DataReceived(CHbSymbianVariantMap& /*aData*/)
+ {
+ mDissmissed = ETrue;
+ TRAP_IGNORE(iCallBack.HandleDlgDismissedL( KErrAccessDenied ));
+ }
+
+void CLpdGlobalPluginDialog::DeviceDialogClosed(TInt /*aCompletionCode*/)
+ {
+ if (!mDissmissed && !isCancelled)
+ {
+ TRAP_IGNORE(iCallBack.HandleDlgDismissedL( KErrNone ));
+ }
+ }
+
+void CLpdGlobalPluginDialog::AddVerDlgHeadingParamL()
+ {
+ HBufC* headingText = HbTextResolverSymbian::LoadL(KRequestHeading);
+ CleanupStack::PushL(headingText);
+ CHbSymbianVariant* heading = CHbSymbianVariant::NewL(headingText,
+ CHbSymbianVariant::EDes);
+ CleanupStack::PushL(heading);
+ mSymbianVariantMap->Add(KHeadingKey, heading );
+ CleanupStack::Pop(heading);
+ CleanupStack::PopAndDestroy(headingText);
+ }
+
+void CLpdGlobalPluginDialog::AddQueryTextParamL()
+ {
+ HBufC * value = HBufC::NewL(KVariantMaxSize);
+ CleanupStack::PushL(value);
+ HBufC * value2 = HBufC::NewL(KVariantMaxSize);
+ CleanupStack::PushL(value2);
+ HBufC* requestorText = HbTextResolverSymbian::LoadL(KRequestorText);
+ CleanupStack::PushL(requestorText);
+
+ if (CPosRequestor::ERequestSingleShot == iRequestInfo->iRequestType)
+ {
+ if (EPosDecisionNotAvailable == iRequestInfo->iRequestDecision)
+ {
+ HBufC* queryText = HbTextResolverSymbian::LoadL(
+ KSingleshotDecisionNotAvailable);
+ CleanupStack::PushL(queryText);
+ value->Des().Copy(queryText->Des());
+ CleanupStack::PopAndDestroy(queryText);
+ }
+ else if (EPosDecisionAccepted == iRequestInfo->iRequestDecision)
+ {
+ HBufC* queryText = HbTextResolverSymbian::LoadL(
+ KSingleshotDecisionAccepted);
+ CleanupStack::PushL(queryText);
+ value->Des().Copy(queryText->Des());
+ value2->Des().Copy(requestorText->Des());
+ CleanupStack::PopAndDestroy(queryText);
+ }
+ else if (EPosDecisionRejected == iRequestInfo->iRequestDecision)
+ {
+ HBufC* queryText = HbTextResolverSymbian::LoadL(
+ KSingleshotDecisionRejected);
+ CleanupStack::PushL(queryText);
+ value->Des().Copy(queryText->Des());
+ value2->Des().Copy(requestorText->Des());
+ CleanupStack::PopAndDestroy(queryText);
+ }
+ }
+
+ else if (CPosRequestor::ERequestPeriodic == iRequestInfo->iRequestType)
+ {
+ if (EPosDecisionNotAvailable == iRequestInfo->iRequestDecision)
+ {
+ HBufC* queryText = HbTextResolverSymbian::LoadL(
+ KPeriodicDecisionNotAvailable);
+ CleanupStack::PushL(queryText);
+ value->Des().Copy(queryText->Des());
+ CleanupStack::PopAndDestroy(queryText);
+ }
+ else if (EPosDecisionAccepted == iRequestInfo->iRequestDecision)
+ {
+ HBufC* queryText = HbTextResolverSymbian::LoadL(
+ KPeriodicDecisionAccepted);
+ CleanupStack::PushL(queryText);
+ value->Des().Copy(queryText->Des());
+ value2->Des().Copy(requestorText->Des());
+ CleanupStack::PopAndDestroy(queryText);
+ }
+ else if (EPosDecisionRejected == iRequestInfo->iRequestDecision)
+ {
+ HBufC* queryText = HbTextResolverSymbian::LoadL(
+ KPeriodicDecisionRejected);
+ CleanupStack::PushL(queryText);
+ value->Des().Copy(queryText->Des());
+ value2->Des().Copy(requestorText->Des());
+ CleanupStack::PopAndDestroy(queryText);
+ }
+ }
+ else
+ {
+ // Not supported
+ User::Leave(KErrNotSupported);
+ }
+
+ CHbSymbianVariant* queryText = CHbSymbianVariant::NewL(value,
+ CHbSymbianVariant::EDes);
+ CleanupStack::PushL(queryText);
+
+ CHbSymbianVariant* queryText2 = CHbSymbianVariant::NewL(value2,
+ CHbSymbianVariant::EDes);
+ CleanupStack::PushL(queryText2);
+
+ if (value2->Length()!= 0)
+ {
+ mSymbianVariantMap->Add(KQueryText2Key, queryText2);
+ }
+ mSymbianVariantMap->Add(KQueryTextKey, queryText);
+ CleanupStack::Pop(queryText2);
+ CleanupStack::Pop(queryText);
+ CleanupStack::PopAndDestroy(3);
+ }
+
+void CLpdGlobalPluginDialog::AddRequestorsParamL()
+ {
+
+ CDesC16ArrayFlat* array = new CDesC16ArrayFlat(8);
+ TInt reqCount = iRequestInfo->iRequestors.Count();
+ if (!reqCount)
+ {
+ HBufC* requestor = HbTextResolverSymbian::LoadL(KUnknownRequestor);
+ CleanupStack::PushL(requestor);
+ array->AppendL(requestor->Des());
+ CleanupStack::PopAndDestroy(requestor);
+ }
+ else
+ {
+ for (TInt i = 0; i < reqCount; ++i)
+ {
+ array->AppendL(iRequestInfo->iRequestors[i]->RequestorIdString());
+ }
+ }
+
+ TInt count = array->MdcaCount();
+ MDesCArray* marray = static_cast<MDesCArray*> (array);
+ CHbSymbianVariant* requestors = CHbSymbianVariant::NewL(marray,
+ CHbSymbianVariant::EDesArray);
+ mSymbianVariantMap->Add(KRequestorKey, requestors);
+ }
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdnotifierquerylauncher.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2010 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: Class which handles the dialog and expiration timer.
+*
+*/
+
+
+// INCLUDE FILES
+#include "lpdnotifierquerylauncher.h"
+#include "lpdglobalplugindialog.h"
+
+#include "lpdresulthandler.h"
+#include <lbs/epos_privacy.h>
+
+// CONSTANTS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLpdNotifierQueryLauncher::CLpdNotifierQueryLauncher
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdNotifierQueryLauncher::CLpdNotifierQueryLauncher(
+ MLpdResultHandler& aHandler )
+ : CLpdQueryLauncherBase( aHandler )
+ {
+ // Intentionally empty
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdNotifierQueryLauncher::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CLpdNotifierQueryLauncher::ConstructL()
+ {
+ CLpdQueryLauncherBase::ConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdNotifierQueryLauncher::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLpdNotifierQueryLauncher* CLpdNotifierQueryLauncher::NewL(
+ MLpdResultHandler& aHandler )
+ {
+ CLpdNotifierQueryLauncher* self = new( ELeave )
+ CLpdNotifierQueryLauncher( aHandler );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// Destructor
+CLpdNotifierQueryLauncher::~CLpdNotifierQueryLauncher()
+ {
+ // Intentionally empty
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdNotifierQueryLauncher::ExtendedHandleDlgDismissedL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdNotifierQueryLauncher::ExtendedHandleDlgDismissedL()
+ {
+ iHandler.HandleNotificationResultL( iResult );
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdNotifierQueryLauncher::RequestType
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdNotifierQueryLauncher::RequestType(TRequestType& aRequestType)
+ {
+ aRequestType = CLpdQueryLauncherBase::ENotification;
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdquerylauncherbase.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2010 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: Abstract base class for queries.
+*
+*/
+
+
+// INCLUDE FILES
+
+#include "lpdquerylauncherbase.h"
+#include "lpdresulthandler.h"
+#include "lpdrequestorprocessor.h"
+
+#include "lpdglobalplugindialog.h"
+
+
+// CONSTANTS
+
+// Unnamed namespace for local definitions
+
+#ifdef _DEBUG
+//_LIT( KPanicText, "CLpdQueryLauncherBase" );
+enum TPanicCode
+ {
+ KLpdErrGeneral = 1
+ };
+#endif
+
+// INCLUDE FILES
+#include <s32mem.h>
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLpdQueryLauncherBase::CLpdQueryLauncherBase
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdQueryLauncherBase::CLpdQueryLauncherBase( MLpdResultHandler& aHandler )
+ : iHandler( aHandler ),
+ iResult( KErrArgument ),
+ iQueryDlg( NULL )
+ {
+ }
+
+
+
+// -----------------------------------------------------------------------------
+// CLpdQueryLauncherBase::~CLpdQueryLauncherBase
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CLpdQueryLauncherBase::~CLpdQueryLauncherBase()
+ {
+ delete iQueryDlg;
+ iQueryDlg = NULL;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdQueryLauncherBase::ConstructL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdQueryLauncherBase::ConstructL()
+ {
+ iQueryDlg = CLpdGlobalPluginDialog::NewL(*this);
+ }
+// -----------------------------------------------------------------------------
+// CLpdQueryLauncherBase::SetQueryTextArray
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdQueryLauncherBase::SetRequestInfoL( CLpdRequestorProcessor* aRequestInfo )
+ {
+ iQueryDlg->SetRequestInfoL(aRequestInfo);
+ }
+
+void CLpdQueryLauncherBase::RequestType(TRequestType& aRequestType)
+ {
+ aRequestType = EUnknown;
+ }
+// -----------------------------------------------------------------------------
+// CLpdQueryLauncherBase::StartQueryL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdQueryLauncherBase::StartQueryL()
+ {
+ TRequestType type;
+ RequestType( type );
+ if( EVerification == type )
+ {
+ iQueryDlg->RunVerificationQueryL();
+ }
+ else if( ENotification == type )
+ {
+ iQueryDlg->RunNotificationL();
+ }
+ else
+ {
+ // do nothing now
+ }
+
+ }
+
+void CLpdQueryLauncherBase::Cancel()
+ {
+ iQueryDlg->Cancel();
+ }
+// -----------------------------------------------------------------------------
+// CLpdQueryLauncherBase::HandleDlgDismissedL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdQueryLauncherBase::HandleDlgDismissedL(
+ TInt aResult )
+ {
+
+ iResult = aResult;
+
+ TRAPD( err, ExtendedHandleDlgDismissedL() );
+ if ( err )
+ {
+ iHandler.HandleLeave( err );
+ }
+
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdrequestao.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2010 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: Active object which ensures that current call stack is run to
+* completion before a new request is handled
+*
+*/
+
+
+// INCLUDE FILES
+#include "lpdrequestao.h"
+#include "lpdverifierplugin.h"
+#include <lbs/epos_cposrequestor.h>
+#include <lbs/epos_rposrequestorstack.h>
+
+// ================= MEMBER FUNCTIONS =======================
+
+// -----------------------------------------------------------------------------
+// CLpdRequestAO::CLpdRequestAO
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdRequestAO::CLpdRequestAO( CLpdVerifierPlugin& aPlugin )
+ : CActive( CActive::EPriorityHigh ), iPlugin( aPlugin )
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestAO::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLpdRequestAO* CLpdRequestAO::NewL( CLpdVerifierPlugin& aPlugin )
+ {
+ CLpdRequestAO* self = new( ELeave ) CLpdRequestAO( aPlugin );
+ CActiveScheduler::Add(self);
+ // Nothing to do in the Second Phase Constructor
+ return self;
+ }
+
+// Destructor
+CLpdRequestAO::~CLpdRequestAO()
+ {
+ Cancel();
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestAO::ScheduleRequest
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdRequestAO::ScheduleRequest()
+ {
+ Cancel();
+ SetActive();
+ TRequestStatus* status = &iStatus;
+ User::RequestComplete( status, KErrNone );
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestAO::RunL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdRequestAO::RunL()
+ {
+ iPlugin.HandleNextRequest();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestAO::DoCancel
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdRequestAO::DoCancel()
+ {
+ // Not important with this AO
+ }
+
+
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdrequestorprocessor.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: Processes requestor related data.
+*
+*/
+
+
+// INCLUDE FILES
+#include "lpdrequestorprocessor.h"
+#include "contactresolversession.h"
+
+#include "locverifierdlgdebug.h"
+#include <lbs/epos_cposrequestor.h>
+#include <lbs/epos_cposcontactrequestor.h>
+#include <lbs/epos_cposservicerequestor.h>
+#include <epos_cposprivacynotifier.h>
+
+
+// Unnamed namespace for local definitions
+
+const TInt KRequestorsGranularity = 5;
+#ifdef _DEBUG
+_LIT( KPanicText, "CLpdRequestorProcessor" );
+enum TPanicCode
+ {
+ KLpdErrGeneral = 1
+ };
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLpdRequestorProcessor::CLpdRequestorProcessor
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdRequestorProcessor::CLpdRequestorProcessor()
+: iRequestors( KRequestorsGranularity)
+ {
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestorProcessor::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLpdRequestorProcessor* CLpdRequestorProcessor::NewL()
+ {
+ CLpdRequestorProcessor* self = new( ELeave ) CLpdRequestorProcessor;
+ // Nothing to do in the Second Phase Constructor
+ return self;
+ }
+
+// Destructor
+CLpdRequestorProcessor::~CLpdRequestorProcessor()
+ {
+ iRequestors.ResetAndDestroy();
+ iRequestors.Close();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestorProcessor::ReadRequestorsL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CLpdRequestorProcessor::ReadRequestorsL(
+ const CPosPrivacyNotifier& aPosNotifier )
+ {
+ __ASSERT_DEBUG( aPosNotifier.CurrentRequest() != KPosNullQNRequestId,
+ HandleAssertErrorL() );
+
+ this->ResetAndDestroyRequestors();
+
+ TBool allRequestorIdsValid = ETrue;
+
+ // Let's read the requestors associated with the current request:
+ TInt nofRequestors = aPosNotifier.RequestorCountL();
+
+ for ( TInt i = 0; i < nofRequestors; i++ )
+ {
+ CPosRequestor* requestor = aPosNotifier.RequestorLC( i );
+
+ if ( RequestorIdValid( *requestor ) )
+ { // mark that some requestor id is invalid
+ allRequestorIdsValid = EFalse;
+ }
+
+ User::LeaveIfError( iRequestors.Append( requestor ) );
+ CleanupStack::Pop( requestor ); // iRequestors owns now the requestor
+ }
+
+ if ( nofRequestors == 0 )
+ {
+ allRequestorIdsValid = EFalse; // zero requestors == invalid
+ }
+
+ RContactResolverSession resSession;
+ TInt err = resSession.Connect();
+
+ // If any error in connection,dont leave.Use un-resolved requestors
+ if( KErrNone == err )
+ {
+ resSession.ResolveRequestorsL(iRequestors);
+ }
+ resSession.Close();
+
+ return allRequestorIdsValid;
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestorProcessor::ResetAndDestroyRequestors
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdRequestorProcessor::ResetAndDestroyRequestors()
+ {
+ iRequestors.ResetAndDestroy();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestorProcessor::RequestorIdValid
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TBool CLpdRequestorProcessor::RequestorIdValid(
+ const CPosRequestor& aRequestor )
+ {
+ return( aRequestor.RequestorIdFormat() != CPosRequestor::EIdFormatUnknown );
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdRequestorProcessor::HandleAssertErrorL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdRequestorProcessor::HandleAssertErrorL() const
+ {
+ #ifdef _DEBUG
+ User::Panic( KPanicText, KLpdErrGeneral );
+ #else
+ User::Leave( KErrCorrupt );
+ #endif
+ }
+// end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdverifierplugin.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,552 @@
+/*
+ * Copyright (c) 2010 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: Verifier plug-in which derives from CPosPrivacyNotifier.
+ *
+ */
+
+// INCLUDE FILES
+
+#include "lpdverifierplugin.h"
+
+#include "lpdrequestao.h"
+#include "lpdrequestorprocessor.h"
+#include "lpdverifierquerylauncher.h"
+#include "lpdnotifierquerylauncher.h"
+#include "locverifierdlgdebug.h"
+#include "locutilsdebug.h"
+
+#include <eiknotapi.h>
+#include <lbs/epos_rposrequestorstack.h>
+#include <epos_csuplsettingsconstants.h>
+
+// INCLUDE FILES
+#include <s32mem.h>
+
+
+
+const TInt KPrivSrvSecureId = 0x10281D45;
+// CONSTANTS
+
+// Unnamed namespace for local definitions
+
+const MEikSrvNotifierBase2::TNotifierPriority KNotifierPriority =
+ MEikSrvNotifierBase2::ENotifierPriorityHigh;
+const TUid KNotifierChannel =
+ {
+ 0x100065ac
+ };
+#ifdef _DEBUG
+_LIT( KPanicText, "CLpdVerifierPlugin" );
+enum TPanicCode
+ {
+ KLpdErrGeneral = 1
+ };
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::CLpdVerifierPlugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdVerifierPlugin::CLpdVerifierPlugin() :
+ iCurrentRequest(KPosNullQNRequestId)
+
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::ConstructL()
+ {
+ BaseConstructL(KNotifierChannel, KNotifierPriority);
+
+ iRtorProcessor = CLpdRequestorProcessor::NewL();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLpdVerifierPlugin* CLpdVerifierPlugin::NewL()
+ {
+ CLpdVerifierPlugin* self = new (ELeave) CLpdVerifierPlugin;
+
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// Destructor
+CLpdVerifierPlugin::~CLpdVerifierPlugin()
+ {
+ // Destruction of this plugin should only occur only in shutdown
+ // or in severe problem situation.
+
+ // A very special scenario is that base class construction leaves and
+ // this destructor is called. In that case CompleteAllRequests() causes
+ // access violation (noticed this by checking source code of base class).
+ if (NotifierBase())
+ { // base class has been fully constructed, method call is safe
+ CompleteAllRequests(KErrGeneral);
+ }
+
+ // It is enough to delete queries so when don't get callbacks.
+ FreeQueryResources();
+
+ delete iRequestActiveObject;
+ iRequestActiveObject = NULL;
+ delete iRtorProcessor;
+ iRtorProcessor = NULL;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNewRequestL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNewRequestL(TPosQNRequestId /*aRequestId */ )
+ {
+ LOCVERIFIERDLGDEBUG( "CLpdVerifierPlugin::HandleNewRequestL" );
+
+ // Check whether the notifier is already handling a request
+ // If yes, do nothing for now.
+ if (iRequestActiveObject)
+ {
+ return;
+ }
+ else
+ {
+ iRequestActiveObject = CLpdRequestAO::NewL(*this);
+ iRequestActiveObject->ScheduleRequest();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleRequestCancelled
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleRequestCancelled(TPosQNRequestId aRequestId)
+ {
+ LOCVERIFIERDLGDEBUG( "CLpdVerifierPlugin::HandleRequestCancelled" );
+ // Check whether the request is coming from Uikon Server.
+ // If not reject this request.
+ if (!CheckClientSecureId(KPrivSrvSecureId))
+ {
+ return;
+ }
+
+
+ if (aRequestId != iCurrentRequest)
+ {
+ return;
+ }
+
+
+ if (iCurrentRequestType == EQuery)
+ { // Verification was cancelled
+ __ASSERT_DEBUG( iVerifierQuery, HandleDebugAssertError() );
+ LOCVERIFIERDLGDEBUG( "Verification cancelled" );
+ iVerifierQuery->Cancel();
+ }
+ else
+ {
+ // It must be a notification then, this case is not probable but
+ // we can cancel the dialog if this would happen.
+ __ASSERT_DEBUG( iCurrentRequestType == ENotification,
+ HandleDebugAssertError() );
+ __ASSERT_DEBUG( iNotifier, HandleDebugAssertError() );
+ LOCVERIFIERDLGDEBUG( "Notification cancelled" );
+ iNotifier->Cancel();
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleAllRequestCancelled
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleAllRequestCancelled()
+ {
+ LOCVERIFIERDLGDEBUG( "CLpdVerifierPlugin::HandleAllRequestCancelled" );
+ if (iCurrentRequest != KPosNullQNRequestId)
+ { // current request requires some specific behavior
+ HandleRequestCancelled(iCurrentRequest);
+ }
+
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleVerificationResultL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleVerificationResultL(TInt aResultCode)
+ {
+ iVerifyResult = aResultCode;
+
+ LOCVERIFIERDLGDEBUG1( "CLpdVerifierPlugin::HandleVerificationResultL(%d)",
+ iVerifyResult );
+
+ switch (iVerifyResult)
+ {
+ case KErrNone: // fall through
+ case KErrAccessDenied:
+ {
+ // No need for rules now in 3.0
+ break;
+ }
+ case KErrTimedOut:
+ { // UI's internal timer expired
+ break;
+ }
+ case KErrCancel:
+ {
+ return; // don't handle next req. yet
+ }
+ case KErrAbort: // This is used for emergency call support
+ {
+ CompleteAllRequests(iVerifyResult);
+ // ScheduleRequest() allows the current call chain
+ // run to completion and resources are released after that.
+ iRequestActiveObject->ScheduleRequest();
+ return;
+ }
+ default:
+ {
+
+ break;
+ }
+ }
+
+ CompleteCurrentAndContinue(iVerifyResult); // this request was handled
+ }
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNotificationResultL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNotificationResultL(TInt aResultCode)
+ {
+
+ LOCVERIFIERDLGDEBUG1( "CLpdVerifierPlugin::HandleVerificationResultL(%d)",
+ aResultCode );
+ CompleteRequest(iCurrentRequest, aResultCode);
+ iCurrentRequest = KPosNullQNRequestId;
+
+ switch (aResultCode)
+ {
+ case KErrNone: // fall through
+ case KErrTimedOut: // fall through
+ {
+ break;
+ }
+ case KErrCancel:
+ {
+ break;
+ }
+ case KErrAbort: // This is used for emergency call support
+ {
+ CompleteAllRequests(aResultCode);
+ // ScheduleRequest() -> allows the current call chain
+ // run to completion and resources are released after that.
+ break;
+ }
+ default:
+ {
+
+ break;
+ }
+ }
+
+ iRequestActiveObject->ScheduleRequest(); // handle next req.
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleLeave
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleLeave(TInt /*aError*/)
+ {
+ LOCVERIFIERDLGDEBUG1( "CLpdVerifierPlugin::HandleLeave(%d)", aError);
+ // In this case user needs feedback about the error situation:
+
+
+ // In case of leave current request is completed with
+ // iVerifyResult, but queue handling is still continued.
+ // iVerifyResult is better completion code for request than aError.
+ CompleteCurrentAndContinue(iVerifyResult);
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNextRequest
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNextRequest()
+ {
+ TRAPD( err, HandleNextRequestL() );
+ if (err)
+ {
+ // In case of leave current request is completed with
+ // error code, but queue handling is still continued.
+
+ // If we couldn't start handling the request it is
+ // better not to confuse user with an error note.
+
+ CompleteCurrentAndContinue(iVerifyResult);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNextRequestL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNextRequestL()
+ {
+
+ // It is better to free previous query resources here, because
+ // now all callback methods have finished (active object allowed
+ // run to completion)
+ this->FreeQueryResources();
+
+ // Read the next request:
+ RArray<TPosQNRequestId> requests;
+ CleanupClosePushL(requests);
+ GetRequestsL(requests);
+
+ if (requests.Count() == 0)
+ { // No more requests to handle
+ CleanupStack::PopAndDestroy(); // requests
+ // This is a very important step, it allows new requests
+ // to flow in ( see HandleNewRequestL() ):
+ delete iRequestActiveObject;
+ iRequestActiveObject = NULL;
+ return;
+ }
+ iCurrentRequest = requests[0];
+ CleanupStack::PopAndDestroy(); // requests
+ SetCurrentRequestL(iCurrentRequest);
+
+ // Check whether the request is coming from Uikon Server. If not reject this request.
+ if (!CheckClientSecureId(KPrivSrvSecureId))
+ {
+ CompleteCurrentAndContinue(KErrPermissionDenied);
+ return;
+ }
+
+ // Check the request type
+ iCurrentRequestType = RequestTypeL(iCurrentRequest);
+
+ iRtorProcessor->ReadRequestorsL(*this);
+
+
+
+ if (iCurrentRequestType == EQuery)
+ {
+ LOCVERIFIERDLGDEBUG( "New verification request received" );
+ HandleNextVerificationL();
+ }
+ else if (iCurrentRequestType == ENotification)
+ {
+ LOCVERIFIERDLGDEBUG( "New notification request received" );
+ HandleNextNotificationL();
+ }
+ else
+ {
+ User::Leave(KErrNotSupported);
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNextVerificationL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNextVerificationL()
+ {
+ __ASSERT_DEBUG( iCurrentRequest != KPosNullQNRequestId,
+ HandleAssertErrorL() );
+ __ASSERT_DEBUG( !iVerifierQuery, HandleAssertErrorL() );
+
+ CPosRequestor::TRequestType reqType;
+ if (CheckRequestTypeL() == CPosRequestor::ERequestPeriodic)
+ reqType = CPosRequestor::ERequestPeriodic;
+ else
+ reqType = CPosRequestor::ERequestSingleShot;
+
+ TPosRequestSource source(RequestSource());
+ if (source == EPosRequestSourceNotAvailable)
+ {
+ CompleteCurrentAndContinue(KErrNone);
+ }
+ else
+ {
+
+ TPosRequestDecision decision(QueryTimeoutStrategy());
+
+ iRtorProcessor->iRequestType=reqType;
+ iRtorProcessor->iRequestDecision=decision;
+ iRtorProcessor->iDialogType=CLpdRequestorProcessor::EQuery;
+
+ iVerifierQuery = CLpdVerifierQueryLauncher::NewL(*this);
+ // Ownership NOT transferred
+ iVerifierQuery->SetRequestInfoL(iRtorProcessor);
+
+ iVerifierQuery->StartQueryL();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNextNotificationL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNextNotificationL()
+ {
+ __ASSERT_DEBUG( iCurrentRequest != KPosNullQNRequestId,
+ HandleAssertErrorL() );
+
+ // There is no differentiation now for periodic and single shot notifications
+ HandleNextNonPeriodicNotificationL();
+ }
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleNextNonPeriodicNotificationL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleNextNonPeriodicNotificationL()
+ {
+
+ __ASSERT_DEBUG( iCurrentRequest != KPosNullQNRequestId,
+ HandleAssertErrorL() );
+ __ASSERT_DEBUG( !iNotifier, HandleAssertErrorL() );
+
+ if (RequestSource() != EPosRequestSourceNetwork)
+ { // Notifications are supported only for network requests
+ User::Leave(KErrNotSupported);
+ }
+
+ TPosNotificationReason reason = NotificationReason();
+ TPosRequestDecision decision = LocationRequestDecision();
+ iRtorProcessor->iNotifReason=reason;
+ iRtorProcessor->iDialogType=CLpdRequestorProcessor::ENotification;
+ iRtorProcessor->iRequestDecision=decision;
+
+ iNotifier = CLpdNotifierQueryLauncher::NewL(*this);
+ iNotifier->SetRequestInfoL(iRtorProcessor);
+ iNotifier->StartQueryL();
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::CompleteCurrentAndContinue
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::CompleteCurrentAndContinue(TInt aResultCode)
+ {
+ if (iCurrentRequest != KPosNullQNRequestId)
+ {
+ CompleteRequest(iCurrentRequest, aResultCode);
+ }
+ iCurrentRequest = KPosNullQNRequestId;
+
+ __ASSERT_DEBUG( iRequestActiveObject, HandleDebugAssertError() );
+ iRequestActiveObject->ScheduleRequest(); // handle next req.
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::FreeQueryResources
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::FreeQueryResources()
+ {
+ iCurrentRequest = KPosNullQNRequestId;
+ delete iVerifierQuery;
+ iVerifierQuery = NULL;
+ iVerifyResult = KErrGeneral;
+ delete iNotifier;
+ iNotifier = NULL;
+ if (iRtorProcessor)
+ { // if already construction fails iRtorProcessor may
+ // be NULL, otherwise it points to an instance.
+ iRtorProcessor->ResetAndDestroyRequestors();
+ }
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleAssertErrorL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleAssertErrorL() const
+ {
+#ifdef _DEBUG
+ User::Panic(KPanicText, KLpdErrGeneral);
+#else
+ User::Leave( KErrCorrupt );
+#endif
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::HandleDebugAssertError
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierPlugin::HandleDebugAssertError() const
+ {
+#ifdef _DEBUG
+ User::Panic(KPanicText, KLpdErrGeneral);
+#endif
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierPlugin::CheckRequestTypeL
+// Checks the type of request and helps to know
+// if a given request is of SUPL periodic type
+// @param aCurrentRequest request id
+// @return TRequestType type of request enum
+// -----------------------------------------------------------------------------
+CPosRequestor::TRequestType CLpdVerifierPlugin::CheckRequestTypeL()
+ {
+ CPosRequestor::TRequestType reqType = CPosRequestor::ENetworkTypeUnknown;
+ if (RequestorCountL() > 0)
+ {
+ CPosRequestor* requestor = RequestorLC(0);
+ reqType = requestor->RequestType();
+ CleanupStack::PopAndDestroy(requestor);
+ }
+ return reqType;
+ }
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/locverifier/src/lpdverifierquerylauncher.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2010 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: Class which handles the dialog and expiration timer.
+*
+*/
+
+
+// INCLUDE FILES
+#include "lpdverifierquerylauncher.h"
+#include "lpdglobalplugindialog.h"
+#include "lpdresulthandler.h"
+
+// CONSTANTS
+
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierQueryLauncher::CLpdVerifierQueryLauncher
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CLpdVerifierQueryLauncher::CLpdVerifierQueryLauncher(
+ MLpdResultHandler& aHandler )
+ : CLpdQueryLauncherBase( aHandler )
+ {
+ // Intentionally empty
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierQueryLauncher::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierQueryLauncher::ConstructL()
+ {
+ CLpdQueryLauncherBase::ConstructL();
+ }
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierQueryLauncher::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CLpdVerifierQueryLauncher* CLpdVerifierQueryLauncher::NewL(
+ MLpdResultHandler& aHandler )
+ {
+ CLpdVerifierQueryLauncher* self =
+ new( ELeave ) CLpdVerifierQueryLauncher( aHandler );
+
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop(self);
+
+ return self;
+ }
+
+// Destructor
+CLpdVerifierQueryLauncher::~CLpdVerifierQueryLauncher()
+ {
+ // Intentionally empty
+ }
+
+
+// -----------------------------------------------------------------------------
+// CLpdVerifierQueryLauncher::ExtendedHandleDlgDismissedL
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CLpdVerifierQueryLauncher::ExtendedHandleDlgDismissedL()
+ {
+ iHandler.HandleVerificationResultL( iResult );
+ }
+
+void CLpdVerifierQueryLauncher::RequestType(TRequestType& aRequestType)
+ {
+ aRequestType = CLpdQueryLauncherBase::EVerification;
+ }
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/inc/apilogger.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2010 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 class provides function that help in logging entry and exit of APIs of classes
+*
+*/
+
+#ifndef APILOGGER_H
+#define APILOGGER_H
+
+#include <iostream>
+#include <fstream>
+#include <QDebug>
+#include <qfile.h>
+#include <qtextstream.h>
+
+using namespace std;
+
+
+class ApiLogger
+ {
+ public:
+ static void OpenLogFile();
+ static void CloseLogFile();
+ static void MyOutputHandler(QtMsgType type, const char *msg);
+ };
+
+#endif // APILOGGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/inc/customdocumentloader.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2010 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: Header file for Custom docml loader
+ *
+ */
+
+
+#ifndef CUSTOMDOCUMENTLOADER_H
+#define CUSTOMDOCUMENTLOADER_H
+#include <hbdocumentloader.h>
+
+//Forward Declarations
+
+class CustomDocumentLoader : public HbDocumentLoader
+{
+
+public:
+
+ /**
+ * Constructor.
+ */
+ CustomDocumentLoader();
+
+ /**
+ * Destructor.
+ */
+ ~CustomDocumentLoader();
+
+public:
+
+ /**
+ * from base class
+ */
+ QObject *createObject(const QString& type, const QString &name);
+
+};
+
+#endif /* CUSTOMDOCUMENTLOADER_H */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/inc/posverificationcustomdialog.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2010 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: Header file for Custom PosVerification dialog
+ *
+ */
+
+#ifndef POSVERIFICATIONCUSTOMDIALOG_H
+#define POSVERIFICATIONCUSTOMDIALOG_H
+
+#include <hbdialog.h>
+#include <hbdevicedialoginterface.h>
+#include <hblabel.h>
+#include <hbaction.h>
+
+
+class CustomDocumentLoader;
+
+class PosVerificationCustomDialog : public HbDialog,
+ public HbDeviceDialogInterface
+
+ {
+Q_OBJECT
+Q_PROPERTY( QString heading READ getHeading WRITE setHeading )
+Q_PROPERTY( QString queryText READ getQueryText WRITE setQueryText )
+Q_PROPERTY( QString queryText2 READ getQueryText2 WRITE setQueryText2 )
+Q_PROPERTY( QStringList requestor READ getRequestor WRITE setRequestor )
+
+public:
+
+ /*
+ * Constructor
+ */
+ PosVerificationCustomDialog();
+
+ /**
+ * Destructor
+ */
+ ~PosVerificationCustomDialog();
+
+public:
+ /**
+ * This method gets the widget from the application desginer docml file.
+ * param[in]- loader, instance of CustomDocumentLoader
+ */
+ void getWidgets(const CustomDocumentLoader &loader);
+
+ //from HbDeviceDialogInterface
+public:
+ /**
+ * Set device dialog widget parameters. This function may be called after the widget is created
+ * to update widget parameters. parameters contains widget parameters.The structure and meaning
+ * of parameters is a contract between the plugin and a client.
+ * @param[in] - parameters, QVariantMap, containing the key value pair for the properties
+ * @returns- bool, Returns true on success or false on failure.
+ */
+ bool setDeviceDialogParameters(const QVariantMap ¶meters);
+
+ /**
+ * Returns an error last occurred. Error code ranges are defined in HbDeviceDialog.
+ * The code is passed to a client by device dialog framework
+ * @returns- int, error code
+ */
+ int deviceDialogError() const;
+
+ /**
+ * Closes a device dialog widget gracefully. This function may called due to device dialog client
+ * calling HbDeviceDialog::cancel() or by device dialog service if it decides that a dialog needs
+ * to be closed. Device dialog widget may also close itself without this function being called.
+ * byClient is true if client initiated the closing. Otherwise the closing was initiated by the device
+ * dialog framework. The widget may also be deleted at any time ungracefully without closeDeviceDialog()
+ * being called.
+ */
+ void closeDeviceDialog(bool byClient);
+
+ /**
+ * Returns a pointer to a widget that implements the user interface of the device dialog.
+ * @returns- HbPopup, pointer to the widget
+ */
+ HbPopup * deviceDialogWidget() const;
+
+signals:
+ void deviceDialogClosed();
+ void deviceDialogData(QVariantMap data);
+
+private:
+
+ /**
+ * This method is used to set the name of requestors
+ * requesting for position, in the verification dialog
+ * @param [in] - requestorList, list of names of the requestors
+ */
+ void setRequestor(QStringList& requestorList);
+
+ /**
+ * This method is used to gets the name of requestors
+ * requesting for position, in the verification dialog
+ * @returns - QStringList, list of names of the requestors
+ */
+ QStringList getRequestor();
+
+ /**
+ * This method is used to set the heading for the dialog
+ * @param [in] - heading, string to be set as the heading for the dialog
+ */
+ void setHeading(QString& heading);
+
+ /**
+ * This method is used to get the heading for the dialog
+ * @returns - QString, heading for the dialog
+ */
+ QString getHeading();
+
+ /**
+ * This method is used to set the query text to be displayed, depending on the
+ * policy.
+ * @param [in] - textQuery, string to be set as the query for the dialog
+ */
+ void setQueryText(QString& textQuery);
+
+ /**
+ * This method is used to get the query text displayed, depending on the
+ * policy.
+ * @returns - QString, query for the dialog
+ */
+ QString getQueryText();
+
+ /**
+ * This method is used to set the query text to be displayed, depending on the
+ * policy.
+ * @param [in] - textQuery, string to be set as the query line 2 for the dialog
+ */
+ void setQueryText2(QString& textQuery);
+
+ /**
+ * This method is used to get the query text line 2 displayed, depending on the
+ * policy.
+ * @returns - QString, query line 2 for the dialog
+ */
+ QString getQueryText2();
+
+ /**
+ * This method sets the properties for the widget.
+ * The property value is validated before the property is set.
+ * @param[in] - parameters, QVariantMap, containing the key value pair for the properties
+ * @returns- bool, Returns true on success or false on failure.
+ */
+ bool setProperties(const QVariantMap& parameters);
+
+private slots:
+ /**
+ * This slot is called on acceting the query dialog
+ */
+ void posVerificationdlgAccepted();
+
+ /**
+ * This slot is called on rejecting the query dialog
+ */
+ void posVerificationdlgRejected();
+
+ //member data
+private:
+ /**
+ * heading label for the device dialog
+ * Owns
+ */
+ HbLabel * mHeadingLabel;
+
+ /**
+ * primary action (SK1) for the device dialog
+ * owns
+ */
+ HbAction * mPrimaryAction;
+
+ /**
+ * query text label
+ * owns
+ */
+ HbLabel * mQueryText;
+
+ /**
+ * query text label (line 2)
+ * Changes as per the first query text
+ * owns
+ */
+ HbLabel * mQueryText2;
+
+ /**
+ * Widget containing the list of the requestors
+ * owns
+ */
+ HbWidget * mRequestorList;
+
+ /**
+ * list of names of the reqestors
+ * owns
+ */
+ QStringList mRequestorListItems;
+
+ /**
+ * secondry action (SK2) for the device dialog
+ * owns
+ */
+ HbAction * mSecondryAction;
+
+ };
+
+#endif // POSVERIFICATIONCUSTOMDIALOG_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/inc/posverificationdialogplugin.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2010 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: Header file for Custom PosVerification dialog
+ *
+ */
+
+#ifndef POSVERIFICATION_DIALOG_PLUGIN_H
+#define POSVERIFICATION_DIALOG_PLUGIN_H
+
+#include <hbdevicedialogplugin.h>
+#include <qtranslator.h>
+
+class PosVerificationDialogPlugin : public HbDeviceDialogPlugin
+ {
+Q_OBJECT
+
+public:
+ /**
+ * Constructor
+ */
+ PosVerificationDialogPlugin();
+
+ /**
+ * Destrcutor
+ */
+ ~PosVerificationDialogPlugin();
+
+ /**
+ * Checks if client is allowed use the device dialog that the plugin creates.
+ * Device dialog service calls this function before creating a device dialog or
+ * attaching into an existing one if flag HbDeviceDialogPlugin::SecurityCheck is set.
+ * The implementation is operating system dependent.
+ * @returns- bool, Returns true if client is allowed to use the device dialog.
+ * @param[in] - deviceDialogType Device dialog type.
+ * @param[in] - parameters Device dialog parameters.
+ * @param[in] - securityInfo Information for security check. Content is operating system dependent.
+ * The format is <key, value> pairs. Currently only Symbian is defined.
+ */
+
+ bool
+ accessAllowed(const QString ¬ificationType,
+ const QVariantMap ¶meters,
+ const QVariantMap &securityInfo) const;
+
+ /**
+ * Create a device dialog instance compatible with the version requested.
+ * This could always be the latest version if it is backwards compatible with older versions.
+ * Device dialog framework is unaware of version numbers in type strings. It performs string
+ * comparison of the whole string when searching for a plugin
+ * @param[in] - deviceDialogType Device dialog type.
+ * @param[in] - parameters Device dialog parameters.
+ * @returns - HbDeviceDialogInterface, device dialog instance
+ */
+
+ HbDeviceDialogInterface *createDeviceDialog(
+ const QString &deviceDialogType, const QVariantMap ¶meters);
+
+ /**
+ * Gets information of the device dialog created by the plugin. Device dialog manager calls
+ * this function before creating the device dialog widget to check HbDeviceDialogPlugin::DeviceDialogGroup,
+ * HbDeviceDialogPlugin::DeviceDialogFlag and priority.
+ * @returns - true if device dialog information returned is valid.
+ */
+
+ bool deviceDialogInfo(const QString &deviceDialogType,
+ const QVariantMap ¶meters, DeviceDialogInfo *info) const;
+
+ /**
+ * Returns a list of device dialog types the plugin implements. A plugin may implement
+ * several device dialog types. By convention device dialog type strings should follow
+ * inverted domain name format
+ * @returns - list of device dialog types
+ */
+ QStringList deviceDialogTypes() const;
+
+ /**
+ * @returns - plugin flags
+ */
+ HbDeviceDialogPlugin::PluginFlags pluginFlags() const;
+
+ /**
+ * Returns an error last occurred. Error code ranges are defined in HbDeviceDialog. The code
+ * is passed to a client by device dialog framework
+ * @returns- errorcode
+ */
+ int error() const;
+
+private:
+
+
+ /**
+ * instance of translator
+ * owns
+ */
+ QTranslator * mTranslator;
+ };
+
+#endif // POSVERIFICATION_DIALOG_PLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/posverificationdialogplugin.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,48 @@
+# 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: project file for positioing settings in control panel
+TEMPLATE = lib
+TARGET = posverificationdialogplugin
+DEPENDPATH += .
+INCLUDEPATH += ../inc
+INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
+CONFIG += hb \
+ plugin
+MOC_DIR = moc
+OBJECTS_DIR = obj
+RCC_DIR = rcc
+RESOURCES = resources/posverificationdialog.qrc
+
+#Uncomment following line to disable logging
+#DEFINES += QT_NO_DEBUG_OUTPUT
+
+# Platforms
+SYMBIAN_PLATFORMS = WINSCW \
+ ARMV5
+symbian::TARGET.UID3 = 0x2002E718
+SOURCES += src/apilogger.cpp \
+ src/posverificationdialogplugin.cpp \
+ src/customdocumentloader.cpp \
+ src/posverificationcustomdialog.cpp
+HEADERS += inc/apilogger.h \
+ inc/posverificationdialogplugin.h \
+ inc/customdocumentloader.h \
+ inc/posverificationcustomdialog.h
+symbian: {
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCALLOWDLLDATA = 1
+ pluginstub.sources = posverificationdialogplugin.dll
+
+ # This is for new exporting system coming in garden
+ for(qtplugin, qtplugins.sources):BLD_INF_RULES.prj_exports += "./$$qtplugin $$deploy.path$$qtplugins.path/$$basename(qtplugin)"
+ pluginstub.path = /resource/plugins/devicedialogs
+ DEPLOYMENT += pluginstub
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/resources/posverificationcustomdialog.docml Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="qtl_dialog_softkey_2_left" type="HbAction">
+ <string name="role" value="HbDialog:primaryAction"/>
+ <string locid="txt_loe_button_accept" name="text" value="Accept"/>
+ </object>
+ <object name="qtl_dialog_softkey_2_right" type="HbAction">
+ <string name="role" value="HbDialog:secondaryAction"/>
+ <string locid="txt_common_button_reject" name="text" value="Reject"/>
+ </object>
+ <widget name="PosVerificationCustomDialog" type="PosVerificationCustomDialog">
+ <sizehint height="42.38806un" type="PREFERRED" width="50.5un"/>
+ <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignLeft|AlignLeading"/>
+ <contentsmargins bottom="var(hb-param-margin-gene-popup)" left="var(hb-param-margin-gene-popup)" right="var(hb-param-margin-gene-popup)" top="var(hb-param-margin-gene-popup)"/>
+ <string name="plainText" value="Location request"/>
+ <fontspec name="fontSpec" role="Primary" textheight="var(hb-param-text-height-primary)"/>
+ </widget>
+ <widget name="scrollArea" role="HbDialog:contentWidget" type="HbScrollArea">
+ <widget name="containerWidget" role="HbScrollArea:contents" type="HbWidget">
+ <widget name="container_2" type="HbWidget">
+ <widget name="queryText_1" type="HbLabel">
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignLeft|AlignLeading"/>
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <sizehint height="14un" type="PREFERRED" width="5.67164un"/>
+ <sizehint height="14un" type="MINIMUM"/>
+ <contentsmargins bottom="var(hb-param-margin-gene-popup)" left="var(hb-param-margin-gene-popup)" right="0" top="0"/>
+ <sizehint type="MAXIMUM" width="50un"/>
+ <string name="plainText" value="Your location will be shared by default if you don't respond"/>
+ <fontspec name="fontSpec" role="Primary" textheight="var(hb-param-text-height-primary)"/>
+ </widget>
+ <widget name="requestors" type="HbWidget">
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="23.8806un"/>
+ <layout type="stacked"/>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="29.25373un" type="PREFERRED" width="49.85075un"/>
+ <sizehint height="2504062.01158un" type="MAXIMUM"/>
+ <layout orientation="Vertical" type="linear">
+ <contentsmargins bottom="var(hb-param-margin-gene-popup)" left="var(hb-param-margin-gene-popup)" right="var(hb-param-margin-gene-popup)" top="var(hb-param-margin-gene-popup)"/>
+ <linearitem itemname="queryText_1"/>
+ <linearitem itemname="requestors"/>
+ </layout>
+ </widget>
+ <real name="z" value="0"/>
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <sizehint height="50un" type="PREFERRED" width="50un"/>
+ <sizehint height="2504062.01158un" type="MAXIMUM"/>
+ <layout type="anchor">
+ <anchoritem dst="container_2" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="container_2" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ </widget>
+ <ref object="qtl_dialog_softkey_2_left" role="HbWidget:addAction"/>
+ <ref object="qtl_dialog_softkey_2_right" role="HbWidget:addAction"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/resources/posverificationdialog.qrc Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/xml" >
+ <file alias="posverificationcustomdialog.docml" >posverificationcustomdialog.docml</file>
+ </qresource>
+</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/src/apilogger.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2010 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 class provides function that help in logging entry and exit of APIs of classes
+*
+*/
+
+
+#include "apilogger.h"
+#include <qdatetime.h>
+
+const char* debugFileName("c://logs//lbs//posverificationdlg.txt");
+ofstream logfile;
+
+void ApiLogger::OpenLogFile()
+{
+ logfile.open(debugFileName, ios::app);
+}
+
+void ApiLogger::CloseLogFile()
+{
+ logfile.flush();
+ logfile.close();
+}
+
+void ApiLogger::MyOutputHandler(QtMsgType type, const char *msg)
+{
+ switch (type) {
+ case QtDebugMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Debug: " << msg << "\n";
+ break;
+ case QtCriticalMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Critical: " << msg << "\n";
+ break;
+ case QtWarningMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Warning: " << msg << "\n";
+ break;
+ case QtFatalMsg:
+ logfile << QTime::currentTime().toString().toAscii().data() << " Fatal: " << msg << "\n";
+ default:
+ break;
+ }
+ logfile.flush();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/src/customdocumentloader.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2010 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 implements the custom dialog loader for posverification dialogs
+ *
+ */
+
+#include "customdocumentloader.h"
+#include "posverificationcustomdialog.h"
+
+// ---------------------------------------------------------------------------
+// CustomDocumentLoader::CustomDocumentLoader()
+// ---------------------------------------------------------------------------
+//
+CustomDocumentLoader::CustomDocumentLoader()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CustomDocumentLoader::~CustomDocumentLoader()
+// ---------------------------------------------------------------------------
+//
+CustomDocumentLoader::~CustomDocumentLoader()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// CustomDocumentLoader::createObject
+// ---------------------------------------------------------------------------
+//
+QObject *CustomDocumentLoader::createObject(const QString& type,
+ const QString &name)
+ {
+ //for CustomDialog
+ if (type == PosVerificationCustomDialog::staticMetaObject.className())
+ {
+ QObject *object = new PosVerificationCustomDialog;
+ object->setObjectName(name);
+ return object;
+ }
+ //default case
+ return HbDocumentLoader::createObject(type, name);
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/src/posverificationcustomdialog.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,336 @@
+/*
+ * Copyright (c) 2010 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 implements the custom dialog for positioning verification dialogs
+ *
+ */
+
+#include "posverificationcustomdialog.h"
+#include "customdocumentloader.h"
+
+#include <QtDebug>
+#include <qgraphicsgridlayout.h>
+#include <qsizepolicy.h>
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::PosVerificationCustomDialog
+//---------------------------------------------------------------
+PosVerificationCustomDialog::PosVerificationCustomDialog() :
+ mHeadingLabel(NULL), mPrimaryAction(NULL), mQueryText(NULL), mQueryText2(
+ NULL), mRequestorList(NULL), mRequestorListItems(NULL),
+ mSecondryAction(NULL)
+ {
+ qDebug() << "PosVerificationCustomDialog::PosVerificationCustomDialog()";
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::~PosVerificationCustomDialog
+//---------------------------------------------------------------
+PosVerificationCustomDialog::~PosVerificationCustomDialog()
+ {
+ qDebug()
+ << "+PosVerificationCustomDialog::~PosVerificationCustomDialog()";
+ /*
+ delete mHeadingLabel;
+ mHeadingLabel = NULL;
+
+ delete mPrimaryAction;
+ mPrimaryAction = NULL;
+
+ delete mQueryText;
+ mQueryText = NULL;
+
+ mRequestorListItems.clear();
+
+ delete mRequestorList;
+ mRequestorList = NULL;
+
+ delete mSecondryAction;
+ mSecondryAction = NULL;
+ */
+ delete mQueryText2;
+ mQueryText2 = NULL;
+
+ qDebug()
+ << "-PosVerificationCustomDialog::~PosVerificationCustomDialog()";
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::setProperties
+// Set properties
+//---------------------------------------------------------------
+
+bool PosVerificationCustomDialog::setProperties(const QVariantMap& parameters)
+ {
+ qDebug() << "+PosVerificationCustomDialog::setProperties()";
+ QVariantMap::const_iterator i = parameters.constBegin();
+ while (i != parameters.constEnd())
+ {
+ QByteArray key = i.key().toAscii();
+ qDebug() << "-PosVerificationCustomDialog::setProperties(): Key is "
+ << key;
+ qDebug() << "-PosVerificationCustomDialog::setProperties(): data is "
+ << key.constData();
+ //check for the validity of the data
+ if (property(key.constData()).isValid())
+ {
+ //sets the property values
+ setProperty(key.constData(), i.value());
+ }
+ else
+ {
+ qDebug()
+ << "-PosVerificationCustomDialog::setProperties(): value - false";
+ return false;
+ }
+ ++i;
+ }
+ qDebug() << "-PosVerificationCustomDialog::setProperties()";
+ return true;
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::setDeviceDialogParameters
+//---------------------------------------------------------------
+bool PosVerificationCustomDialog::setDeviceDialogParameters(
+ const QVariantMap ¶meters)
+ {
+ qDebug() << "+PosVerificationCustomDialog::setDeviceDialogParameters()";
+ setModal(true);
+ setTimeout(HbPopup::NoTimeout);
+ qDebug() << "-PosVerificationCustomDialog::setDeviceDialogParameters()";
+ return setProperties(parameters);
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::deviceDialogError
+//---------------------------------------------------------------
+int PosVerificationCustomDialog::deviceDialogError() const
+ {
+ qDebug() << "PosVerificationCustomDialog::deviceDialogError()";
+ return 0;
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::closeDeviceDialog
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::closeDeviceDialog(bool byClient)
+ {
+ qDebug() << "+PosVerificationCustomDialog::closeDeviceDialog()";
+ Q_UNUSED(byClient);
+ close();
+ emit
+ deviceDialogClosed();
+ qDebug() << "-PosVerificationCustomDialog::closeDeviceDialog()";
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::deviceDialogWidget
+//---------------------------------------------------------------
+HbPopup* PosVerificationCustomDialog::deviceDialogWidget() const
+ {
+ qDebug() << "PosVerificationCustomDialog::deviceDialogWidget()";
+ return const_cast<PosVerificationCustomDialog*> (this);
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::setHeading
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::setHeading(QString& heading)
+ {
+ qDebug() << "+PosVerificationCustomDialog::setHeading()" << heading;
+ mHeadingLabel->setPlainText(heading);
+ qDebug() << "-PosVerificationCustomDialog::setHeading()";
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::getHeading
+//---------------------------------------------------------------
+QString PosVerificationCustomDialog::getHeading()
+ {
+ qDebug() << "PosVerificationCustomDialog::getHeading()";
+ return mHeadingLabel->plainText();
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::setQueryText
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::setQueryText(QString& textQuery)
+ {
+ qDebug() << "+PosVerificationCustomDialog::setQueryText()" << textQuery;
+ mQueryText->setPlainText(textQuery);
+ qDebug() << "-PosVerificationCustomDialog::setQueryText()";
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::getQueryText
+//---------------------------------------------------------------
+QString PosVerificationCustomDialog::getQueryText()
+ {
+ qDebug() << "PosVerificationCustomDialog::getQueryText()";
+ return mQueryText->plainText();
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::setQueryText2
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::setQueryText2(QString& textQuery)
+ {
+ qDebug() << "+PosVerificationCustomDialog::setQueryText2()" << textQuery;
+ mQueryText2 = new HbLabel();
+ if (mQueryText2)
+ {
+ mQueryText2->clear();
+ mQueryText2->setPlainText(textQuery);
+ mQueryText2->setFontSpec(HbFontSpec(HbFontSpec::Primary));
+ }
+ qDebug() << "-PosVerificationCustomDialog::setQueryText2()";
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::getQueryText2
+//---------------------------------------------------------------
+QString PosVerificationCustomDialog::getQueryText2()
+ {
+ qDebug() << "PosVerificationCustomDialog::getQueryText2()";
+ if (mQueryText2)
+ {
+ return mQueryText2->plainText();
+ }
+ return "";
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::getWidgets
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::getWidgets(
+ const CustomDocumentLoader &loader)
+ {
+ qDebug() << "+PosVerificationCustomDialog::getWidgets()";
+
+ mHeadingLabel = qobject_cast<HbLabel*> (loader.findWidget("heading"));
+ Q_ASSERT_X((mHeadingLabel != 0), "PosVerificationCustomDialog", "invalid DocML file");
+
+ mQueryText = qobject_cast<HbLabel*> (loader.findWidget("queryText_1"));
+ Q_ASSERT_X((mQueryText != 0), "PosVerificationCustomDialog", "invalid DocML file");
+
+ mRequestorList
+ = qobject_cast<HbWidget*> (loader.findWidget("requestors"));
+ Q_ASSERT_X((mRequestorList != 0), "PosVerificationCustomDialog", "invalid DocML file");
+
+ mPrimaryAction = qobject_cast<HbAction*> (loader.findObject(
+ "qtl_dialog_softkey_2_left"));
+ Q_ASSERT_X((mPrimaryAction != 0), "PosVerificationCustomDialog", "invalid DocML file");
+ QObject::connect(mPrimaryAction, SIGNAL(triggered()), this,
+ SLOT(posVerificationdlgAccepted()));
+
+ mSecondryAction = qobject_cast<HbAction*> (loader.findObject(
+ "qtl_dialog_softkey_2_right"));
+ Q_ASSERT_X((mSecondryAction != 0), "PosVerificationCustomDialog", "invalid DocML file");
+
+ QObject::connect(mSecondryAction, SIGNAL(triggered()), this,
+ SLOT(posVerificationdlgRejected()));
+ qDebug() << "-PosVerificationCustomDialog::getWidgets()";
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::setRequestor
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::setRequestor(QStringList& requestorList)
+ {
+ qDebug() << "+PosVerificationCustomDialog::setRequestor()";
+ int rowadd = 1;
+ mRequestorListItems = requestorList;
+ QGraphicsGridLayout *layout = new QGraphicsGridLayout;
+ if (!layout)
+ {
+ qDebug() << "setRequestor(): Creating layout failed";
+ return;
+ }
+
+ qreal margin = 0;
+ qreal leftmargin = 0;
+ style()->parameter("hb-param-margin-gene-middle-vertical", margin);
+ style()->parameter("hb-param-margin-gene-popup", leftmargin);
+ QSizePolicy policy;
+ policy.setHorizontalPolicy(QSizePolicy::Preferred);
+ policy.setVerticalPolicy(QSizePolicy::Ignored);
+ if (mQueryText2)
+ {
+ mQueryText2->setSizePolicy(policy);
+ mQueryText2->setAlignment(Qt::AlignTop);
+ layout->addItem(mQueryText2, 1, 0);
+ layout->setRowSpacing(1, margin);
+ layout->setContentsMargins(leftmargin, 0, 0, 0);
+ rowadd = 2;
+ }
+
+ QStringList::const_iterator iterator;
+ for (iterator = requestorList.begin(); iterator != requestorList.end(); ++iterator)
+ {
+ int i = iterator - requestorList.begin();
+ HbLabel * requestorName = new HbLabel();
+ if (requestorName)
+ {
+ qDebug() << "setRequestor()" << *iterator;
+ requestorName->setFontSpec(HbFontSpec(HbFontSpec::Secondary));
+ requestorName->setPlainText(*iterator);
+ requestorName->setSizePolicy(policy);
+ requestorName->setAlignment(Qt::AlignTop);
+
+ layout->addItem(requestorName, i + rowadd, 0);
+ layout->setRowSpacing(i + rowadd, margin);
+ layout->setContentsMargins(leftmargin, 0, 0, 0);
+ }
+ }
+ mRequestorList->setSizePolicy(policy);
+ mRequestorList->setLayout(layout);
+ qDebug() << "-PosVerificationCustomDialog::setRequestor()";
+ }
+
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::getRequestor
+//---------------------------------------------------------------
+QStringList PosVerificationCustomDialog::getRequestor()
+ {
+ qDebug() << "PosVerificationCustomDialog::getRequestor()";
+ return mRequestorListItems;
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::posVerificationdlgAccepted
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::posVerificationdlgAccepted()
+ {
+ qDebug() << "+PosVerificationCustomDialog::posVerificationdlgAccepted()";
+ emit
+ deviceDialogClosed();
+ qDebug() << "-PosVerificationCustomDialog::posVerificationdlgAccepted()";
+ }
+//---------------------------------------------------------------
+//PosVerificationCustomDialog::posVerificationdlgRejected
+//---------------------------------------------------------------
+void PosVerificationCustomDialog::posVerificationdlgRejected()
+ {
+ qDebug() << "+PosVerificationCustomDialog::posVerificationdlgRejected()";
+ QVariantMap *data = new QVariantMap();
+ QVariant value(-21);
+ if (data)
+ {
+ data->insert("errorCode", value);
+ emit
+ deviceDialogData(*data);
+ }
+ //data is currently not being used in the client side
+ emit
+ deviceDialogClosed();
+ delete data;
+ qDebug() << "-PosVerificationCustomDialog::posVerificationdlgRejected()";
+ }
+
+// End of File
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/posverificationdialogplugin/src/posverificationdialogplugin.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,242 @@
+/*
+ * Copyright (c) 2010 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 implements the plugin interface for positioning verification dialogs
+ *
+ */
+#include "posverificationdialogplugin.h"
+//User Includes
+#include "customdocumentloader.h"
+#include "posverificationcustomdialog.h"
+#include "apilogger.h"
+
+#include <QDebug>
+#include <QTCore>
+
+//Carbide Application docml file
+const char *POSVERFICATIONDIALOG_DOCML =
+ ":/xml/posverificationcustomdialog.docml";
+
+// This plugin implements one custom dialog type
+enum DeviceDlgType
+ {
+ PosVerificationDialogType
+ };
+static const struct
+ {
+ const char *mTypeString;
+ DeviceDlgType mType;
+ } verdlgtypes[] =
+ {
+ {
+ "hb.posverifiction.dialog/1.0", PosVerificationDialogType
+ }
+ };
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::PosVerificationDialogPlugin()
+// Constructor
+//-----------------------------------------------------------------------
+PosVerificationDialogPlugin::PosVerificationDialogPlugin() :
+ mTranslator(NULL)
+ {
+ qDebug() << "+PosVerificationDialogPlugin::PosVerificationDialogPlugin()";
+ mTranslator = new QTranslator();
+
+ QString lang = QLocale::system().name();
+ QString path = "z:/resource/qt/translations/";
+ QString altpath = "c://resource/";
+ bool loaded = false;
+ loaded = mTranslator->load(path + QString("lilocationmw_") + lang);
+ if (loaded == false)
+ {
+ loaded = mTranslator->load(altpath + QString("lilocationmw_") + lang);
+ }
+ if (loaded)
+ {
+ qApp->installTranslator(mTranslator);
+ }
+ //#ifndef QT_NO_DEBUG_OUTPUT
+ // ApiLogger::OpenLogFile();
+ // qInstallMsgHandler(ApiLogger::MyOutputHandler);
+ //#endif
+ qDebug() << "-PosVerificationDialogPlugin::PosVerificationDialogPlugin()";
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::~PosVerificationDialogPlugin()
+// Destructor
+//-----------------------------------------------------------------------
+PosVerificationDialogPlugin::~PosVerificationDialogPlugin()
+ {
+ qDebug()
+ << "+PosVerificationDialogPlugin::~PosVerificationDialogPlugin()";
+ if (mTranslator)
+ {
+ if (mTranslator->isEmpty() == false)
+ qApp->removeTranslator(mTranslator);
+ delete mTranslator;
+ }
+ qDebug()
+ << "-PosVerificationDialogPlugin::~PosVerificationDialogPlugin()";
+ //#ifndef QT_NO_DEBUG_OUTPUT
+ // ApiLogger::CloseLogFile();
+ //#endif
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::accessAllowed
+// Check if client is allowed to use device dialog widget
+//-----------------------------------------------------------------------
+bool PosVerificationDialogPlugin::accessAllowed(
+ const QString &deviceDialogType, const QVariantMap ¶meters,
+ const QVariantMap &securityInfo) const
+ {
+ qDebug() << "+PosVerificationDialogPlugin::accessAllowed()";
+ Q_UNUSED(deviceDialogType)
+ Q_UNUSED(parameters)
+ Q_UNUSED(securityInfo)
+
+ // This plugin doesn't perform operations that may compromise security. All clients
+ // are allowed to use.
+ qDebug() << "-PosVerificationDialogPlugin::accessAllowed()";
+ return true;
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::createDeviceDialog
+// Create device dialog widget
+//-----------------------------------------------------------------------
+HbDeviceDialogInterface * PosVerificationDialogPlugin::createDeviceDialog(
+ const QString &deviceDialogType, const QVariantMap ¶meters)
+ {
+ qDebug() << "+PosVerificationDialogPlugin::createDeviceDialog(): Type"
+ << deviceDialogType;
+ int i;
+ PosVerificationCustomDialog * dialog = 0;
+ const int numTypes = sizeof(verdlgtypes) / sizeof(verdlgtypes[0]);
+ for (i = 0; i < numTypes; ++i)
+ {
+ if (verdlgtypes[i].mTypeString == deviceDialogType)
+ {
+ break;
+ }
+ }
+ if (i < numTypes)
+ {
+ switch (verdlgtypes[i].mType)
+ {
+ case PosVerificationDialogType:
+ {
+ CustomDocumentLoader loader;
+ bool ok = false;
+ loader.load(POSVERFICATIONDIALOG_DOCML, &ok);
+ Q_ASSERT_X(ok, "PosVerificationCustomDialog", "invalid DocML file");
+
+ if (ok)
+ {
+ dialog = qobject_cast<PosVerificationCustomDialog *> (
+ loader.findWidget("PosVerificationCustomDialog"));
+ if (dialog)
+ {
+ dialog->getWidgets(loader);
+ dialog->setDeviceDialogParameters(parameters);
+ qDebug() << "createDeviceDialog(): success";
+ }
+ else
+ {
+ qDebug()
+ << "createDeviceDialog(): creation of device dialog failed";
+ }
+ }
+ else
+ {
+ qDebug() << "createDeviceDialog(): loading docml failed";
+ }
+ break;
+ }
+ default:
+ {
+ qDebug() << "createDeviceDialog(): default case";
+ Q_ASSERT(false);
+ break;
+ }
+ }
+ }
+ else
+ {
+ qDebug()
+ << "createDeviceDialog(): Dialog type not supported by this plugin";
+ }
+ qDebug() << "-PosVerificationDialogPlugin::createDeviceDialog()";
+ return dialog;
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::deviceDialogInfo
+// Return information of device dialog the plugin creates
+//-----------------------------------------------------------------------
+bool PosVerificationDialogPlugin::deviceDialogInfo(
+ const QString &deviceDialogType, const QVariantMap ¶meters,
+ DeviceDialogInfo *info) const
+ {
+ qDebug() << "+PosVerificationDialogPlugin::deviceDialogInfo()";
+ Q_UNUSED(parameters)
+ Q_UNUSED(deviceDialogType)
+
+ info->group = GenericDeviceDialogGroup;
+ info->flags = NoDeviceDialogFlags;
+ info->priority = DefaultPriority;
+ qDebug() << "-PosVerificationDialogPlugin::deviceDialogInfo()";
+ return true;
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::deviceDialogTypes
+// Return device dialog types this plugin implements
+//-----------------------------------------------------------------------
+QStringList PosVerificationDialogPlugin::deviceDialogTypes() const
+ {
+ qDebug() << "+PosVerificationDialogPlugin::deviceDialogTypes()";
+ QStringList types;
+ const int numTypes = sizeof(verdlgtypes) / sizeof(verdlgtypes[0]);
+ for (int i = 0; i < numTypes; i++)
+ {
+ types.append(verdlgtypes[i].mTypeString);
+ }
+ qDebug() << "-PosVerificationDialogPlugin::deviceDialogTypes()";
+ return types;
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::pluginFlags
+// Return plugin flags
+//-----------------------------------------------------------------------
+HbDeviceDialogPlugin::PluginFlags PosVerificationDialogPlugin::pluginFlags() const
+ {
+ qDebug() << "PosVerificationDialogPlugin::pluginFlags()";
+ return NoPluginFlags;
+ }
+
+//-----------------------------------------------------------------------
+// PosVerificationDialogPlugin::error
+// Return last error
+//-----------------------------------------------------------------------
+int PosVerificationDialogPlugin::error() const
+ {
+ qDebug() << "PosVerificationDialogPlugin::error()";
+ return 0;
+ }
+
+Q_EXPORT_PLUGIN2(posverificationdialogplugin, PosVerificationDialogPlugin)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/privacyverifiernotifierui.pro Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,34 @@
+#
+# Copyright (c) 2010 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: project file for positioing settings in control panel
+#
+
+
+TEMPLATE = subdirs
+
+SYMBIAN_PLATFORMS = WINSCW ARMV5
+
+SUBDIRS += locnotificationengine/locnotificationengine.pro
+SUBDIRS += posverificationdialogplugin/posverificationdialogplugin.pro
+
+# Build.inf rules
+BLD_INF_RULES.prj_exports += "$${LITERAL_HASH}include <platform_paths.hrh>" \
+ "install/privacydialogs_stub.sis /epoc32/data/z/system/install/privacydialogs_stub.sis" \
+ "rom/privacydialogs.iby CORE_MW_LAYER_IBY_EXPORT_PATH(privacydialogs.iby)"
+
+symbian {
+BLD_INF_RULES.prj_mmpfiles = "./locutils/group/locutils.mmp" \
+ "./locprivacyserver/group/locprivacyserver.mmp" \
+ "./contactresolversession/group/contactresolversession.mmp" \
+ "./locverifier/group/locverifierdlg.mmp"
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationsystemui/locationsysui/privacyverifiernotifierui/rom/privacydialogs.iby Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2010 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: IBY file for server component
+*
+*/
+#ifndef __PRIVACYDIALOGS_IBY__
+#define __PRIVACYDIALOGS_IBY__
+
+#include <bldvariant.hrh>
+#if defined(__PRIVACYFRAMEWORK)
+// Client library
+file=ABI_DIR\BUILD_DIR\locnotificationclient.dll SHARED_LIB_DIR\locnotificationclient.dll
+// Server
+file=ABI_DIR\BUILD_DIR\locnotificationserver.exe PROGRAMS_DIR\locnotificationserver.exe
+// Engine
+file=ABI_DIR\BUILD_DIR\locnotificationengine.dll SHARED_LIB_DIR\locnotificationengine.dll
+// Location Utils
+file=ABI_DIR\BUILD_DIR\locutils.dll SHARED_LIB_DIR\locutils.dll
+// Location Verifier Plug-in
+ECOM_PLUGIN(locverifierdlg.dll,locverifierdlg.rsc)
+// Custom device dialog plugin
+file=ABI_DIR\BUILD_DIR\posverificationdialogplugin.dll SHARED_LIB_DIR\posverificationdialogplugin.dll
+data=\epoc32\data\z\resource\plugins\devicedialogs\posverificationdialogplugin.qtplugin \resource\plugins\devicedialogs\posverificationdialogplugin.qtplugin
+// stub sis
+data=DATAZ_\system\install\privacydialogs_stub.sis system\install\privacydialogs_stub.sis
+#endif // (__PRIVACYFRAMEWORK)
+
+#endif
--- a/locationtriggering/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -19,7 +19,7 @@
#include <platform_paths.hrh>
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
PRJ_EXPORTS
#ifdef CORE_MW_LAYER_IBY_EXPORT_PATH
--- a/locationtriggering/ltcontainer/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/ltcontainer/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -17,7 +17,7 @@
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
PRJ_EXPORTS
../inc/lbtcontainer.h |../../inc/lbtcontainer.h
@@ -31,8 +31,7 @@
../inc/lbtsecuritypolicy.h |../../inc/lbtsecuritypolicy.h
// Registration file for backup and restore
-../data/backup_registration.xml /epoc32/winscw/c/private/1028312B/backup_registration.xml
-../data/backup_registration.xml /epoc32/data/z/private/1028312B/backup_registration.xml
+../data/backup_registration.xml z:/private/1028312B/backup_registration.xml
PRJ_MMPFILES
--- a/locationtriggering/ltcontainer/inc/lbtcontainerutilities.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/ltcontainer/inc/lbtcontainerutilities.h Thu Jul 22 16:37:56 2010 +0100
@@ -116,7 +116,7 @@
*
* @return ETrue if the UIDs suffices the security polity, EFalse otherwise
*/
- static TBool LbtContainerUtilities::RunSecurityPolicy( TUid& aOwnerUid,
+ static TBool RunSecurityPolicy( TUid& aOwnerUid,
TUid& aManagerUid,
TSecureId& aStartupProcessUid,
TLbtSecurityPolicy& aSecurityPolicy );
--- a/locationtriggering/rom/locationtriggering.iby Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/rom/locationtriggering.iby Thu Jul 22 16:37:56 2010 +0100
@@ -51,8 +51,6 @@
// Backup and restore registeration file
data=DATAZ_\private\1028312B\backup_registration.xml \private\1028312B\backup_registration.xml
-// Central repository file
-data=DATAZ_\private\10202be9\1028312F.txt \private\10202be9\1028312F.txt
// Location Triggering Management Library
file=ABI_DIR\BUILD_DIR\lbtmanager.dll SHARED_LIB_DIR\lbtmanager.dll
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/Additionaltests/bwins/Additionaltestsu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/Additionaltests/eabi/Additionaltestsu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI17CLbtEventObserver @ 2 NONAME
+ _ZTI20CTriggerFireObserver @ 3 NONAME
+ _ZTV17CLbtEventObserver @ 4 NONAME
+ _ZTV20CTriggerFireObserver @ 5 NONAME
+
--- a/locationtriggering/tsrc/lbtengine_test/Additionaltests/inc/AsynOperationAO.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/Additionaltests/inc/AsynOperationAO.h Thu Jul 22 16:37:56 2010 +0100
@@ -96,7 +96,7 @@
void ListTriggerIdsList(RLbt& aLbt, RArray < TLbtTriggerId >& aTriggerIdList,
CActiveSchedulerWait* aWait,CLbtListTriggerOptions* aListOptions=NULL);
void CreateIterator(RLbt& aLbt,CActiveSchedulerWait* aWait,CLbtListTriggerOptions* aListOptions=NULL);
- void CTriggerFireObserver::DeleteFilteredTriggers( RLbt& aLbt,CLbtTriggerFilterBase* aFilter,CActiveSchedulerWait* aWait );
+ void DeleteFilteredTriggers( RLbt& aLbt,CLbtTriggerFilterBase* aFilter,CActiveSchedulerWait* aWait );
TInt GetFireCount( ) ;
TInt GetError( ) ;
@@ -104,7 +104,7 @@
void UpdateTriggersState(RLbt& aLbt, CLbtTriggerEntry::TLbtTriggerState aState,
CActiveSchedulerWait* aWait,CLbtTriggerFilterBase * aFilter=NULL) ;
- void CTriggerFireObserver::PopulateFromCurrentCell(CLbtGeoCell& cell,CActiveSchedulerWait* aWait ) ;
+ void PopulateFromCurrentCell(CLbtGeoCell& cell,CActiveSchedulerWait* aWait ) ;
void RunL( );
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/bwins/AdvancedTriggerSupervisionu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- a/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/conf/AdvancedTriggerSupervision.cfg Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/conf/AdvancedTriggerSupervision.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,119 @@
+[Test]
+id 01
+title ATSTest1
+create AdvancedTriggerSupervision foobar
+foobar ATSTest1
+delete foobar
+[Endtest]
+[Test]
+id 02
+title ATSTest2
+create AdvancedTriggerSupervision foobar
+foobar ATSTest2
+delete foobar
+[Endtest]
+[Test]
+id 03
+title ATSTest3
+create AdvancedTriggerSupervision foobar
+foobar ATSTest3
+delete foobar
+[Endtest]
+[Test]
+id 04
+title ATSTest4
+create AdvancedTriggerSupervision foobar
+foobar ATSTest4
+delete foobar
+[Endtest]
+[Test]
+id 05
+title ATSTest5
+create AdvancedTriggerSupervision foobar
+foobar ATSTest5
+delete foobar
+[Endtest]
+[Test]
+id 06
+title ATSTest6
+create AdvancedTriggerSupervision foobar
+foobar ATSTest6
+delete foobar
+[Endtest]
+[Test]
+id 07
+title ATSTest7
+create AdvancedTriggerSupervision foobar
+foobar ATSTest7
+delete foobar
+[Endtest]
+[Test]
+id 08
+title ATSTest8
+create AdvancedTriggerSupervision foobar
+foobar ATSTest8
+delete foobar
+[Endtest]
+[Test]
+id 09
+title ATSTest9
+create AdvancedTriggerSupervision foobar
+foobar ATSTest9
+delete foobar
+[Endtest]
+[Test]
+id 10
+title ATSTest10
+create AdvancedTriggerSupervision foobar
+foobar ATSTest10
+delete foobar
+[Endtest]
+[Test]
+id 11
+title ATSTest11
+create AdvancedTriggerSupervision foobar
+foobar ATSTest11
+delete foobar
+[Endtest]
+[Test]
+id 12
+title ATSTest12
+create AdvancedTriggerSupervision foobar
+foobar ATSTest12
+delete foobar
+[Endtest]
+[Test]
+id 13
+title ATSTest13
+create AdvancedTriggerSupervision foobar
+foobar ATSTest13
+delete foobar
+[Endtest]
+[Test]
+id 14
+title ATSTest14
+create AdvancedTriggerSupervision foobar
+foobar ATSTest14
+delete foobar
+[Endtest]
+[Test]
+id 15
+title ATSTest15
+create AdvancedTriggerSupervision foobar
+foobar ATSTest15
+delete foobar
+[Endtest]
+[Test]
+id 16
+title ATSTest16
+create AdvancedTriggerSupervision foobar
+foobar ATSTest16
+delete foobar
+[Endtest]
+[Test]
+id 17
+title ATSTest17
+create AdvancedTriggerSupervision foobar
+foobar ATSTest17
+delete foobar
+[Endtest]
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/eabi/AdvancedTriggerSupervisionu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTV20CTriggerFireObserver @ 3 NONAME
+
--- a/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/inc/AdvancedTriggerSupervision.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/inc/AdvancedTriggerSupervision.h Thu Jul 22 16:37:56 2010 +0100
@@ -28,6 +28,9 @@
#include <StifTestModule.h>
+// Forward declaration
+class TCoordinate;
+
// CONSTANTS
//const ?type ?constant_var = ?constant;
@@ -134,7 +137,12 @@
*/
void Delete();
void EnableSimPSYL();
-
+
+ /**
+ * Gets current coordinate
+ */
+ void GetCurrentCoordinateL( TCoordinate& aCoordinate );
+
/**
* Test methods are listed below.
*/
--- a/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/inc/AsynOperationAO.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/inc/AsynOperationAO.h Thu Jul 22 16:37:56 2010 +0100
@@ -50,12 +50,21 @@
* Two-phased constructor.
*/
static CTriggerFireObserver* NewL( RLbt& aLbt,TCoordinate& aCoordinate );
+
+
+ static CTriggerFireObserver* NewL();
/**
* Destructor.
*/
~CTriggerFireObserver();
+ /**
+ * Request for current position
+ */
+ void CurrentPositionL( TPositionInfo& aPositionInfo,
+ CActiveSchedulerWait* aWait );
+
void TriggerFiredL( const TLbtTriggerFireInfo& aFireInfo );
@@ -97,12 +106,17 @@
* C++ default constructor.
*/
CTriggerFireObserver( TCoordinate& aCoordinate );
+
+
+ CTriggerFireObserver();
/**
* By default Symbian 2nd phase constructor is private.
*/
void ConstructL( RLbt& aLbt );
+ void ConstructL();
+
private:
CLbtTriggerFiringEventNotifier* iNotifier;
@@ -112,8 +126,15 @@
TLbtTriggerFireInfo iFireInfo;
-
-
+ /**
+ * Handle to positioner session
+ */
+ RPositionServer iPosServer;
+
+ /**
+ * Handle to positioner subsession
+ */
+ RPositioner iPositioner;
};
--- a/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/src/AdvancedTriggerSupervision.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/src/AdvancedTriggerSupervision.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -131,7 +131,14 @@
CStifLogger::ETxt,
CStifLogger::EFile,
EFalse );
-
+
+ RProcess process;
+ ret = process.Create(_L("lbsroot"), KNullDesC);
+ TRequestStatus status;
+ process.Rendezvous(status);
+ process.Resume();
+ User::WaitForRequest(status);
+ process.Close();
}
// -----------------------------------------------------------------------------
--- a/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/src/AdvancedTriggerSupervisionBlocks.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/src/AdvancedTriggerSupervisionBlocks.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -174,6 +174,30 @@
CleanupStack::PopAndDestroy( idList );
CleanupStack::PopAndDestroy( db );
}
+
+// -----------------------------------------------------------------------------
+// CAdvancedTriggerSupervision::GetCurrentCoordinateL
+// Returns current position
+// -----------------------------------------------------------------------------
+//
+void CAdvancedTriggerSupervision::GetCurrentCoordinateL( TCoordinate& aCoordinate )
+ {
+ CTriggerFireObserver* notifier= CTriggerFireObserver::NewL();
+ CleanupStack::PushL( notifier );
+ CActiveSchedulerWait* wait = new ( ELeave ) CActiveSchedulerWait;
+ CleanupStack::PushL( wait );
+ TPositionInfo positionInfo;
+ // Ownership of wait is transferred to notifier
+ notifier->CurrentPositionL( positionInfo,wait );
+ CleanupStack::Pop( wait );
+ wait->Start();
+ TPosition position;
+ positionInfo.GetPosition( position );
+ aCoordinate.SetCoordinate( position.Latitude(),position.Longitude(),position.Altitude() );
+ CleanupStack::Pop( notifier ); // notifier
+ delete notifier;
+ }
+
// -----------------------------------------------------------------------------
// CAdvancedTriggerSupervision::RunMethodL
// Run specified method. Contains also table of test mothods and their names.
@@ -280,10 +304,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
- coordinate.Move(90,2000);
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
+ coordinate.Move(90,200);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -314,10 +338,12 @@
TReal32 trigDistance;
TPosition firePosition;
FireInfo = notifier->GetFiredTrigger();
+ iLog->Log(_L("GFT"));
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
+ iLog->Log(_L("GP"));
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance<=1000 && FireInfo.iTriggerId==trigId )
+ if( FireInfo.iTriggerId==trigId )
{
CleanupStack::PopAndDestroy( notifier );
@@ -400,10 +426,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
- coordinate.Move(90,510);
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
+ coordinate.Move(90,110);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,200);
CleanupStack::PushL( circle );
@@ -437,7 +463,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance<=1000 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -521,10 +547,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -558,7 +584,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance<=1000 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -639,10 +665,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
- coordinate.Move(90,2000);
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
+ coordinate.Move(90,200);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -676,7 +702,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance>=1000 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -760,10 +786,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
- coordinate.Move(90,1010);
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
+ coordinate.Move(90,110);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -797,7 +823,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance>=1000 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -881,10 +907,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -918,7 +944,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance>=1000 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -953,117 +979,117 @@
TInt CAdvancedTriggerSupervision::ATSTest7L( CStifItemParser& aItem )
{
- iLog->Log(_L("Entering Test1"));
- _LIT( KSimulationFile,"c:\\system\\data\\simu_move1.sps" );
- // _LIT( KSimulationFile0,"c:\\system\\data\\simu_move2.sps" );
+
+ iLog->Log(_L("Entering Test1"));
+ _LIT( KSimulationFile,"c:\\system\\data\\simu_move3.sps" );
+// _LIT( KSimulationFile0,"c:\\system\\data\\simu_move2.sps" );
+
+ RLbtServer lbtserver;
+ RLbt lbt;
+ iLog->Log(_L("Before connecting"));
+ User::LeaveIfError( lbtserver.Connect() );
+ CleanupClosePushL( lbtserver );
+ iLog->Log(_L("Connection to RLbtServer Passed "));
+ User::LeaveIfError( lbt.Open(lbtserver));
+ iLog->Log(_L("Subsession opened "));
+ CleanupClosePushL( lbt );
+
+ //Enable only simpsy
+ EnableSimPSYL();
+ //Clear all triggers
+ TRAP_IGNORE(lbt.DeleteTriggersL()) ;
+ CRepository* repository = CRepository::NewLC(KCRUidSimulationPSY);
+ iLog->Log(_L("Simulation PSY Repository object created"));
+// User::LeaveIfError(repository->Set(KCRKeySimPSYSimulationFile, KSimulationFile0));
+ User::LeaveIfError(repository->Set(KCRKeySimPSYSimulationFile, KSimulationFile));
+ iLog->Log(_L("Simulation input file set "));
+ CleanupStack::PopAndDestroy(repository);
+
+ //Construct a startup trigger
+ CLbtStartupTrigger* trig = CLbtStartupTrigger::NewL();
- RLbtServer lbtserver;
- RLbt lbt;
- iLog->Log(_L("Before connecting"));
- User::LeaveIfError( lbtserver.Connect() );
- CleanupClosePushL( lbtserver );
- iLog->Log(_L("Connection to RLbtServer Passed "));
- User::LeaveIfError( lbt.Open(lbtserver));
- iLog->Log(_L("Subsession opened "));
- CleanupClosePushL( lbt );
- //Enable only simpsy
- EnableSimPSYL();
- //Clear all triggers
- TRAP_IGNORE(lbt.DeleteTriggersL()) ;
-
- CRepository* repository = CRepository::NewLC(KCRUidSimulationPSY);
- iLog->Log(_L("Simulation PSY Repository object created"));
-// User::LeaveIfError(repository->Set(KCRKeySimPSYSimulationFile, KSimulationFile0));
- User::LeaveIfError(repository->Set(KCRKeySimPSYSimulationFile, KSimulationFile));
- iLog->Log(_L("Simulation input file set "));
- CleanupStack::PopAndDestroy(repository);
-
- //Construct a startup trigger
- CLbtStartupTrigger* trig = CLbtStartupTrigger::NewL();
-
- //Push to cleanup stack
- CleanupStack::PushL( trig );
- iLog->Log(_L("Startup Trigger Entry Created "));
-
- // Set Name
- trig->SetNameL(_L("Trigger1"));
- trig->SetNameL(_L("abc"));
- _LIT( KMyTriggerHandlingProcessName, "About.exe");
- // _LIT( KMyTriggerHandlingProcessName, "TestServerStarter.exe");
- // _LIT( KMyTriggerHandlingProcessName, "ConsoleUI.exe");
-
- TSecureId secureid;
- trig->SetProcessId(KMyTriggerHandlingProcessName,secureid);
-
- //set Requestor
- CRequestorBase::TRequestorType ReqType=CRequestorBase::ERequestorUnknown;
- CRequestorBase::_TRequestorFormat ReqFormat=CRequestorBase::EFormatUnknown;
- TBuf<KLbtMaxNameLength> ReqData=_L("");
- trig->SetRequestorL(ReqType,ReqFormat,ReqData);
- // set condition
+ //Push to cleanup stack
+ CleanupStack::PushL( trig );
+ iLog->Log(_L("Startup Trigger Entry Created "));
+
+ // Set Name
+ trig->SetNameL(_L("Trigger1"));
+ trig->SetNameL(_L("abc"));
+ _LIT( KMyTriggerHandlingProcessName, "About.exe");
+// _LIT( KMyTriggerHandlingProcessName, "TestServerStarter.exe");
+// _LIT( KMyTriggerHandlingProcessName, "ConsoleUI.exe");
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
-
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
- CleanupStack::PushL( circle );
+ TSecureId secureid;
+ trig->SetProcessId(KMyTriggerHandlingProcessName,secureid);
+
+ //set Requestor
+CRequestorBase::TRequestorType ReqType=CRequestorBase::ERequestorUnknown;
+CRequestorBase::_TRequestorFormat ReqFormat=CRequestorBase::EFormatUnknown;
+TBuf<KLbtMaxNameLength> ReqData=_L("");
+trig->SetRequestorL(ReqType,ReqFormat,ReqData);
+ // set condition
+
+TCoordinate coordinate;
+GetCurrentCoordinateL( coordinate );
+
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,200);
+ CleanupStack::PushL( circle );
+
+
+ // ownership of circle object transferred to the condition object
+ CLbtTriggerConditionArea* condition=CLbtTriggerConditionArea::NewL(
+ circle,
+ CLbtTriggerConditionArea::EFireOnEnter);
-
- // ownership of circle object transferred to the condition object
- CLbtTriggerConditionArea* condition=CLbtTriggerConditionArea::NewL(
- circle,
- CLbtTriggerConditionArea::EFireOnEnter);
-
- CleanupStack::Pop( circle );
+ CleanupStack::Pop( circle );
+
+ trig->SetCondition(condition); // ownership transferred to object
+
+ TLbtTriggerId trigId;
+
+
+ CTriggerFireObserver* notifier= CTriggerFireObserver::NewL( lbt,coordinate);
+ CleanupStack::PushL( notifier );
+
+ CActiveSchedulerWait* wait=new(ELeave)CActiveSchedulerWait;
- trig->SetCondition(condition); // ownership transferred to object
-
- TLbtTriggerId trigId;
-
-
- CTriggerFireObserver* notifier= CTriggerFireObserver::NewL( lbt,coordinate);
- CleanupStack::PushL( notifier );
+ notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
+ wait->Start( );
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
+ circle2->SetRadius(500);
+ CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
+ circle2,
+ CLbtTriggerConditionArea::EFireOnEnter);
+
+ trig->SetCondition(condition2);
+ notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
+ wait->Start( );
- CActiveSchedulerWait* wait=new(ELeave)CActiveSchedulerWait;
-
- notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
- wait->Start( );
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
- circle2->SetRadius(500);
- CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
- circle2,
- CLbtTriggerConditionArea::EFireOnEnter);
-
- trig->SetCondition(condition2);
- notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
- wait->Start( );
-
- iLog->Log(_L("Triggers Created"));
- // notifier->StartNotification( wait );
- // wait->Start( );
- notifier->StartNotification( wait );
- wait->Start( );
- notifier->After(120000000);
- wait->Start( );
- RArray<TLbtTriggerFireInfo> Firedtriggers;
- lbt.GetFiredTriggersL(Firedtriggers);
- if(Firedtriggers.Count()==2)
- {
- CleanupStack::PopAndDestroy( notifier );
- CleanupStack::PopAndDestroy( trig );
- CleanupStack::Pop( &lbt );
- CleanupStack::PopAndDestroy( &lbtserver );
- return KErrNone;
- }
- else
- {
- CleanupStack::PopAndDestroy( notifier );
- CleanupStack::PopAndDestroy( trig );
- CleanupStack::Pop( &lbt );
- CleanupStack::PopAndDestroy( &lbtserver );
- return -99;
- }
-
+ iLog->Log(_L("Triggers Created"));
+ notifier->StartNotification( wait );
+ wait->Start( );
+ wait->Start( );
+ RArray<TLbtTriggerFireInfo> Firedtriggers;
+ lbt.GetFiredTriggersL(Firedtriggers);
+ if(Firedtriggers.Count()==2)
+ {
+ CleanupStack::PopAndDestroy( notifier );
+ CleanupStack::PopAndDestroy( trig );
+ CleanupStack::Pop( &lbt );
+ CleanupStack::PopAndDestroy( &lbtserver );
+ return KErrNone;
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( notifier );
+ CleanupStack::PopAndDestroy( trig );
+ CleanupStack::Pop( &lbt );
+ CleanupStack::PopAndDestroy( &lbtserver );
+ return -99;
+ }
+
+// return KErrNone;
+
}
@@ -1127,10 +1153,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,200);
CleanupStack::PushL( circle );
@@ -1153,7 +1179,7 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
circle2->SetRadius(500);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
@@ -1166,9 +1192,6 @@
iLog->Log(_L("Triggers Created"));
notifier->StartNotification( wait );
wait->Start( );
- // notifier->StartNotification( wait );
- // wait->Start( );
- notifier->After(1200000000);
wait->Start( );
RArray<TLbtTriggerFireInfo> Firedtriggers;
lbt.GetFiredTriggersL(Firedtriggers);
@@ -1254,10 +1277,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,500);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,200);
CleanupStack::PushL( circle );
@@ -1280,8 +1303,7 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
- circle2->SetRadius(250);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,200);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
CLbtTriggerConditionArea::EFireOnEnter);
@@ -1293,11 +1315,8 @@
iLog->Log(_L("Triggers Created"));
notifier->StartNotification( wait );
wait->Start( );
- // notifier->StartNotification( wait );
- // wait->Start( );
+ wait->Start( );
- notifier->After(120000000);
- wait->Start( );
RArray<TLbtTriggerFireInfo> Firedtriggers;
lbt.GetFiredTriggersL(Firedtriggers);
CleanupStack::PopAndDestroy( notifier );
@@ -1377,9 +1396,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,500);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -1402,9 +1422,8 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
- circle2->SetRadius(500);
- coordinate.Move(90,1000);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
+ coordinate.Move(90,200);
circle2->SetCenter(coordinate);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
@@ -1417,9 +1436,6 @@
iLog->Log(_L("Triggers Created"));
notifier->StartNotification( wait );
wait->Start( );
- // notifier->StartNotification( wait );
- // wait->Start( );
- notifier->After(120000000);
wait->Start( );
RArray<TLbtTriggerFireInfo> Firedtriggers;
lbt.GetFiredTriggersL(Firedtriggers);
@@ -1505,9 +1521,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,500);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -1531,8 +1548,8 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- coordinate.Move(90,500);
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
+ coordinate.Move(90,100);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
circle2->SetCenter(coordinate);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
@@ -1545,8 +1562,8 @@
iLog->Log(_L("Triggers Created"));
notifier->StartNotification( wait );
wait->Start( );
- notifier->After(120000000);
- wait->Start( );
+ wait->Start( );
+
iLog->Log(_L("Trigger Fired"));
RArray<TLbtTriggerFireInfo> Firedtriggers;
lbt.GetFiredTriggersL(Firedtriggers);
@@ -1581,7 +1598,7 @@
{
iLog->Log(_L("Entering Test1"));
- _LIT( KSimulationFile,"c:\\system\\data\\test3.nme" );
+ _LIT( KSimulationFile,"c:\\system\\data\\simu_move2.sps" );
// _LIT( KSimulationFile0,"c:\\system\\data\\simu_move2.sps" );
RLbtServer lbtserver;
@@ -1630,9 +1647,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
-
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
+
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -1655,21 +1673,18 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- TCoordinate coordinates[10]=
+ TCoordinate movCoordinates( coordinate.Latitude(),coordinate.Longitude() );
+
+ TCoordinate coordinates[4];
+ // Initialise the coordinate
+ for( TInt i=0;i<4;i++ )
{
- TCoordinate(62.5285,23.9385) ,
- TCoordinate(62.5267,23.9636),
- TCoordinate(62.5167,23.9528),
- /* TCoordinate(62.5141,23.9312),
- TCoordinate(62.5296,23.9514),
- TCoordinate(62.5269,23.9331),
- TCoordinate(62.518,23.9401),
- TCoordinate(62.5394,23.9439),
- TCoordinate(62.5275,23.9223),*/
- TCoordinate(62.5331,23.9551)};
+ movCoordinates.Move( 90,300 );
+ coordinates[i] = movCoordinates;
+ }
for(int i=0;i<4;i++)
{
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,500);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
// coordinate.Move(45,100);
circle->SetCenter(coordinates[i]);
if(i%2==0)
@@ -1697,11 +1712,14 @@
notifier->StartNotification( wait );
wait->Start( );
- notifier->After(600000000);
- wait->Start( );
+ wait->Start( );
+ wait->Start( );
+ wait->Start( );
+
+
RArray<TLbtTriggerFireInfo> Firedtriggers;
lbt.GetFiredTriggersL(Firedtriggers);
- if(Firedtriggers.Count()==3)
+ if(Firedtriggers.Count()==4)
{
CleanupStack::PopAndDestroy( notifier );
CleanupStack::PopAndDestroy( trig );
@@ -1778,10 +1796,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
- // TCoordinate coordinate(62.4438,23.9385);
- coordinate.Move(90,5000);
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,10000);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
+ coordinate.Move(90,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,2000);
CleanupStack::PushL( circle );
@@ -1815,7 +1833,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance<=11500 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -1899,9 +1917,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -1925,8 +1944,8 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- coordinate.Move(90,2000);
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
+ coordinate.Move(90,500);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
circle2->SetCenter(coordinate);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
@@ -1954,7 +1973,7 @@
FireInfo.iFiredPositionInfo.GetPosition(firePosition);
firePosition.Distance(coordinate,trigDistance);
- if( trigDistance<=1000 && FireInfo.iTriggerId==trigId)
+ if( FireInfo.iTriggerId==trigId)
{
CleanupStack::PopAndDestroy( notifier );
@@ -2044,9 +2063,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,500);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -2070,8 +2090,8 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- coordinate.Move(90,2000);
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,800);
+ coordinate.Move(90,300);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
circle2->SetCenter(coordinate);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
@@ -2081,8 +2101,8 @@
notifier->CreateTriggers( lbt,*trig,trigIdtochange,ETrue,wait );
wait->Start( );
- coordinate.Move(90,2000);
- CLbtGeoCircle* circle3=CLbtGeoCircle::NewL(coordinate,700);
+ coordinate.Move(90,400);
+ CLbtGeoCircle* circle3=CLbtGeoCircle::NewL(coordinate,100);
circle3->SetCenter(coordinate);
CLbtTriggerConditionArea* condition3=CLbtTriggerConditionArea::NewL(
circle3,
@@ -2194,9 +2214,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -2220,8 +2241,8 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- coordinate.Move(90,10000);
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
+ coordinate.Move(90,500);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
circle2->SetCenter(coordinate);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle2,
@@ -2235,8 +2256,8 @@
// User::LeaveIfError(repository->Set(KCRKeySimPSYSimulationFile, KSimulationFile));
// notifier->After(3000000);
// wait->Start( );
- coordinate.Move(270,5000);
- CLbtGeoCircle* circle3=CLbtGeoCircle::NewL(coordinate,500);
+ coordinate.Move(270,200);
+ CLbtGeoCircle* circle3=CLbtGeoCircle::NewL(coordinate,100);
circle3->SetCenter(coordinate);
CLbtTriggerConditionArea* condition3=CLbtTriggerConditionArea::NewL(
circle3,
@@ -2347,9 +2368,10 @@
trig->SetRequestorL(ReqType,ReqFormat,ReqData);
// set condition
- TCoordinate coordinate(62.5285,23.9385);
+ TCoordinate coordinate;
+ GetCurrentCoordinateL( coordinate );
- CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,1000);
+ CLbtGeoCircle* circle=CLbtGeoCircle::NewL(coordinate,100);
CleanupStack::PushL( circle );
@@ -2373,8 +2395,8 @@
notifier->CreateTriggers( lbt,*trig,trigId,ETrue,wait );
wait->Start( );
- coordinate.Move(90,5000);
- CLbtGeoCircle* circle3=CLbtGeoCircle::NewL(coordinate,500);
+ coordinate.Move(90,500);
+ CLbtGeoCircle* circle3=CLbtGeoCircle::NewL(coordinate,100);
circle3->SetCenter(coordinate);
CLbtTriggerConditionArea* condition2=CLbtTriggerConditionArea::NewL(
circle3,
@@ -2384,8 +2406,8 @@
notifier->CreateTriggers( lbt,*trig,trigIdtochange,ETrue,wait );
wait->Start( );
- coordinate.Move(90,5000);
- CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,500);
+ coordinate.Move(90,500);
+ CLbtGeoCircle* circle2=CLbtGeoCircle::NewL(coordinate,100);
circle2->SetCenter(coordinate);
CLbtTriggerConditionArea* condition3=CLbtTriggerConditionArea::NewL(
circle2,
--- a/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/src/AsynOperationAO.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/AdvancedTriggerSupervision/src/AsynOperationAO.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -23,7 +23,7 @@
#include "AsynOperationAO.h"
-
+_LIT(KRequestor,"LBT test app");
// ============================ MEMBER FUNCTIONS ===============================
@@ -40,6 +40,12 @@
CActiveScheduler::Add(this);
}
+
+CTriggerFireObserver::CTriggerFireObserver( ):CTimer( CTimer::EPriorityStandard )
+ {
+ CActiveScheduler::Add(this);
+ }
+
// -----------------------------------------------------------------------------
// CTriggerFireObserver::ConstructL
// Symbian 2nd phase constructor can leave.
@@ -55,6 +61,21 @@
}
// -----------------------------------------------------------------------------
+// CTriggerFireObserver::ConstructL
+// Symbian 2nd phase constructor can leave.
+// -----------------------------------------------------------------------------
+//
+void CTriggerFireObserver::ConstructL()
+ {
+ User::LeaveIfError( iPosServer.Connect() );
+ User::LeaveIfError( iPositioner.Open( iPosServer ) );
+
+ // Set position requestor
+ User::LeaveIfError( iPositioner.SetRequestor( CRequestor::ERequestorService ,
+ CRequestor::EFormatApplication , KRequestor ) );
+ }
+
+// -----------------------------------------------------------------------------
// CTriggerFireObserver::NewL
// Two-phased constructor.
// -----------------------------------------------------------------------------
@@ -72,6 +93,20 @@
}
+// -----------------------------------------------------------------------------
+// CTriggerFireObserver::NewL
+// Two-phased constructor.
+// -----------------------------------------------------------------------------
+//
+CTriggerFireObserver* CTriggerFireObserver::NewL()
+ {
+ CTriggerFireObserver* self = new (ELeave) CTriggerFireObserver();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
// Destructor
CTriggerFireObserver::~CTriggerFireObserver()
{
@@ -81,10 +116,23 @@
delete iNotifier;
delete iWait;
// iWait=NULL;
+ iPositioner.Close();
+ iPosServer.Close();
}
+void CTriggerFireObserver::CurrentPositionL( TPositionInfo& aPositionInfo,
+ CActiveSchedulerWait* aWait )
+ {
+ iWait = aWait;
+ // Get last known position. The processing of the result
+ // is done in RunL method
+ iPositioner.NotifyPositionUpdate( aPositionInfo, iStatus );
+ // Set this active object active
+ SetActive();
+ }
+
void CTriggerFireObserver::TriggerFiredL( const TLbtTriggerFireInfo& aFireInfo )
{
iTriggerFireCount++;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/CellbasedtriggerOperations/bwins/CellbasedtriggerOperationsu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/CellbasedtriggerOperations/eabi/CellbasedtriggerOperationsu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI17CLbtEventObserver @ 2 NONAME
+ _ZTI20CTriggerFireObserver @ 3 NONAME
+ _ZTV17CLbtEventObserver @ 4 NONAME
+ _ZTV20CTriggerFireObserver @ 5 NONAME
+
--- a/locationtriggering/tsrc/lbtengine_test/CellbasedtriggerOperations/inc/AsynOperationAO.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/CellbasedtriggerOperations/inc/AsynOperationAO.h Thu Jul 22 16:37:56 2010 +0100
@@ -84,7 +84,7 @@
void ListTriggerIdsList(RLbt& aLbt, RArray < TLbtTriggerId >& aTriggerIdList,
CActiveSchedulerWait* aWait,CLbtListTriggerOptions* aListOptions=NULL);
void CreateIterator(RLbt& aLbt,CActiveSchedulerWait* aWait,CLbtListTriggerOptions* aListOptions=NULL);
- void CTriggerFireObserver::DeleteFilteredTriggers( RLbt& aLbt,CLbtTriggerFilterBase* aFilter,CActiveSchedulerWait* aWait );
+ void DeleteFilteredTriggers( RLbt& aLbt,CLbtTriggerFilterBase* aFilter,CActiveSchedulerWait* aWait );
TInt GetFireCount( ) ;
TInt GetError( ) ;
@@ -92,7 +92,7 @@
void UpdateTriggersState(RLbt& aLbt, CLbtTriggerEntry::TLbtTriggerState aState,
CActiveSchedulerWait* aWait,CLbtTriggerFilterBase * aFilter=NULL) ;
- void CTriggerFireObserver::PopulateFromCurrentCell(CLbtGeoCell& cell,CActiveSchedulerWait* aWait ) ;
+ void PopulateFromCurrentCell(CLbtGeoCell& cell,CActiveSchedulerWait* aWait ) ;
void RunL( );
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/ClientServerSetup/bwins/ClientServerSetupu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/ClientServerSetup/eabi/ClientServerSetupu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/CreateSessiontrigger/bwins/CreateSessiontriggeru.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/CreateSessiontrigger/eabi/CreateSessiontriggeru.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/LbtCancellationTest/testlbtcancellation/bwins/testlbtcancellationu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/LbtCancellationTest/testlbtcancellation/eabi/testlbtcancellationu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTV20CTriggerFireObserver @ 3 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/TestHybridTriggers/bwins/TestHybridTriggersu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/TestHybridTriggers/eabi/TestHybridTriggersu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI17CLbtEventObserver @ 2 NONAME
+ _ZTI20CTriggerFireObserver @ 3 NONAME
+ _ZTV17CLbtEventObserver @ 4 NONAME
+ _ZTV20CTriggerFireObserver @ 5 NONAME
+
--- a/locationtriggering/tsrc/lbtengine_test/TestHybridTriggers/inc/AsynOperationAO.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locationtriggering/tsrc/lbtengine_test/TestHybridTriggers/inc/AsynOperationAO.h Thu Jul 22 16:37:56 2010 +0100
@@ -83,7 +83,7 @@
void ListTriggerIdsList(RLbt& aLbt, RArray < TLbtTriggerId >& aTriggerIdList,
CActiveSchedulerWait* aWait,CLbtListTriggerOptions* aListOptions=NULL);
void CreateIterator(RLbt& aLbt,CActiveSchedulerWait* aWait,CLbtListTriggerOptions* aListOptions=NULL);
- void CTriggerFireObserver::DeleteFilteredTriggers( RLbt& aLbt,CLbtTriggerFilterBase* aFilter,CActiveSchedulerWait* aWait );
+ void DeleteFilteredTriggers( RLbt& aLbt,CLbtTriggerFilterBase* aFilter,CActiveSchedulerWait* aWait );
TInt GetFireCount( ) ;
TInt GetError( ) ;
@@ -92,7 +92,7 @@
CActiveSchedulerWait* aWait,CLbtTriggerFilterBase * aFilter=NULL) ;
void UpdateTrigger(RLbt& aLbt,CLbtTriggerEntry& aTrigger,TLbtTriggerAttributeFieldsMask aFieldMask,CActiveSchedulerWait* aWait,
TLbtFireOnUpdate aFireOnUpdate) ;
- void CTriggerFireObserver::PopulateFromCurrentCell(CLbtGeoCell& cell,CActiveSchedulerWait* aWait ) ;
+ void PopulateFromCurrentCell(CLbtGeoCell& cell,CActiveSchedulerWait* aWait ) ;
void RunL( );
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/UpdateTrigger/bwins/UpdateTriggeru.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/UpdateTrigger/eabi/UpdateTriggeru.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTV20CTriggerFireObserver @ 3 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/createstartuptrigger/bwins/createstartuptriggeru.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/createstartuptrigger/eabi/createstartuptriggeru.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/firingofstartuptriggerandlisttrigger/bwins/t_lbtltapiu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/firingofstartuptriggerandlisttrigger/eabi/t_lbtltapiu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTV20CTriggerFireObserver @ 3 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/lbtPlatSecTest/testlbtplatsecurity/bwins/testlbtplatsecurityu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/lbtPlatSecTest/testlbtplatsecurity/eabi/testlbtplatsecurityu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTV20CTriggerFireObserver @ 3 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/lbtbctest/bwins/lbtbctestu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/lbtbctest/eabi/lbtbctestu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI17CLbtEventObserver @ 2 NONAME
+ _ZTI20CTriggerFireObserver @ 3 NONAME
+ _ZTV17CLbtEventObserver @ 4 NONAME
+ _ZTV20CTriggerFireObserver @ 5 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/t_deletetriggers/bwins/t_deletetriggersu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/t_deletetriggers/eabi/t_deletetriggersu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTI22CDeleteTriggerObserver @ 3 NONAME
+ _ZTV20CTriggerFireObserver @ 4 NONAME
+ _ZTV22CDeleteTriggerObserver @ 5 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/t_lbtltapi/bwins/t_lbtltapiu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ ?LibEntryL@@YAPAVCScriptBase@@AAVCTestModuleIf@@@Z @ 1 NONAME ; class CScriptBase * LibEntryL(class CTestModuleIf &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/locationtriggering/tsrc/lbtengine_test/t_lbtltapi/eabi/t_lbtltapiu.def Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ _Z9LibEntryLR13CTestModuleIf @ 1 NONAME
+ _ZTI20CTriggerFireObserver @ 2 NONAME
+ _ZTV20CTriggerFireObserver @ 3 NONAME
+
--- a/locsrv_plat/supl_settings_api/tsrc/conf/settingsapi_test.cfg Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_plat/supl_settings_api/tsrc/conf/settingsapi_test.cfg Thu Jul 22 16:37:56 2010 +0100
@@ -877,13 +877,6 @@
delete foobar
[Endtest]
-[Test]
-title CancelTriggerSession
-create settingsapi foobar
-foobar CancelTriggerSession
-delete foobar
-[Endtest]
-
[Test]
title SetTriggerEmptySessionName
--- a/locsrv_plat/supl_settings_api/tsrc/eabi/settingsapiu.def Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_plat/supl_settings_api/tsrc/eabi/settingsapiu.def Thu Jul 22 16:37:56 2010 +0100
@@ -2,4 +2,6 @@
_Z9LibEntryLR13CTestModuleIf @ 1 NONAME
_ZTI28CTerminalInitiatedRunSession @ 2 NONAME ; #<TI>#
_ZTV28CTerminalInitiatedRunSession @ 3 NONAME ; #<VT>#
+ _ZTI16CSessionObserver @ 4 NONAME
+ _ZTV16CSessionObserver @ 5 NONAME
--- a/locsrv_plat/supl_settings_api/tsrc/inc/settingsapi.h Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_plat/supl_settings_api/tsrc/inc/settingsapi.h Thu Jul 22 16:37:56 2010 +0100
@@ -188,116 +188,112 @@
TInt RemoveServer_Invalid_negative(CStifItemParser& aItem);
TInt RemoveServer_Id_NotExisting(CStifItemParser& aItem);
TInt RemoveServer_Invalid_zero(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_Increase(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_Decrease(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_invalid_positive(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_priority0(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_Negative(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_InvalidServer(CStifItemParser& aItem);
- TInt CSettingsApi::ChangePriority_invalidserverpriority(CStifItemParser& aItem);
- TInt CSettingsApi::GetDefaultServer();
- TInt CSettingsApi::AddNewServerWithDefault(CStifItemParser& aItem);
- TInt CSettingsApi::AddNewServerWithoutDefault(CStifItemParser& aItem);
- TInt CSettingsApi::AddNewServer_Duplicate(CStifItemParser& aItem);
- TInt CSettingsApi::GetSlpInfoFromId(TInt64 Slpid);
- TInt CSettingsApi::GetSlpInfoFromId(CStifItemParser& aItem);
- TInt CSettingsApi::GetSlpInfoFromId_invalid_positive(CStifItemParser& aItem);
- TInt CSettingsApi::GetSlpInfoFromId_invalid_negative(CStifItemParser& aItem);
- TInt CSettingsApi::GetSlpInfoFromId_invalid_zero(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerAddress(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerAddress_invalidpositive(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerAddress_invalidnegative(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerAddress_invalidzero(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerAddress_AddressNull(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerAddress_InvalidAddressId(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerAddress(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerAddress_invalidpositive(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerAddress_invalidnegative(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerAddress_invalidzero(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerAddress(TInt64 aSlpId1);
- TInt CSettingsApi::SetIAPName_InvalidAddressId(CStifItemParser& aItem);
- TInt CSettingsApi::SetIAPName_invalidzero(CStifItemParser& aItem);
- TInt CSettingsApi::SetIAPName_invalidnegative(CStifItemParser& aItem);
- TInt CSettingsApi::SetIAPName_invalidpositive(CStifItemParser& aItem);
- TInt CSettingsApi::SetIAPName(CStifItemParser& aItem);
- TInt CSettingsApi::GetIAPName_invalidzero(CStifItemParser& aItem);
- TInt CSettingsApi::GetIAPName_invalidnegative(CStifItemParser& aItem);
- TInt CSettingsApi::GetIAPName_invalidpositive(CStifItemParser& aItem);
- TInt CSettingsApi::GetIAPName(CStifItemParser& aItem);
- TInt CSettingsApi::GetIAPName(TInt64 aSlpId1);
- TInt CSettingsApi::SetServerEnabledFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerEnabledFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerEnabledFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerEnabledFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::SetServerEnabledFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerEnabledFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerEnabledFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerEnabledFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerEnabledFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerEnabledFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomeNwFlag(TInt64 aSlpId1);
- TInt CSettingsApi::SetUsageInHomwNwFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::SetUsageInHomwNwFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::SetUsageInHomwNwFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::SetUsageInHomwNwFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::SetUsageInHomwNwFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomwNwFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomwNwFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomwNwFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomwNwFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomwNwFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetUsageInHomwNwFlag(TInt64 aSlpId1);
- TInt CSettingsApi::AddNewServer_aServerAddress_Null(CStifItemParser& aItem);
- TInt CSettingsApi::AddNewServer_aIapNAme_Null(CStifItemParser& aItem);
- TInt CSettingsApi::SetDefaultServer_aServerAddress_Null(CStifItemParser& aItem);
- TInt CSettingsApi::SetDefaultServerWithDefaultValues(CStifItemParser& aItem);
- TInt CSettingsApi::SetAllParameter_aServerAddress_Null(CStifItemParser& aItem);
- TInt CSettingsApi::SetAllParameter_WithDefaultValues(CStifItemParser& aItem);
- TInt CSettingsApi::SetAllParameter_Invalid_Positive(CStifItemParser& aItem);
- TInt CSettingsApi::SetAllParameter_Invalid_Negative(CStifItemParser& aItem);
- TInt CSettingsApi::SetAllParameter_Invalid_Zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetServerEnabledFlag(TInt64 aSlpId1);
- TInt CSettingsApi::SetEditableFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::SetEditableFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::SetEditableFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::SetEditableFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::SetEditableFlag_id_zero(CStifItemParser& aItem);
- TBool CSettingsApi::IsSLPExists(CStifItemParser& aItem);
- TBool CSettingsApi::IsSLPExists_invalid_negative(CStifItemParser& aItem);
- TBool CSettingsApi::IsSLPExists_invalid_positive(CStifItemParser& aItem);
- TBool CSettingsApi::IsSLPExists_invalid_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetAllSlp_sync(CStifItemParser& aItem);
- TInt CSettingsApi::GetAllSlp_async(CStifItemParser& aItem);
- TInt CSettingsApi::SetSimChangeRemoveFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::SetSimChangeRemoveFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::SetSimChangeRemoveFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::SetSimChangeRemoveFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::SetSimChangeRemoveFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetSimChangeRemoveFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::GetSimChangeRemoveFlag(TInt64 aSlpId1);
- TInt CSettingsApi::GetSimChangeRemoveFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::GetSimChangeRemoveFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::GetSimChangeRemoveFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::GetSimChangeRemoveFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::GetEditableFlag_Etrue(CStifItemParser& aItem);
- TInt CSettingsApi::GetEditableFlag(TInt64 aSlpId1);
- TInt CSettingsApi::GetEditableFlag_EFalse(CStifItemParser& aItem);
- TInt CSettingsApi::GetEditableFlag_id_negative(CStifItemParser& aItem);
- TInt CSettingsApi::GetEditableFlag_id_positive(CStifItemParser& aItem);
- TInt CSettingsApi::GetEditableFlag_id_zero(CStifItemParser& aItem);
- TInt CSettingsApi::SetFallBack_ETrue();
- TInt CSettingsApi::SetFallBack_EFalse();
- TInt CSettingsApi::GetFallBack();
- TInt CSettingsApi::IsSLPExistsString();
- TInt CSettingsApi::IsSLPExistsString_Null();
- TInt CSettingsApi::IsSLPExistsString_invalid();
- TInt CSettingsApi::SlpCount();
- TInt CSettingsApi::GetSlpInfoFromAddress(CStifItemParser& aItem);
- TInt CSettingsApi::GetSlpInfoFromAddress_invalid(CStifItemParser& aItem);
- TInt CSettingsApi::ProductConfiguredServer1();
- TInt CSettingsApi::ProductConfiguredServer2();
- TInt CSettingsApi::ProductConfiguredServer3();
- TInt CSettingsApi::ProductConfiguredServer4();
+ TInt ChangePriority_Increase(CStifItemParser& aItem);
+ TInt ChangePriority_Decrease(CStifItemParser& aItem);
+ TInt ChangePriority_invalid_positive(CStifItemParser& aItem);
+ TInt ChangePriority_priority0(CStifItemParser& aItem);
+ TInt ChangePriority_Negative(CStifItemParser& aItem);
+ TInt ChangePriority_InvalidServer(CStifItemParser& aItem);
+ TInt ChangePriority_invalidserverpriority(CStifItemParser& aItem);
+ TInt GetDefaultServer();
+ TInt AddNewServerWithDefault(CStifItemParser& aItem);
+ TInt AddNewServerWithoutDefault(CStifItemParser& aItem);
+ TInt AddNewServer_Duplicate(CStifItemParser& aItem);
+ TInt GetSlpInfoFromId(TInt64 Slpid);
+ TInt GetSlpInfoFromId(CStifItemParser& aItem);
+ TInt GetSlpInfoFromId_invalid_positive(CStifItemParser& aItem);
+ TInt GetSlpInfoFromId_invalid_negative(CStifItemParser& aItem);
+ TInt GetSlpInfoFromId_invalid_zero(CStifItemParser& aItem);
+ TInt SetServerAddress(CStifItemParser& aItem);
+ TInt SetServerAddress_invalidpositive(CStifItemParser& aItem);
+ TInt SetServerAddress_invalidnegative(CStifItemParser& aItem);
+ TInt SetServerAddress_invalidzero(CStifItemParser& aItem);
+ TInt SetServerAddress_AddressNull(CStifItemParser& aItem);
+ TInt SetServerAddress_InvalidAddressId(CStifItemParser& aItem);
+ TInt GetServerAddress(CStifItemParser& aItem);
+ TInt GetServerAddress_invalidpositive(CStifItemParser& aItem);
+ TInt GetServerAddress_invalidnegative(CStifItemParser& aItem);
+ TInt GetServerAddress_invalidzero(CStifItemParser& aItem);
+ TInt GetServerAddress(TInt64 aSlpId1);
+ TInt SetIAPName_InvalidAddressId(CStifItemParser& aItem);
+ TInt SetIAPName_invalidzero(CStifItemParser& aItem);
+ TInt SetIAPName_invalidnegative(CStifItemParser& aItem);
+ TInt SetIAPName_invalidpositive(CStifItemParser& aItem);
+ TInt SetIAPName(CStifItemParser& aItem);
+ TInt GetIAPName_invalidzero(CStifItemParser& aItem);
+ TInt GetIAPName_invalidnegative(CStifItemParser& aItem);
+ TInt GetIAPName_invalidpositive(CStifItemParser& aItem);
+ TInt GetIAPName(CStifItemParser& aItem);
+ TInt GetIAPName(TInt64 aSlpId1);
+ TInt SetServerEnabledFlag_Etrue(CStifItemParser& aItem);
+ TInt SetServerEnabledFlag_EFalse(CStifItemParser& aItem);
+ TInt SetServerEnabledFlag_id_negative(CStifItemParser& aItem);
+ TInt SetServerEnabledFlag_id_positive(CStifItemParser& aItem);
+ TInt SetServerEnabledFlag_id_zero(CStifItemParser& aItem);
+ TInt GetServerEnabledFlag_id_negative(CStifItemParser& aItem);
+ TInt GetServerEnabledFlag_id_positive(CStifItemParser& aItem);
+ TInt GetServerEnabledFlag_id_zero(CStifItemParser& aItem);
+ TInt GetServerEnabledFlag_EFalse(CStifItemParser& aItem);
+ TInt GetServerEnabledFlag_Etrue(CStifItemParser& aItem);
+ TInt GetUsageInHomeNwFlag(TInt64 aSlpId1);
+ TInt SetUsageInHomwNwFlag_Etrue(CStifItemParser& aItem);
+ TInt SetUsageInHomwNwFlag_EFalse(CStifItemParser& aItem);
+ TInt SetUsageInHomwNwFlag_id_negative(CStifItemParser& aItem);
+ TInt SetUsageInHomwNwFlag_id_positive(CStifItemParser& aItem);
+ TInt SetUsageInHomwNwFlag_id_zero(CStifItemParser& aItem);
+ TInt GetUsageInHomwNwFlag_Etrue(CStifItemParser& aItem);
+ TInt GetUsageInHomwNwFlag_EFalse(CStifItemParser& aItem);
+ TInt GetUsageInHomwNwFlag_id_negative(CStifItemParser& aItem);
+ TInt GetUsageInHomwNwFlag_id_positive(CStifItemParser& aItem);
+ TInt GetUsageInHomwNwFlag_id_zero(CStifItemParser& aItem);
+ TInt GetUsageInHomwNwFlag(TInt64 aSlpId1);
+ TInt AddNewServer_aServerAddress_Null(CStifItemParser& aItem);
+ TInt AddNewServer_aIapNAme_Null(CStifItemParser& aItem);
+ TInt SetDefaultServer_aServerAddress_Null(CStifItemParser& aItem);
+ TInt SetDefaultServerWithDefaultValues(CStifItemParser& aItem);
+ TInt SetAllParameter_aServerAddress_Null(CStifItemParser& aItem);
+ TInt SetAllParameter_WithDefaultValues(CStifItemParser& aItem);
+ TInt SetAllParameter_Invalid_Positive(CStifItemParser& aItem);
+ TInt SetAllParameter_Invalid_Negative(CStifItemParser& aItem);
+ TInt SetAllParameter_Invalid_Zero(CStifItemParser& aItem);
+ TInt GetServerEnabledFlag(TInt64 aSlpId1);
+ TInt SetEditableFlag_Etrue(CStifItemParser& aItem);
+ TInt SetEditableFlag_EFalse(CStifItemParser& aItem);
+ TInt SetEditableFlag_id_negative(CStifItemParser& aItem);
+ TInt SetEditableFlag_id_positive(CStifItemParser& aItem);
+ TInt SetEditableFlag_id_zero(CStifItemParser& aItem);
+ TBool IsSLPExists(CStifItemParser& aItem);
+ TBool IsSLPExists_invalid_negative(CStifItemParser& aItem);
+ TBool IsSLPExists_invalid_positive(CStifItemParser& aItem);
+ TBool IsSLPExists_invalid_zero(CStifItemParser& aItem);
+ TInt GetAllSlp_sync(CStifItemParser& aItem);
+ TInt GetAllSlp_async(CStifItemParser& aItem);
+ TInt SetSimChangeRemoveFlag_Etrue(CStifItemParser& aItem);
+ TInt SetSimChangeRemoveFlag_EFalse(CStifItemParser& aItem);
+ TInt SetSimChangeRemoveFlag_id_negative(CStifItemParser& aItem);
+ TInt SetSimChangeRemoveFlag_id_positive(CStifItemParser& aItem);
+ TInt SetSimChangeRemoveFlag_id_zero(CStifItemParser& aItem);
+ TInt GetSimChangeRemoveFlag_Etrue(CStifItemParser& aItem);
+ TInt GetSimChangeRemoveFlag(TInt64 aSlpId1);
+ TInt GetSimChangeRemoveFlag_EFalse(CStifItemParser& aItem);
+ TInt GetSimChangeRemoveFlag_id_negative(CStifItemParser& aItem);
+ TInt GetSimChangeRemoveFlag_id_positive(CStifItemParser& aItem);
+ TInt GetSimChangeRemoveFlag_id_zero(CStifItemParser& aItem);
+ TInt GetEditableFlag_Etrue(CStifItemParser& aItem);
+ TInt GetEditableFlag(TInt64 aSlpId1);
+ TInt GetEditableFlag_EFalse(CStifItemParser& aItem);
+ TInt GetEditableFlag_id_negative(CStifItemParser& aItem);
+ TInt GetEditableFlag_id_positive(CStifItemParser& aItem);
+ TInt GetEditableFlag_id_zero(CStifItemParser& aItem);
+ TInt SetFallBack_ETrue();
+ TInt SetFallBack_EFalse();
+ TInt GetFallBack();
+ TInt IsSLPExistsString();
+ TInt IsSLPExistsString_Null();
+ TInt IsSLPExistsString_invalid();
+ TInt SlpCount();
+ TInt GetSlpInfoFromAddress(CStifItemParser& aItem);
+ TInt GetSlpInfoFromAddress_invalid(CStifItemParser& aItem);
TInt SetGetTriggerParamsL( CStifItemParser& aItem );
@@ -321,18 +317,18 @@
virtual TInt SetTriggerEmptySessionNameL( CStifItemParser& aItem );
virtual TInt SetTriggerLongSessionNameL( CStifItemParser& aItem );
- TInt CSettingsApi::ChangeSuplTriggerServiceStatusON();
+ TInt ChangeSuplTriggerServiceStatusON();
- TInt CSettingsApi::ChangeSuplTriggerServiceStatusOFF();
+ TInt ChangeSuplTriggerServiceStatusOFF();
- TInt CSettingsApi::GetSuplTriggerServiceStatusON();
+ TInt GetSuplTriggerServiceStatusON();
- TInt CSettingsApi::GetSuplTriggerServiceStatusOFF();
+ TInt GetSuplTriggerServiceStatusOFF();
- TInt CSettingsApi::SetstatusOtherThanAppropriate();
+ // TInt CSettingsApi::SetstatusOtherThanAppropriate();
public : // from MSuplSettingsObserver
virtual void HandleSuplTriggerStatusChangeL(
CSuplSettings::TSuplTriggerStatus aSuplTriggerStatus );
--- a/locsrv_plat/supl_settings_api/tsrc/src/settingsapiblocks.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_plat/supl_settings_api/tsrc/src/settingsapiblocks.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -265,7 +265,7 @@
ENTRY( "ChangeSuplTriggerServiceStatusOFF", CSettingsApi::ChangeSuplTriggerServiceStatusOFF),
ENTRY( "GetSuplTriggerServiceStatusON", CSettingsApi::GetSuplTriggerServiceStatusON),
ENTRY( "GetSuplTriggerServiceStatusOFF", CSettingsApi::GetSuplTriggerServiceStatusOFF),
- ENTRY( "SetstatusOtherThanAppropriate", CSettingsApi::SetstatusOtherThanAppropriate),
+ //ENTRY( "SetstatusOtherThanAppropriate", CSettingsApi::SetstatusOtherThanAppropriate),
ENTRY( "ProductConfiguredServer1", CSettingsApi::ProductConfiguredServer1),
ENTRY( "ProductConfiguredServer2", CSettingsApi::ProductConfiguredServer2),
ENTRY( "ProductConfiguredServer3", CSettingsApi::ProductConfiguredServer3),
@@ -2639,7 +2639,7 @@
aIapName.Create(256);
aIapName.Copy(KIap);
-aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue);
+aParamValues->Set(aServerAddress,aIapName,ETrue,ETrue,ETrue,ETrue);
CSuplSettings *aSettings=CSuplSettings::NewL();
TInt ret,ret1;
@@ -3520,7 +3520,7 @@
iLog->Log(_L("Is SLP Exists for valid server address"));
-_LIT8(KServer, "supl1.nokia.com");
+_LIT8(KServer, "supl.nokia.com");
RBuf aServer;
aServer.Create(256);
@@ -4421,7 +4421,9 @@
sessionName.Copy(_L("Session1"));
TTime endTime1;
endTime1 = 100;
- TInt ret=params->Set( 5,sessionName,ETrue,ETrue,CTriggerParams::EPeriodic,CTriggerParams::ETerminalInitiated,10,10,endTime1);
+ TInt ret=params->Set( 5,sessionName,ETrue,ETrue,CTriggerParams::EPeriodic,CTriggerParams::ETerminalInitiated,10,10);
+ params->SetTriggerEndTime(endTime1);
+
if( KErrNone!=ret)
{
delete params;
@@ -4437,7 +4439,9 @@
TTime endTime2;
HBufC* name = HBufC::NewL( 256);
ret = params->Get(sessionId,name->Des(),notificationPresent,triggerNotificationStatus,
- triggerType,requestType,outstandingTrigger,interval,endTime2 );
+ triggerType,requestType,outstandingTrigger,interval);
+
+ params->GetTriggerEndTime(endTime2 );
delete params;
if( KErrNone!=ret)
@@ -4462,14 +4466,19 @@
TInt CSettingsApi::SetTriggerLongSessionNameL( CStifItemParser& aItem )
{
- CTriggerParams* params = CTriggerParams::NewL();
+ CTriggerParams* params = CTriggerParams::NewLC();
TBuf<300> sessionName;
for(TInt i=0;i<290;i++)
{
sessionName.Append(_L("a"));
}
- TInt ret=params->Set( 5,sessionName,ETrue,ETrue,CTriggerParams::EPeriodic,CTriggerParams::ETerminalInitiated,10,10,0);
- delete params;
+
+ TInt ret=params->Set( 5,sessionName,ETrue,ETrue,CTriggerParams::EPeriodic,CTriggerParams::ETerminalInitiated,10,10);
+
+
+
+ CleanupStack::PopAndDestroy();
+
if( KErrArgument!= ret )
{
return KErrGeneral;
@@ -4483,7 +4492,7 @@
CTriggerParams* params = CTriggerParams::NewL();
TBuf<300> sessionName;
sessionName.Zero();
- TInt ret=params->Set( 5,sessionName,ETrue,ETrue,CTriggerParams::EPeriodic,CTriggerParams::ETerminalInitiated,10,10,0);
+ TInt ret=params->Set( 5,sessionName,ETrue,ETrue,CTriggerParams::EPeriodic,CTriggerParams::ETerminalInitiated,10,10);
TInt64 sessionId;
TBool notificationPresent;
@@ -4495,7 +4504,7 @@
TTime endTime;
HBufC* name = HBufC::NewL( 256);
ret = params->Get(sessionId,name->Des(),notificationPresent,triggerNotificationStatus,
- triggerType,requestType,outstandingTrigger,interval,endTime );
+ triggerType,requestType,outstandingTrigger,interval);
delete params;
TInt comp=name->Compare(sessionName);
@@ -4553,8 +4562,11 @@
CSessionObserver* obs = CSessionObserver::NewL();
TInt err=settings->SetSessionObserverL(*obs);
err=settings->SetSessionObserverL(*obs);
+
CleanupStack::PopAndDestroy(1);
delete obs;
+ if ( err == KErrAlreadyExists)
+ return KErrNone ;
return err;
}
@@ -4593,7 +4605,7 @@
{
CTriggerParams* params=NULL;
CSuplSettings* settings = CSuplSettings::NewL();
- TInt err=settings->GetTriggerParams(12,params);
+ TInt err=settings->GetTriggerParams(10,params);
delete settings;
if( KErrArgument!=err)
{
@@ -4607,8 +4619,9 @@
{
CTriggerParams* params=CTriggerParams::NewL();
CSuplSettings* settings = CSuplSettings::NewL();
- TInt err=settings->GetTriggerParams(15,params);//Invalid Id
+ TInt err=settings->GetTriggerParams(11,params);//Invalid Id
delete settings;
+ delete params;
if( KErrNotFound!=err)
{
return KErrGeneral;
@@ -4631,14 +4644,12 @@
CSuplSettings* settings = CSuplSettings::NewL() ;
TInt ret ;
//settings->SetObserverL(*this);
- ret = settings->ChangeSuplTriggerServiceStatus(CSuplSettings::ESuplTriggerON);
+ ret = settings->SetSuplTriggeredServiceStatus(CSuplSettings::ESuplTriggerOn);
iLog->Log(_L("Supltrigger ON = %d "),ret ) ;
if(ret != KErrNone)
{
iLog->Log(_L("Supltrigger service status:Error = %d"), ret);
}
-
- // CActiveScheduler::Start();
iLog->Log(_L("ChangeSuplTriggerServiceStatus ON = %d "),ret ) ;
delete settings;
return ret;
@@ -4652,7 +4663,7 @@
CSuplSettings* settings = CSuplSettings::NewL() ;
TInt ret ;
// settings->SetObserverL(*this);
- ret = settings->ChangeSuplTriggerServiceStatus(CSuplSettings::ESuplTriggerOFF);
+ ret = settings->SetSuplTriggeredServiceStatus(CSuplSettings::ESuplTriggerOff);
iLog->Log(_L("Supltrigger OFF = %d "),ret ) ;
if(ret != KErrNone)
{
@@ -4676,8 +4687,8 @@
{
CSuplSettings::TSuplTriggerStatus status;
CSuplSettings* settings = CSuplSettings::NewL();
- ret = settings->GetSuplTriggerServiceStatus(status);
- if (ret == KErrNone && status == CSuplSettings::ESuplTriggerON)
+ ret = settings->GetSuplTriggeredServiceStatus(status);
+ if (ret == KErrNone && status == CSuplSettings::ESuplTriggerOn)
{
iLog->Log(_L("status are matching...returned=%d" ),(TInt)status);
}
@@ -4705,8 +4716,8 @@
{
CSuplSettings::TSuplTriggerStatus status;
CSuplSettings* settings = CSuplSettings::NewL();
- ret = settings->GetSuplTriggerServiceStatus(status);
- if (ret == KErrNone && status == CSuplSettings::ESuplTriggerOFF)
+ ret = settings->GetSuplTriggeredServiceStatus(status);
+ if (ret == KErrNone && status == CSuplSettings::ESuplTriggerOff)
{
iLog->Log(_L("status are matching...returned=%d" ),(TInt)status);
}
@@ -4726,64 +4737,54 @@
return ret;
}
-// Change the status other than the appropriat
-TInt CSettingsApi::SetstatusOtherThanAppropriate()
- {
- CSuplSettings::TSuplTriggerStatus status = (CSuplSettings::TSuplTriggerStatus)10;
- CSuplSettings* settings = CSuplSettings::NewL();
- TInt ret=settings->ChangeSuplTriggerServiceStatus(status);
-
- if(ret != KErrArgument)
- {
- iLog->Log(_L("SuplTriggerServiceStatus returned=%d" ),ret);
- }
- iLog->Log(_L("Expected KErrArgument =%d" ),ret);
- ret = KErrNone;
- delete settings;
- return ret;
-}
-
-TInt CSettingsApi::ProductConfiguredServer1()
+
+
+ TInt CSettingsApi::ProductConfiguredServer1()
{
-
- CServerParams *aParamValues= CServerParams::NewL();
-
-iLog->Log(_L("Setting CServerParams with product config parameter"));
-_LIT8(KServer, "supl.nokia.com");
-_LIT8(KIap, "airtelgprs.com");
-
-RBuf aServerAddress, aIapName;
-
-aServerAddress.Create(128);
-aServerAddress.Copy(KServer);
-aIapName.Create(128);
-aIapName.Copy(KIap);
-
-aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue,0,ETrue);
-
-aIapName.Close();
-aServerAddress.Close();
-
-HBufC* aServerAddress1 = HBufC::NewL(64);
-HBufC* aIapName1 = HBufC::NewL(64);
-TInt64 aSlpId;
-TBool aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured;
-
-TInt ret = aParamValues->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured);
-
-delete aParamValues;
-delete aServerAddress1;
-delete aIapName1;
-
-if(ret != KErrNone)
- return ret;
-
-if (aProductConfigured)
- return KErrNone;
-else
- return KErrGeneral;
+ CServerParams *aParamValues= CServerParams::NewL();
+
+ TInt64 aSlpId =10;
+
+ iLog->Log(_L("Setting CServerParams with product config parameter"));
+ _LIT8(KServer, "supl.nokia.com");
+ _LIT8(KIap, "airtelgprs.com");
+
+ RBuf aServerAddress, aIapName;
+
+ aServerAddress.Create(128);
+ aServerAddress.Copy(KServer);
+ aIapName.Create(128);
+ aIapName.Copy(KIap);
+
+ aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue,aSlpId);
+
+ aParamValues->SetServerConfigurationType(ETrue);
+
+ aIapName.Close();
+ aServerAddress.Close();
+
+ HBufC* aServerAddress1 = HBufC::NewL(64);
+ HBufC* aIapName1 = HBufC::NewL(64);
+
+ TBool aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured;
+
+ TInt ret = aParamValues->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable);
+ aParamValues->GetServerConfigurationType(aProductConfigured);
+
+ delete aParamValues;
+ delete aServerAddress1;
+ delete aIapName1;
+
+ if(ret != KErrNone)
+ return ret;
+
+ if (aProductConfigured)
+ return KErrNone;
+ else
+ return KErrGeneral;
}
+
TInt CSettingsApi::ProductConfiguredServer2()
{
CServerParams *aParamValues = CServerParams::NewL();
@@ -4792,7 +4793,7 @@
TInt64 slp;
iLog->Log(_L("Setting CServerParams with product config parameter"));
-_LIT8(KServer, "supl111.nokia.com");
+_LIT8(KServer, "product.supl.nokia.com");
_LIT8(KIap, "airtelgprs.com");
RBuf aServerAddress, aIapName;
@@ -4802,7 +4803,8 @@
aIapName.Create(128);
aIapName.Copy(KIap);
-aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue,0,ETrue);
+ aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue);
+ aParamValues->SetServerConfigurationType(ETrue);
ret = aSettings->AddNewServer(aParamValues,slp);
iLog->Log(_L("Return Value=%d" ),ret);
@@ -4823,7 +4825,9 @@
TInt64 aSlpId;
TBool aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured;
-ret = aParamValues1->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured);
+ret = aParamValues1->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable);
+
+aParamValues1->GetServerConfigurationType(aProductConfigured);
delete aParamValues;
delete aParamValues1;
@@ -4848,7 +4852,7 @@
TInt64 slp;
iLog->Log(_L("Setting CServerParams with product config parameter"));
-_LIT8(KServer, "supl121.nokia.com");
+_LIT8(KServer, "user.supl.nokia.com");
_LIT8(KIap, "airtelgprs.com");
RBuf aServerAddress, aIapName;
@@ -4858,7 +4862,8 @@
aIapName.Create(128);
aIapName.Copy(KIap);
-aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue,0,ETrue);
+ aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue);
+ aParamValues->SetServerConfigurationType(EFalse);
ret = aSettings->AddNewServer(aParamValues,slp);
iLog->Log(_L("Return Value=%d" ),ret);
@@ -4868,7 +4873,7 @@
return ret;
CServerParams *aParamValues1 = CServerParams::NewL();
-ret = aSettings->GetSlpInfoAddress(_L("supl121.nokia.com"),aParamValues1);
+ret = aSettings->GetSlpInfoAddress(aServerAddress,aParamValues1);
aIapName.Close();
aServerAddress.Close();
@@ -4878,7 +4883,9 @@
TInt64 aSlpId;
TBool aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured;
-ret = aParamValues1->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured);
+ret = aParamValues1->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable);
+aParamValues1->GetServerConfigurationType(aProductConfigured);
+
delete aParamValues;
delete aParamValues1;
@@ -4889,7 +4896,7 @@
if(ret != KErrNone)
return ret;
-if (aProductConfigured)
+if (!aProductConfigured)
return KErrNone;
else
return KErrGeneral;
@@ -4903,7 +4910,7 @@
TInt ret,slp;
iLog->Log(_L("Setting CServerParams with product config parameter"));
-_LIT8(KServer, "supl131.nokia.com");
+_LIT8(KServer, "user.google.nokia.com");
_LIT8(KIap, "airtelgprs.com");
RBuf aServerAddress, aIapName;
@@ -4913,7 +4920,9 @@
aIapName.Create(128);
aIapName.Copy(KIap);
-aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue,0,ETrue);
+ aParamValues->Set(aServerAddress,aIapName,ETrue,EFalse,ETrue,ETrue);
+ aParamValues->SetServerConfigurationType(EFalse);
+
ret = aSettings->SetDefaultServer(aParamValues);
iLog->Log(_L("Return Value=%d" ),ret);
@@ -4933,7 +4942,8 @@
TInt64 aSlpId;
TBool aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured;
-ret = aParamValues1->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable,aProductConfigured);
+ret = aParamValues1->Get(aSlpId,aServerAddress1->Des(),aIapName1->Des(),aServerEnabled,aSimChangeRemove,aUsageInHomeNw,aEditable);
+aParamValues1->GetServerConfigurationType(aProductConfigured);
delete aParamValues;
delete aParamValues1;
@@ -4951,6 +4961,8 @@
}
+
+
// EPOC default constructor
void CObserverTest::ConstructL()
{
--- a/locsrv_pub/blid_application_satellite_info_api/tsrc/bc_blid_application_satellite_info_Api/group/BCBlidTest.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_pub/blid_application_satellite_info_api/tsrc/bc_blid_application_satellite_info_Api/group/BCBlidTest.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -17,7 +17,7 @@
#if defined(__S60_)
- // To get the OS_LAYER_SYSTEMINCLUDE-definition
+ // To get the MW_LAYER_SYSTEMINCLUDE-definition
#include <platform_paths.hrh>
#endif
@@ -26,31 +26,23 @@
UID 0x1000008D 0x101FB3E3
CAPABILITY ALL -TCB
-/* Remove comments and replace 0x00000000 with correct vendor id */
-// VENDORID 0x00000000
-/* Remove comments and replace 0x00000000 with correct secure id */
-// SECUREID 0x00000000
-//TARGETPATH ?target_path
DEFFILE BCBlidTest.def
SOURCEPATH ../src
SOURCE BCBlidTest.cpp
SOURCE BCBlidTestBlocks.cpp
-//RESOURCE resource_file
-//RESOURCE resource_file2
USERINCLUDE ../inc
#if defined(__S60_)
- OS_LAYER_SYSTEMINCLUDE
+ MW_LAYER_SYSTEMINCLUDE
#else
SYSTEMINCLUDE /epoc32/include
SYSTEMINCLUDE /epoc32/include/internal
#endif
-SYSTEMINCLUDE /epoc32/include
SYSTEMINCLUDE /epoc32/include/applications
@@ -64,26 +56,5 @@
LANG SC
-/*
-START WINS
-?wins_specific_information
-END
-
-START MARM
-?marm_specific_information
-END
-*/
-// Other possible keywords:
-
-// DOCUMENT ?file, that is not compiled, but added to MSVC project workspace (i.e. release notes)
-/*
-START BITMAP ?target
-TARGETPATH ?emulated_path_on_target_machine
-HEADER
-SOURCE ?color_depth ?source_bitmap
-END
-*/
-// DEFFILE ?filename
-// AIF ?filename
// End of File
--- a/locsrv_pub/landmarks_api/tsrc/bc_landmarks_api/src/testcposlandmarkdatabase.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_pub/landmarks_api/tsrc/bc_landmarks_api/src/testcposlandmarkdatabase.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -753,7 +753,9 @@
// Import landmarks to DB
CPosLmOperation* operation = lmkDatabase->ImportLandmarksL( *parser, CPosLandmarkDatabase::EDefaultOptions );
CleanupStack::PushL( operation );
- operation->ExecuteL();
+
+ TRAPD(error,operation->ExecuteL());
+
iLog->Log(_L("ImportLandmarks successful"));
CleanupStack::PopAndDestroy( 3, lmkDatabase );
ReleaseLandmarkResources();
@@ -788,7 +790,7 @@
indexArray.AppendL( 1 );
CPosLmOperation* operation = lmkDatabase->ImportLandmarksL( *parser, indexArray, CPosLandmarkDatabase::EDefaultOptions );
CleanupStack::PushL( operation );
- operation->ExecuteL();
+ TRAPD(error,operation->ExecuteL());
iLog->Log(_L("ImportSelectedLandmarks successful"));
CleanupStack::PopAndDestroy( 3, lmkDatabase );
ReleaseLandmarkResources();
@@ -818,7 +820,7 @@
// Import landmarks to DB
CPosLmOperation* operation = lmkDatabase->ImportLandmarksL( *parser, CPosLandmarkDatabase::EDefaultOptions );
CleanupStack::PushL( operation );
- operation->ExecuteL();
+ TRAPD(error,operation->ExecuteL());
// Get iterator for imported landmarks
CPosLmItemIterator* iterator = lmkDatabase->ImportedLandmarksIteratorL( operation );
CleanupStack::PushL( iterator );
--- a/locsrv_pub/landmarks_api/tsrc/group/testlandmarksapi.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/locsrv_pub/landmarks_api/tsrc/group/testlandmarksapi.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -65,6 +65,10 @@
//RESOURCE resource_file
//RESOURCE resource_file2
+SYSTEMINCLUDE /epoc32/include/platform
+SYSTEMINCLUDE /epoc32/include/mw
+
+
USERINCLUDE ../inc
MW_LAYER_SYSTEMINCLUDE
--- a/supl/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -23,4 +23,5 @@
#include "../locationomasuplprotocolhandler/group/bld.inf"
//#include "../locationomasuplpostester/group/bld.inf"
#include "../supltiapiimplementation/group/bld.inf"
+//#include "../locationsupllocinfoconverter/group/bld.inf"
// End of File
Binary file supl/locationomasuplprotocolhandler/conf/suplsettings_productconfig.confml has changed
--- a/supl/locationomasuplprotocolhandler/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -19,7 +19,7 @@
#include <platform_paths.hrh>
PRJ_PLATFORMS
-WINSCW ARMV5
+WINSCW ARMV5 GCCE
PRJ_EXPORTS
../rom/omasuplprotocolhandler.iby CORE_MW_LAYER_IBY_EXPORT_PATH(omasuplprotocolhandler.iby)
--- a/supl/locationomasuplprotocolhandler/protocolhandler/bwins/eposomasuplprotocolhandleru.def Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/bwins/eposomasuplprotocolhandleru.def Thu Jul 22 16:37:56 2010 +0100
@@ -15,24 +15,26 @@
??1COMASuplSettings@@UAE@XZ @ 14 NONAME ; COMASuplSettings::~COMASuplSettings(void)
?IsHslpNull@COMASuplSettings@@QAEHXZ @ 15 NONAME ; int COMASuplSettings::IsHslpNull(void)
?NotifyTriggerFiredL@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@AAVTRequestStatus@@AAVTSuplTriggerFireInfo@@@Z @ 16 NONAME ; void COMASUPLProtocolManager::NotifyTriggerFiredL(class CSuplSessionBase *, class TRequestStatus &, class TSuplTriggerFireInfo &)
- ?IAPId@COMASuplSettings@@QBEHXZ @ 17 NONAME ; int COMASuplSettings::IAPId(void) const
- ?DeInitialize@COMASUPLProtocolManager@@UAEXAAVTRequestStatus@@@Z @ 18 NONAME ; void COMASUPLProtocolManager::DeInitialize(class TRequestStatus &)
- ?RunSuplTriggerSessionL@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@AAVTRequestStatus@@AAVTSuplTerminalPeriodicTrigger@@ABVTDesC16@@HHH@Z @ 19 NONAME ; void COMASUPLProtocolManager::RunSuplTriggerSessionL(class CSuplSessionBase *, class TRequestStatus &, class TSuplTerminalPeriodicTrigger &, class TDesC16 const &, int, int, int)
- ?ConvertIAPNameToIdL@COMASuplSettings@@QAEHABVTDesC16@@AAK@Z @ 20 NONAME ; int COMASuplSettings::ConvertIAPNameToIdL(class TDesC16 const &, unsigned long &)
- ?CreateNewSessionL@COMASUPLProtocolManager@@UAEPAVCSuplSessionBase@@W4TSuplReqType@CSUPLProtocolManagerBase@@HW4TSuplServiceType@RSuplTerminalSubSession@@@Z @ 21 NONAME ; class CSuplSessionBase * COMASUPLProtocolManager::CreateNewSessionL(enum CSUPLProtocolManagerBase::TSuplReqType, int, enum RSuplTerminalSubSession::TSuplServiceType)
- ?SetIAPId@COMASuplSettings@@QAEXH@Z @ 22 NONAME ; void COMASuplSettings::SetIAPId(int)
- ?ReadOMASuplSettingsL@COMASuplCommonConfig@@QAEXXZ @ 23 NONAME ; void COMASuplCommonConfig::ReadOMASuplSettingsL(void)
- ?CancelRunSession@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@@Z @ 24 NONAME ; void COMASUPLProtocolManager::CancelRunSession(class CSuplSessionBase *)
- ??1COMASUPLProtocolManager@@UAE@XZ @ 25 NONAME ; COMASUPLProtocolManager::~COMASUPLProtocolManager(void)
- ?HandleSuplMessageL@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@AAVTRequestStatus@@PAVHBufC8@@@Z @ 26 NONAME ; void COMASUPLProtocolManager::HandleSuplMessageL(class CSuplSessionBase *, class TRequestStatus &, class HBufC8 *)
- ?GetSUPLMessageVersionL@COMASUPLProtocolManager@@UAEHAAHABVTDesC8@@@Z @ 27 NONAME ; int COMASUPLProtocolManager::GetSUPLMessageVersionL(int &, class TDesC8 const &)
- ?ConstructL@COMASuplSettings@@AAEXXZ @ 28 NONAME ; void COMASuplSettings::ConstructL(void)
- ?NewL@COMASUPLProtocolManager@@SAPAV1@XZ @ 29 NONAME ; class COMASUPLProtocolManager * COMASUPLProtocolManager::NewL(void)
- ?HandlePacket@COMASUPLProtocolManager@@UAEXABVTDesC8@@I@Z @ 30 NONAME ; void COMASUPLProtocolManager::HandlePacket(class TDesC8 const &, unsigned int)
- ?CancelSuplTriggerSession@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@@Z @ 31 NONAME ; void COMASUPLProtocolManager::CancelSuplTriggerSession(class CSuplSessionBase *)
- ?InitializeL@COMASUPLProtocolManager@@UAEXPAVCSuplCommunicationManager@@AAVTRequestStatus@@@Z @ 32 NONAME ; void COMASUPLProtocolManager::InitializeL(class CSuplCommunicationManager *, class TRequestStatus &)
- ?NewL@COMASuplCommonConfig@@SAPAV1@XZ @ 33 NONAME ; class COMASuplCommonConfig * COMASuplCommonConfig::NewL(void)
- ?SLPAddress@COMASuplSettings@@QBEABVTDesC8@@XZ @ 34 NONAME ; class TDesC8 const & COMASuplSettings::SLPAddress(void) const
- ?HandlePacketError@COMASUPLProtocolManager@@UAEXH@Z @ 35 NONAME ; void COMASUPLProtocolManager::HandlePacketError(int)
- ?NewL@COMASuplSettings@@SAPAV1@XZ @ 36 NONAME ; class COMASuplSettings * COMASuplSettings::NewL(void)
+ ?MakeLocationConversionRequestL@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@AAVTGeoCellInfo@@AAVTRequestStatus@@@Z @ 17 NONAME ; void COMASUPLProtocolManager::MakeLocationConversionRequestL(class CSuplSessionBase *, class TGeoCellInfo &, class TRequestStatus &)
+ ?IAPId@COMASuplSettings@@QBEHXZ @ 18 NONAME ; int COMASuplSettings::IAPId(void) const
+ ?CancelLocationConversionRequest@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@@Z @ 19 NONAME ; void COMASUPLProtocolManager::CancelLocationConversionRequest(class CSuplSessionBase *)
+ ?DeInitialize@COMASUPLProtocolManager@@UAEXAAVTRequestStatus@@@Z @ 20 NONAME ; void COMASUPLProtocolManager::DeInitialize(class TRequestStatus &)
+ ?RunSuplTriggerSessionL@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@AAVTRequestStatus@@AAVTSuplTerminalPeriodicTrigger@@ABVTDesC16@@HHH@Z @ 21 NONAME ; void COMASUPLProtocolManager::RunSuplTriggerSessionL(class CSuplSessionBase *, class TRequestStatus &, class TSuplTerminalPeriodicTrigger &, class TDesC16 const &, int, int, int)
+ ?ConvertIAPNameToIdL@COMASuplSettings@@QAEHABVTDesC16@@AAK@Z @ 22 NONAME ; int COMASuplSettings::ConvertIAPNameToIdL(class TDesC16 const &, unsigned long &)
+ ?CreateNewSessionL@COMASUPLProtocolManager@@UAEPAVCSuplSessionBase@@W4TSuplReqType@CSUPLProtocolManagerBase@@HW4TSuplServiceType@RSuplTerminalSubSession@@@Z @ 23 NONAME ; class CSuplSessionBase * COMASUPLProtocolManager::CreateNewSessionL(enum CSUPLProtocolManagerBase::TSuplReqType, int, enum RSuplTerminalSubSession::TSuplServiceType)
+ ?SetIAPId@COMASuplSettings@@QAEXH@Z @ 24 NONAME ; void COMASuplSettings::SetIAPId(int)
+ ?ReadOMASuplSettingsL@COMASuplCommonConfig@@QAEXXZ @ 25 NONAME ; void COMASuplCommonConfig::ReadOMASuplSettingsL(void)
+ ?CancelRunSession@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@@Z @ 26 NONAME ; void COMASUPLProtocolManager::CancelRunSession(class CSuplSessionBase *)
+ ??1COMASUPLProtocolManager@@UAE@XZ @ 27 NONAME ; COMASUPLProtocolManager::~COMASUPLProtocolManager(void)
+ ?HandleSuplMessageL@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@AAVTRequestStatus@@PAVHBufC8@@@Z @ 28 NONAME ; void COMASUPLProtocolManager::HandleSuplMessageL(class CSuplSessionBase *, class TRequestStatus &, class HBufC8 *)
+ ?GetSUPLMessageVersionL@COMASUPLProtocolManager@@UAEHAAHABVTDesC8@@@Z @ 29 NONAME ; int COMASUPLProtocolManager::GetSUPLMessageVersionL(int &, class TDesC8 const &)
+ ?ConstructL@COMASuplSettings@@AAEXXZ @ 30 NONAME ; void COMASuplSettings::ConstructL(void)
+ ?NewL@COMASUPLProtocolManager@@SAPAV1@XZ @ 31 NONAME ; class COMASUPLProtocolManager * COMASUPLProtocolManager::NewL(void)
+ ?HandlePacket@COMASUPLProtocolManager@@UAEXABVTDesC8@@I@Z @ 32 NONAME ; void COMASUPLProtocolManager::HandlePacket(class TDesC8 const &, unsigned int)
+ ?CancelSuplTriggerSession@COMASUPLProtocolManager@@UAEXPAVCSuplSessionBase@@@Z @ 33 NONAME ; void COMASUPLProtocolManager::CancelSuplTriggerSession(class CSuplSessionBase *)
+ ?InitializeL@COMASUPLProtocolManager@@UAEXPAVCSuplCommunicationManager@@AAVTRequestStatus@@@Z @ 34 NONAME ; void COMASUPLProtocolManager::InitializeL(class CSuplCommunicationManager *, class TRequestStatus &)
+ ?NewL@COMASuplCommonConfig@@SAPAV1@XZ @ 35 NONAME ; class COMASuplCommonConfig * COMASuplCommonConfig::NewL(void)
+ ?SLPAddress@COMASuplSettings@@QBEABVTDesC8@@XZ @ 36 NONAME ; class TDesC8 const & COMASuplSettings::SLPAddress(void) const
+ ?HandlePacketError@COMASUPLProtocolManager@@UAEXH@Z @ 37 NONAME ; void COMASUPLProtocolManager::HandlePacketError(int)
+ ?NewL@COMASuplSettings@@SAPAV1@XZ @ 38 NONAME ; class COMASuplSettings * COMASuplSettings::NewL(void)
--- a/supl/locationomasuplprotocolhandler/protocolhandler/eabi/eposomasuplprotocolhandleru.def Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/eabi/eposomasuplprotocolhandleru.def Thu Jul 22 16:37:56 2010 +0100
@@ -25,28 +25,30 @@
_ZN23COMASUPLProtocolManager22GetSUPLMessageVersionLERiRK6TDesC8 @ 24 NONAME
_ZN23COMASUPLProtocolManager22RunSuplTriggerSessionLEP16CSuplSessionBaseR14TRequestStatusR28TSuplTerminalPeriodicTriggerRK7TDesC16iii @ 25 NONAME
_ZN23COMASUPLProtocolManager24CancelSuplTriggerSessionEP16CSuplSessionBase @ 26 NONAME
- _ZN23COMASUPLProtocolManager4NewLEv @ 27 NONAME
- _ZN23COMASUPLProtocolManagerC1Ev @ 28 NONAME
- _ZN23COMASUPLProtocolManagerC2Ev @ 29 NONAME
- _ZN23COMASUPLProtocolManagerD0Ev @ 30 NONAME
- _ZN23COMASUPLProtocolManagerD1Ev @ 31 NONAME
- _ZN23COMASUPLProtocolManagerD2Ev @ 32 NONAME
- _ZNK16COMASuplSettings10IsUIActiveEv @ 33 NONAME
- _ZNK16COMASuplSettings10SLPAddressEv @ 34 NONAME
- _ZNK16COMASuplSettings18SLPAddressfromImsiEv @ 35 NONAME
- _ZNK16COMASuplSettings5IAPIdEv @ 36 NONAME
- _ZTI13COMASuplTrace @ 37 NONAME
- _ZTI16COMASuplSettings @ 38 NONAME
- _ZTI20COMASuplCommonConfig @ 39 NONAME
- _ZTI20COMASuplDeInitilizer @ 40 NONAME
- _ZTI23COMASUPLProtocolManager @ 41 NONAME
- _ZTI26COMASuplInitilizeRequestor @ 42 NONAME
- _ZTV13COMASuplTrace @ 43 NONAME
- _ZTV16COMASuplSettings @ 44 NONAME
- _ZTV20COMASuplCommonConfig @ 45 NONAME
- _ZTV20COMASuplDeInitilizer @ 46 NONAME
- _ZTV23COMASUPLProtocolManager @ 47 NONAME
- _ZTV26COMASuplInitilizeRequestor @ 48 NONAME
- _ZThn4_N23COMASUPLProtocolManager12HandlePacketERK6TDesC8j @ 49 NONAME
- _ZThn4_N23COMASUPLProtocolManager17HandlePacketErrorEi @ 50 NONAME
+ _ZN23COMASUPLProtocolManager30MakeLocationConversionRequestLEP16CSuplSessionBaseR12TGeoCellInfoR14TRequestStatus @ 27 NONAME
+ _ZN23COMASUPLProtocolManager31CancelLocationConversionRequestEP16CSuplSessionBase @ 28 NONAME
+ _ZN23COMASUPLProtocolManager4NewLEv @ 29 NONAME
+ _ZN23COMASUPLProtocolManagerC1Ev @ 30 NONAME
+ _ZN23COMASUPLProtocolManagerC2Ev @ 31 NONAME
+ _ZN23COMASUPLProtocolManagerD0Ev @ 32 NONAME
+ _ZN23COMASUPLProtocolManagerD1Ev @ 33 NONAME
+ _ZN23COMASUPLProtocolManagerD2Ev @ 34 NONAME
+ _ZNK16COMASuplSettings10IsUIActiveEv @ 35 NONAME
+ _ZNK16COMASuplSettings10SLPAddressEv @ 36 NONAME
+ _ZNK16COMASuplSettings18SLPAddressfromImsiEv @ 37 NONAME
+ _ZNK16COMASuplSettings5IAPIdEv @ 38 NONAME
+ _ZTI13COMASuplTrace @ 39 NONAME
+ _ZTI16COMASuplSettings @ 40 NONAME
+ _ZTI20COMASuplCommonConfig @ 41 NONAME
+ _ZTI20COMASuplDeInitilizer @ 42 NONAME
+ _ZTI23COMASUPLProtocolManager @ 43 NONAME
+ _ZTI26COMASuplInitilizeRequestor @ 44 NONAME
+ _ZTV13COMASuplTrace @ 45 NONAME
+ _ZTV16COMASuplSettings @ 46 NONAME
+ _ZTV20COMASuplCommonConfig @ 47 NONAME
+ _ZTV20COMASuplDeInitilizer @ 48 NONAME
+ _ZTV23COMASUPLProtocolManager @ 49 NONAME
+ _ZTV26COMASuplInitilizeRequestor @ 50 NONAME
+ _ZThn4_N23COMASUPLProtocolManager12HandlePacketERK6TDesC8j @ 51 NONAME
+ _ZThn4_N23COMASUPLProtocolManager17HandlePacketErrorEi @ 52 NONAME
--- a/supl/locationomasuplprotocolhandler/protocolhandler/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -18,7 +18,7 @@
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
PRJ_EXPORTS
../inc/epos_comasuplprotocolmanager.h |../../inc/epos_comasuplprotocolmanager.h
--- a/supl/locationomasuplprotocolhandler/protocolhandler/inc/epos_comasuplprotocolmanager.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/inc/epos_comasuplprotocolmanager.h Thu Jul 22 16:37:56 2010 +0100
@@ -253,6 +253,11 @@
*
*/
IMPORT_C virtual TInt GetSUPLMessageVersionL(TInt& aMajorVersion, const TDesC8& aReceivedMessage);
+ IMPORT_C void CancelLocationConversionRequest(CSuplSessionBase* aSuplSession);
+
+ IMPORT_C void MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo,
+ TRequestStatus& aStatus );
protected: // Construction
/**
--- a/supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplinitilizerequestor.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplinitilizerequestor.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -223,7 +223,7 @@
SetActive();
break;
}
- iObserver.InitilizationCompletedL( iStatus.Int() );
+ iObserver.InitilizationCompletedL( iStatus.Int() );
}
}
--- a/supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplprotocolmanager.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandler/src/epos_comasuplprotocolmanager.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -526,6 +526,10 @@
{
iOMASuplProtocolHandler1->HandleSuplMessageL(aSuplSession,aStatus,aMessage);
}
+ else if (iOMASuplProtocolHandler2)
+ {
+ iOMASuplProtocolHandler2->HandleSuplMessageL(aSuplSession,aStatus,aMessage);
+ }
}
else if( major == 2 )
{
@@ -534,6 +538,10 @@
{
iOMASuplProtocolHandler2->HandleSuplMessageL(aSuplSession,aStatus,aMessage);
}
+ else if (iOMASuplProtocolHandler1)
+ {
+ iOMASuplProtocolHandler1->HandleSuplMessageL(aSuplSession,aStatus,aMessage);
+ }
}
else
{
@@ -795,7 +803,24 @@
{
return GetSuplVersion(aMajorVersion,aReceivedMessage);
}
-
+EXPORT_C void COMASUPLProtocolManager::MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,TGeoCellInfo& aCellInfo,TRequestStatus& aStatus )
+ {
+ iTrace->Trace(_L("COMASUPLProtocolManager::MakeLocationConversionRequestL"), KTraceFileName, __LINE__);
+ if(iOMASuplProtocolHandler1)
+ {
+ iTrace->Trace(_L("COMASUPLProtocolManager::MakeLocationConversionRequestL if condition true"), KTraceFileName, __LINE__);
+ COMASUPLProtocolManager* ph1= (COMASUPLProtocolManager*) (iOMASuplProtocolHandler1);
+ ph1->MakeLocationConversionRequestL(aSuplSessn,aCellInfo,aStatus);
+ };
+ }
+EXPORT_C void COMASUPLProtocolManager::CancelLocationConversionRequest(CSuplSessionBase* aSuplSession)
+ {
+ if(iOMASuplProtocolHandler1)
+ {
+ COMASUPLProtocolManager* ph1= (COMASUPLProtocolManager*) (iOMASuplProtocolHandler1);
+ ph1->CancelLocationConversionRequest(aSuplSession);
+ };
+ }
// -----------------------------------------------------------------------------
// COMASUPLProtocolManager::DeInitilizationCompletedL
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/group/omasuplprotocolhandler1.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/group/omasuplprotocolhandler1.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -90,7 +90,7 @@
LIBRARY efsrv.lib
LIBRARY aknnotify.lib
LIBRARY commonengine.lib
-LIBRARY agentdialog.lib
+//LIBRARY agentdialog.lib
LIBRARY epossuplprotocolhandlerplugin.lib
LIBRARY epos_comasuplasnplugin.lib
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplconnrequestor.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplconnrequestor.h Thu Jul 22 16:37:56 2010 +0100
@@ -33,6 +33,7 @@
class COMASuplFallBackHandler;
class COMASUPLProtocolManager1;
class COMASuplDialogTimer;
+class CRepository;
/**
* Class for doing asynchronous service i.e. used for Sending Packet to Socket.
*
@@ -92,6 +93,18 @@
*/
void CreateConnectionL(TInt aDialogTimeOutDelay);
+
+ /**
+ * CreateConnection Method Overload. Creates the Socket required to
+ * communicate with the SLP. Called in case of NI case.
+ * @since
+ * @param aPrompt used to show connection dialog using OCC Api's.
+ * @param aWlanOnly used to connect server using wlan only.
+ * @return None
+ * Added CreateConnectionL with aPrompt and aWLANOnly for OCC.
+ */
+ void CreateConnectionL(TBool aPrompt,TBool aWlanOnly);
+
/**
* SendPacket Method.
* @since Series 60 3.1
@@ -271,6 +284,8 @@
//SUPLSettings
CSuplSettingsInternal *iSuplSettings;
+ CRepository* iRepository;
+
//Trace Utility
COMASuplTrace* iTrace;
TBool iIsHSLPGenerated;
@@ -283,6 +298,11 @@
TBool iIsSettingInitilized;
TInt64 iCurrentSLPId;
+ TBool iPrompt;
+
+ TBool iWlanOnly;
+
+ TBool iIsStaleLocIdPresent;
};
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplprotocolmanager1.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplprotocolmanager1.h Thu Jul 22 16:37:56 2010 +0100
@@ -510,6 +510,28 @@
public: // COMASUPLProtocolManager
void SetCommonConfig(COMASuplCommonConfig*& aCommmonConfig);
+public:
+ /*
+ * Method used to make conversion request for retrieving position of a location id.
+ *
+ * @since S60 v5.2
+ * @param aSuplSessn session object on which processing will start
+ * @param aCellInfo contains cell id information and cell id type
+ * @param aStatus On return, the status of the request
+ *
+ */
+ void MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo,
+ TRequestStatus& aStatus );
+ /*
+ * Method used to make cancel a conversion request for retrieving position of a location id.
+ *
+ * @since S60 v5.2
+ * @param aSuplSessn session object which is to be cancelled
+ *
+ */
+ void CancelLocationConversionRequest(CSuplSessionBase* aSuplSession);
+
public : // from MSuplSettingsObserver
virtual void HandleSuplTriggerStatusChangeL(
CSuplSettings::TSuplTriggerStatus aSuplTriggerStatus );
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplsession.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplsession.h Thu Jul 22 16:37:56 2010 +0100
@@ -257,10 +257,14 @@
* @param aAllowedCapabilities, Capabilities of SET
* @param aSessionIdSeed, seed value of session
* @param aRequestID, Request Identification number.
+ * @param aIsStaleCellId, indicates if this session is for a stale cell id conversion
+ * @param aLocationId , contains cell id parameters for which position is to be retrieved
+ * @param aPrompt indicates if the user is to be prompted when making location requests
+ * @param aWlanOnly ,request to connect server using wlan connection only using OCC Api's
* @return None
*/
virtual void RunSuplSessionL(TRequestStatus& aStatus, TBool aFirstReq, const TDesC& aHslpAddress, TBool aFallBack, TInt aAllowedCapabilities,
- TInt aSessionIdSeed, TInt aRequestID = 0);
+ TInt aSessionIdSeed, TInt aRequestID = 0,TBool aIsStaleCellId = EFalse,COMASuplLocationId* aLocationId = NULL,TBool aPrompt = EFalse,TBool aWlanOnly = EFalse);
/**
* RunSessionL, Starts the SUPL Sesssion for Terminal Initiated Location Request
@@ -1142,8 +1146,18 @@
COMASuplAsnHandlerBase* iOMASuplAsnHandlerBaseImpl;
CPosNetworkPrivacy* iNetworkPrivacy;
+ //Stale cell id which for which position is to be retrieved
+ COMASuplLocationId* iStaleLocationId;
+ //indicates if this session is for a stale cell id conversion
+ TBool iIsStaleLocIdPresent;
+ //indicates if the user needs to be prompted when making a location request
+ TBool iStaleLocIdPrompt;
+ TBool iIhaveLaunchedUsagedialog;
TUint iPortNum;
+
+ //To indicate WLAN connection for OCC
+ TBool iWlanOnly;
};
#endif // C_COMASUPLSESSION_H
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplsettingslauncher.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplsettingslauncher.h Thu Jul 22 16:37:56 2010 +0100
@@ -22,7 +22,7 @@
// INCLUDES
#include <e32std.h>
-#include <agentdialog.h> // for RGenConAgentDialogServer
+//#include <agentdialog.h> // for RGenConAgentDialogServer
const TUid KNotifier1Uid = { 0x10009C00 };
const TUid KNotifier2Uid = { 0x10009C01 };
@@ -155,7 +155,7 @@
/**
* IAP Selector Handle
*/
- RGenConAgentDialogServer iIapSelector;
+ // RGenConAgentDialogServer iIapSelector;
/**
* Selected IAP ID
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplstartstate.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/inc/epos_comasuplstartstate.h Thu Jul 22 16:37:56 2010 +0100
@@ -108,6 +108,16 @@
* @return None
*/
void SetQop(TSuplTerminalQop& aQop);
+
+ /*
+ * SetStaleCellIdToUse Method is used to set the Stale Cell id to use in case of
+ * retrieving position for an already retrieved cell id.
+ * For example : in case of Geo Tagged Images
+ * @since S60 v5.2
+ * @param aLocationId This is the locatiod id parameter containing the stale cell id
+ * @return None
+ */
+ void SetStaleCellIdToUse(COMASuplLocationId* aLocationId);
public: //MOMASuplETelObserver
@@ -284,6 +294,9 @@
TOMASuplECellInfo iMmCellInfo;
COMASuplAsnHandlerBase* iOMASuplAsnHandlerBase;
+
+ //Indicates whether we need to create start message with Stale Cell Id
+ TBool iIsStaleCellId;
};
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplconnrequestor.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplconnrequestor.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -16,6 +16,7 @@
*/
+#include <centralrepository.h>
#include "epos_comasuplprotocolmanager1.h"
#include "epos_csuplcommunicationmanager.h"
@@ -26,6 +27,8 @@
#include "epos_momasuplconnobserver.h"
#include "epos_comasupltrace.h"
#include "epos_comasuplfallbackhandler.h"
+#include "epos_csuplsettingsinternalcrkeys.h"
+
#include "epos_comasupldialogtimer.h"
_LIT(KTraceFileName,"SUPL_OMA_SESSION::epos_comasuplconnrequestor.cpp");
@@ -47,7 +50,7 @@
iCommMgr(aCommMgr),
iProtocolManager(aProtoMgr),
iPort(aPort),
- iObserver( aObserver)
+ iObserver( aObserver),iPrompt(EFalse),iWlanOnly(EFalse),iIsStaleLocIdPresent(EFalse)
{
}
@@ -69,7 +72,7 @@
iHslpAddrFromImsiUsed = EFalse;
iFallBackHandler = COMASuplFallBackHandler::NewL(*iSuplSettings);
-
+ iRepository = CRepository::NewL(KCRUidSuplSettings);
iLastConnectionError = KErrNone;
iCurrentSLPId = KErrNotFound;
@@ -107,6 +110,8 @@
delete iSuplSettings;
delete iTrace;
delete iFallBackHandler;
+ delete iRepository;
+ iRepository = NULL;
}
// -----------------------------------------------------------------------------
@@ -115,7 +120,14 @@
//
void COMASuplConnRequestor::CreateConnectionL()
{
- TBuf<100> iapName;
+ if(!iIsSettingInitilized)
+ {
+ iState = EInitialState;
+ InitilizeSetting();
+ }
+ else
+ {
+ TBuf<100> iapName;
TBuf<128> buffer;
iState = EConnecting;
TBool isIapDialogShown = EFalse;
@@ -149,6 +161,41 @@
iHostAddress.Zero();
iObserver.OperationCompleteL(errorCode);
}
+ }
+ }
+
+
+ // -----------------------------------------------------------------------------
+// COMASuplConnRequestor::CreateConnection for OCC
+// -----------------------------------------------------------------------------
+//
+void COMASuplConnRequestor::CreateConnectionL(TBool aPrompt,TBool aWlanOnly)
+ {
+ TBuf<30> GeoTagServerName;
+ TBuf<128> buffer;
+ iState = EConnecting;
+
+ iPrompt = aPrompt;
+ iWlanOnly = aWlanOnly;
+ iIsStaleLocIdPresent = ETrue;
+ //iIsTimeoutDialogTimerStarted = EFalse;
+ //iDialogTimer->Cancel();
+
+ TInt err;
+ err = iRepository->Get(KSuplGeoInfoConvServerName, GeoTagServerName);
+ User::LeaveIfError(err);
+ buffer.Copy(_L("Connecting to"));
+ buffer.Append(GeoTagServerName);
+ iTrace->Trace(buffer,KTraceFileName, __LINE__);
+ iTls = ETrue;
+ iPskTls = EFalse;
+ iIAPId = 0;
+
+
+ iConnection = iCommMgr.CreateConnectionL(GeoTagServerName,iTls,iPskTls,iPort,iIAPId);
+
+ OpenConnection();
+
}
// -----------------------------------------------------------------------------
@@ -200,12 +247,22 @@
if(iConnection)
{
iState = EConnecting;
- iConnection->Connect(iStatus);
- SetActive();
+ if(iIsStaleLocIdPresent)
+ {
+ iTrace->Trace(_L("OpenConnection OCC"),KTraceFileName, __LINE__);
+ iConnection->Connect(iStatus,iPrompt,iWlanOnly);
+ }
+ else
+ {
+ iConnection->Connect(iStatus);
+ }
+ SetActive();
+
}
}
else
{
+ iState = EInitilizeSetting;
InitilizeSetting();
}
}
@@ -253,6 +310,15 @@
switch(iState)
{
+
+ case EInitialState:
+ {
+ iIsSettingInitilized = ETrue;
+ iTrace->Trace(_L("Setting API Initilizing Completed..."), KTraceFileName, __LINE__);
+ CreateConnectionL();
+
+ break;
+ }
case EConnecting:
{
@@ -260,7 +326,17 @@
{
iHostAddress.Zero();
CloseConnection();
- CreateConnectionL();
+ if(iIsStaleLocIdPresent)
+ {
+ iTrace->Trace(_L("Request completed with error..."), KTraceFileName, __LINE__);
+ iObserver.OperationCompleteL(iLastConnectionError);
+ }
+ else
+ {
+ iTrace->Trace(_L("Setting API Initilizing Completed..."), KTraceFileName, __LINE__);
+ CreateConnectionL();
+ }
+
}
else
{
@@ -355,7 +431,7 @@
void COMASuplConnRequestor::InitilizeSetting()
{
iTrace->Trace(_L("Intilizing Setting API..."), KTraceFileName, __LINE__);
- iState = EInitilizeSetting;
+
iSuplSettings->Initialize(iStatus);
SetActive();
}
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplfallbackhandler.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -136,6 +136,47 @@
aTls = ETrue;
aPskTls = EFalse;
aIsIapDialogShown = ETrue;
+
+ CServerParams* param = CServerParams::NewL();
+ CleanupStack::PushL(param);
+
+ //Find out if this alternative generated SUPL server is in the SUPL Settings list
+ TInt err = iSuplSettings.GetSlpInfoAddress(iGenratedHslpAddress, param);
+ if(err == KErrNotFound)
+ {
+ //Server does not exist
+ iTrace->Trace(_L("Server does not exist in list so adding it in."),KTraceFileName, __LINE__);
+ CServerParams* newParam=CServerParams::NewL();
+ CleanupStack::PushL(newParam);
+ User::LeaveIfError(newParam->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse ));
+
+ err = iSuplSettings.AddNewServer( newParam, aSLPId ); //Ignore error
+ LogBuffer.Copy(_L("AddNewServer() completed with err: "));
+ LogBuffer.AppendNum(err);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ CleanupStack::PopAndDestroy(&newParam);
+ }
+ else
+ {
+ //Server exists, get the SLP ID and the IAP Access point for this server
+ HBufC* hslpAddress = HBufC::NewL(KHSLPAddressLength);
+ HBufC* iapName = HBufC::NewL(KMaxIapNameLength);
+ TBool serverEnabled;
+ TBool simChangeRemove;
+ TBool usageInHomeNw;
+ TBool editable;
+
+ iTrace->Trace(_L("Server already exists, getting the SLP ID and Access Point."),KTraceFileName, __LINE__);
+
+ param->Get(aSLPId,hslpAddress->Des(),iapName->Des(),serverEnabled,simChangeRemove,usageInHomeNw,editable);
+ aIAPName.Copy(iapName->Des());
+
+ delete hslpAddress;
+ delete iapName;
+ }
+
+ CleanupStack::PopAndDestroy(¶m);
iTrace->Trace(_L("Fallback allowed & TLSAuth failed"),KTraceFileName, __LINE__);
iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
@@ -163,8 +204,8 @@
{
return KErrNotFound;
}
- }
-
+ }
+
//Check to see if the server list is empty. If it is create the HSLP Address from the IMSI and use that
// as the server address. This does not add the server to the list and this functionality should only
// be tried once
@@ -192,10 +233,22 @@
iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__);
LogBuffer.Copy(aIAPName);
iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ //Add the server to the list for future connections
+ CServerParams* param=CServerParams::NewL();
+ CleanupStack::PushL(param);
+ User::LeaveIfError(param->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse ));
+
+ TInt err = iSuplSettings.AddNewServer( param, aSLPId ); //Ignore error
+ LogBuffer.Copy(_L("AddNewServer() completed with err: "));
+ LogBuffer.AppendNum(err);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ CleanupStack::PopAndDestroy(¶m);
return KErrNone;
}
-
+
if( iSLPList->Count() <= 0 || iCurrentServerCounter >= iSLPList->Count() )
{
LogBuffer.Copy(_L("No more servers available..."));
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplinitstate.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplinitstate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -304,15 +304,16 @@
if(!clientError)
{
// Set name of Client
-
+ iTrace->Trace(_L("clientError = 0"), KTraceFileName, __LINE__);
if(client)
{
+ iTrace->Trace(_L("calling suplReqInfo->SetLCSClientL"), KTraceFileName, __LINE__);
suplReqInfo->SetLCSClientL(*client,iIdType);
}
delete client;
}
-
+ iTrace->Trace(_L("Line 315 successfully called"), KTraceFileName, __LINE__);
if(!reqError || !clientError)
{
// Verify the request information using Network Privacy
@@ -321,9 +322,19 @@
// what decision the GSM Network will make if the user won't answer before
// a timeout comes in from GSM Network. In this case verification will
// be rejected.
- iNetworkPrivacy->VerifyLocationRequestL(*suplReqInfo,
- iGSMRequestId, *this, aTimeOutStrategy);
- TBuf<64> msg;
+ iTrace->Trace(_L("Calling iNetworkPrivacy->VerifyLocationRequestL"), KTraceFileName, __LINE__);
+ TInt err = KErrNone;
+
+ TRAP(err, iNetworkPrivacy->VerifyLocationRequestL(*suplReqInfo,
+ iGSMRequestId, *this, aTimeOutStrategy);)
+
+ TBuf<64> msg;
+ msg.AppendNum(err);
+ iTrace->Trace(_L("Trap value: "), KTraceFileName, __LINE__);
+ iTrace->Trace(msg, KTraceFileName, __LINE__);
+ iTrace->Trace(_L("iNetworkPrivacy->VerifyLocationRequestL called "), KTraceFileName, __LINE__);
+
+
msg.Copy(_L("1.0 Privacy Fw Generated Verification Request id:"));
msg.AppendNum(iGSMRequestId);
iTrace->Trace(msg, KTraceFileName, __LINE__);
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplposinitstate.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplposinitstate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -443,7 +443,7 @@
}
// Get the information from POS
if(iPosRequestor)
- User::LeaveIfError(iPosRequestor->GetSuplInfoL());
+ User::LeaveIfError(iPosRequestor->GetSuplInfoL());
}
// -----------------------------------------------------------------------------
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplprotocolmanager1.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplprotocolmanager1.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -46,6 +46,9 @@
#include "epos_comasupltimeouttimer.h"
#include "epos_omasuplconstants.h"
#include "epos_comasuplcommonconfig.h"
+#include "epos_suplgeocellinfo.h"
+
+#include "epos_comasupllocationid.h"
_LIT(KTraceFileName,"SUPL_OMA_PH::EPos_COMASUPLProtocolManager1.cpp");
@@ -106,13 +109,21 @@
{
iSettingsLauncher->CancelLaunch();
}*/
- iSuplSettings->SetUIActive( EFalse );
+
+ if(iSuplSettings)
+ {
+ iSuplSettings->SetUIActive( EFalse );
+ }
DeleteAllSessions();
iSuplSessions.Reset();
iSuplSessions.Close();
- iTelServer.UnloadPhoneModule(iTsyName);
+ //Only attempt to unload the phone if the TSY has actually been initialised
+ if(iTsyName.Length() > 0)
+ {
+ iTelServer.UnloadPhoneModule(iTsyName);
+ }
iQueuedPacket.Close();
@@ -2065,9 +2076,102 @@
iSuplInitTimeOut = aCommmonConfig->iSuplInitTimeOut;
iPersistFailTimer = aCommmonConfig->iPersistFailTimer;
}
-void COMASUPLProtocolManager1::HandleSuplTriggerStatusChangeL(
- CSuplSettings::TSuplTriggerStatus /*aSuplTriggerStatus*/ )
+void COMASUPLProtocolManager1::HandleSuplTriggerStatusChangeL(CSuplSettings::TSuplTriggerStatus /*aSuplTriggerStatus*/ )
+{
+
+}
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::MakeLocationConversionRequestL
+//
+// To make conversion request to retrieve position for a given cell id
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager1::MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo,
+ TRequestStatus& aStatus )
{
-
+ iTrace->Trace(_L("COMASUPLProtocolManager1::MakeLocationConversionRequestL"), KTraceFileName, __LINE__);
+ TBuf<64> tempBuf;
+
+ if ( iSuplSessions.Find(aSuplSessn) == KErrNotFound )
+ {
+ TRequestStatus *status = &aStatus;
+ User::RequestComplete(status,KErrNotFound );
+ return;
+ }
+
+ CheckForSessionCount();
+ iRunningSessionCount++;
+
+ COMASuplLocationId* locationId = COMASuplLocationId::NewL();
+ CleanupStack::PushL(locationId);
+ COMASuplLocationId::TOMASuplStatus status = COMASuplLocationId::EStale;
+ switch(aCellInfo.iGeoCellType)
+ {
+ case EGeoGsmCell:
+ {
+ iTrace->Trace(_L("COMASUPLProtocolManager1::MakeLocationConversionRequestL - Setting GSM Cell Info"), KTraceFileName, __LINE__);
+ COMASuplGSMCellInfo* cellInfo = COMASuplGSMCellInfo::NewL();
+ cellInfo->SetSuplGSMCellInfo(aCellInfo.iMNC,aCellInfo.iMCC,aCellInfo.iCid,aCellInfo.iLac);
+ locationId->SetSuplLocationId(cellInfo,status);
+ }
+ break;
+ case EGeoWcdmaCell:
+ {
+ iTrace->Trace(_L("COMASUPLProtocolManager1::MakeLocationConversionRequestL - Setting WCDMA Cell Info"), KTraceFileName, __LINE__);
+ COMASuplCellInfo* cellInfo = COMASuplCellInfo::NewL();
+ cellInfo->SetSuplCellInfo(aCellInfo.iMNC,aCellInfo.iMCC,aCellInfo.iCid);
+ locationId->SetSuplLocationId(cellInfo,status);
+ }
+ break;
+ }
+ CleanupStack::Pop(locationId);
+ tempBuf.Copy(_L("MCC = "));
+ tempBuf.AppendNum(aCellInfo.iMCC);
+ iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
+ tempBuf.Copy(_L("MNC = "));
+ tempBuf.AppendNum(aCellInfo.iMNC);
+ iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
+ tempBuf.Copy(_L("LAC = "));
+ tempBuf.AppendNum(aCellInfo.iLac);
+ iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
+ tempBuf.Copy(_L("CId = "));
+ tempBuf.AppendNum(aCellInfo.iCid);
+ iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
+ tempBuf.Copy(_L("Prompt = "));
+ tempBuf.AppendNum(aCellInfo.iConnectionPrompt);
+ iTrace->Trace(tempBuf, KTraceFileName, __LINE__);
+
+ TInt allowedCapabilities = KECID|KCID;
+ TInt requestID = 1000;
+ COMASuplSession* OMASession = static_cast<COMASuplSession*>(aSuplSessn);
+ OMASession->SetConfigurationParameters(iUT1_StartTimer,iUT2_PosInitTimer, iUT3_PosTimer,iPrivacyTimer,iSETMode,
+ iSuplUsage, iPersistFailTimer,iSuplInitTimeOut);
+ OMASession->RunSuplSessionL(aStatus,ETrue, KNullDesC,EFalse, allowedCapabilities,iRunningSessionCount,requestID,ETrue,locationId,aCellInfo.iConnectionPrompt,aCellInfo.iWlanOnly);
+
+ }
+
+// -----------------------------------------------------------------------------
+// COMASUPLProtocolManager1::CancelLocationConversionRequest
+//
+// Cancel an ongoing conversion request
+// -----------------------------------------------------------------------------
+//
+void COMASUPLProtocolManager1::CancelLocationConversionRequest(CSuplSessionBase* aSuplSession)
+ {
+ // Log
+ iTrace->Trace(_L("COMASUPLProtocolManager1::CancelLocationConversionRequest"), KTraceFileName, __LINE__);
+
+ // Check if the Session is valid
+ TInt index = iSuplSessions.Find(aSuplSession);
+
+ if(KErrNotFound == index)
+ {
+ iTrace->Trace(_L("Cannot find Supl session."), KTraceFileName, __LINE__);
+ return;
+ }
+ aSuplSession->CancelRunSession();
+ return ;
}
// end of file
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplsession.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -128,7 +128,7 @@
iEtelRoamingCheck(EFalse),
iIapDialogShown(EFalse),
iIapDlgTimerExpired(EFalse),
- iOMASuplAsnHandlerBaseImpl(aOMASuplAsnHandlerBase)
+ iOMASuplAsnHandlerBaseImpl(aOMASuplAsnHandlerBase),iWlanOnly(EFalse)
{
}
@@ -435,7 +435,7 @@
//
void COMASuplSession::RunSuplSessionL(TRequestStatus& aStatus, TBool aFirstReq, const TDesC& aHslpAddress,
TBool aFallBack, TInt aAllowedCapabilities,
- TInt aSessionIdSeed,TInt aRequestID)
+ TInt aSessionIdSeed,TInt aRequestID,TBool aIsStaleCellId,COMASuplLocationId* aLocationId,TBool aPrompt,TBool aWlanOnly)
{
iSessionStartTime1.HomeTime();
@@ -448,7 +448,32 @@
iRequestID = aRequestID;
iTrace->Trace(_L("Start COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__);
-
+
+ if(aIsStaleCellId)
+ {
+ iTrace->Trace(_L("Start COMASuplSession::RunSuplSession for Stale Cell Id"), KTraceFileName, __LINE__);
+ iIsStaleLocIdPresent = ETrue;
+
+
+ if(iStaleLocationId)
+ {
+ delete iStaleLocationId;
+ iStaleLocationId = NULL;
+ }
+
+ iStaleLocationId = aLocationId;
+ iStaleLocIdPrompt = aPrompt;
+ iWlanOnly = aWlanOnly; //OCC
+
+ iTrace->Trace(_L("Deleting pos requestor as session is for Stale Cell Id"), KTraceFileName, __LINE__);
+ delete iOMASuplPOSRequestor;
+ iOMASuplPOSRequestor = NULL;
+
+ // Delete the POS Session
+ delete iPOSSession;
+ iPOSSession = NULL;
+
+ }
// Log Session Id
TBuf<64> id;
id.Append(_L("Session Id is "));
@@ -461,23 +486,27 @@
iTrace->Trace(id,KTraceFileName, __LINE__);
iSETSessionUniqueId = aSessionIdSeed;
-
+
+ iIhaveLaunchedUsagedialog = EFalse;
TInt networkMode = 1;
networkMode = GetNetworkModeL();
- if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed )
- {
- id.Copy(_L("The device is in OFFLINE mode."));
- iTrace->Trace(id,KTraceFileName, __LINE__);
- iSessionObserver.TerminateSession(this, KErrGeneral);
- return;
- }
- else
- {
- id.Copy(_L("The device is in ON LINE mode."));
- iTrace->Trace(id,KTraceFileName, __LINE__);
- }
+ if(!iWlanOnly) //OCC
+ {
+ if ( networkMode == ECoreAppUIsNetworkConnectionNotAllowed )
+ {
+ id.Copy(_L("The device is in OFFLINE mode."));
+ iTrace->Trace(id,KTraceFileName, __LINE__);
+ iSessionObserver.TerminateSession(this, KErrGeneral);
+ return;
+ }
+ else
+ {
+ id.Copy(_L("The device is in ON LINE mode."));
+ iTrace->Trace(id,KTraceFileName, __LINE__);
+ }
+ } //OCC
if(aAllowedCapabilities == 0)
{
@@ -492,11 +521,35 @@
iSuplSessionId->SetSLPSessionID(NULL);
iConnRequestor->SetDefaultParametersL(aHslpAddress,aFallBack);
-
- if (aFirstReq)
- CheckForSuplUsageL();
- else
- CheckForPreviousResultL();
+
+ id.Copy(_L("aFallBack value is "));
+ id.AppendNum(aFallBack);
+ iTrace->Trace(id,KTraceFileName, __LINE__);
+
+ if(!iWlanOnly) //OCC
+ {
+ iTrace->Trace(_L("iWLANOnly false COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__);
+
+ id.Copy(_L("aFirstReq value is "));
+ id.AppendNum(aFirstReq);
+ iTrace->Trace(id,KTraceFileName, __LINE__);
+
+ if (aFirstReq)
+ {
+ iTrace->Trace(_L("start CheckForSuplUsageL COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__);
+ CheckForSuplUsageL();
+ }
+ else
+ {
+ iTrace->Trace(_L("start CheckForPreviousResultL COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__);
+ CheckForPreviousResultL();
+ }
+ }
+ else
+ {
+ iTrace->Trace(_L("iWLANOnly true COMASuplSession::RunSuplSession"), KTraceFileName, __LINE__);
+ InitializeL(iRequestID);
+ } //OCC
// Clear Position....
@@ -669,7 +722,13 @@
COMASuplStartState* startSuplState = static_cast <COMASuplPosInitState *>(iSuplState);
startSuplState->SetQop(iClientQop);
}
- //SMP Changes
+ if(iIsStaleLocIdPresent)
+ {
+ iTrace->Trace(_L("GenerateSuplStartL setting stale location id in supl start"), KTraceFileName, __LINE__);
+ COMASuplStartState* startSuplState = static_cast <COMASuplPosInitState *>(iSuplState);
+ startSuplState->SetStaleCellIdToUse(iStaleLocationId->CloneL());
+ }
+ iSuplSessionState = ESUPL_GENERATE;
iSuplMsgType = ESUPL_START;
SetPOSMsgPluginState(COMASuplPosSessionBase::EOMASuplCreating);
TInt err = iSuplState->GenerateMessageL();
@@ -716,6 +775,12 @@
iTrace->Trace(msg, KTraceFileName, __LINE__);
iSuplState = COMASuplPosInitState::NewL(iSETCapabilities, iMobilePhone, iUT2_PosInitTimer,
iOMASuplPOSRequestor,iAllowedCapabilities,iRequestType, iPosMethod,iOMASuplAsnHandlerBaseImpl);
+ if(iIsStaleLocIdPresent)
+ {
+ iTrace->Trace(_L("COMASuplSession::GenerateSuplPosInitL() Setting Stale Location Id "), KTraceFileName, __LINE__);
+ COMASuplPosInitState* posInitSuplState = static_cast <COMASuplPosInitState *>(iSuplState);
+ posInitSuplState->SetStaleCellIdToUse(iStaleLocationId->CloneL());
+ }
}
iSuplState->SetMsgStateObserver(this);
@@ -861,6 +926,7 @@
//
void COMASuplSession::OperationCompleteL(TInt aErrorCode)
{
+ iTrace->Trace(_L("COMASuplSession::OperationCompleteL"), KTraceFileName, __LINE__);
TBuf<256> msg;
if(KErrNone != aErrorCode)
{
@@ -873,6 +939,10 @@
HandleSuplErrorL(aErrorCode);
return;
}
+
+ msg.Copy(_L("iSuplSessionState : "));
+ msg.AppendNum(iSuplSessionState);
+ iTrace->Trace(msg, KTraceFileName, __LINE__);
TInt err = KErrNone;
@@ -934,7 +1004,15 @@
}
else //terminal initiated case
{
- TRAP( err, iConnRequestor->CreateConnectionL() );
+ iTrace->Trace(_L("Connection block."), KTraceFileName, __LINE__);
+ if(iIsStaleLocIdPresent)
+ {
+ TRAP( err, iConnRequestor->CreateConnectionL(iStaleLocIdPrompt,iWlanOnly) );
+ }
+ else
+ {
+ TRAP( err, iConnRequestor->CreateConnectionL() );
+ }
}
if(KErrNone != err)
{
@@ -1762,7 +1840,7 @@
TInt err = PosEstimate.GetConfidence(confidence);
altitude = 0;
if (altErr == KErrNone)
- AltitudeInfo.GetAltitudeInfo(AltitudeDirection,altitude,AltitudeUncertainty);
+ AltitudeInfo.GetAltitudeInfo(AltitudeDirection,altitude,AltitudeUncertainty);
PosEstimate.GetUncertainty(Uncertainty);
Uncertainty.GetUncertainty(UncertaintySemiMajor,UncertaintySemiMinor,
OrientationMajorAxis);
@@ -4170,7 +4248,16 @@
HandleSuplInitErrorL(iNwInitCompletionCode);
}
else
- InitializeL(iRequestID);
+ {
+ if (iRoaming)
+ HandleRoamingCheckCompleteL(KErrNone, EFalse);
+ else
+ {
+ iEtelRoamingCheck = ETrue;
+ iProtocolManager.CheckForRoaming();
+ }
+ //InitializeL(iRequestID);
+ }
/*}
else if (usage == CSuplSettings::ESuplUsageHomeAutomatic || usage == CSuplSettings::ESuplUsageAlwaysAsk)
@@ -4268,85 +4355,10 @@
{
iUsageHomeNW = aHomeNw;
iConnRequestor->UpdateSLPListForHomeUsage(iUsageHomeNW);
- //CSuplSettings::TSuplSettingsUsage usage = iSuplSettings->SUPLUsage();
-
- /*if (usage == CSuplSettings::ESuplUsageAlwaysAsk)
- {
- TInt err = KErrNone;
- if (!aHomeNw)
- {
- //iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is roaming"), KTraceFileName, __LINE__);
- //err = iProtocolManager.LaunchSuplUsageSettingsUI(this, ETrue);
- }
- else
- {
- //iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is not roaming"), KTraceFileName, __LINE__);
- //err = iProtocolManager.LaunchSuplUsageSettingsUI(this, EFalse);
- }
-
- if(KErrNone != err && KErrInUse == err)
- {
- iTrace->Trace(_L("Dialog in use, setting flag"), KTraceFileName, __LINE__);
- SetSuplUsageFlag();
- }
- if( KErrNone == err && iRequestType == ESUPL_NETWORK )
- {
- iTrace->Trace(_L("Network Session , starting timer"), KTraceFileName, __LINE__);
- COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage);
- TOMASuplQop qop;
- TInt retVal = suplInit->Qop(qop);
- TInt delay;
- qop.Delay(delay);
- //if delay is > 7, it is not valid
- if (delay > 7)
- delay = 0;
- if(retVal == KErrNone && delay > 0)
- {
- TReal delayReal;
- Math::Pow(delayReal, 2, (TReal)delay);
- delay = (TInt) delayReal;
- TBuf<128> msg(_L("Delay present in message, value is = "));
- msg.AppendNum(delay);
- iTrace->Trace(msg, KTraceFileName, __LINE__);
- isTimeoutDialogTimerStarted = ETrue;
- iDialogTimer->StartTimer(delay);
- }
- else
- {
- if (iSuplInitTimeOut > 0)
- {
- TBuf<256> msg(_L("Delay value in CR is"));
- msg.AppendNum(iSuplInitTimeOut);
- iTrace->Trace(msg, KTraceFileName, __LINE__);
- iDialogTimer->StartTimer(iSuplInitTimeOut * KSecond);
- isTimeoutDialogTimerStarted = ETrue;
- }
- else
- iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__);
- }
- iDlgStartTime.HomeTime();
- }
- else if (KErrNone != err)
- {
- iTrace->Trace(_L("Invoking HandleSuplErrorL"), KTraceFileName, __LINE__);
- HandleSuplErrorL(err);
- }
-
- }*/
- //else if (usage == CSuplSettings::ESuplUsageHomeAutomatic)
- //{
- //if (!aHomeNw)
- // {
- //TInt err = KErrNone;
- //if (!iSuplSettings->IsUIActive() )
- {
- //iTrace->Trace(_L("Invoking LaunchSuplUsageSettingsUI, user is roaming"), KTraceFileName, __LINE__);
- //err = iProtocolManager.LaunchSuplUsageSettingsUI(this, ETrue);
if(iSuplMsgType == ESUPL_INIT)
{
iTrace->Trace(_L("Dialog timer started"), KTraceFileName, __LINE__);
-
COMASuplInit* suplInit = static_cast <COMASuplInit*> (iDecodedAsnMessage);
TOMASuplQop qop;
TInt retVal = suplInit->Qop(qop);
@@ -4377,19 +4389,6 @@
iTrace->Trace(_L("Timeout is <= 0"), KTraceFileName, __LINE__);
}
}
- }
-
- /* if(!iSuplSettings->IsUIActive() && KErrNone != err)
- {
- SetSuplUsageFlag();
- }
- else
- {
- iTrace->Trace(_L("Invoking HandleSuplErrorL"), KTraceFileName, __LINE__);
- HandleSuplErrorL(err);
- }*/
-
-
if (iNwInitError)
{
@@ -4397,13 +4396,15 @@
HandleSuplInitErrorL(iNwInitCompletionCode);
}
else
- InitializeL(iRequestID);
-
+ {
+ iTrace->Trace(_L("COMASuplSession::InitializeL called after roaming check"), KTraceFileName, __LINE__);
+ InitializeL(iRequestID);
+ }
}
- else
- {
- iSessionObserver.TerminateSession(this, KErrGeneral);
- }
+ else
+ {
+ iSessionObserver.TerminateSession(this, KErrGeneral);
+ }
}
TInt COMASuplSession::SuplIpcSessionID()
{
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplstartstate.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver1/src/epos_comasuplstartstate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -149,9 +149,24 @@
//
TInt COMASuplStartState::GenerateMessageL()
{
- iTrace->Trace(_L("Start of COMASuplStartState::GenerateMessage"), KTraceFileName, __LINE__);
- iLocationIDRequestor->GetLocationID();
- return KErrNone;
+
+ iTrace->Trace(_L("Start of COMASuplStartState::GenerateMessage"), KTraceFileName, __LINE__);
+ //if no cell stale cell id is available, retrieve current cell id
+ if(!iIsStaleCellId)
+ {
+ iTrace->Trace(_L("COMASuplStartState::GenerateMessage stale cell id false"), KTraceFileName, __LINE__);
+ iLocationIDRequestor->GetLocationID();
+ iTrace->Trace(_L("COMASuplStartState::GenerateMessage called get location id"), KTraceFileName, __LINE__);
+ }
+ else // dont retrieve current cell id as cell id was already provided
+ {
+ iGenerationStatus = EFalse;
+ iECId = EFalse;
+ iTrace->Trace(_L("COMASuplStartState::GenerateMessage stale cell id true"), KTraceFileName, __LINE__);
+ GetAssistceDataFromPluginL(KErrNone);
+ }
+
+ return KErrNone;
}
// -----------------------------------------------------------------------------
@@ -996,4 +1011,15 @@
aCurrentCellId.iMCC = lRefMCC;
aCurrentCellId.iLac = lRefLAC;
}
-} // End of File
+}
+void COMASuplStartState::SetStaleCellIdToUse(COMASuplLocationId* aLocationId)
+ {
+ if(iLocationId)
+ {
+ delete iLocationId;
+ iLocationId = NULL;
+ }
+ iLocationId = aLocationId;
+ iIsStaleCellId = ETrue;
+ }
+// End of File
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -18,7 +18,7 @@
PRJ_PLATFORMS
-DEFAULT
+DEFAULT GCCE
PRJ_EXPORTS
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/group/omasuplprotocolhandler2.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/group/omasuplprotocolhandler2.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -95,7 +95,7 @@
LIBRARY efsrv.lib
LIBRARY aknnotify.lib
LIBRARY commonengine.lib
-LIBRARY agentdialog.lib
+//LIBRARY agentdialog.lib
LIBRARY epossuplprotocolhandlerplugin.lib
LIBRARY epos_comasuplasnplugin.lib
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplconnrequestor.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplconnrequestor.h Thu Jul 22 16:37:56 2010 +0100
@@ -289,6 +289,8 @@
TBool iIsSettingInitilized;
TInt64 iCurrentSLPId;
+
+ TBool iTriggerSession;
};
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplfallbackhandler.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplfallbackhandler.h Thu Jul 22 16:37:56 2010 +0100
@@ -153,7 +153,6 @@
TTime iFallBackStartTime;
TInt iAllowedFallBackTimerValue;
-
TBool iAttemptedBackupServer;
};
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplsettings.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplsettings.h Thu Jul 22 16:37:56 2010 +0100
@@ -40,7 +40,7 @@
* @param None.
* @return Instance of COMASuplSettings
*/
- static COMASuplSettings* COMASuplSettings::NewL();
+ static COMASuplSettings* NewL();
/**
* ~COMASuplSettings Method, Destructor
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplsettingslauncher.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/inc/epos_comasuplsettingslauncher.h Thu Jul 22 16:37:56 2010 +0100
@@ -22,7 +22,7 @@
// INCLUDES
#include <e32std.h>
-#include <agentdialog.h> // for RGenConAgentDialogServer
+//#include <agentdialog.h> // for RGenConAgentDialogServer
const TUid KNotifier1Uid = { 0x10009C00 };
const TUid KNotifier2Uid = { 0x10009C01 };
@@ -155,7 +155,7 @@
/**
* IAP Selector Handle
*/
- RGenConAgentDialogServer iIapSelector;
+ // RGenConAgentDialogServer iIapSelector;
/**
* Selected IAP ID
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplconnrequestor.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplconnrequestor.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -47,7 +47,8 @@
iCommMgr(aCommMgr),
iProtocolManager(aProtoMgr),
iPort(aPort),
- iObserver( aObserver)
+ iObserver( aObserver),
+ iTriggerSession(EFalse)
{
}
@@ -116,6 +117,14 @@
//
void COMASuplConnRequestor::CreateConnectionL(TBool aTriggerSession)
{
+ if(!iIsSettingInitilized)
+ {
+ iTriggerSession = aTriggerSession;
+ iState = EInitialState;
+ InitilizeSetting();
+ }
+ else
+ {
TBuf<100> iapName;
TBuf<128> buffer;
iState = EConnecting;
@@ -159,6 +168,7 @@
iObserver.OperationCompleteL(errorCode);
}
}
+ }
// -----------------------------------------------------------------------------
// COMASuplConnRequestor::OpenConnection
@@ -215,6 +225,7 @@
}
else
{
+ iState = EInitilizeSetting;
InitilizeSetting();
}
}
@@ -261,6 +272,14 @@
switch(iState)
{
+ case EInitialState:
+ {
+ iIsSettingInitilized = ETrue;
+ iTrace->Trace(_L("Setting API Initilizing Completed..."), KTraceFileName, __LINE__);
+ CreateConnectionL(iTriggerSession);
+
+ break;
+ }
case EConnecting:
{
if(iLastConnectionError < 0)
@@ -362,7 +381,7 @@
void COMASuplConnRequestor::InitilizeSetting()
{
iTrace->Trace(_L("Intilizing Setting API..."), KTraceFileName, __LINE__);
- iState = EInitilizeSetting;
+
iSuplSettings->Initialize(iStatus);
SetActive();
}
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplfallbackhandler.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplfallbackhandler.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -115,11 +115,11 @@
{
iTrace->Trace(_L("COMASuplFallBackHandler::GetNextSLPAddressL"),KTraceFileName, __LINE__);
- _LIT(KFormatTxt,"%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B");
-
- TBuf<256> LogBuffer;
-
- if( aLastErrorCode != KErrNone)// If its KErrNone then its means server name is asked first time and no need for Tls failure check
+ _LIT(KFormatTxt,"%/0%1%/1%2%/2%3%/3 %-B%:0%J%:1%T%:2%S%:3%+B");
+
+ TBuf<256> LogBuffer;
+
+ if( aLastErrorCode != KErrNone)// If its KErrNone then its means server name is asked first time and no need for Tls failure check
{
if( CheckErrorCodeL(aLastErrorCode) )
@@ -135,6 +135,47 @@
aTls = ETrue;
aPskTls = EFalse;
aIsIapDialogShown = ETrue;
+
+ CServerParams* param = CServerParams::NewL();
+ CleanupStack::PushL(param);
+
+ //Find out if this alternative generated SUPL server is in the SUPL Settings list
+ TInt err = iSuplSettings.GetSlpInfoAddress(iGenratedHslpAddress, param);
+ if(err == KErrNotFound)
+ {
+ //Server does not exist
+ iTrace->Trace(_L("Server does not exist in list so adding it in."),KTraceFileName, __LINE__);
+ CServerParams* newParam=CServerParams::NewL();
+ CleanupStack::PushL(newParam);
+ User::LeaveIfError(newParam->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse ));
+
+ err = iSuplSettings.AddNewServer( newParam, aSLPId ); //Ignore error
+ LogBuffer.Copy(_L("AddNewServer() completed with err: "));
+ LogBuffer.AppendNum(err);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ CleanupStack::PopAndDestroy(&newParam);
+ }
+ else
+ {
+ //Server exists, get the SLP ID and the IAP Access point for this server
+ HBufC* hslpAddress = HBufC::NewL(KHSLPAddressLength);
+ HBufC* iapName = HBufC::NewL(KMaxIapNameLength);
+ TBool serverEnabled;
+ TBool simChangeRemove;
+ TBool usageInHomeNw;
+ TBool editable;
+
+ iTrace->Trace(_L("Server already exists, getting the SLP ID and Access Point."),KTraceFileName, __LINE__);
+
+ param->Get(aSLPId,hslpAddress->Des(),iapName->Des(),serverEnabled,simChangeRemove,usageInHomeNw,editable);
+ aIAPName.Copy(iapName->Des());
+
+ delete hslpAddress;
+ delete iapName;
+ }
+
+ CleanupStack::PopAndDestroy(¶m);
iTrace->Trace(_L("Fallback allowed & TLSAuth failed"),KTraceFileName, __LINE__);
iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
@@ -162,138 +203,151 @@
{
return KErrNotFound;
}
- }
-
- //Check to see if the server list is empty. If it is create the HSLP Address from the IMSI and use that
- // as the server address. This does not add the server to the list and this functionality should only
- // be tried once
- if(iSLPList->Count() <= 0 && (!iAttemptedBackupServer))
- {
- iTrace->Trace(_L("Going to create and use alternative HSLP Address from IMSI"),KTraceFileName, __LINE__);
+ }
+
+ //Check to see if the server list is empty. If it is create the HSLP Address from the IMSI and use that
+ // as the server address. This does not add the server to the list and this functionality should only
+ // be tried once
+ if(iSLPList->Count() <= 0 && (!iAttemptedBackupServer))
+ {
+ iTrace->Trace(_L("Going to create and use alternative HSLP Address from IMSI"),KTraceFileName, __LINE__);
+
+ iAttemptedBackupServer = ETrue;
+
+ //Generate the HSLP Address
+ GenerateHslpAddressFromIMSIL();
- iAttemptedBackupServer = ETrue;
+ //Copy the generated address into the supplied function arguments
+ aHslpToBeUsedAddress.Copy(iGenratedHslpAddress);
+ aIAPName.Zero();
+ aIAPName.Copy(iDefaultIAPName);
+ aTls = ETrue;
+ aPskTls = EFalse;
+ aIsIapDialogShown = ETrue;
+
+ iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
+ LogBuffer.Copy(aHslpToBeUsedAddress);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
- //Generate the HSLP Address
- GenerateHslpAddressFromIMSIL();
+ iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__);
+ LogBuffer.Copy(aIAPName);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ //Add the server to the list for future connections
+ CServerParams* param=CServerParams::NewL();
+ CleanupStack::PushL(param);
+ User::LeaveIfError(param->Set( iGenratedHslpAddress,iDefaultIAPName,ETrue,ETrue,ETrue,EFalse ));
+
+ TInt err = iSuplSettings.AddNewServer( param, aSLPId ); //Ignore error
+ LogBuffer.Copy(_L("AddNewServer() completed with err: "));
+ LogBuffer.AppendNum(err);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ CleanupStack::PopAndDestroy(¶m);
- //Copy the generated address into the supplied function arguments
- aHslpToBeUsedAddress.Copy(iGenratedHslpAddress);
- aIAPName.Zero();
- aIAPName.Copy(iDefaultIAPName);
- aTls = ETrue;
- aPskTls = EFalse;
- aIsIapDialogShown = ETrue;
-
- iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
- LogBuffer.Copy(aHslpToBeUsedAddress);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__);
- LogBuffer.Copy(aIAPName);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- return KErrNone;
- }
-
- if( iSLPList->Count() <= 0 || iCurrentServerCounter >= iSLPList->Count() )
+ return KErrNone;
+ }
+
+ if( iSLPList->Count() <= 0 || iCurrentServerCounter >= iSLPList->Count() )
+ {
+ LogBuffer.Copy(_L("No more servers available..."));
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+ return KErrNotFound;
+ }
+
+ iTrace->Trace(_L("Trying next server..."),KTraceFileName, __LINE__);
+
+ //Fallback Timer...
+ if(aLastErrorCode == KErrNone) //This means, server name is asked for first time only...
+ {
+ iTrace->Trace(_L("Start Time: "),KTraceFileName, __LINE__);
+ iFallBackStartTime.HomeTime();
+ LogBuffer.Zero();
+ iFallBackStartTime.FormatL(LogBuffer,KFormatTxt);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+ }
+ else
+ {
+ TTime currentTime;
+ currentTime.HomeTime();
+ TTimeIntervalMicroSeconds diff = currentTime.MicroSecondsFrom(iFallBackStartTime);
+
+
+ iTrace->Trace(_L("Current Time: "),KTraceFileName, __LINE__);
+ LogBuffer.Zero();
+ currentTime.FormatL(LogBuffer,KFormatTxt);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ LogBuffer.Copy(_L("Difference between time: "));
+ LogBuffer.AppendNum(diff.Int64());
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ if( diff.Int64() > iAllowedFallBackTimerValue)
{
- LogBuffer.Copy(_L("No more servers available..."));
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
- return KErrNotFound;
+ LogBuffer.Copy(_L("Timeout happened..."));
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ return KErrTimedOut;
}
-
- iTrace->Trace(_L("Trying next server..."),KTraceFileName, __LINE__);
-
- //Fallback Timer...
- if(aLastErrorCode == KErrNone) //This means, server name is asked for first time only...
- {
- iTrace->Trace(_L("Start Time: "),KTraceFileName, __LINE__);
- iFallBackStartTime.HomeTime();
- LogBuffer.Zero();
- iFallBackStartTime.FormatL(LogBuffer,KFormatTxt);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
- }
- else
+ }
+
+ if(aLastErrorCode == KErrNone) //This will be called only once...for first time only
+ {
+ aSLPId = (*iSLPList)[0].iSLPId;
+ aHslpToBeUsedAddress.Copy((*iSLPList)[0].iHSLPAddress);
+ aIAPName.Copy((*iSLPList)[0].iIapName);
+ aTls = (*iSLPList)[0].iTls;
+ aPskTls = (*iSLPList)[0].iPskTls;
+ aIsIapDialogShown = (*iSLPList)[0].iIsIAPDialgShown;
+ iCurrentServerCounter++;
+
+ iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
+ LogBuffer.Copy(aHslpToBeUsedAddress);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__);
+ LogBuffer.Copy(aIAPName);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ iTrace->Trace(_L("iap dlg configuration:"),KTraceFileName, __LINE__);
+ LogBuffer.Delete(0,256);
+ LogBuffer.AppendNum(aIsIapDialogShown);
+ iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
+
+ return KErrNone;
+ }
+ else
+ {
+ if(iIsFallBackAllowed && CheckErrorCodeL(aLastErrorCode))// Do not fallback in case if IMSI generated address failed for previous try.
{
- TTime currentTime;
- currentTime.HomeTime();
- TTimeIntervalMicroSeconds diff = currentTime.MicroSecondsFrom(iFallBackStartTime);
-
-
- iTrace->Trace(_L("Current Time: "),KTraceFileName, __LINE__);
- LogBuffer.Zero();
- currentTime.FormatL(LogBuffer,KFormatTxt);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- LogBuffer.Copy(_L("Difference between time: "));
- LogBuffer.AppendNum(diff.Int64());
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- if( diff.Int64() > iAllowedFallBackTimerValue)
- {
- LogBuffer.Copy(_L("Timeout happened..."));
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- return KErrTimedOut;
- }
- }
-
- if(aLastErrorCode == KErrNone) //This will be called only once...for first time only
- {
- aSLPId = (*iSLPList)[0].iSLPId;
- aHslpToBeUsedAddress.Copy((*iSLPList)[0].iHSLPAddress);
- aIAPName.Copy((*iSLPList)[0].iIapName);
- aTls = (*iSLPList)[0].iTls;
- aPskTls = (*iSLPList)[0].iPskTls;
- aIsIapDialogShown = (*iSLPList)[0].iIsIAPDialgShown;
- iCurrentServerCounter++;
-
+ aSLPId = (*iSLPList)[iCurrentServerCounter].iSLPId;
+ aHslpToBeUsedAddress.Copy((*iSLPList)[iCurrentServerCounter].iHSLPAddress);
+ aIAPName.Copy((*iSLPList)[iCurrentServerCounter].iIapName);
+ aTls = (*iSLPList)[iCurrentServerCounter].iTls;
+ aPskTls = (*iSLPList)[iCurrentServerCounter].iPskTls;
+ aIsIapDialogShown = (*iSLPList)[iCurrentServerCounter].iIsIAPDialgShown;
+ iCurrentServerCounter++;
+ iTrace->Trace(_L("Fallback allowed & TLSAuth passed"),KTraceFileName, __LINE__);
iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
LogBuffer.Copy(aHslpToBeUsedAddress);
iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
+
iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__);
LogBuffer.Copy(aIAPName);
iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
+
iTrace->Trace(_L("iap dlg configuration:"),KTraceFileName, __LINE__);
LogBuffer.Delete(0,256);
LogBuffer.AppendNum(aIsIapDialogShown);
iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
return KErrNone;
}
else
{
- if(iIsFallBackAllowed && CheckErrorCodeL(aLastErrorCode))// Do not fallback in case if IMSI generated address failed for previous try.
- {
- aSLPId = (*iSLPList)[iCurrentServerCounter].iSLPId;
- aHslpToBeUsedAddress.Copy((*iSLPList)[iCurrentServerCounter].iHSLPAddress);
- aIAPName.Copy((*iSLPList)[iCurrentServerCounter].iIapName);
- aTls = (*iSLPList)[iCurrentServerCounter].iTls;
- aPskTls = (*iSLPList)[iCurrentServerCounter].iPskTls;
- aIsIapDialogShown = (*iSLPList)[iCurrentServerCounter].iIsIAPDialgShown;
- iCurrentServerCounter++;
- iTrace->Trace(_L("Fallback allowed & TLSAuth passed"),KTraceFileName, __LINE__);
- iTrace->Trace(_L("Server being used:"),KTraceFileName, __LINE__);
- LogBuffer.Copy(aHslpToBeUsedAddress);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- iTrace->Trace(_L("iap being used:"),KTraceFileName, __LINE__);
- LogBuffer.Copy(aIAPName);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
-
- iTrace->Trace(_L("iap dlg configuration:"),KTraceFileName, __LINE__);
- LogBuffer.Delete(0,256);
- LogBuffer.AppendNum(aIsIapDialogShown);
- iTrace->Trace(LogBuffer,KTraceFileName, __LINE__);
- return KErrNone;
- }
- else
- {
- return KErrNotFound;
- }
+ return KErrNotFound;
}
+ }
+
}
// -----------------------------------------------------------------------------
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplposinitstate.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplposinitstate.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -670,7 +670,7 @@
}
// Position
- if(iPosition)
+ if(iPosition && iRequestType == COMASuplSession::ESUPL_TERMINAL)
{
if(KErrNone == iPosition->Status() && !iIgnorePosData) //if iIgnorePosData is set do not use the pos data
{
@@ -800,6 +800,8 @@
}
//if the current Cell id is the same as the Cell id when we made the request for assistance data then use the assistance data
//and we have not already repeated a request before
+ //Comment to ignore coverity forward NULL error
+ //coverity[FORWARD_NULL :FALSE]
if(!iRepeatedPosDataFetch && iLocationId->GetCellId() == aLocationId->GetCellId())
{
iTrace->Trace(_L("COMASuplPosInitState::ComparisionLocationIDRequestCompletedL Cell Id not changed since making last request, so continuing"), KTraceFileName, __LINE__);
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplprotocolmanager2.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplprotocolmanager2.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -108,13 +108,21 @@
{
iSettingsLauncher->CancelLaunch();
}*/
- iSuplSettings->SetUIActive( EFalse );
+
+ if(iSuplSettings)
+ {
+ iSuplSettings->SetUIActive( EFalse );
+ }
DeleteAllSessions();
iSuplSessions.Reset();
iSuplSessions.Close();
+ //Only attempt to unload the phone if the TSY has actually been initialised
+ if(iTsyName.Length() > 0)
+ {
iTelServer.UnloadPhoneModule(iTsyName);
+ }
iQueuedPacket.Close();
--- a/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplsession2.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/protocolhandlerver2/src/epos_comasuplsession2.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -4767,10 +4767,16 @@
HandleSuplInitErrorL(iNwInitCompletionCode);
}
else
- {
- iTrace->Trace(_L("CheckForSuplUsageL, Initializing"), KTraceFileName, __LINE__);
- InitializeL(iRequestID);
- }
+ {
+ if (iRoaming)
+ HandleRoamingCheckCompleteL(KErrNone, EFalse);
+ else
+ {
+ iEtelRoamingCheck = ETrue;
+ iProtocolManager.CheckForRoaming();
+ }
+ //InitializeL(iRequestID);
+ }
/*}
else if (usage == CSuplSettings::ESuplUsageHomeAutomatic || usage == CSuplSettings::ESuplUsageAlwaysAsk)
--- a/supl/locationomasuplprotocolhandler/provisioninghandler/group/epos_omasuplprovhandler.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/provisioninghandler/group/epos_omasuplprovhandler.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -60,8 +60,9 @@
LIBRARY euser.lib
LIBRARY provisioningengine.lib
LIBRARY bafl.lib
-LIBRARY apengine.lib
+
LIBRARY commdb.lib
LIBRARY centralrepository.lib
LIBRARY epos_csuplutils.lib
LIBRARY epos_suplsettings.lib
+LIBRARY cmmanager.lib
\ No newline at end of file
--- a/supl/locationomasuplprotocolhandler/provisioninghandler/src/epos_comasuplsettings.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/provisioninghandler/src/epos_comasuplsettings.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -20,7 +20,7 @@
#include <CWPParameter.h>
#include <WPAdapterUtil.h>
-#include <ApUtils.h>
+//#include <ApUtils.h>
#include "epos_comasupltrace.h"
#include "epos_comasuplsettings.h"
@@ -30,6 +30,11 @@
#include "epos_omasuplprovhandler.hrh"
#include <epos_omasuplprovhandlerres.rsg>
+#include <cmmanagerext.h>
+#include <cmdestinationext.h>
+#include <cmconnectionmethodext.h>
+#include <cmconnectionmethoddef.h>
+
_LIT( KTraceSuplSettings, "epos_comasuplsettings.cpp" );
@@ -146,12 +151,59 @@
//
TUint32 COMASuplSettings::IapIdFromWapIdL( TUint32 aWapId ) const
{
- CApUtils* apUtils = CApUtils::NewLC( *iCommsDb );
+ /*CApUtils* apUtils = CApUtils::NewLC( *iCommsDb );
TUint32 iapId = NULL;
iapId = apUtils->IapIdFromWapIdL( aWapId );
__ASSERT_ALWAYS( iapId, Panic( SuplAdapterInvalidId ) );
CleanupStack::PopAndDestroy( apUtils );
return iapId;
+ return ;*/
+
+ RCmManagerExt cmManager;
+ cmManager.OpenLC(); // CS:1
+ RArray<TUint32> iapIds;
+ TUint32 iapId( 0 );
+
+ // First get all free IAP ID's.
+ cmManager.ConnectionMethodL( iapIds );
+ CleanupClosePushL( iapIds ); // CS:2
+
+ // Then get IAP ID's from all destinations.
+ RArray<TUint32> destIds;
+ cmManager.AllDestinationsL( destIds );
+ CleanupClosePushL( destIds ); // CS:3
+ TInt destCount = destIds.Count();
+ for ( TInt destIndex = 0; destIndex < destCount; destIndex++ )
+ {
+ RCmDestinationExt dest = cmManager.DestinationL(
+ destIds[destIndex] );
+ CleanupClosePushL( dest ); // CS:4
+ TInt cmCount = dest.ConnectionMethodCount();
+ for ( TInt cmIndex = 0; cmIndex < cmCount; cmIndex++ )
+ {
+ TUint32 apId = dest.ConnectionMethodL(
+ cmIndex ).GetIntAttributeL( CMManager::ECmIapId );
+ iapIds.AppendL( apId );
+ }
+ CleanupStack::PopAndDestroy( &dest ); // CS:3
+ }
+ // Finally, go through all connection methods and find correct IAP ID.
+ const TInt cmCount = iapIds.Count();
+ for ( TInt counter = 0; counter < cmCount; counter++ )
+ {
+ TUint32 id = cmManager.GetConnectionMethodInfoIntL(
+ iapIds[counter], CMManager::ECmWapId );
+ if ( id == aWapId )
+ {
+ iapId = iapIds[counter];
+ // No need to go through rest of IAPs.
+ break;
+ }
+ }
+ // PopAndDestroy destIds, iapIds, cmManager.
+ CleanupStack::PopAndDestroy( 3, &cmManager ); // CS:0
+ return iapId;
+
}
--- a/supl/locationomasuplprotocolhandler/rom/omasuplprotocolhandler.iby Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/rom/omasuplprotocolhandler.iby Thu Jul 22 16:37:56 2010 +0100
@@ -65,8 +65,8 @@
#endif // __SYNCML_DM
// Notifier
-ECOM_PLUGIN(epos_omasuplnotifierplugin.dll,epos_omasuplnotifierplugin.rsc)
-file=ABI_DIR\BUILD_DIR\epos_omasuplnotifier.dll SHARED_LIB_DIR\epos_omasuplnotifier.dll
+//ECOM_PLUGIN(epos_omasuplnotifierplugin.dll,epos_omasuplnotifierplugin.rsc)
+//file=ABI_DIR\BUILD_DIR\epos_omasuplnotifier.dll SHARED_LIB_DIR\epos_omasuplnotifier.dll
// Storage Db Backup Registration File
data=DATAZ_\private\1027509E\backup_registration.xml \private\1027509E\backup_registration.xml
#endif //__OMA_SUPL_PLUGINS
--- a/supl/locationomasuplprotocolhandler/rom/omasuplprotocolhandler_resource.iby Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/rom/omasuplprotocolhandler_resource.iby Thu Jul 22 16:37:56 2010 +0100
@@ -29,7 +29,7 @@
#ifdef __OMA_SUPL_PLUGINS
//Resource file for notifier
-data=DATAZ_\resource\epos_omasuplnotifier.rsc resource\epos_omasuplnotifier.rsc
+//data=DATAZ_\resource\epos_omasuplnotifier.rsc resource\epos_omasuplnotifier.rsc
#endif //__OMA_SUPL_PLUGINS
#endif // OMASUPLPROTOCOLHANDLER_RESOURCE_IBY
--- a/supl/locationomasuplprotocolhandler/supllistener/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/supllistener/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -19,12 +19,11 @@
PRJ_PLATFORMS
-WINSCW ARMV5
+WINSCW ARMV5 GCCE
PRJ_MMPFILES
./epos_omasupllistener.mmp
// for backup restore
PRJ_EXPORTS
-../data/backup_registration.xml /epoc32/release/winscw/udeb/z/private/1027509E/backup_registration.xml
-../data/backup_registration.xml /epoc32/data/z/private/1027509E/backup_registration.xml
+../data/backup_registration.xml z:/private/1027509E/backup_registration.xml
../inc/epos_comasuplproductconfigcrkeys.h |../../../inc/epos_comasuplproductconfigcrkeys.h
\ No newline at end of file
--- a/supl/locationomasuplprotocolhandler/supllistener/inc/epos_comasuplsmslistenerbase.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationomasuplprotocolhandler/supllistener/inc/epos_comasuplsmslistenerbase.h Thu Jul 22 16:37:56 2010 +0100
@@ -112,7 +112,7 @@
*
* @since S60 v3.1
*/
- void COMASuplSmsListenerBase::SendL( const TPtr8& aMessage );
+ void SendL( const TPtr8& aMessage );
// from base class CActive
/**
Binary file supl/locationsuplfw/conf/suplsettings.confml has changed
Binary file supl/locationsuplfw/conf/suplsettings_102073D6.crml has changed
--- a/supl/locationsuplfw/gateway/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -23,13 +23,8 @@
WINSCW ARMV5
PRJ_EXPORTS
-/****
-../Data/102073D2.txt /epoc32/RELEASE/winscw/UDEB/Z/private/10202be9/102073D2.txt
-../Data/102073D2.txt /epoc32/data/Z/private/10202be9/102073D2.txt
-*/
-../data/backup_registration.xml /epoc32/RELEASE/winscw/udeb/z/private/102073ca/backup_registration.xml
-../data/backup_registration.xml /epoc32/data/z/private/102073ca/backup_registration.xml
+../data/backup_registration.xml z:/private/102073ca/backup_registration.xml
PRJ_MMPFILES
epos_csuplserver.mmp
--- a/supl/locationsuplfw/gateway/inc/epos_csuplipcsubsession.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/inc/epos_csuplipcsubsession.h Thu Jul 22 16:37:56 2010 +0100
@@ -126,6 +126,11 @@
void HandlePeriodicTriggerSessionWithServernameL(const RMessage2& aMessage);
void HandleStopTriggerringSessionL(const RMessage2& aMessage);
void HandleNotifyTriggerFiredL(const RMessage2& aMessage);
+ /*
+ * For Periodic Trigger Seesion
+ */
+ void HandleLocationConversionL(const RMessage2& aMessage);
+ void HandleCancelLocationConversionL(const RMessage2& aMessage);
private: // Data
CSuplSessionBase* iSuplSession;
--- a/supl/locationsuplfw/gateway/inc/epos_csuplsessionmanager.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/inc/epos_csuplsessionmanager.h Thu Jul 22 16:37:56 2010 +0100
@@ -25,6 +25,7 @@
#include <lbspositioninfo.h>
#include <epos_suplterminal.h>
#include <epos_suplterminaltrigger.h>
+#include <epos_suplgeocellinfo.h>
#include "epos_csuplecomeventwatcher.h"
// FORWARD DECLARATIONS
@@ -32,6 +33,7 @@
class CSuplSessionBase;
class CSuplCommunicationManager;
+
// CLASS DECLARATION
/**
@@ -87,6 +89,14 @@
TInt GetSUPLMessageVersionL(TInt& aMajorVersion, const TDesC8& aReceivedMessage);
+
+ void MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo,
+ TRequestStatus& aStatus
+ );
+
+ void CancelLocationConversionRequest(CSuplSessionBase *aSessn);
+
private:
/**
--- a/supl/locationsuplfw/gateway/inc/epos_csuplsessionrequest.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/inc/epos_csuplsessionrequest.h Thu Jul 22 16:37:56 2010 +0100
@@ -27,7 +27,7 @@
#include <lbspositioninfo.h>
#include <epos_suplterminalqop.h>
#include <epos_suplterminaltrigger.h>
-
+#include "epos_suplgeocellinfo.h"
// CONSTANT DECLARATIONS
// FORWARD DECLARATIONS
@@ -99,6 +99,9 @@
void CancelTriggerringRequest();
void ProtocolHUnloaded();
+ void MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,TGeoCellInfo& aCellInfo );
+
+ void CancelLocationConversionRequest();
protected: // From CActive
@@ -129,7 +132,9 @@
ESuplForwardMessage,
ESuplStartTriggerRequest,
ESuplStopTriggerRequest,
- ESuplTriggerFiredNotifyRequest
+ ESuplTriggerFiredNotifyRequest,
+ ESuplLocationConversionRequest,
+ ESuplCancelLocationConversionRequest
};
TSuplRequestStage iRequestPhase;
--- a/supl/locationsuplfw/gateway/src/epos_csuplipcsubsession.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/src/epos_csuplipcsubsession.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -226,6 +226,19 @@
HandleNotifyTriggerFiredL(aMessage);
break;
}
+ case ESuplTerminalSubssnLocationConversion:
+ {
+ iMessage=aMessage;
+ iReqType = ESuplTerminalSubssnLocationConversion;
+ HandleLocationConversionL(aMessage);
+ break;
+ }
+
+ case ESuplTerminalSubssnCancelLocationConversion:
+ {
+ HandleCancelLocationConversionL(aMessage);
+ break;
+ }
default:
User::Leave(KErrNotSupported);
}
@@ -734,5 +747,51 @@
CleanupStack::Pop(fireInfoBuf);
}
-
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleLocationConversionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleLocationConversionL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleLocationConversionL", __LINE__)
+
+ if (iSuplSessnReq->IsActive())
+ {
+ SuplGlobal::RequestComplete(aMessage, KErrAlreadyExists);
+ }
+
+ if(iReqType==ESuplTerminalSubssnLocationConversion)
+ {
+ HBufC8* cellBuf = SuplGlobal::CopyClientBuffer8LC(aMessage,0);
+
+ TGeoCellInfo& cellInfo = reinterpret_cast
+ <TGeoCellInfo&>(const_cast<TUint8&>(*cellBuf->Ptr()));
+
+ iSuplSessnReq->MakeLocationConversionRequestL( iSuplSession,cellInfo );
+
+ CleanupStack::PopAndDestroy(cellBuf);
+ }
+
+ }
+
+// ---------------------------------------------------------
+// CSuplIPCSubSession::HandleCancelLocationConversionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplIPCSubSession::HandleCancelLocationConversionL(const RMessage2& aMessage)
+ {
+ DEBUG_TRACE("CSuplIPCSubSession::HandleCancelLocationConversionL", __LINE__)
+
+ if (!iSuplSessnReq->IsActive()||(iReqType!=ESuplTerminalSubssnLocationConversion))
+ {
+ User::Leave(KErrNotFound);
+ }
+ iSuplSessnReq->CancelLocationConversionRequest();
+ SuplGlobal::RequestComplete(aMessage, KErrNone);
+ CompleteRunSession(KErrCancel);
+ }
// End of File
--- a/supl/locationsuplfw/gateway/src/epos_csuplserver.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/src/epos_csuplserver.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -264,7 +264,7 @@
}
//if secure id is not equal to KSuplWapSecureId or KSuplWapSecureId, then perform capability check
- if ((aMessage.SecureId() != KSuplWapSecureId && aMessage.SecureId() != KNetworkGatewaySID))
+ if ((aMessage.SecureId() != KSuplWapSecureId && aMessage.SecureId() != KNetworkGatewaySID && aMessage.SecureId() != 0x102869DF))
{
if (!aMessage.HasCapability(ECapabilityCommDD))
{
@@ -322,8 +322,11 @@
static _LIT_SECURITY_POLICY_S0(allowSuplWapPolicy, KSuplWapSecureId);
TBool isSuplWap = allowSuplWapPolicy().CheckPolicy(aMessage);
- //Check if the request was made by one of the allowed processes else check for required capability
- if (!isNetworkGateway && !isSuplWap )
+ static _LIT_SECURITY_POLICY_S0(allowlocationserverPolicy, 0x102869DF);
+ TBool islocationserver = allowlocationserverPolicy().CheckPolicy(aMessage);
+
+ //Check if the request was made by one of the allowed processes else check for required capability
+ if (!isNetworkGateway && !isSuplWap && !islocationserver)
{
if (!aMessage.HasCapability(ECapabilityCommDD))
{
--- a/supl/locationsuplfw/gateway/src/epos_csuplsessionmanager.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/src/epos_csuplsessionmanager.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -465,5 +465,49 @@
User::RequestComplete(status,KErrNotReady);
}
}
+// ---------------------------------------------------------
+// CSuplSessionManager::MakeLocationConversionRequestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplSessionManager::MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo,
+ TRequestStatus& aStatus
+ )
+ {
+ DEBUG_TRACE("CSuplSessionManager::MakeLocationConversionRequestL", __LINE__)
+ TInt err = KErrNone;
+ if(iProtocolMgr && aSuplSessn)
+ {
+ DEBUG_TRACE("CSuplSessionManager::MakeLocationConversionRequestL if condition true", __LINE__)
+ TRAP(err,iProtocolMgr->MakeLocationConversionRequestL(aSuplSessn,aCellInfo,aStatus));
+ DEBUG_TRACE("CSuplSessionManager::MakeLocationConversionRequestL err", __LINE__)
+ if(err!=KErrNone)
+ {
+ DEBUG_TRACE("CSuplSessionManager::MakeLocationConversionRequestL err not KErrNone", __LINE__)
+ TRequestStatus *status = &aStatus;
+ User::RequestComplete(status,KErrNotReady);
+ }
+ }
+ else
+ {
+ TRequestStatus *status = &aStatus;
+ User::RequestComplete(status,KErrNotReady);
+ }
+ }
+
+// ---------------------------------------------------------
+// CSuplSessionManager::CancelLocationConversionRequest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplSessionManager::CancelLocationConversionRequest(CSuplSessionBase *aSessn)
+ {
+ DEBUG_TRACE("CSuplSessionManager::CancelLocationConversionRequest", __LINE__)
+ if(iProtocolMgr && aSessn)
+ iProtocolMgr->CancelLocationConversionRequest(aSessn);
+ }
// End of File
--- a/supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/gateway/src/epos_csuplsessionrequest.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -245,7 +245,13 @@
iNetObserver->CompleteForwardMessageL(iHandle);
break;
}
-
+ case ESuplLocationConversionRequest:
+ case ESuplCancelLocationConversionRequest:
+ {
+ iRequestPhase = ESuplReqInactive;
+ iObserver->CompleteRunSession(err);
+ break;
+ }
default :
DebugPanic(EPosSuplServerPanicRequestInconsistency);
}
@@ -390,5 +396,33 @@
iSessnMgr.CancelTriggerringSession(iSuplSessn);
//SetActive();
}
-
+// ---------------------------------------------------------
+// CSuplSessionRequest::MakeLocationConversionRequestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplSessionRequest::MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo )
+ {
+ DEBUG_TRACE("CSuplSessionRequest::MakeLocationConversionRequestL", __LINE__)
+ iRequestPhase = ESuplLocationConversionRequest;
+ iStatus = KRequestPending;
+ iSessnMgr.MakeLocationConversionRequestL(aSuplSessn,aCellInfo,iStatus );
+ SetActive();
+ }
+
+
+// ---------------------------------------------------------
+// CSuplSessionRequest::CancelLocationConversionRequest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CSuplSessionRequest::CancelLocationConversionRequest()
+ {
+ DEBUG_TRACE("CSuplSessionRequest::CancelLocationConversionRequest", __LINE__)
+ iRequestPhase = ESuplCancelLocationConversionRequest;
+ iSessnMgr.CancelLocationConversionRequest(iSuplSessn);
+ }
// End of File
--- a/supl/locationsuplfw/protocolhandlerapi/bwins/epossuplprotocolhandlerpluginu.def Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/protocolhandlerapi/bwins/epossuplprotocolhandlerpluginu.def Thu Jul 22 16:37:56 2010 +0100
@@ -1,26 +1,27 @@
EXPORTS
- ?ConstructL@CSUPLProtocolManagerBase@@UAEXABVTUid@@@Z @ 1 NONAME ; void CSUPLProtocolManagerBase::ConstructL(class TUid const &)
- ??0CSUPLProtocolManagerBase@@QAE@XZ @ 2 NONAME ; CSUPLProtocolManagerBase::CSUPLProtocolManagerBase(void)
- ?CancelListenToMessages@CSuplConnection@@QAEXXZ @ 3 NONAME ; void CSuplConnection::CancelListenToMessages(void)
- ?ImplementationUid@CSUPLProtocolManagerBase@@QBE?AVTUid@@XZ @ 4 NONAME ; class TUid CSUPLProtocolManagerBase::ImplementationUid(void) const
- ?CancelSend@CSuplConnection@@QAEXAAVTRequestStatus@@@Z @ 5 NONAME ; void CSuplConnection::CancelSend(class TRequestStatus &)
- ?ListenToMessages@CSuplConnection@@QAEHXZ @ 6 NONAME ; int CSuplConnection::ListenToMessages(void)
- ?GetSUPLMessageVersionL@CSUPLProtocolManagerBase@@UAEHAAHABVTDesC8@@@Z @ 7 NONAME ; int CSUPLProtocolManagerBase::GetSUPLMessageVersionL(int &, class TDesC8 const &)
- ?Version@CSUPLProtocolManagerBase@@QBEHXZ @ 8 NONAME ; int CSUPLProtocolManagerBase::Version(void) const
- ??1CSuplCommunicationManager@@UAE@XZ @ 9 NONAME ; CSuplCommunicationManager::~CSuplCommunicationManager(void)
- ?Connect@CSuplConnection@@QAEXAAVTRequestStatus@@@Z @ 10 NONAME ; void CSuplConnection::Connect(class TRequestStatus &)
- ?GetPortNumberUsed@CSuplConnection@@QAEHXZ @ 11 NONAME ; int CSuplConnection::GetPortNumberUsed(void)
- ?Initialize@CSuplCommunicationManager@@QAEHXZ @ 12 NONAME ; int CSuplCommunicationManager::Initialize(void)
- ?GetLocalIPAddress@CSuplConnection@@QAEHAAVTInetAddr@@@Z @ 13 NONAME ; int CSuplConnection::GetLocalIPAddress(class TInetAddr &)
- ?NewL@CSUPLProtocolManagerBase@@SAPAV1@ABVTDesC8@@@Z @ 14 NONAME ; class CSUPLProtocolManagerBase * CSUPLProtocolManagerBase::NewL(class TDesC8 const &)
- ?NewL@CSuplCommunicationManager@@SAPAV1@XZ @ 15 NONAME ; class CSuplCommunicationManager * CSuplCommunicationManager::NewL(void)
- ?Send@CSuplConnection@@QAEXABVTDesC8@@AAVTRequestStatus@@@Z @ 16 NONAME ; void CSuplConnection::Send(class TDesC8 const &, class TRequestStatus &)
- ?CreateConnectionL@CSuplCommunicationManager@@QAEPAVCSuplConnection@@ABVTDesC16@@HHIH@Z @ 17 NONAME ; class CSuplConnection * CSuplCommunicationManager::CreateConnectionL(class TDesC16 const &, int, int, unsigned int, int)
- ?CloseConnection@CSuplConnection@@QAEXXZ @ 18 NONAME ; void CSuplConnection::CloseConnection(void)
- ?CancelConnect@CSuplConnection@@QAEXAAVTRequestStatus@@@Z @ 19 NONAME ; void CSuplConnection::CancelConnect(class TRequestStatus &)
- ?DestroyConnection@CSuplCommunicationManager@@QAEHPAVCSuplConnection@@@Z @ 20 NONAME ; int CSuplCommunicationManager::DestroyConnection(class CSuplConnection *)
- ?NewL@CSUPLProtocolManagerBase@@SAPAV1@ABVTUid@@@Z @ 21 NONAME ; class CSUPLProtocolManagerBase * CSUPLProtocolManagerBase::NewL(class TUid const &)
- ?SetPacketReceiver@CSuplCommunicationManager@@QAEXPAVMSuplPacketReceiver@@@Z @ 22 NONAME ; void CSuplCommunicationManager::SetPacketReceiver(class MSuplPacketReceiver *)
- ??1CSUPLProtocolManagerBase@@UAE@XZ @ 23 NONAME ; CSUPLProtocolManagerBase::~CSUPLProtocolManagerBase(void)
- ?CreateConnectionL@CSuplCommunicationManager@@QAEPAVCSuplConnection@@ABVTDesC16@@IH@Z @ 24 NONAME ; class CSuplConnection * CSuplCommunicationManager::CreateConnectionL(class TDesC16 const &, unsigned int, int)
+ ?Connect@CSuplConnection@@QAEXAAVTRequestStatus@@HH@Z @ 1 NONAME ; void CSuplConnection::Connect(class TRequestStatus &, int, int)
+ ?ConstructL@CSUPLProtocolManagerBase@@UAEXABVTUid@@@Z @ 2 NONAME ; void CSUPLProtocolManagerBase::ConstructL(class TUid const &)
+ ??0CSUPLProtocolManagerBase@@QAE@XZ @ 3 NONAME ; CSUPLProtocolManagerBase::CSUPLProtocolManagerBase(void)
+ ?CancelListenToMessages@CSuplConnection@@QAEXXZ @ 4 NONAME ; void CSuplConnection::CancelListenToMessages(void)
+ ?ImplementationUid@CSUPLProtocolManagerBase@@QBE?AVTUid@@XZ @ 5 NONAME ; class TUid CSUPLProtocolManagerBase::ImplementationUid(void) const
+ ?CancelSend@CSuplConnection@@QAEXAAVTRequestStatus@@@Z @ 6 NONAME ; void CSuplConnection::CancelSend(class TRequestStatus &)
+ ?ListenToMessages@CSuplConnection@@QAEHXZ @ 7 NONAME ; int CSuplConnection::ListenToMessages(void)
+ ?GetSUPLMessageVersionL@CSUPLProtocolManagerBase@@UAEHAAHABVTDesC8@@@Z @ 8 NONAME ; int CSUPLProtocolManagerBase::GetSUPLMessageVersionL(int &, class TDesC8 const &)
+ ?Version@CSUPLProtocolManagerBase@@QBEHXZ @ 9 NONAME ; int CSUPLProtocolManagerBase::Version(void) const
+ ??1CSuplCommunicationManager@@UAE@XZ @ 10 NONAME ; CSuplCommunicationManager::~CSuplCommunicationManager(void)
+ ?Connect@CSuplConnection@@QAEXAAVTRequestStatus@@@Z @ 11 NONAME ; void CSuplConnection::Connect(class TRequestStatus &)
+ ?GetPortNumberUsed@CSuplConnection@@QAEHXZ @ 12 NONAME ; int CSuplConnection::GetPortNumberUsed(void)
+ ?Initialize@CSuplCommunicationManager@@QAEHXZ @ 13 NONAME ; int CSuplCommunicationManager::Initialize(void)
+ ?GetLocalIPAddress@CSuplConnection@@QAEHAAVTInetAddr@@@Z @ 14 NONAME ; int CSuplConnection::GetLocalIPAddress(class TInetAddr &)
+ ?NewL@CSUPLProtocolManagerBase@@SAPAV1@ABVTDesC8@@@Z @ 15 NONAME ; class CSUPLProtocolManagerBase * CSUPLProtocolManagerBase::NewL(class TDesC8 const &)
+ ?NewL@CSuplCommunicationManager@@SAPAV1@XZ @ 16 NONAME ; class CSuplCommunicationManager * CSuplCommunicationManager::NewL(void)
+ ?Send@CSuplConnection@@QAEXABVTDesC8@@AAVTRequestStatus@@@Z @ 17 NONAME ; void CSuplConnection::Send(class TDesC8 const &, class TRequestStatus &)
+ ?CreateConnectionL@CSuplCommunicationManager@@QAEPAVCSuplConnection@@ABVTDesC16@@HHIH@Z @ 18 NONAME ; class CSuplConnection * CSuplCommunicationManager::CreateConnectionL(class TDesC16 const &, int, int, unsigned int, int)
+ ?CloseConnection@CSuplConnection@@QAEXXZ @ 19 NONAME ; void CSuplConnection::CloseConnection(void)
+ ?CancelConnect@CSuplConnection@@QAEXAAVTRequestStatus@@@Z @ 20 NONAME ; void CSuplConnection::CancelConnect(class TRequestStatus &)
+ ?DestroyConnection@CSuplCommunicationManager@@QAEHPAVCSuplConnection@@@Z @ 21 NONAME ; int CSuplCommunicationManager::DestroyConnection(class CSuplConnection *)
+ ?NewL@CSUPLProtocolManagerBase@@SAPAV1@ABVTUid@@@Z @ 22 NONAME ; class CSUPLProtocolManagerBase * CSUPLProtocolManagerBase::NewL(class TUid const &)
+ ?SetPacketReceiver@CSuplCommunicationManager@@QAEXPAVMSuplPacketReceiver@@@Z @ 23 NONAME ; void CSuplCommunicationManager::SetPacketReceiver(class MSuplPacketReceiver *)
+ ??1CSUPLProtocolManagerBase@@UAE@XZ @ 24 NONAME ; CSUPLProtocolManagerBase::~CSUPLProtocolManagerBase(void)
+ ?CreateConnectionL@CSuplCommunicationManager@@QAEPAVCSuplConnection@@ABVTDesC16@@IH@Z @ 25 NONAME ; class CSuplConnection * CSuplCommunicationManager::CreateConnectionL(class TDesC16 const &, unsigned int, int)
--- a/supl/locationsuplfw/protocolhandlerapi/eabi/epossuplprotocolhandlerpluginu.def Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/protocolhandlerapi/eabi/epossuplprotocolhandlerpluginu.def Thu Jul 22 16:37:56 2010 +0100
@@ -8,31 +8,32 @@
_ZN15CSuplConnection22CancelListenToMessagesEv @ 7 NONAME
_ZN15CSuplConnection4SendERK6TDesC8R14TRequestStatus @ 8 NONAME
_ZN15CSuplConnection7ConnectER14TRequestStatus @ 9 NONAME
- _ZN24CSUPLProtocolManagerBase10ConstructLERK4TUid @ 10 NONAME
- _ZN24CSUPLProtocolManagerBase22GetSUPLMessageVersionLERiRK6TDesC8 @ 11 NONAME
- _ZN24CSUPLProtocolManagerBase4NewLERK4TUid @ 12 NONAME
- _ZN24CSUPLProtocolManagerBase4NewLERK6TDesC8 @ 13 NONAME
- _ZN24CSUPLProtocolManagerBaseC2Ev @ 14 NONAME
- _ZN24CSUPLProtocolManagerBaseD0Ev @ 15 NONAME
- _ZN24CSUPLProtocolManagerBaseD1Ev @ 16 NONAME
- _ZN24CSUPLProtocolManagerBaseD2Ev @ 17 NONAME
- _ZN25CSuplCommunicationManager10InitializeEv @ 18 NONAME
- _ZN25CSuplCommunicationManager17CreateConnectionLERK7TDesC16iiji @ 19 NONAME
- _ZN25CSuplCommunicationManager17CreateConnectionLERK7TDesC16ji @ 20 NONAME
- _ZN25CSuplCommunicationManager17DestroyConnectionEP15CSuplConnection @ 21 NONAME
- _ZN25CSuplCommunicationManager17SetPacketReceiverEP19MSuplPacketReceiver @ 22 NONAME
- _ZN25CSuplCommunicationManager4NewLEv @ 23 NONAME
- _ZN25CSuplCommunicationManagerD0Ev @ 24 NONAME
- _ZN25CSuplCommunicationManagerD1Ev @ 25 NONAME
- _ZN25CSuplCommunicationManagerD2Ev @ 26 NONAME
- _ZNK24CSUPLProtocolManagerBase17ImplementationUidEv @ 27 NONAME
- _ZNK24CSUPLProtocolManagerBase7VersionEv @ 28 NONAME
- _ZTI15CSuplConnection @ 29 NONAME
- _ZTI17CSuplSocketReader @ 30 NONAME
- _ZTI24CSUPLProtocolManagerBase @ 31 NONAME
- _ZTI25CSuplCommunicationManager @ 32 NONAME
- _ZTV15CSuplConnection @ 33 NONAME
- _ZTV17CSuplSocketReader @ 34 NONAME
- _ZTV24CSUPLProtocolManagerBase @ 35 NONAME
- _ZTV25CSuplCommunicationManager @ 36 NONAME
+ _ZN15CSuplConnection7ConnectER14TRequestStatusii @ 10 NONAME
+ _ZN24CSUPLProtocolManagerBase10ConstructLERK4TUid @ 11 NONAME
+ _ZN24CSUPLProtocolManagerBase22GetSUPLMessageVersionLERiRK6TDesC8 @ 12 NONAME
+ _ZN24CSUPLProtocolManagerBase4NewLERK4TUid @ 13 NONAME
+ _ZN24CSUPLProtocolManagerBase4NewLERK6TDesC8 @ 14 NONAME
+ _ZN24CSUPLProtocolManagerBaseC2Ev @ 15 NONAME
+ _ZN24CSUPLProtocolManagerBaseD0Ev @ 16 NONAME
+ _ZN24CSUPLProtocolManagerBaseD1Ev @ 17 NONAME
+ _ZN24CSUPLProtocolManagerBaseD2Ev @ 18 NONAME
+ _ZN25CSuplCommunicationManager10InitializeEv @ 19 NONAME
+ _ZN25CSuplCommunicationManager17CreateConnectionLERK7TDesC16iiji @ 20 NONAME
+ _ZN25CSuplCommunicationManager17CreateConnectionLERK7TDesC16ji @ 21 NONAME
+ _ZN25CSuplCommunicationManager17DestroyConnectionEP15CSuplConnection @ 22 NONAME
+ _ZN25CSuplCommunicationManager17SetPacketReceiverEP19MSuplPacketReceiver @ 23 NONAME
+ _ZN25CSuplCommunicationManager4NewLEv @ 24 NONAME
+ _ZN25CSuplCommunicationManagerD0Ev @ 25 NONAME
+ _ZN25CSuplCommunicationManagerD1Ev @ 26 NONAME
+ _ZN25CSuplCommunicationManagerD2Ev @ 27 NONAME
+ _ZNK24CSUPLProtocolManagerBase17ImplementationUidEv @ 28 NONAME
+ _ZNK24CSUPLProtocolManagerBase7VersionEv @ 29 NONAME
+ _ZTI15CSuplConnection @ 30 NONAME
+ _ZTI17CSuplSocketReader @ 31 NONAME
+ _ZTI24CSUPLProtocolManagerBase @ 32 NONAME
+ _ZTI25CSuplCommunicationManager @ 33 NONAME
+ _ZTV15CSuplConnection @ 34 NONAME
+ _ZTV17CSuplSocketReader @ 35 NONAME
+ _ZTV24CSUPLProtocolManagerBase @ 36 NONAME
+ _ZTV25CSuplCommunicationManager @ 37 NONAME
--- a/supl/locationsuplfw/protocolhandlerapi/group/epos_suplprotocolhandlerplugin.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/protocolhandlerapi/group/epos_suplprotocolhandlerplugin.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -55,5 +55,5 @@
LIBRARY flogger.lib
/* LIBRARY gba.lib */
-exportunfrozen
+//exportunfrozen
epocallowdlldata
--- a/supl/locationsuplfw/protocolhandlerapi/inc/epos_csuplconnection.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/protocolhandlerapi/inc/epos_csuplconnection.h Thu Jul 22 16:37:56 2010 +0100
@@ -88,6 +88,17 @@
* @return void *
*/
IMPORT_C void Connect(TRequestStatus &aStatus);
+
+ /**
+ * A method that makes Socket Connection.
+ * @since Series 60 3.1
+ * @return None
+ * @param aPrompt used to show connection prompt using OCC Api's.
+ * @param aWlanOnly used to differentiate connection for GPRS and WLAN using OCC Api's
+ */
+ IMPORT_C void Connect(TRequestStatus &aStatus,TBool aPrompt,TBool aWlanOnly);
+
+
IMPORT_C void CloseConnection();
@@ -395,6 +406,10 @@
// Number of client connected
TInt iConnectClients;
+ TBool iPrompt;
+
+ TBool iWlanOnly;
+
};
#endif // C_CSUPLCONNECTION_H
--- a/supl/locationsuplfw/protocolhandlerapi/inc/epos_csuplprotocolmanagerbase.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/protocolhandlerapi/inc/epos_csuplprotocolmanagerbase.h Thu Jul 22 16:37:56 2010 +0100
@@ -29,7 +29,7 @@
//Forword Declarations
class CSuplSessionBase;
class CSuplCommunicationManager;
-
+class TGeoCellInfo;
/**
* Constant: KProtocolManagerInterfaceDefinitionUid
@@ -374,7 +374,35 @@
*/
virtual TInt GetSUPLMessageVersionL(TInt& aMajorVersion, const TDesC8& aReceivedMessage);
-
+ /**
+ * Function: MakeLocationConversionRequestL
+ *
+ * @Description: Makes Location conversion request
+ *
+ * @Param: aSuplSessn,session object on which processing will start
+ *
+ * @Param: aCellInfo,cell information which needs to be converted to geo-coordinates
+ *
+ * @Param: aStatus, On return, the status of the request
+ * @Returns: returns None
+ */
+
+ virtual void MakeLocationConversionRequestL( CSuplSessionBase* aSuplSessn,
+ TGeoCellInfo& aCellInfo,
+ TRequestStatus& aStatus ) = 0;
+
+
+ /**
+ * Function: CancelLocationConversionRequest
+ *
+ * @Description: Cancels the conversion Request
+ *
+ * @Param: Session Object
+ *
+ * @Returns: None
+ */
+
+ virtual void CancelLocationConversionRequest(CSuplSessionBase* aSuplSession) = 0;
public: // from MSuplPacketReceiver
--- a/supl/locationsuplfw/protocolhandlerapi/src/epos_csuplconnection.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/protocolhandlerapi/src/epos_csuplconnection.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -139,7 +139,9 @@
iConnectStarted(EFalse),
iSendInProgress(EFalse),
iFirstPkt(EFalse),
- iListenCount(0)
+ iListenCount(0),
+ iPrompt(EFalse),
+ iWlanOnly(EFalse)
{
iHostAddress.Zero();
CActiveScheduler::Add(this);
@@ -992,6 +994,106 @@
iTrace->Trace(_L("CSuplConnection::Connect:Exit"), KTraceFileName, __LINE__);
}
+
+// -----------------------------------------------------------------------------
+// CSuplConnection::Connect
+// Makes a secure connection to Network
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+
+EXPORT_C void CSuplConnection::Connect(TRequestStatus &aStatus,TBool aPrompt,TBool aWlanOnly)
+ {
+
+ // Log
+ iTrace->Trace(_L("CSuplConnection::Connect"), KTraceFileName, __LINE__);
+ iPrompt = aPrompt;
+ iWlanOnly = aWlanOnly;
+
+ if (iState == EConnected)
+ {
+ aStatus = KRequestPending;
+ TRequestStatus *reqStatus = &aStatus;
+ User::RequestComplete(reqStatus, KErrNone);
+ iConnectClients++;
+ return;
+ }
+
+ // Check if Connect() is started. If started, add status to Q
+ //if (iConnectStarted)
+ // {
+ aStatus = KRequestPending;
+ TRequestStatus *reqStatus = &aStatus;
+ iConnArray.Append(reqStatus);
+ // }
+
+ if (!iConnectStarted)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : Connection not started"), KTraceFileName, __LINE__);
+ // Connect only if not already connected
+ if(iState == ENotConnected || iState == EFailure)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : ENotConnected"), KTraceFileName, __LINE__);
+ iConnectStarted = ETrue;
+
+#ifndef __WINS__
+
+ iTrace->Trace(_L("CSuplConnection::Connect ExtendedConnPref"), KTraceFileName, __LINE__);
+
+ TExtendedConnPref OCCPrefs;
+ TConnPrefList prefList;
+
+ if(iWlanOnly)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : iWLANOnly used"), KTraceFileName, __LINE__);
+ OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerWLAN);
+ OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeInternet);
+ }
+ else
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect using OCC"), KTraceFileName, __LINE__);
+ iTrace->Trace(_L("CSuplConnection::Connect OCC GPRS Connection.."), KTraceFileName, __LINE__);
+ OCCPrefs.SetBearerSet(TExtendedConnPref::EExtendedConnBearerCellular);
+ OCCPrefs.SetSnapPurpose(CMManager::ESnapPurposeInternet);
+ }
+
+ if(!iPrompt)
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : silent connection"), KTraceFileName, __LINE__);
+ OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourConnSilent);
+ }
+ else
+ {
+ iTrace->Trace(_L("CSuplConnection::Connect : Dialog prompt"), KTraceFileName, __LINE__);
+ OCCPrefs.SetNoteBehaviour(TExtendedConnPref::ENoteBehaviourDefault);
+ }
+
+
+
+ TRAP_IGNORE(prefList.AppendL(&OCCPrefs));
+
+
+ TInt ret = iConnection.Open(iSocketServ);
+ // Start an Outgoing Connection with overrides
+ iConnection.Start(prefList,iStatus);
+ // Set state to ERetriveIAP
+ iState = ERetriveIAP;
+ SetActive();
+
+
+
+#else
+ ConnectIAP();
+#endif
+ }
+ }
+ else
+ iTrace->Trace(_L("CSuplConnection::Connect : Conn in progress, request queued"), KTraceFileName, __LINE__);
+ // Log
+ iTrace->Trace(_L("CSuplConnection::Connect:Exit"), KTraceFileName, __LINE__);
+ }
+
+
// -----------------------------------------------------------------------------
// CSuplConnection::CompleteConnectStatus
// Completes the request to cancel connection
--- a/supl/locationsuplfw/settingsapi/inc/epos_csuplsettingsinternalcrkeys.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/settingsapi/inc/epos_csuplsettingsinternalcrkeys.h Thu Jul 22 16:37:56 2010 +0100
@@ -33,5 +33,6 @@
const TUint32 KSuplSessionDBEvent = 0x00000009;
const TUint32 KSuplSessionDBChangedSessionId = 0x0000000A;
const TUint32 KSuplSettingsTriggerServiceStatus = 0x0000000B;
+const TUint32 KSuplGeoInfoConvServerName = 0x0000000C;
#endif //SUPLSETTINGSINTERNALCRKEYS_H
--- a/supl/locationsuplfw/terminalinitiationapi/bwins/epos_suplterminitiationu.def Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/terminalinitiationapi/bwins/epos_suplterminitiationu.def Thu Jul 22 16:37:56 2010 +0100
@@ -53,4 +53,7 @@
?GetPosition@RSuplTerminalSubSession@@QAEHAAVTPositionInfoBase@@@Z @ 52 NONAME ; int RSuplTerminalSubSession::GetPosition(class TPositionInfoBase &)
?ConstructL@CSuplSubSessnPtrHolder@@IAEXHH@Z @ 53 NONAME ; void CSuplSubSessnPtrHolder::ConstructL(int, int)
?NewL@CSuplSubSessnPtrHolder@@SAPAV1@HH@Z @ 54 NONAME ; class CSuplSubSessnPtrHolder * CSuplSubSessnPtrHolder::NewL(int, int)
+ ?CancelLocationConversion@RSuplTerminalInternal@@QAEXXZ @ 55 NONAME ; void RSuplTerminalInternal::CancelLocationConversion(void)
+ ??0RSuplTerminalInternal@@QAE@XZ @ 56 NONAME ; RSuplTerminalInternal::RSuplTerminalInternal(void)
+ ?ConvertAreaInfoToCoordinates@RSuplTerminalInternal@@QAEXAAVTRequestStatus@@AAUTGeoCellInfo@@@Z @ 57 NONAME ; void RSuplTerminalInternal::ConvertAreaInfoToCoordinates(class TRequestStatus &, struct TGeoCellInfo &)
--- a/supl/locationsuplfw/terminalinitiationapi/eabi/epos_suplterminitiationu.def Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/terminalinitiationapi/eabi/epos_suplterminitiationu.def Thu Jul 22 16:37:56 2010 +0100
@@ -68,4 +68,8 @@
_ZTV19CSuplTerminalParams @ 67 NONAME
_ZTV22CSuplSubSessnPtrHolder @ 68 NONAME
_ZTV23RSuplTerminalSubSession @ 69 NONAME
+ _ZN21RSuplTerminalInternal24CancelLocationConversionEv @ 70 NONAME
+ _ZN21RSuplTerminalInternal28ConvertAreaInfoToCoordinatesER14TRequestStatusR12TGeoCellInfo @ 71 NONAME
+ _ZN21RSuplTerminalInternalC1Ev @ 72 NONAME
+ _ZN21RSuplTerminalInternalC2Ev @ 73 NONAME
--- a/supl/locationsuplfw/terminalinitiationapi/group/bld.inf Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/terminalinitiationapi/group/bld.inf Thu Jul 22 16:37:56 2010 +0100
@@ -23,6 +23,9 @@
PRJ_EXPORTS
../inc/epos_suplparameters.h MW_LAYER_PLATFORM_EXPORT_PATH(epos_suplparameters.h)
+../inc/epos_suplterminalinternal.h |../../../inc/epos_suplterminalinternal.h
+../inc/epos_suplgeocellinfo.h |../../../inc/epos_suplgeocellinfo.h
+
PRJ_MMPFILES
epos_suplterminalapi.mmp
--- a/supl/locationsuplfw/terminalinitiationapi/group/epos_suplterminalapi.mmp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/terminalinitiationapi/group/epos_suplterminalapi.mmp Thu Jul 22 16:37:56 2010 +0100
@@ -33,6 +33,7 @@
SOURCE epos_suplterminalqop.cpp
SOURCE epos_suplterminalparams.cpp
SOURCE epos_suplterminalperiodictrigger.cpp
+SOURCE epos_suplterminalinternal.cpp
USERINCLUDE ../inc
USERINCLUDE ../../../inc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationsuplfw/terminalinitiationapi/inc/epos_suplgeocellinfo.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2002-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: Data structure to hold cell information for geo tagging purposes.
+*
+*/
+
+/*! \file epos_suplgeocellinfo.h
+ \brief Triggering classes
+*/
+
+#ifndef __EPOS_SUPLGEOCELLINFO_H__
+#define __EPOS_SUPLGEOCELLINFO_H__
+
+// ==========================================
+
+/**
+ * Cell types
+ */
+enum TGeoCellType
+ {
+ /** GSM Cell. */
+ EGeoGsmCell = 0,
+ /** WCDMA cell. */
+ EGeoWcdmaCell = 1
+ };
+
+/**
+ * Class defines detailed information for gsm/wcdma cell.
+ *
+ * @since S60 5.2
+ */
+struct TGeoCellInfo
+ {
+ TInt iMNC;
+ TInt iMCC;
+ TInt iCid;
+ TInt iLac;
+ TBool iConnectionPrompt;
+ TBool iWlanOnly;
+ TGeoCellType iGeoCellType;
+ };
+
+#endif //__EPOS_SUPLGEOCELLINFO_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationsuplfw/terminalinitiationapi/inc/epos_suplterminalinternal.h Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2002-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: SUPL Terminal Initiation internal class
+*
+*/
+
+#ifndef __EPOS_SUPLTERMINALINTERNAL_H__
+#define __EPOS_SUPLTERMINALINTERNAL_H__
+
+
+#include <epos_suplterminal.h>
+
+#include "epos_suplgeocellinfo.h"
+
+
+// Forward declarations
+
+/**
+ * This class is used to make request to convert area information to geo-coordinates.
+ */
+class RSuplTerminalInternal : public RSuplTerminalSubSession
+ {
+
+
+public:
+ /**
+ * Constructor for RSuplTerminalInternal
+ *
+ */
+ IMPORT_C RSuplTerminalInternal();
+
+ /**
+ * This is an asynchronous request to SUPL Server to determine position
+ * information corresponding to given area information.
+ * Client can have only one outstanding asynchronous request per sub-session.
+ * @param [OUT] aStatus to return result code
+ * @param[IN] aGeoCellInfo Cell information
+ * @return aStatus will have
+ * - KErrNone if request is completed sucessfully.
+ * - KErrCancel if the request was successfully cancelled
+ * - KErrNotReady if SUPL server is not ready to determine position information,
+ * client can retry after sometime.
+ * - KErrAlreadyExists if there is already an ongoing request on sub-session.
+ * - KErrServerTerminated if server got terminated due to some error
+ * - KErrNotSupported if function is called when Session is NOT Opened with SUPL_1_0 service
+ * - KErrGeneral for all other errors
+ *
+ */
+
+ IMPORT_C void ConvertAreaInfoToCoordinates(
+ TRequestStatus& aStatus,
+ TGeoCellInfo& aGeoCellInfo );
+
+ /**
+ * Cancels an outstanding asynchronous conversion request issued via ConvertAreaInfoToCoordinates
+ * Canceling requests is typically attempted when an client
+ * is closing down.
+ *
+ */
+ IMPORT_C void CancelLocationConversion();
+
+private:
+ //Cell Information
+ TGeoCellInfo iGeoCellInfo;
+
+ //To check if conversion request has issued or not
+ TBool iConversionRequestIssued;
+ };
+
+#endif // __EPOS_SUPLTERMINALINTERNAL_H__
--- a/supl/locationsuplfw/terminalinitiationapi/inc/epos_suplterminalipc.h Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/locationsuplfw/terminalinitiationapi/inc/epos_suplterminalipc.h Thu Jul 22 16:37:56 2010 +0100
@@ -61,7 +61,8 @@
ESuplTerminalSubssnStartPeriodicTriggerWithServer,
ESuplTerminalSubssnNotifyTriggerFired,
ESuplTerminalSubssnStopTriggerSession,
-
+ ESuplTerminalSubssnLocationConversion,
+ ESuplTerminalSubssnCancelLocationConversion,
ESuplSubssnCustomCodesBegin = ESuplCustomIpcOffset,
};
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/supl/locationsuplfw/terminalinitiationapi/src/epos_suplterminalinternal.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -0,0 +1,95 @@
+/*
+* Copyright (c) 2002-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: Client-Server communication
+*
+*/
+#include <s32mem.h>
+#include <e32std.h>
+
+#include "epos_suplterminalinternal.h"
+#include "epos_suplterminalipc.h"
+#include "epos_suplterminalerrors.h"
+#include "epos_suplterminalptrholder.h"
+
+//-----------------------------------------------------------------------------
+// RSuplTerminalInternal
+//-----------------------------------------------------------------------------
+
+// -----------------------------------------------------------------------------
+// RSuplTerminalInternal::RSuplTerminalInternal()
+// C++ default constructor can NOT contain any code, that might leave.
+// -----------------------------------------------------------------------------
+//
+EXPORT_C RSuplTerminalInternal::RSuplTerminalInternal()
+ : iConversionRequestIssued( EFalse )
+ {
+ }
+
+// ---------------------------------------------------------
+// RSuplTerminalInternal::ConvertAreaInfoToCoordinates
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void RSuplTerminalInternal::ConvertAreaInfoToCoordinates( TRequestStatus& aStatus,
+ TGeoCellInfo& aGeoCellInfo )
+ {
+ __ASSERT_ALWAYS(SubSessionHandle(),
+ User::Panic(KSuplClientFault, ESuplServerBadHandle));
+
+ // Currently only SUPL 1.0 supports cell to geo-coordinates conversion.
+ if( iSuplService != ESUPL_1_0 )
+ {
+ TRequestStatus *status = &aStatus;
+ User::RequestComplete(status,KErrNotSupported);
+ return;
+ }
+
+ // Fill the values of data member
+ iGeoCellInfo.iMNC = aGeoCellInfo.iMNC;
+ iGeoCellInfo.iMCC = aGeoCellInfo.iMCC;
+ iGeoCellInfo.iCid = aGeoCellInfo.iCid;
+ iGeoCellInfo.iLac = aGeoCellInfo.iLac;
+ iGeoCellInfo.iConnectionPrompt = aGeoCellInfo.iConnectionPrompt;
+ iGeoCellInfo.iWlanOnly = aGeoCellInfo.iWlanOnly; //OCC
+ iGeoCellInfo.iGeoCellType = aGeoCellInfo.iGeoCellType;
+
+ iPtrHolder->Ptr(0).Set(
+ reinterpret_cast<TUint8*>(&iGeoCellInfo),
+ sizeof(iGeoCellInfo),sizeof(iGeoCellInfo));
+
+ TIpcArgs args;
+
+ args.Set(0,&iPtrHolder->Ptr(0));
+ iConversionRequestIssued = ETrue;
+ SendReceive(ESuplTerminalSubssnLocationConversion, args, aStatus);
+ }
+
+// ---------------------------------------------------------
+// RSuplTerminalInternal::CancelLocationConversion
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+EXPORT_C void RSuplTerminalInternal::CancelLocationConversion()
+ {
+ __ASSERT_ALWAYS(SubSessionHandle(),
+ User::Panic(KSuplClientFault, ESuplServerBadHandle));
+ if( iConversionRequestIssued )
+ {
+ iConversionRequestIssued = EFalse;
+ SendReceive(ESuplTerminalSubssnCancelLocationConversion);
+ }
+ }
+// end of file
--- a/supl/supltiapiimplementation/src/lbssupltirequestmanager.cpp Tue Jun 15 11:38:32 2010 +0100
+++ b/supl/supltiapiimplementation/src/lbssupltirequestmanager.cpp Thu Jul 22 16:37:56 2010 +0100
@@ -165,10 +165,12 @@
//
void CCLbsSuplTiRequestManager::CloseSession()
{
- iTrace->Trace(_L("CCLbsSuplTiRequestManager::CloseSession() start"), KTraceFileName, __LINE__);
+ if(iTrace)
+ iTrace->Trace(_L("CCLbsSuplTiRequestManager::CloseSession() start"), KTraceFileName, __LINE__);
iRequestorCollection.ResetAndDestroy(); //cancels all active requests
iServer.Close();
- iTrace->Trace(_L("CCLbsSuplTiRequestManager::CloseSession() end"), KTraceFileName, __LINE__);
+ if(iTrace)
+ iTrace->Trace(_L("CCLbsSuplTiRequestManager::CloseSession() end"), KTraceFileName, __LINE__);
}
// -----------------------------------------------------------------------------
// CCLbsSuplTiRequestManager::FindSessionId