landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP55.cpp
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP55.cpp	Tue Aug 31 15:37:04 2010 +0300
@@ -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 "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: 
+*   ?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