lbstest/lbstestproduct/lbssimulationpsy/src/ctlbssimulationpsypostp115.cpp
changeset 0 9cfd9a3ee49c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/lbssimulationpsy/src/ctlbssimulationpsypostp115.cpp	Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,1608 @@
+// Copyright (c) 2001-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:
+//
+
+
+
+//  INCLUDES
+#include "ctlbssimulationpsypostp115.h"
+#include "ctlbssimulationpsyposnmeafilereader.h"
+#include "ctlbssimulationpsyfixconstants.h"
+
+
+// CONSTANTS
+const TInt KEPosAndPsyOverheadTime = 2000000; // Accepted EPos overhead delay
+
+// KMaxNrOfFixes is the maximum nr of requests we accept. If expected result has 
+// not been achieved after this amount of fixes the test is considered to be unsuccessful
+const TInt KMaxNrOfFixes = 300;
+
+// KMinNrOfFixes is the minimum nr of fixes we require to be allowed to say that
+// the expected result was achieved.
+const TInt KMinNrOfFixes = 25;
+
+// Nr of tests in this TP
+const TInt KNrOfTests = 13;
+
+// Nr of NMEA PSY types existing, 
+const TInt KNrOfNMEATypes = 6;
+
+const TInt KMaxStringLength = 50;
+
+_LIT(KService, "service");
+
+_LIT(KName0, "TP115 - SimPSY, NMEA raw data");
+_LIT(KName1, "TP115 - SimPSY, power-up time");
+_LIT(KName2, "TP115 - SimPSY, time to fix");
+_LIT(KName3, "TP115 - SimPSY, deterministic failure");
+_LIT(KName4, "TP115 - SimPSY, random failure");
+_LIT(KName5, "TP115 - SimPSY, altitude");
+_LIT(KName6, "TP115 - SimPSY, latitude and longitude");
+_LIT(KName7, "TP115 - SimPSY, movement");
+_LIT(KName8, "TP115 - SimPSY, bad input parameters");
+_LIT(KName9, "TP115 - Extended1 NMEA raw data");
+_LIT(KName10, "TP115 - Extended2 NMEA raw data");
+_LIT(KName11, "TP115 - SimPSY, correct fixes");
+_LIT(KName12, "TP115 - SimPSY, correct timing after cancel");
+
+ 
+#ifdef __WINS__
+  // Nmea raw data files
+  _LIT(KMagellanGPS315, "z:\\system\\test\\testdata\\MagellanGPS315.nme");
+  _LIT(KFix10MagellanGPS315, "z:\\system\\test\\testdata\\Fix10MagellanGPS315.nme");
+  _LIT(KMagellanTracker, "z:\\system\\test\\testdata\\MagellanTracker.nme");
+  _LIT(KGarmin12cx, "z:\\system\\test\\testdata\\garmin12cx.nme");
+  _LIT(KGarmin3plus, "z:\\system\\test\\testdata\\garmin3plus.nme");
+  _LIT(KGarminetrexlegend, "z:\\system\\test\\testdata\\garminetrexlegend.nme");
+  _LIT(KMagellanMeridian, "z:\\system\\test\\testdata\\magellanmeridianplatinum.nme");
+  //Ini files to corresponding nmea raw data file
+  _LIT(KMagellanTrackerIni, "z:\\system\\test\\testdata\\MagellanTracker.ini");
+  _LIT(KGarmin12cxIni, "z:\\system\\test\\testdata\\garmin12cx.ini");
+  _LIT(KGarmin3plusIni, "z:\\system\\test\\testdata\\garmin3plus.ini");
+  _LIT(KGarminetrexlegendIni, "z:\\system\\test\\testdata\\garminetrexlegend.ini");
+  _LIT(KMagellanMeridianIni, "z:\\system\\test\\testdata\\magellanmeridianplatinum.ini");
+#else
+   // Nmea raw data files
+  _LIT(KMagellanGPS315, "c:\\system\\test\\testdata\\MagellanGPS315.nme");
+  _LIT(KFix10MagellanGPS315, "c:\\system\\test\\testdata\\Fix10MagellanGPS315.nme");
+  _LIT(KMagellanTracker, "c:\\system\\test\\testdata\\MagellanTracker.nme");
+  _LIT(KGarmin12cx, "c:\\system\\test\\testdata\\garmin12cx.nme");
+  _LIT(KGarmin3plus, "c:\\system\\test\\testdata\\garmin3plus.nme");
+  _LIT(KGarminetrexlegend, "c:\\system\\test\\testdata\\garminetrexlegend.nme");
+  _LIT(KMagellanMeridian, "c:\\system\\test\\testdata\\magellanmeridianplatinum.nme");
+#endif
+
+// ================= MEMBER FUNCTIONS =======================
+  
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+ CT_LbsSimulationPSYPosTp115::CT_LbsSimulationPSYPosTp115(CT_LbsServer& aParent, TInt aIndex): CT_LbsPortedStepBase(aParent)
+  	{  
+  	TBuf<KMaxStringLength> aName;
+  	GetIndexName(aIndex,aName);
+  	SetTestStepName(aName);
+  	iIndex = aIndex;
+  	}
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsSimulationPSYPosTp115::~CT_LbsSimulationPSYPosTp115()
+  	{
+  	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::StartL()
+    {
+    // Setup test environment
+  
+    iNrOfRequests = 0;
+    ConnectL();
+    SetupPsyL(iUidSimulationPsy);
+
+    TRAPD(err, ReplaceSwitchInTrapL(iIndex));
+
+    if (err != KErrNone)
+        {
+        ClosePositioner();
+        }
+
+    Disconnect();
+    // Wait for EPos server to terminate
+    User::After(2500000);
+
+    if (err != KErrNone)
+        {
+        User::Leave(err);
+        }    
+  }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::GetIndexName
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::GetIndexName(TInt aIndex, TDes& aName) const
+    {
+    const TDesC* names[KNrOfTests] = {&KName0, &KName1, &KName2, &KName3, &KName4,
+                                      &KName5, &KName6, &KName7, &KName8, &KName9, &KName10, &KName11, &KName12};
+    aName = *names[aIndex];
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestSimulationNmeaReaderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestSimulationNmeaReaderL(const TDesC& aNMEASource)
+    {
+    const TInt KMaxNmeaSentenceLength = 82; // The maximum length of an NMEA sentence
+    _LIT(KNmeaDataMismatchError1, "NMEA data mismatch. NMEA data from Simulation Psy:");
+    _LIT(KNmeaDataMismatchError2, "NMEA data read from input file:");
+    _LIT(KNmeaSetError, "Not possible to set retrieval of request data");
+    _LIT(KNmeaSetError2, "The field is not in the desired fields list");
+    _LIT(KNmeaNoDataError, "No data returned from NMEA positioner");
+    _LIT(KNmeaGetError, "Error when calling GetValue() %d");
+    _LIT(KNmeaGetError2, "Error when calling GetValue(), field could not be found %d");
+    _LIT(KNmeaPositionError, "Position (lat/long/alt) is not a real finite number");
+    _LIT(KReqError, "Position could not be requested, err %d");
+    _LIT(KStart, "Testing TestSimulationNmeaReaderL() PSY:");
+    _LIT(KEnd, "TestSimulationNmeaReaderL() passed");
+
+    TInt err = 0;
+    
+    // Set correct data file
+    SetSimDataFileL(aNMEASource);
+        
+    _LIT(KServiceName, "SAAA");
+
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    TBuf<200> buf;
+    buf.Append(KStart);
+	buf.Append(aNMEASource);
+    INFO_PRINTF1(buf);
+
+    //Check that SimPSY supports TPositionInfo   
+    TPositionInfo posInfo = TPositionInfo();
+
+     // Request data from simulation psy
+     err = PerformSyncRequest(KServiceName, &posInfo);
+    
+    AssertTrueL(err == KErrNone, KReqError, err);
+    
+    TPosition position = TPosition();
+    posInfo.GetPosition(position);
+    
+    TReal64 lat = position.Latitude();
+    TReal64 lon = position.Longitude();
+   
+    // FrBo Add check that nmea data is correctly compiled into position
+    if (!Math::IsFinite(lat))
+    {
+      LogErrorAndLeaveL(KNmeaPositionError);
+    }
+    if (!Math::IsFinite(lon))
+    {
+      LogErrorAndLeaveL(KNmeaPositionError);
+    }
+
+    ClosePositioner();
+
+    // Check that  Simulation PSY supports HPositionGenericInfo
+
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+    CT_LbsSimulationPSYPosNmeaFileReader* fileReader = CT_LbsSimulationPSYPosNmeaFileReader::NewLC(aNMEASource);
+
+    // Do everything two times just to test that it is
+    // possible to do two NotifyPositionUpdate()
+    for (TInt j=0; j<2; j++)
+      {
+      TBuf8<KMaxNmeaSentenceLength> nmeaDataFromFile;
+      
+      HPositionGenericInfo* genericInfo = HPositionGenericInfo::NewLC();
+      
+      AssertTrueL(genericInfo->SetRequestedField(EPositionFieldNMEASentences) == KErrNone, KNmeaSetError, -1);
+      AssertTrueL(genericInfo->SetRequestedField(EPositionFieldNMEASentencesStart) == KErrNone, KNmeaSetError, -1);
+      
+      // Request data from simulation psy
+      err = PerformSyncRequest(KServiceName, genericInfo);
+      
+      AssertTrueL(err == KErrNone, KReqError, err);
+      
+      TPosition position = TPosition();
+      genericInfo->GetPosition(position);
+      
+      TReal64 lat = position.Latitude();
+      TReal64 lon = position.Longitude();
+      
+      // FrBo Add check that nmea data is correctly compiled into position
+      if (!Math::IsFinite(lat))
+        {
+        LogErrorAndLeaveL(KNmeaPositionError);
+        }
+      if (!Math::IsFinite(lon))
+        {
+        LogErrorAndLeaveL(KNmeaPositionError);
+        }
+      
+      //Check that reuqested fields has been set    
+      AssertTrueL(genericInfo->IsRequestedField(EPositionFieldNMEASentences), KNmeaSetError2, -1);
+      AssertTrueL(genericInfo->IsRequestedField(EPositionFieldNMEASentencesStart), KNmeaSetError2, -1);
+      
+      TUint8 nrOfSentences;
+      err = genericInfo->GetValue(EPositionFieldNMEASentences, nrOfSentences);
+      
+      AssertTrueL(err != KErrNotFound, KNmeaGetError2, err);
+      AssertTrueL(err == KErrNone, KNmeaGetError, err);
+      
+      // Should always return something
+      AssertTrueL(nrOfSentences != 0, KNmeaNoDataError, -1);
+      
+      for (TInt i=0; i<nrOfSentences; i++)
+        {
+        TPtrC8 nmeaDataFromPsy;
+        TUint16 sentnr = static_cast<TUint16> (EPositionFieldNMEASentencesStart + i);
+        
+        genericInfo->GetValue(sentnr, nmeaDataFromPsy);
+        
+        User::LeaveIfError(fileReader->ReadNmeaSentence(nmeaDataFromFile));
+        
+        // Analyze NMEA data
+        if (nmeaDataFromPsy != nmeaDataFromFile)
+          {
+          ERR_PRINTF1(KNmeaDataMismatchError1);
+          INFO_PRINTF1(KNmeaDataMismatchError2);
+          User::Leave(KErrGeneral);
+          }
+        } // End for
+      CleanupStack::PopAndDestroy(genericInfo);
+      } // End for 
+    CleanupStack::PopAndDestroy(fileReader);
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::Extended2TestSimulationNmeaReaderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::Extended2TestSimulationNmeaReaderL(const TDesC& aNMEASource)
+    {
+    _LIT(KStart, "Testing Extended2TestSimulationNmeaReaderL() PSY: ");
+    _LIT(KEnd, "Extended2TestSimulationNmeaReaderL() passed");
+
+    TInt err = 0;
+    // Set correct nmea data file
+    SetSimDataFileL(aNMEASource);
+
+    TBuf<200> buf;
+    buf.Append(KStart);
+    buf.Append(aNMEASource);
+    INFO_PRINTF1(buf);
+
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    CT_LbsSimulationPSYPosNmeaFileReader* fileReader = CT_LbsSimulationPSYPosNmeaFileReader::NewLC(aNMEASource);
+    TPositionCourseInfo courseInfo = TPositionCourseInfo();
+    
+    // Request data from simulation psy
+    err = PerformSyncRequest(KService, &courseInfo);
+
+    _LIT(KERROR, "PerformSyncRequest Status should be OK when requesting TPositionCourseInfo");
+    AssertTrueL(err == KErrNone, KERROR, 0);
+    //<<New Code
+    //TODO The NMEA data from fileReader should be compared to data form courseInfo ?
+    
+    //>>Orginal Code
+    CleanupStack::PopAndDestroy(fileReader);
+    
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+
+void CT_LbsSimulationPSYPosTp115::Extended1TestSimulationNmeaReaderL(const TDesC& aNMEASource)
+  {
+    
+    // Set correct nmea data file
+    SetSimDataFileL(aNMEASource);
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+    
+    // Create HPositionGenericInfo object to pass to PerformSyncRequest method
+    HPositionGenericInfo* genericInfo = HPositionGenericInfo::NewLC();
+
+    _LIT(KErrKNMEA, "KNMEA Set error");
+    AssertTrueL(genericInfo->SetRequestedField(EPositionFieldSatelliteSeaLevelAltitude) == KErrNone, 
+    		KErrKNMEA, -1);
+    
+    // Request data from simulation psy
+    TInt err = PerformSyncRequest(KService, genericInfo);
+
+    //Assure that everything is OK
+    _LIT(KErrOpenSimpsy1, "Error when openeing simpsy1");
+    AssertTrueL(err == KErrNone, KErrOpenSimpsy1, err);
+          
+     TReal32 satelliteAltitude;
+    genericInfo->GetValue(EPositionFieldSatelliteSeaLevelAltitude, satelliteAltitude);
+    
+    CleanupStack::PopAndDestroy(genericInfo);
+    
+    ClosePositioner();
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+    
+   TPositionInfo posInfo = TPositionInfo();
+   err = PerformSyncRequest(KService, &posInfo);
+   _LIT(KErrOpenSimpsy2, "Error when openeing simpsy2");
+   AssertTrueL(err == KErrNone, KErrOpenSimpsy2, err);
+   
+   TPosition myPos = TPosition();
+        posInfo.GetPosition(myPos);
+   
+    ClosePositioner();
+}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestPowerUpTimeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestPowerUpTimeL()
+    {
+  // Time granularity on WINS is 0.1s (see ESLI-5HZKHN)
+#ifdef __WINS__
+    const TInt KPowerUpTime = 4900000;
+#else
+    const TInt KPowerUpTime = 5000000;
+#endif
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationPowerUp.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationPowerUp.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+    _LIT(KError1, "Error when requesting position");
+    _LIT(KStart, "Testing TestPowerUpTimeL()");
+    _LIT(KEnd, "TestPowerUpTimeL() passed");
+    INFO_PRINTF1(KStart);
+    
+    // Set correct data file
+    SetSimDataFileL(KSimulationSource);
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    TTime requestStart;
+    requestStart.UniversalTime();
+    
+    // Request a pos. fix
+    TPositionInfo posInfo = TPositionInfo();
+    TInt err = PerformSyncRequest(KService, &posInfo);
+    if (err != KErrNone)
+      {
+      LogErrorAndLeaveL(KError1);
+      }
+
+    // Measure power-up time
+    TTime requestFinished;
+    requestFinished.UniversalTime();
+    TTimeIntervalMicroSeconds requestTime = 
+        requestFinished.MicroSecondsFrom(requestStart);
+
+    // Time to complete first request should not be less than power-up time
+    if (requestTime.Int64() < KPowerUpTime || 
+        requestTime.Int64() > KPowerUpTime + KEPosAndPsyOverheadTime)
+        {
+        _LIT(KErr, "Power Up time = %d, is out of range");
+        iMsg.Format(KErr, requestTime.Int64());
+        LogErrorAndLeaveL(iMsg);
+        }
+
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestTimeToFixL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestTimeToFixL()
+    {
+  // Time granularity on WINS is 0.1s (see ESLI-5HZKHN)
+#ifdef __WINS__    
+    const TInt KTimeToFixMin = 2900000;
+    const TInt KTimeToFixMax = 5100000;
+#else
+    const TInt KTimeToFixMin = 3000000;
+    const TInt KTimeToFixMax = 5000000;
+#endif
+    const TInt KNrOfFixes    = 5;
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationTTF.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationTTF.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+    // Set correct data file
+    SetSimDataFileL(KSimulationSource);
+    
+    _LIT(KError1, "Error when requesting position");
+    _LIT(KStart, "Testing TestTimeToFixL()");
+    _LIT(KEnd, "TestTimeToFixL() passed");
+    INFO_PRINTF1(KStart);
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+   
+    TPositionInfo posInfo = TPositionInfo();
+
+    TTime requestStart, requestFinished;
+    TTimeIntervalMicroSeconds requestTime;
+    
+    // Request TTF for KNrOfFixes pos. fixes
+    for (TInt i = 1; i <= KNrOfFixes; i++)
+        {
+        requestStart.UniversalTime();
+        TInt err = PerformSyncRequest(KService, &posInfo);
+        if (err != KErrNone)
+          {
+          LogErrorAndLeaveL(KError1);
+          }
+
+        requestFinished.UniversalTime();
+        requestTime = requestFinished.MicroSecondsFrom(requestStart);
+
+        // Verify that request time is kept within boundaries
+        if (requestTime.Int64() < KTimeToFixMin ||
+            requestTime.Int64() > KTimeToFixMax + KEPosAndPsyOverheadTime)
+            {
+            _LIT(KErr, "Time to fix (request nr. %d) = %d, is out of range");
+            iMsg.Format(KErr, i, requestTime.Int64());
+            LogErrorAndLeaveL(iMsg);
+            }
+        }
+
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestDeterministicFailureL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CT_LbsSimulationPSYPosTp115::TestDeterministicFailureL()
+    {
+    const TInt KDeterministicFailureProbability = 3;
+    const TInt KNrOfFixes = 15;
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationDeterministic.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationDeterministic.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+    
+    // Set correct data file
+    SetSimDataFileL(KSimulationSource);
+
+    _LIT(KStart, "Testing TestDeterministicFailureL()");
+    _LIT(KEnd, "TestDeterministicFailureL() passed");
+    INFO_PRINTF1(KStart);
+    _LIT(KError1, "Wrong error occurred, was %d should be %d");
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    TPositionInfo posInfo = TPositionInfo();
+    // Request KNrOfFixes pos. fixes
+    for (TInt i = 1; i <= KNrOfFixes; i++)
+        {
+        TBool willFail = (i % KDeterministicFailureProbability == 0);
+        TInt expectedErrorCode = willFail ? KPositionQualityLoss : KErrNone;
+
+        TInt err = PerformSyncRequest(KService, &posInfo);
+        if (err != expectedErrorCode)
+          {
+          TBuf<100> buf;
+          buf.Format(KError1, err, expectedErrorCode);
+          LogErrorAndLeaveL(buf);
+          }
+        }
+
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestRandomFailureL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestRandomFailureL()
+    {
+    // KRandomFailureProbability is the probability that a fix fails (percentage)
+    const TReal64 KRandomFailureProbability = 33.33;
+    _LIT(KMsg, "Random fail rate was achieved, %f");
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationRandom.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationRandom.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+
+	// Set correct data file
+    SetSimDataFileL(KSimulationSource);
+    
+    _LIT(KStart, "Testing TestRandomFailureL()");
+    _LIT(KEnd, "TestRandomFailureL() passed");
+    INFO_PRINTF1(KStart);
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    TPositionInfo posInfo = TPositionInfo();
+    TInt nrOfFailedFixes = 0;
+    TReal64 failRate = 0;
+    TBool resultsAchieved = EFalse;
+    TInt err = KErrNone;
+
+    // Request as many pos. fixes as necessary to achieve fail rate
+    for (TInt i = 1; i <= KMaxNrOfFixes && !resultsAchieved; i++)
+        {
+        err = PerformSyncRequest(KService, &posInfo);
+        
+        if (err != KErrNone)
+            {
+            nrOfFailedFixes++;
+            }
+
+        if (i > KMinNrOfFixes)
+            {
+            failRate = (100.0 * nrOfFailedFixes) / i;
+            //need to make gap bit larger
+            if (Abs(failRate - KRandomFailureProbability) <= 6)
+                {
+                iMsg.Format(KMsg, failRate);
+                INFO_PRINTF1(iMsg);
+                resultsAchieved = ETrue;
+                }
+            }
+        }
+
+    if (!resultsAchieved)
+        {
+        iMsg.Format(KMsg, failRate);
+        LogErrorAndLeaveL(iMsg);
+        }
+
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestAltitudeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestAltitudeL()
+    {
+    const TInt KVerticalAccuracy = 30;
+    const TInt KMeanAltitude = 0;
+    _LIT(KMeanMsg, "Mean altitude of about zero meters was achieved, %f m");
+    _LIT(KStdDevMsg, "Standard deviation of altitude was achieved, %f");
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationPowerUp.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationPowerUp.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+   
+    // Set correct data file
+    SetSimDataFileL(KSimulationSource);
+    
+    _LIT(KStart, "Testing TestAltitudeL()");
+    _LIT(KEnd, "TestAltitudeL() passed");
+    _LIT(KError1, "Error when requesting location");
+    INFO_PRINTF1(KStart);
+
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    TPositionInfo posInfo = TPositionInfo();
+    TReal altitudeVariance = 0;
+    TReal altitudeStandardDeviation = 0;
+    TReal altitudeSum = 0;
+    TReal squaredAltitudeSum = 0;
+    TReal altitudeMean = 0;
+    TBool meanAchieved = EFalse, stdDevAchieved = EFalse;
+    
+    //need to change it because of the random genetatro which is not ideal
+    const TInt KAcceptedMeanError = 4;
+	const TInt KAcceptedStdError = 12;
+
+    // Request as many pos. fixes as necessary to achieve expected result
+    for (TInt i = 1; i <= KMaxNrOfFixes && !(meanAchieved && stdDevAchieved); i++)
+        {
+        TInt err = PerformSyncRequest(KService, &posInfo);
+           
+        if (err != KErrNone)
+          {
+          LogErrorAndLeaveL(KError1);
+          }
+        TPosition myPos = TPosition();
+        posInfo.GetPosition(myPos);
+        TReal32 altitude = myPos.Altitude();
+        TReal64 latitude = myPos.Latitude();
+                
+        TBuf<100> buf;
+        _LIT(KAltitude, "Altitude %g Lat: %g");
+        buf.Format(KAltitude, altitude, latitude);
+        INFO_PRINTF1(buf);
+        
+        // calculate altitudeMean
+        altitudeSum += altitude;
+        altitudeMean = altitudeSum / i;
+
+        // calculate altitudeVariance
+        squaredAltitudeSum += altitude*altitude;
+        if (i > 1)
+            {
+            altitudeVariance = ((squaredAltitudeSum-(altitudeSum * altitudeSum / i)) / (i-1));
+            }
+
+        if (i > KMinNrOfFixes)
+            {
+            // Check altitudeMean
+            TReal res = Abs(altitudeMean - KMeanAltitude);
+
+            // Log
+            TBuf<100> buf;
+            _LIT(KRes, "Mean. Alt.: %.9g");
+            buf.Format(KRes, res);
+            INFO_PRINTF1(buf);
+
+            // Check
+            if (!meanAchieved &&
+                Abs(altitudeMean - KMeanAltitude) <= KAcceptedMeanError)
+                {
+                meanAchieved = ETrue;
+                _LIT(KRes1, "meanAchieved: ETrue");
+                INFO_PRINTF1(KRes1);
+                
+                iMsg.Format(KMeanMsg, altitudeMean);
+                INFO_PRINTF1(iMsg);
+                }
+
+            // Check altitudeStdMean
+            if (!stdDevAchieved)
+                {
+                User::LeaveIfError(Math::Sqrt(altitudeStandardDeviation, altitudeVariance));
+
+                // Check standard deviation of altitude 
+                TReal res = Abs(altitudeStandardDeviation - KVerticalAccuracy);
+
+                // Log
+                _LIT(KStdDev, "Std. Dev. Alt.: %.9g");
+                buf.Format(KStdDev, res);
+                INFO_PRINTF1(buf);
+
+                // Check
+                if (res <= KAcceptedStdError)
+                    {
+                    stdDevAchieved = ETrue;
+                    _LIT(KRes1, "stdDevAchieved: ETrue");
+                    INFO_PRINTF1(KRes1);
+                    
+                    iMsg.Format(KStdDevMsg, altitudeStandardDeviation);
+                    INFO_PRINTF1(iMsg);
+                    }
+                }
+            }
+        }
+
+    // Log result
+    if (!meanAchieved || !stdDevAchieved)
+        {
+        if (!meanAchieved)
+            {
+            iMsg.Format(KMeanMsg, altitudeMean);
+            ERR_PRINTF1(iMsg);
+            }
+        if (!stdDevAchieved)
+            {
+            User::LeaveIfError(Math::Sqrt(altitudeStandardDeviation, altitudeVariance));
+            iMsg.Format(KStdDevMsg, altitudeStandardDeviation);
+            ERR_PRINTF1(iMsg);
+            }
+        User::Leave(KErrGeneral);
+        }
+
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestLongLatitudeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestLongLatitudeL()
+    {
+    const TInt KHorizontalAccuracy = 20;
+    const TReal64 KMeanLatitude = 78.338500;
+    const TReal64 KMeanLongitude = 56.338500;
+    // On earth surface KMetersPerDegree corresponds to an angle of 1 degree
+    // Following formula was used: 
+    // KMetersPerDegree = 2*pi*R / 360, where R = radius of earth = 6371010 m
+    const TReal KMetersPerDegree = 111195.10117748393677876603122949;
+    
+    _LIT(KMeanMsg, "Mean latitude and longitude was calculated to ; %10.7f ; %10.7f; respectively");
+    _LIT(KStdDevMsg, "Standard deviation of lat. and long. was calculated to ; %10.7f; %10.7f ; m resp.");
+    
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationNoMove.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationNoMove.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+
+	// Set correct data file
+    SetSimDataFileL(KSimulationSource);
+    
+    _LIT(KStart, "Testing TestLongLatitudeL()");
+    _LIT(KEnd, "TestLongLatitudeL() passed");
+    _LIT(KError1, "Error when requesting location");
+    INFO_PRINTF1(KStart);
+    
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+
+    TPositionInfo posInfo = TPositionInfo();
+
+    TReal longVar = 0,                 latVar = 0;
+    TReal longStdDev = 0,              latStdDev = 0;
+    TReal longitudeSum = 0,            latitudeSum = 0; 
+    TReal sumOfSquaredLongitudes = 0,  sumOfSquaredLatitudes = 0;
+    TReal longitudeMean = 0,           latitudeMean = 0;
+    TBool meanValuesAchieved = EFalse, stdDevAchieved = EFalse;
+
+    // Request as many pos. fixes as necessary to achieve expected result
+    for (TInt i = 1; i <= KMaxNrOfFixes && !(meanValuesAchieved && stdDevAchieved); i++)
+        {
+        TInt err = PerformSyncRequest(KService, &posInfo);
+        if (err != KErrNone)
+          {
+          LogErrorAndLeaveL(KError1);
+          }
+
+        TPosition myPos = TPosition();
+        posInfo.GetPosition(myPos);
+
+        TReal64 longitude = myPos.Longitude();
+        TReal64 latitude = myPos.Latitude();
+        
+        TBuf<100> buf;
+        _LIT(KLongLat, "Long %g Lat: %g");
+        buf.Format(KLongLat, longitude, latitude);
+        INFO_PRINTF1(buf);
+
+        // calculate longitudeMean
+        longitudeSum += longitude;
+        longitudeMean = longitudeSum / i;
+
+        // calculate latitudeMean
+        latitudeSum += latitude;
+        latitudeMean = latitudeSum / i;
+
+		const TInt KAcceptedMeanError = 2;
+		const TInt KAcceptedStdError = 4;
+		
+        // calculate longitudeVariance and latitudeVariance
+        sumOfSquaredLongitudes += longitude*longitude;
+        sumOfSquaredLatitudes += latitude*latitude;
+        if (i > 1)
+            {
+            longVar = ((sumOfSquaredLongitudes-(longitudeSum * longitudeSum / i)) / (i-1));
+            latVar = ((sumOfSquaredLatitudes-(latitudeSum * latitudeSum / i)) / (i-1));
+            }
+
+        if (i > KMinNrOfFixes)
+            {
+            TReal meanLat = Abs(latitudeMean - KMeanLatitude) * KMetersPerDegree;
+            TReal meanLong = Abs(longitudeMean - KMeanLongitude) * KMetersPerDegree;
+
+            // Log
+            _LIT(KMeanLongLat, "Mean. Long %.9g, Mean. Lat: %.9g");
+            buf.Format(KMeanLongLat, meanLong, meanLat);
+            INFO_PRINTF1(buf);
+
+            // Check latitudeMean and longitudeMean
+            if (!meanValuesAchieved &&
+                Abs(latitudeMean - KMeanLatitude) * KMetersPerDegree <= KAcceptedMeanError &&
+                Abs(longitudeMean - KMeanLongitude) * KMetersPerDegree <= KAcceptedMeanError)
+                {
+                meanValuesAchieved = ETrue;
+                // Log purposes
+                iMsg.Format(KMeanMsg, Abs(latitudeMean - KMeanLatitude) * KMetersPerDegree, Abs(longitudeMean - KMeanLongitude) * KMetersPerDegree);
+
+                INFO_PRINTF1(iMsg);
+                }
+
+            if (!stdDevAchieved)
+                {
+                // Check standard deviation
+                User::LeaveIfError(Math::Sqrt(latStdDev, latVar));
+                User::LeaveIfError(Math::Sqrt(longStdDev, longVar));
+                
+                // Log
+                TReal latDev = Abs(latStdDev * KMetersPerDegree - KHorizontalAccuracy);
+                TReal longDev = Abs(longStdDev * KMetersPerDegree - KHorizontalAccuracy);                
+                _LIT(KStdLongLat, "Std.Dev. Long.: %.9g, Std.Dev. Lat.: %.9g");
+                buf.Format(KStdLongLat, longDev, latDev);
+                //INFO_PRINTF1(buf);
+
+                // Check
+                if (Abs(latStdDev * KMetersPerDegree - KHorizontalAccuracy) <= KAcceptedStdError &&
+                    Abs(longStdDev * KMetersPerDegree - KHorizontalAccuracy) <= KAcceptedStdError)
+                    {
+                    stdDevAchieved = ETrue;
+                    // Log purposes
+                    iMsg.Format(KStdDevMsg, Abs(latStdDev * KMetersPerDegree - KHorizontalAccuracy), Abs(longStdDev * KMetersPerDegree - KHorizontalAccuracy));
+                    INFO_PRINTF1(iMsg);
+                    }
+                }
+            }
+        }
+
+    // Log result
+    if (!meanValuesAchieved || !stdDevAchieved)
+        {
+        if (!meanValuesAchieved)
+            {
+            iMsg.Format(KMeanMsg, latitudeMean, longitudeMean);
+            ERR_PRINTF1(iMsg);
+            }
+        if (!stdDevAchieved)
+            {
+            User::LeaveIfError(Math::Sqrt(latStdDev, latVar));
+            User::LeaveIfError(Math::Sqrt(longStdDev, longVar));
+            iMsg.Format(KStdDevMsg, latStdDev * KMetersPerDegree, longStdDev * KMetersPerDegree);
+            ERR_PRINTF1(iMsg);
+            }
+        User::Leave(KErrGeneral);
+        }
+
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestMovementL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+
+void CT_LbsSimulationPSYPosTp115::TestMovementL()
+    {
+    const TInt KNrOfFixes = 10;
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationPowerUp.sps");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationPowerUp.sps");
+#endif
+    
+	// Set correct data file
+    SetSimDataFileL(KSimulationSource);
+
+	// Open simulationPSY
+    User::LeaveIfError(OpenPositionerByName(iUidSimulationPsy));
+    
+    _LIT(KStart, "Testing TestMovementL()");
+    _LIT(KEnd, "TestMovementL() passed");
+    _LIT(KError1, "Error when requesting location");
+    INFO_PRINTF1(KStart);
+
+    // Make origin position request
+     TPositionInfo posInfo = TPositionInfo();
+     TInt err = PerformSyncRequest(KService, &posInfo);
+     if (err != KErrNone)
+     {
+       LogErrorAndLeaveL(KError1);
+     }
+
+    TPosition myPos = TPosition();
+    posInfo.GetPosition(myPos);
+    TTime timeOfFix = myPos.Time();
+    TReal64 longitude = myPos.Longitude();
+    TReal64 latitude  = myPos.Latitude();
+
+    // Request the rest of the KMaxNrOfFixes pos. fixes with no 
+    // errors and verify direction of movement
+    for (TInt i = 2; i <= KNrOfFixes; i++)
+        {
+        // save preceding values
+        TTime timeOfLastFix = timeOfFix;
+        TReal64 lastLongitude = longitude;
+        TReal64 lastLatitude = latitude;
+
+        // get new position info
+        TInt err = PerformSyncRequest(KService, &posInfo);
+        if (err != KErrNone)
+        {
+          LogErrorAndLeaveL(KError1);
+        }
+        posInfo.GetPosition(myPos);
+        longitude = myPos.Longitude();
+        latitude  = myPos.Latitude();
+        timeOfFix = myPos.Time();
+
+        TTimeIntervalMicroSeconds fixTimeDiff = timeOfFix.MicroSecondsFrom(timeOfLastFix);
+        if (fixTimeDiff.Int64() <= 0)
+            {
+            _LIT(KErr, "Time difference between position fixes was non-positive");
+            LogErrorAndLeaveL(KErr);
+            }
+
+        // We are moving south-west at the norhern earth globe. Thus, Longitude 
+        // should increase and latitude decrease. We don't care that the
+        // course changes dynamically as fixes are given. Speed is slow and course
+        // changes are small.
+        if (longitude <= lastLongitude)
+            {
+            _LIT(KErr, "Longitude was not increased as expected. Last longitude = %10.7f, current longitude = %10.7f");
+            iMsg.Format(KErr, lastLongitude, longitude);
+            LogErrorAndLeaveL(iMsg);
+            }
+        if (latitude >= lastLatitude)
+            {
+            _LIT(KErr, "Latitude was not decreased as expected. Last latitude = %10.7f, current latitude = %10.7f");
+            iMsg.Format(KErr, lastLatitude, latitude);
+            LogErrorAndLeaveL(iMsg);
+            }
+        }
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+    }
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestBadInputFileL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestBadInputFileL()
+    {
+    // This test tests only the syntax error caused by a misspelled parameter name.
+    // There are LOTS of other faults one can cause as developer. However, these
+    // are not tested here but should be tested in unit tests.
+
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationBadSyntax.sps");
+	_LIT(KSimulationSource1, "z:\\system\\test\\testdata\\simulationBadSyntax1.sps");
+	_LIT(KSimulationSource2, "z:\\system\\test\\testdata\\simulationBadSyntax2.sps");
+	_LIT(KSimulationSource3, "z:\\system\\test\\testdata\\simulationBadSyntax3.sps");
+	_LIT(KSimulationSource4, "z:\\system\\test\\testdata\\simulationBadSyntax4.sps");
+	_LIT(KSimulationSource5, "z:\\system\\test\\testdata\\simulationBadSyntax5.sps");
+    //unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+    _LIT(KGarmin12cx, "z:\\system\\test\\testdata\\garmin12cxBadSyntax.nme");
+    //unused _LIT(KGarmin12cxIni, "z:\\system\\test\\testdata\\garmin12cxBadSyntax.ini");
+    _LIT(KGarmin3plus, "z:\\system\\test\\testdata\\garmin3plussatlost.nme");
+    //unused _LIT(KGarmin3plusIni, "z:\\system\\test\\testdata\\garmin3plussatlost.ini");
+    //unused _LIT(KWrongSimDataFileNameIni, "z:\\system\\test\\testdata\\WrongSimDataFileName.ini");
+    _LIT(KWrongSimDataFileNameSource, "z:\\system\\test\\testdata\\WrongSimDataFileName.txt");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationBadSyntax.sps");
+	_LIT(KSimulationSource1, "c:\\system\\test\\testdata\\simulationBadSyntax1.sps");
+	_LIT(KSimulationSource2, "c:\\system\\test\\testdata\\simulationBadSyntax2.sps");
+	_LIT(KSimulationSource3, "c:\\system\\test\\testdata\\simulationBadSyntax3.sps");
+	_LIT(KSimulationSource4, "c:\\system\\test\\testdata\\simulationBadSyntax4.sps");
+	_LIT(KSimulationSource5, "c:\\system\\test\\testdata\\simulationBadSyntax5.sps");
+    //unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+    _LIT(KGarmin12cx, "c:\\system\\test\\testdata\\garmin12cxBadSyntax.nme");
+    //unused _LIT(KGarmin12cxIni, "c:\\system\\test\\testdata\\garmin12cxBadSyntax.ini");
+    _LIT(KGarmin3plus, "c:\\system\\test\\testdata\\garmin3plussatlost.nme");
+    //unused _LIT(KGarmin3plusIni, "c:\\system\\test\\testdata\\garmin3plussatlost.ini");
+    //unused _LIT(KWrongSimDataFileNameIni, "c:\\system\\test\\testdata\\WrongSimDataFileName.ini");
+    _LIT(KWrongSimDataFileNameSource, "c:\\system\\test\\testdata\\WrongSimDataFileName.txt");
+#endif
+
+    _LIT(KStart, "Testing TestBadInputFileL()");
+    _LIT(KEnd, "TestBadInputFileL() passed");
+    _LIT(KServiceName, "Service");
+    TInt errorsFound = KErrNone;
+    
+    INFO_PRINTF1(KStart);
+	//Verification of error report EKJL-5M9JNF
+	CheckBadInputHelperL(KSimulationSource );
+	CheckBadInputHelperL(KSimulationSource1);
+	CheckBadInputHelperL(KSimulationSource2);
+	CheckBadInputHelperL(KSimulationSource3);
+	CheckBadInputHelperL(KSimulationSource4);
+	CheckBadInputHelperL(KSimulationSource5);
+
+    // Test that a .txt file generates error
+    SetSimDataFileL(KWrongSimDataFileNameSource);
+    
+    TInt err = OpenPositionerByName(iUidSimulationPsy);
+     
+    if (err == KErrNone)
+        {
+        _LIT(KErr, "ERROR: The data file with .txt name was unexpectedly successfully read");
+        INFO_PRINTF1(KErr);
+        errorsFound++;
+        ClosePositioner();
+        }
+        
+    if (err != KErrNotSupported)
+        {
+        _LIT(KErr, "ERROR: The positioner returned wrong error, error code = %d");
+        iMsg.Format(KErr, err);
+        INFO_PRINTF1(iMsg);
+        errorsFound++;
+        }
+
+    // Test bad syntax for Garmin12cx below
+    // However not really bad syntax but causing problem in the SimPSY parser!
+    SetSimDataFileL(KGarmin12cx);
+
+    err = OpenPositionerByName(iUidSimulationPsy);
+    if (err != KErrNone)
+        {
+        _LIT(KErr, "ERROR: Simulation PSY could not be openend, error : %d");
+        TBuf<100> buf;
+        buf.Format(KErr, err);
+        INFO_PRINTF1(buf);
+        errorsFound++;
+        }
+
+    TPositionInfo posInfo = TPositionInfo();
+     // Request data from simulation psy
+     err = PerformSyncRequest(KServiceName, &posInfo);
+    
+     // Behaviour changed in iteration 11 - KPositionQualityLoss has nothing to do with quality loss in PSY
+     _LIT(KReqError, "PerformSyncRequest should return KErrNone from SimPSY");
+    // The burst does not contain any position info and
+    // thus the quality factor should be 0
+    AssertTrueL(err == KErrNone, KReqError, err);
+   
+    ClosePositioner();
+
+    // Test bad syntax for Garmin3plus below
+    // However not really bad syntax but causing problem in the SimPSY parser!
+    // Set data file
+    SetSimDataFileL(KGarmin3plus);
+
+    err = OpenPositionerByName(iUidSimulationPsy);
+    if (err != KErrNone)
+        {
+        _LIT(KErr, "ERROR: Simulation PSY could not be openend, error : %d");
+        TBuf<100> buf;
+        buf.Format(KErr, err);
+        INFO_PRINTF1(buf);
+        errorsFound++;
+        }
+        
+    // Test nmea data when satellite data is lost as well as 
+    // test that the simulationPSY starts over reading from file when EOF is reached
+    // 50 is enough to read through the whole file
+    //
+    for (TInt k=0;k<50;k++)
+      {
+      TPositionInfo posInfo2 = TPositionInfo();
+      // Request data from simulation psy
+      err = PerformSyncRequest(KServiceName, &posInfo2);
+
+      if (err != KErrNone)
+        {
+        if (err != KPositionQualityLoss)
+          {
+          _LIT(KErr, "PerformSyncRequest returned error other than KPositionQualityLoss, error: %d in burst nr: %d");
+          TBuf<100> buf;
+          buf.Format(KErr, err, k);
+          INFO_PRINTF1(buf);
+          errorsFound++;
+          }
+        }
+      }
+      
+    ClosePositioner();
+    if (errorsFound != KErrNone) 
+    	{
+    	_LIT(KErrorAndLeave, "Errors found in TestBadInputFileL");
+    	LogErrorAndLeaveL(KErrorAndLeave);
+    	}
+    INFO_PRINTF1(KEnd);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::CheckBadInputHelperL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::CheckBadInputHelperL(const TDesC& aSimulationSource)
+	{
+    // Set correct data file
+    SetSimDataFileL(aSimulationSource);
+
+    TInt err = OpenPositionerByName(iUidSimulationPsy);
+    if (err == KErrNone)
+        {
+        TPositionInfo posInfo = TPositionInfo();
+      	// Request data from simulation psy
+        _LIT(KKallesService, "KallesService");
+      	err = PerformSyncRequest(KKallesService, &posInfo);
+
+      	if (err == KErrCorrupt) 
+      	{
+      	_LIT(KInfoCorrupt, "********** Corrupt");
+      	INFO_PRINTF1(KInfoCorrupt);
+      	ClosePositioner();
+      	}
+      	else
+			{
+			ClosePositioner();
+        	_LIT(KErr, "The simulation data file was unexpectedly successfully read");
+        	LogErrorAndLeaveL(KErr);
+			}
+        }
+    if (err != KErrCorrupt)
+        {
+        _LIT(KErr, "The positioner was unable to read input file, error code = %d");
+        iMsg.Format(KErr, err);
+        LogErrorAndLeaveL(iMsg);
+        }
+	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestCorrectFixL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestCorrectFixL()
+	{
+	_LIT(KServiceName, "SAAA");
+	_LIT(KStart, "Testing TestCorrectFixL()");
+    _LIT(KEnd, "TestCorrectFixL() passed");
+    INFO_PRINTF1(KStart);
+
+	// Set correct data file
+    SetSimDataFileL(KFix10MagellanGPS315);
+    
+    TInt err = OpenPositionerByName(iUidSimulationPsy);
+    if (err != KErrNone)
+        {
+        _LIT(KErr, "Simulation PSY could not be openend, error : %d");
+        TBuf<100> buf;
+        buf.Format(KErr, err);
+        LogErrorAndLeaveL(buf);
+        }
+
+    // The file contains 10 fixes, but 11 is read to ensure that the reading starts all over
+	// again
+    for (TInt k=1;k<12;k++)
+		{
+		TPositionInfo posInfo = TPositionInfo();
+		// Request data from simulation psy
+		err = PerformSyncRequest(KServiceName, &posInfo);
+		if (k == 11)
+			{
+			CheckPositionL(posInfo,1);
+			}
+		else 
+			{
+			CheckPositionL(posInfo,k);
+			}
+		}
+	
+    ClosePositioner();
+    INFO_PRINTF1(KEnd);
+
+	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::TestCorrectTimingAfterCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::TestCorrectTimingAfterCancelL()
+	{
+	TTimeIntervalMicroSeconds timetofixTime_MAX = TTimeIntervalMicroSeconds(8000000);
+	TTimeIntervalMicroSeconds timetofixTime_MIN = TTimeIntervalMicroSeconds(4000000);
+	
+#ifdef __WINS__
+    _LIT(KSimulationSource, "z:\\system\\test\\testdata\\simulationTimingAfterCancel.sps");
+    // unused _LIT(KIniSource, "z:\\system\\test\\testdata\\simulationpsySIM.ini");
+#else
+    _LIT(KSimulationSource, "c:\\system\\test\\testdata\\simulationTimingAfterCancel.sps");
+    // unused _LIT(KIniSource, "c:\\system\\test\\testdata\\simulationpsySIM.ini");
+#endif
+	_LIT(KStart, "Testing CorrectTimingAfterCancelL()");
+    _LIT(KEnd, "CorrectTimingAfterCancelL() passed");
+   
+	INFO_PRINTF1(KStart);
+
+	// Set data file
+    SetSimDataFileL(KSimulationSource);
+    	
+	//Connecting to Position Server
+	_LIT(KConnectErr, "Error when connecing to Position Server,  %d");
+	TInt err = iPosServer.Connect();
+	AssertTrueL(err == KErrNone, KConnectErr, err); //Leave if error
+
+	//Open Positioner Module
+	_LIT(KOpenErr, "Error when opening positioner,  %d");
+	err = iPositioner.Open(iPosServer, iUidSimulationPsy);
+	AssertTrueL(err == KErrNone, KOpenErr, err);	//Leave if error
+	
+	//Set Requestor
+	_LIT(KServiceName3, "Some Name Uhh");
+	iPositioner.SetRequestor(CRequestor::ERequestorService,
+							 CRequestor::EFormatApplication, KServiceName3);
+	//Request new position
+	TPositionInfo posInfo = TPositionInfo();
+	TRequestStatus status = KRequestPending;
+	iPositioner.NotifyPositionUpdate(posInfo, status);
+	
+	User::After(2000000);
+	if(status.Int() != KRequestPending)
+		{
+		_LIT(KTooFastError, "PSY completed request too fast!");
+		TBuf<100> buf;
+        buf.Format(KTooFastError, KErrGeneral);
+		iPositioner.Close();
+		iPosServer.Close();
+		LogErrorAndLeaveL(buf);
+		}
+	else
+		{
+		err = iPositioner.CancelRequest(EPositionerNotifyPositionUpdate);
+		if (err != KErrNone)
+			{
+			_LIT(KCancelError, "Cancel of request failed!");
+			TBuf<100> buf;
+			buf.Format(KCancelError, err);
+			LogErrorAndLeaveL(buf);
+			}
+		}
+	User::WaitForRequest(status); //Wait for position request to complete
+
+	//check if request was cancelled
+	if(status.Int() != KErrCancel)
+		{
+		_LIT(KNoCancel, "Request was not cancelled!, error code = %d");
+		TBuf<100> buf;
+        buf.Format(KNoCancel, status.Int());
+		LogErrorAndLeaveL(buf);
+		}
+	
+	TTime startTime;
+    TTime stopTime;
+	
+	//Make another request
+	iPositioner.NotifyPositionUpdate(posInfo, status);
+
+	startTime.UniversalTime();
+	User::WaitForRequest(status);
+	stopTime.UniversalTime();
+
+	if(status.Int() != KErrNone)
+		{
+		iPositioner.Close();
+		iPosServer.Close();
+		_LIT(KSecondReqErr, "Second position request failed!, error code = %d");
+		TBuf<100> buf;
+        buf.Format(KSecondReqErr, status.Int());
+		LogErrorAndLeaveL(buf);
+		}
+
+	TTimeIntervalMicroSeconds requestTime = stopTime.MicroSecondsFrom(startTime);
+	
+	//Check if request was performed within timeTofix_min and timeTofix_max
+	_LIT(KReqText, "Checking if request was performed within timeTofix_min(4s) and timeTofix_max(8s)->");
+	INFO_PRINTF1(KReqText);
+	TBuf<100> timeR;
+    timeR.Num(requestTime.Int64());
+	INFO_PRINTF1(timeR);
+	if(requestTime<timetofixTime_MIN)
+		{
+		_LIT(KRequestTimeErrMin, "Second request returned position too fast!");
+		TBuf<100> buf;
+        buf.Format(KRequestTimeErrMin, KErrGeneral);
+		LogErrorAndLeaveL(buf);
+		}
+	else if(requestTime>timetofixTime_MAX)
+		{
+		_LIT(KRequestTimeErrMax, "Second request returned position too slow!");
+		TBuf<100> buf;
+        buf.Format(KRequestTimeErrMax, KErrGeneral);
+		LogErrorAndLeaveL(buf);
+		}
+		
+	//cleaning up the pieces...
+	iPositioner.Close();
+	iPosServer.Close();
+	INFO_PRINTF1(KEnd);	
+	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::CheckPositionL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsSimulationPSYPosTp115::CheckPositionL(TPositionInfo& aPosInfo,TInt aFixNumber)
+	{
+	TPosition pos;
+	aPosInfo.GetPosition(pos);
+	TReal lat = pos.Latitude();
+	TReal lon = pos.Longitude();
+	TReal alt = pos.Altitude();
+	TReal horAcc = pos.HorizontalAccuracy();
+	TReal verAcc = pos.VerticalAccuracy();
+	TReal latComp = 0.0;
+	TReal lonComp = 0.0;
+	TReal altComp = 0.0;
+	TReal horAccComp = 0.0;
+	TReal verAccComp = 0.0;
+	
+	_LIT(KFunctionName, "We are inside CheckPositionL()");
+	INFO_PRINTF1(KFunctionName);
+	
+	switch (aFixNumber)
+		{
+		case 1:
+			{
+			horAccComp = KHdop1*10;
+			verAccComp = 1.5f*KHdop1*10;
+			latComp = ToCoordinate(KLat1(), KLatDir1());
+			lonComp = ToCoordinate(KLon1(), KLonDir1());
+			altComp = KAltitude1;
+			break;
+			}
+		case 2:
+			{
+			horAccComp = KHdop2*10;
+			verAccComp = 1.5f*KHdop2*10;
+			latComp = ToCoordinate(KLat2(), KLatDir2());
+			lonComp = ToCoordinate(KLon2(), KLonDir2());
+			altComp = KAltitude2;
+			break;
+			}
+		case 3:
+			{
+			horAccComp = KHdop3*10;
+			verAccComp = 1.5f*KHdop3*10;
+			latComp = ToCoordinate(KLat3(), KLatDir3());
+			lonComp = ToCoordinate(KLon3(), KLonDir3());
+			altComp = KAltitude3;
+			break;
+			}
+		case 4:
+			{
+			horAccComp = KHdop4*10;
+			verAccComp = 1.5f*KHdop4*10;
+			latComp = ToCoordinate(KLat4(), KLatDir4());
+			lonComp = ToCoordinate(KLon4(), KLonDir4());
+			altComp = KAltitude4;
+			break;
+			}
+		case 5:
+			{
+			horAccComp = KHdop5*10;
+			verAccComp = 1.5f*KHdop5*10;
+			latComp = ToCoordinate(KLat5(), KLatDir5());
+			lonComp = ToCoordinate(KLon5(), KLonDir5());
+			altComp = KAltitude5;
+			break;
+			}
+		case 6:
+			{
+			horAccComp = KHdop6*10;
+			verAccComp = 1.5f*KHdop6*10;
+			latComp = ToCoordinate(KLat6(), KLatDir6());
+			lonComp = ToCoordinate(KLon6(), KLonDir6());
+			altComp = KAltitude6;
+			break;
+			}
+		case 7:
+			{
+			horAccComp = KHdop7*10;
+			verAccComp = 1.5f*KHdop7*10;
+			latComp = ToCoordinate(KLat7(), KLatDir7());
+			lonComp = ToCoordinate(KLon7(), KLonDir7());
+			altComp = KAltitude7;
+			break;
+			}
+		case 8:
+			{
+			horAccComp = KHdop8*10;
+			verAccComp = 1.5f*KHdop8*10;
+			latComp = ToCoordinate(KLat8(), KLatDir8());
+			lonComp = ToCoordinate(KLon8(), KLonDir8());
+			altComp = KAltitude8;
+			break;
+			}
+		case 9:
+			{
+			horAccComp = KHdop9*10;
+			verAccComp = 1.5f*KHdop9*10;
+			latComp = ToCoordinate(KLat9(), KLatDir9());
+			lonComp = ToCoordinate(KLon9(), KLonDir9());
+			altComp = KAltitude9;
+			break;
+			}
+		case 10:
+			{
+			horAccComp = KHdop10*10;
+			verAccComp = 1.5f*KHdop10*10;
+			latComp = ToCoordinate(KLat10(), KLatDir10());
+			lonComp = ToCoordinate(KLon10(), KLonDir10());
+			altComp = KAltitude2;
+			break;
+			}
+		}
+				
+	if( lat != latComp ||
+	    lon != lonComp ||
+	    alt != altComp ||
+	    horAcc != horAccComp ||
+	    verAcc != verAccComp)
+		{
+		_LIT(KErrPosition, "Wrong Postion from SimPSY:n, pos number = %d");
+		TBuf<100> buf;
+        buf.Format(KErrPosition, aFixNumber);
+		LogErrorAndLeaveL(buf);
+		}
+	}
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::ToCoordinate
+// used for creating simulation PSY settings files
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal CT_LbsSimulationPSYPosTp115::ToCoordinate(
+	const TDesC8& aDes, const TDesC8& aDir)
+    {
+    const TInt  KPosMinutesIntegerLength = 2;
+    const TReal KPosMinutesPerDegree = 60.0;
+	const signed int KCoordTokenS = 'S';
+	const signed int KCoordTokenW = 'W';
+	const signed int KCoordTokenDot = '.';
+
+	TInt point = aDes.Locate(KCoordTokenDot);
+
+    TInt deg = DesToInt(aDes.Left(point - KPosMinutesIntegerLength));
+    TReal min = DesToReal(aDes.Mid(point - KPosMinutesIntegerLength));
+    TReal coordinate = TReal(deg) + min / KPosMinutesPerDegree;
+
+    if (aDir[0] == KCoordTokenS || aDir[0] == KCoordTokenW)
+        {
+        coordinate = - coordinate;
+        }
+    return coordinate;
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::DesToInt
+// used for creating simulation PSY settings files
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CT_LbsSimulationPSYPosTp115::DesToInt(const TPtrC8& aDes)
+    {
+    TLex8	lexer(aDes);
+    TInt	integer;
+
+    lexer.Val(integer);
+    return integer;
+    }
+
+// ---------------------------------------------------------
+// CT_LbsSimulationPSYPosTp115::DesToReal
+// used for creating simulation PSY settings files
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TReal CT_LbsSimulationPSYPosTp115::DesToReal(const TPtrC8& aDes)
+    {
+    TLex8 lexer(aDes);
+    TReal realNumber;
+
+    lexer.Val(realNumber, TChar('.'));
+    return realNumber;
+    }
+
+void CT_LbsSimulationPSYPosTp115::ReplaceSwitchInTrapL(TInt aIndex)
+    {
+    const TDesC *NMEASource[KNrOfNMEATypes] = {&KMagellanGPS315,
+            &KMagellanTracker, 
+            &KGarmin12cx,
+            &KGarmin3plus,
+            &KGarminetrexlegend,
+            &KMagellanMeridian};
+    
+    switch (aIndex)
+        {
+        case 0 : 
+          {
+          for (TInt i=0; i<KNrOfNMEATypes;i++)
+            {
+            TestSimulationNmeaReaderL(*NMEASource[i]);
+            }
+          }
+        break;
+        case 1 : TestPowerUpTimeL(); break;
+        case 2 : TestTimeToFixL(); break;
+        case 3 : TestDeterministicFailureL(); break;
+        case 4 : TestRandomFailureL(); break;
+        case 5 : TestAltitudeL(); break;
+        case 6 : TestLongLatitudeL(); break;
+        case 7 : TestMovementL(); break;
+        case 8 : TestBadInputFileL(); break;
+    
+        case 9:
+            {
+            for (TInt i=0; i<KNrOfNMEATypes;i++)
+              {
+              Extended1TestSimulationNmeaReaderL(*NMEASource[i]);
+              }
+            }
+            break;
+        case 10:
+            {
+            for (TInt i=0; i<KNrOfNMEATypes;i++)
+              {
+              Extended2TestSimulationNmeaReaderL(*NMEASource[i]);
+              }
+            }
+            break;
+        case 11: TestCorrectFixL(); break;
+        case 12: TestCorrectTimingAfterCancelL(); break;
+    
+        }
+    }
+//  End of File