--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lbstest/lbstestproduct/common/src/ctlbsstepsetuppsy.cpp Tue Feb 02 01:50:39 2010 +0200
@@ -0,0 +1,161 @@
+// Copyright (c) 2006-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:
+// @file ctlbsstepsetuppsy.cpp
+// This is the class implementation for the step to set up PSYs before running tests on S60
+// EPOC includes.
+//
+//
+
+// LBS includes.
+#include <epos_cposmodules.h>
+#include <epos_cposmoduleupdate.h>
+#include <epos_cposmoduleidlist.h>
+
+// LBS test includes.
+#include "ctlbsstepsetuppsy.h"
+
+/**
+ * Destructor
+ */
+CT_LbsStep_SetUpPsy::~CT_LbsStep_SetUpPsy()
+ {
+ }
+
+
+/**
+ * Constructor
+ */
+CT_LbsStep_SetUpPsy::CT_LbsStep_SetUpPsy(CT_LbsServer& aParent) : CT_LbsStep(aParent)
+ {
+ SetTestStepName(KLbsStep_SetUpPsy);
+ }
+
+
+/**
+Static Constructor
+*/
+CT_LbsStep_SetUpPsy* CT_LbsStep_SetUpPsy::New(CT_LbsServer& aParent)
+ {
+ return new CT_LbsStep_SetUpPsy(aParent);
+ // Note the lack of ELeave.
+ // This means that having insufficient memory will return NULL;
+ }
+
+TBool CT_LbsStep_SetUpPsy::GetUidFromConfig(const TDesC& aSectName, const TDesC& aKeyName, TUint32& aResult)
+ {
+ // Doing this because CTestStep::GetHexFromConfig is broken (returns the value in an Int for some reason)
+ const TInt KMaxHexStringSize = 10;// enough for 0x12345678
+ TBuf<KMaxHexStringSize> hexBuffer;
+ TPtrC ptr;
+ ptr.Set(hexBuffer);
+ if(GetStringFromConfig(aSectName, aKeyName, ptr))
+ {
+ // strip any leading "0x" or "0X"
+ if(ptr[0] == TChar('0') && (ptr[1] == TChar('X') || ptr[1] == TChar('x')))
+ {
+ // leading "0x" encoded. So strip
+ hexBuffer = ptr.Right(ptr.Length()-2);
+ }
+ else
+ {
+ hexBuffer = ptr;
+ }
+ TLex lex(hexBuffer);
+ TInt res = lex.Val(aResult, EHex);
+ if(res != KErrNone)
+ {
+ return EFalse;
+ }
+ return ETrue;
+ }
+ else
+ {
+ // can't find the hex string keyword
+ return EFalse;
+ }
+
+ }
+
+/**
+ * @return - TVerdict code
+ * Override of base class pure virtual
+ * Our implementation only gets called if the base class doTestStepPreambleL() did
+ * not leave. That being the case, the current test result value will be EPass.
+ */
+TVerdict CT_LbsStep_SetUpPsy::doTestStepL()
+ {
+ // Test step used to set up the psy used during a test
+ INFO_PRINTF1(_L(">>CT_LbsStep_SetUpPsy::doTestStepL()"));
+
+ //*******************************************************************/
+
+ if (TestStepResult() == EPass)
+ {
+ // If this test step has been launched by a script that loads
+ // the test server with -SharedData and installs an active scheduler
+ // with a dedicated test step, then the scheduler is already installed
+ // in the thread running this test step. If this test step is however
+ // launched by a script that includes the command "CONCURRENT"
+ // then the active scheduler is not present and one has to be installed
+ // before running the rest of thie method as it adds AOs to the scheduler.
+ if( NULL == CActiveScheduler::Current() )
+ {
+ iScheduler = new (ELeave) CActiveScheduler();
+ CActiveScheduler::Install(iScheduler);
+ }
+
+ // Get PSY UID from config:
+ TUid psyUid;
+ TUint32 configUid;
+ if(GetUidFromConfig(ConfigSection(), KPsyUid, configUid))
+ {
+ psyUid.iUid = configUid;
+
+ CPosModules* db = CPosModules::OpenL();
+ CleanupStack::PushL(db);
+ CPosModuleUpdate* moduleUpdate = CPosModuleUpdate::NewLC();
+
+ moduleUpdate->SetUpdateAvailability(EFalse);
+ CPosModuleIdList* prioList = db->ModuleIdListLC();
+
+ // Disable all PSY:s except aPsyUid
+ for (TInt i = 0 ; i < prioList->Count(); i++)
+ {
+ if ((*prioList)[i] != psyUid)
+ {
+ db->UpdateModuleL((*prioList)[i], *moduleUpdate);
+ }
+ }
+
+ // Enable the PSY that came as an in parameter
+ moduleUpdate->SetUpdateAvailability(ETrue);
+ db->UpdateModuleL(psyUid, *moduleUpdate);
+
+ CleanupStack::PopAndDestroy(prioList);
+ CleanupStack::PopAndDestroy(moduleUpdate);
+ CleanupStack::PopAndDestroy(db);
+ }
+
+ // If this step has installed its own scheduler...
+ if (iScheduler)
+ {
+ //CActiveScheduler::Stop();
+ delete iScheduler;
+ }
+ }
+
+ INFO_PRINTF1(_L("<<CT_LbsStep_SetUpPsy::doTestStepL()"));
+
+ return TestStepResult();
+ }