lbs/lbsclient/src/ctlbsclientpostp173.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/lbsclient/src/ctlbsclientpostp173.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,358 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+
+
+//  INCLUDES
+#include "ctlbsclientpostp173.h"
+#include <badesca.h>
+#include <EPos_CPosModules.h>
+#include <EPos_CPosModuleUpdate.h>
+#include <EPos_CPosModuleIdList.h>
+#include <LbsCommon.h>
+#include <LbsPositionInfo.h>
+#include "tctlbsclientmodulesobserver.h"
+
+
+void MyStopActive(TAny* /*aAny*/)
+    {
+    CActiveScheduler::Stop();
+    }
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp173::CT_LbsClientPosTp173(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+	{
+	_LIT(KTestName, "TP173 - Notify Module Events");
+	SetTestStepName(KTestName); 
+	}
+
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp173::~CT_LbsClientPosTp173()
+	{
+	}
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp173::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp173::StartL()
+    {
+    iNoEvents = EFalse;
+    iError = EFalse;
+    // This test listens for events.
+    // There is no data in the event, so all that is needed to be done is
+    // to see that an event is generated. This test doesn't fail if unsuccessful,
+    // it hangs.
+
+    CPosModules* db = CPosModules::OpenL();
+    CleanupStack::PushL(db);
+
+    db->SetObserverL(*this);
+
+    TInt prio = db->PriorityL(iUidTestPsy2);
+    if (prio > 0)
+        {
+        prio = 0;
+        }
+    else
+        {
+        prio = 1; // this assumes that more that one PSY is installed
+        }
+
+    CPosModuleUpdate* visibileUpdate = CPosModuleUpdate::NewLC();
+    visibileUpdate->SetUpdateVisibility(ETrue);
+    db->UpdateModuleL(iUidTestPsy2, *visibileUpdate);
+    
+    db->SetModulePriorityL(iUidTestPsy2, prio);
+    CleanupStack::PopAndDestroy(visibileUpdate);
+    
+
+    // Wait for event
+    DoEventHandlingL();
+
+    CPosModuleUpdate* availUpdate = CPosModuleUpdate::NewLC();
+
+
+	TPositionModuleInfo info;
+	db -> GetModuleInfoL(iUidTestPsy2, info);
+	TBool available = info.IsAvailable();
+
+    availUpdate->SetUpdateAvailability(/*ETrue*/ !available);
+    db->UpdateModuleL(iUidTestPsy2, *availUpdate);
+    
+    CleanupStack::PopAndDestroy(availUpdate);
+
+    // Wait for event
+    DoEventHandlingL();
+
+    CPosModuleUpdate* costUpdate = CPosModuleUpdate::NewLC();
+	
+	TPositionQuality quality;
+	info.GetPositionQuality(quality);
+	TPositionQuality::TCostIndicator indicator = quality.CostIndicator();
+    switch (indicator)
+    {
+        case TPositionQuality::ECostUnknown:
+            indicator = TPositionQuality::ECostZero;
+            break;
+        case TPositionQuality::ECostZero:
+            indicator = TPositionQuality::ECostPossible;
+            break;
+        case TPositionQuality::ECostPossible:
+            indicator = TPositionQuality::ECostCharge;
+            break;
+        case TPositionQuality::ECostCharge:
+            indicator = TPositionQuality::ECostPossible;
+            break;
+        default:
+        	_LIT(KErrorAndLeave, "quality indicator does not exist");
+            LogErrorAndLeaveL(KErrorAndLeave);
+    }
+
+    costUpdate->SetUpdateCost(/*TPositionQuality::ECostCharge*/ indicator);
+    db->UpdateModuleL(iUidTestPsy2, *costUpdate);
+    
+    CleanupStack::PopAndDestroy(costUpdate);
+
+    // Wait for event
+    DoEventHandlingL();
+
+    ////////////////////////////////////
+
+    CPosModuleUpdate* visibilityUpdate = CPosModuleUpdate::NewLC();
+    visibilityUpdate->SetUpdateVisibility(EFalse);
+    db->UpdateModuleL(iUidTestPsy2, *visibilityUpdate);
+    CleanupStack::PopAndDestroy(visibilityUpdate);
+    
+    DoEventHandlingL();
+    
+    ////////////////////////////////////
+    
+    CMyNotificationTimer* timer = CMyNotificationTimer::NewLC(this);
+	
+    TTimeIntervalMicroSeconds ttfUpdate(1000000);
+    TPositionQuality dynQualityUpdate;
+    dynQualityUpdate.SetHorizontalAccuracy(30.0);
+    dynQualityUpdate.SetTimeToNextFix(ttfUpdate);
+
+    timer->StartNotificationTimer();
+    iNoEvents = ETrue;
+    // Wait for event
+    DoEventHandlingL();
+    
+////////////////////////////////////
+   
+   
+    
+    
+    db->RemoveObserver();
+    CleanupStack::PopAndDestroy(2, db);
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp173::DoEventHandlingL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp173::DoEventHandlingL()
+    {
+	//User::After(20);
+	CActiveScheduler::Start();
+    CheckErrorL();
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp173::CheckErrorL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp173::CheckErrorL()
+    {
+    if (iError)
+        {
+        LogErrorAndLeaveL(iErrorText);
+        }
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp173::HandleDatabaseChangeL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CT_LbsClientPosTp173::HandleSettingsChangeL(TPosModulesEvent /*aModuleEvent*/)
+    {
+       
+    CleanupStack::PushL(TCleanupItem(MyStopActive));
+    if (iNoEvents)
+        {
+        _LIT(KErrorText, "Event received when no event should have been received");
+        iErrorText = KErrorText;
+        iError = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy();
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp173::AssertTrueSecL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp173::AssertTrueSecL(TBool aCondition, const TDesC& aErrorMsg, TInt aErrorCode)
+    {
+    if (!aCondition)
+        {
+        TBuf<100> buf;
+        buf.Format(aErrorMsg, aErrorCode);
+        LogErrorAndLeaveL(buf);
+        }
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp173::NotifyTimeout
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp173::NotifyTimeout()
+	{
+    CleanupStack::PushL(TCleanupItem(MyStopActive));
+    if (!iNoEvents)
+        {
+        _LIT(KErrorText, "No event received when event should have been received");
+        iErrorText = KErrorText;
+        iError = ETrue;
+        }
+
+    CleanupStack::PopAndDestroy();
+	}
+
+// ---------------------------------------------------------
+// CNotificationTimer::~CNotificationTimer
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+//Implementation of a CNotificationTimer
+
+// destructor
+CMyNotificationTimer::~CMyNotificationTimer()
+	{
+	Cancel();
+	iMainControl = NULL;
+	}
+
+// ---------------------------------------------------------
+// CNotificationTimer::NewLC
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+// Two-phased constructor.
+CMyNotificationTimer* CMyNotificationTimer::NewLC(CT_LbsClientPosTp173* aMainControl)
+	{
+	CMyNotificationTimer* self=new (ELeave) CMyNotificationTimer(aMainControl);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+// ---------------------------------------------------------
+// CNotificationTimer::NewL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+// Two-phased constructor.
+CMyNotificationTimer* CMyNotificationTimer::NewL(CT_LbsClientPosTp173* aMainControl)
+	{
+	CMyNotificationTimer* self = NewLC(aMainControl);
+	CleanupStack::Pop();
+	return self;
+	}
+	
+// ---------------------------------------------------------
+// CNotificationTimer::StartNotificationTimer
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CMyNotificationTimer::StartNotificationTimer()
+	{
+	CTimer::After(iNotificationTimout);
+	}
+
+// ---------------------------------------------------------
+// CNotificationTimer::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMyNotificationTimer::DoCancel()
+	{
+	CTimer::DoCancel();
+	}
+
+// ---------------------------------------------------------
+// CNotificationTimer::ConstructL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMyNotificationTimer::ConstructL()
+	{
+	CTimer::ConstructL();
+	iNotificationTimout = 5000000;
+	//add this object to the active scheduler
+	CActiveScheduler::Add(this); 
+	}
+
+// ---------------------------------------------------------
+// CNotificationTimer::CNotificationTimer
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+//c++ default constructor
+CMyNotificationTimer::CMyNotificationTimer(CT_LbsClientPosTp173* aMainControl)
+:CTimer(CActive::EPriorityStandard)
+	{
+	iMainControl = aMainControl;
+	}
+        
+// ---------------------------------------------------------
+// CNotificationTimer::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CMyNotificationTimer::RunL()
+	{
+	iMainControl->NotifyTimeout();
+	}
+
+