--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/featuremgmt/featuremgr/test/shared/src/efm_featurenotifierstepbase.cpp Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,191 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Implementation of the base class for capability aware test steps.
+//
+//
+
+/**
+ @file
+ @internalComponent
+ @test
+*/
+
+#include "efm_featurenotifierstepbase.h"
+
+static TInt WaitCallBack( TAny* aSelf )
+ {
+ if( aSelf )
+ {
+ TWaitInfo* info = static_cast<TWaitInfo*>( aSelf );
+ if( info->iPeriodic )
+ {
+ info->iPeriodic->Cancel();
+ }
+ if( info->iWait )
+ {
+ if( info->iWait->IsStarted() )
+ {
+ info->iWait->AsyncStop();
+ }
+ }
+ }
+
+ return KErrNone;
+ }
+
+
+void CFeatureNotifierStepBase::WaitL( TInt aIntervalInMicorseconds )
+ {
+ TWaitInfo info;
+
+ // Construct periodic
+ CPeriodic* periodic = CPeriodic::NewL( CActive::EPriorityStandard );
+ CleanupStack::PushL( periodic );
+ info.iPeriodic = periodic;
+
+ // Construct active scheduler wait
+ CActiveSchedulerWait* wait = new( ELeave ) CActiveSchedulerWait;
+ CleanupStack::PushL( wait );
+ info.iWait = wait;
+ iWait = wait;
+
+ // Start timer and wait
+ TCallBack cb( WaitCallBack, &info );
+ periodic->Start( aIntervalInMicorseconds, aIntervalInMicorseconds, cb );
+ wait->Start();
+
+ // Cleanup
+ CleanupStack::PopAndDestroy( wait );
+ CleanupStack::PopAndDestroy( periodic );
+ }
+
+
+TVerdict CFeatureNotifierStepBase::doTestStepPreambleL(void)
+ {
+ CEFMConfigurableTestStepBase::doTestStepPreambleL();
+ iSched= new(ELeave) CActiveScheduler;
+ CActiveScheduler::Install(iSched);
+ TInt err = icontrol.Open();
+ TESTDIAGNOSTICERROR(err==KErrNone,
+ _L("RFeatureControl::Open failed: error = %d"), err);
+ return TestStepResult();
+ }
+
+TVerdict CFeatureNotifierStepBase::doTestStepPostambleL(void)
+ {
+ CEFMConfigurableTestStepBase::doTestStepPostambleL();
+ CActiveScheduler::Install(NULL);
+ delete iSched;
+ icontrol.Close();
+ return TestStepResult();
+ }
+
+
+void CFeatureNotifierStepBase :: HandleNotifyChange( TFeatureChangeType /* aType */ , TFeatureEntry /* aFeature */ )
+ {
+ iWait->AsyncStop();
+ iNotifyCompleted = ETrue;
+ }
+
+void CFeatureNotifierStepBase:: HandleNotifyError( TInt aError )
+ {
+ INFO_PRINTF2(_L("CFeatureNotifier::HandleNotifyError %d"),aError);
+ SetTestStepResult(EFail);
+ }
+
+
+void CFeatureNotifierStepBase::CheckNotifyRequestResultL(TUid aUid)
+ {
+ TInt err = icontrol.SetFeature( aUid, KChangeData );
+ WaitL(KWaitDelay);
+ if (iLowCap)
+ {
+ //if we are running in the low capabilities environment we don't expect the feature
+ //to be modified and notification to be issued
+ TESTDIAGNOSTICERROR(err == KErrPermissionDenied,
+ _L("RFeatureControl::SetFeature - KErrPermissionDenied expected; error = %d"),err);
+ TESTDIAGNOSTIC(!iNotifyCompleted,
+ _L("Feature notification should not be issued due to insufficient capabilities"));
+ }
+ else
+ {
+ //if test environment has WDD capability then SetFeature should succeed and feature
+ //change notification should be issued
+ TESTDIAGNOSTICERROR(err == KErrNone,
+ _L("RFeatureControl::SetFeature - KErrNone expected; error = %d"),err);
+ TESTDIAGNOSTIC(iNotifyCompleted,
+ _L("Feature notification is expected to be issued"));
+ }
+ }
+
+void CFeatureNotifierStepBase::CheckNotifyCancelResultL(TUid aUid)
+ {
+ TInt err = icontrol.SetFeature( aUid, KChangeData );
+ WaitL(KWaitDelay);
+ if (iLowCap)
+ {
+ //if we are running in the low capabilities environment we don't expect the feature
+ //to be modified and notification to be issued
+ TESTDIAGNOSTICERROR(err == KErrPermissionDenied,
+ _L("RFeatureControl::SetFeature - KErrPermissionDenied expected; error = %d"),err);
+ TESTDIAGNOSTIC(!iNotifyCompleted,
+ _L("Feature notification should not be issued due to insufficient capabilities"));
+ }
+ else
+ {
+ //if test environment has WDD capability then SetFeature should succeed and feature
+ //change notification should be issued
+ TESTDIAGNOSTICERROR(err == KErrNone,
+ _L("RFeatureControl::SetFeature - KErrNone expected; error = %d"),err);
+ TESTDIAGNOSTIC(!iNotifyCompleted,
+ _L("Feature notification should not be issued as the natification has been cancelled"));
+ }
+ }
+
+void CFeatureNotifierStepBase::CheckDeleteNotificationResultL(TUid aUid)
+ {
+ TInt err = icontrol.DeleteFeature(aUid);
+
+ if (iLowCap)
+ {
+ //if we are running in the low capabilities environment we don't expect the feature
+ //to be modified and notification to be issued
+ TESTDIAGNOSTICERROR(err == KErrPermissionDenied,
+ _L("RFeatureControl::DeleteFeature - KErrPermissionDenied expected; error = %d"),err);
+ }
+ else
+ {
+ TESTDIAGNOSTICERROR(err == KErrNone,
+ _L("RFeatureControl::DeleteFeature - KErrNone or KErrAlreadyExists expected; error = %d"),err);
+ }
+
+ WaitL(KWaitDelay);
+
+ if (iLowCap)
+ {
+
+ TESTDIAGNOSTIC(!iNotifyCompleted,
+ _L("Feature notification should not be issued due to insufficient capabilities"));
+ }
+
+ else
+ {
+ TESTDIAGNOSTIC(iNotifyCompleted,
+ _L("Feature notification is expected to be issued"));
+
+ }
+ }
+
+
+