--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/tsrc/public/basic/MT_CFClient/MT_CFClient.cpp Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,5478 @@
+/*
+* Copyright (c) 2007 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 "MT_CFClient.h"
+
+#include <EUnitMacros.h>
+#include <cfclient.h>
+#include <cfcontextsubscription.h>
+#include <cfcontextindication.h>
+#include <cfactionsubscription.h>
+#include <cfactionindication.h>
+#include <cfcontextsourcecommand.h>
+#include <f32file.h>
+#include <S32MEM.h>
+#include <e32property.h>
+#include <BAUTILS.H>
+
+#include "cfcommon.h"
+#include "testcontextdata.h"
+#include "cfcontextobjectimpl.h"
+#include "testcontextsourceplugin.h"
+#include "testcontextsourcepluginconst.hrh"
+#include "CFTestDelay.h"
+#include "cfenvutils.h"
+
+// CONSTANTS
+
+_LIT_SECURITY_POLICY_PASS( KPassSec );
+_LIT_SECURITY_POLICY_FAIL( KFailSec );
+
+_LIT( KContextSourceA, "TestSourceA" );
+_LIT( KContextTypeA, "TestTypeA" );
+_LIT( KContextValueA, "TestValueA" );
+_LIT( KContextValueB, "TestValueB" );
+
+_LIT( KContextSourceFormatWild, "Source" );
+_LIT( KContextTypeFormatWild, "Type" );
+_LIT( KContextSourceFormat, "Source.%d" );
+_LIT( KContextTypeFormat, "Type.%d" );
+_LIT( KContextValueFormat, "Value.%d" );
+
+_LIT( KActionIdFormat, "AcionId.%d" );
+
+_LIT( KActionA, "TestActionA" );
+_LIT( KActionAParamA1, "ParamA1" );
+_LIT( KActionAValueA1, "ValueA1" );
+
+_LIT( KActionB, "TestActionB" );
+_LIT( KActionBParamB1, "ParamB1" );
+_LIT( KActionBValueB1, "ValueB1" );
+_LIT( KActionBParamB2, "ParamB2" );
+_LIT( KActionBValueB2, "ValueB2" );
+
+_LIT( KActionC, "TestActionC" );
+
+_LIT( KTestContextSource, "TestContextSource" );
+_LIT( KTestContextType, "SubsNoSubsTest" );
+_LIT( KTestContextType2, "SubsNoSubsTest2" );
+_LIT( KTestContextValueType, "TestValue" );
+_LIT( KTestContextValueSubsOk, "SubsOk" );
+_LIT( KTestContextValueNosubsOk, "NoSubsOk" );
+_LIT( KTestContextValueNok, "Nok" );
+
+const TUid KTestContextSourcePluginImplUid =
+ {
+ KTestContextSourcePluginImplementationUid
+ };
+const TUid KBogusContextSourcePluginImplUid =
+ {
+ 0xBAD50BAD
+ };
+
+const TInt KSecond = 1000000;
+
+_LIT( KSourceCommandId, "sourceCommand" );
+_LIT( KSourceCommandUidId, "uid" );
+_LIT( KSourceCommandParamCmd, "cmd" );
+_LIT( KSourceCommandParamCmdParam, "cmdParam" );
+_LIT( KSourceCommandParamCmdInfo, "cmdInfo" );
+_LIT( KSourceCommandParamModifiers, "modifiers" );
+_LIT( KSourceCommandAttributeType, "type" );
+_LIT( KSourceCommandAttributeMode, "mode" );
+_LIT( KSourceCommandAttributeOverride, "override" );
+_LIT( KSourceCommandAttributeText, "text" );
+_LIT( KSourceCommandAttributeValueText, "activate from really clean state" );
+_LIT( KSourceCommandAttributeValue, "value" );
+_LIT( KSourceCommandAttributeValueYes, "yes" );
+_LIT( KSourceCommandAttributeValueActivate, "Activate" );
+_LIT( KSourceCommandAttributeValueDeactivate, "Deactivate" );
+_LIT( KSourceCommandAttributeValueClean, "clean" );
+_LIT( KSourceCommandAttributeValueReally, "really" );
+_LIT( KSourceCommandAttributeValueFull, "full" );
+_LIT( KSourceCommandAttributeValueNoException, "noException" );
+
+_LIT( KSourceCommandPluginScriptContextSource, "TestSourcePlugIn" );
+_LIT( KSourceCommandClientScriptContextSource, "TestSourceClient" );
+_LIT( KSourceCommandScriptContextType, "SendSourceCommand" );
+_LIT( KSourceCommandScript1ContextValueActivate, "A" );
+_LIT( KSourceCommandScript1ContextValueDeactivate, "B" );
+_LIT( KSourceCommandScript2ContextValueActivate, "A2" );
+_LIT( KSourceCommandScript2ContextValueDeactivate, "B2" );
+
+_LIT( KSourceCommandSignalContextSource, "TestSourcePlugin" );
+_LIT( KSourceCommandSignalContextType, "SourceCommand" );
+_LIT( KSourceCommandSignalContextValueActivated, "Activated" );
+_LIT( KSourceCommandSignalContextValueDeactivated, "Deactivated" );
+_LIT( KSourceCommandSignalContextValueActiveReqActivate, "ActiveReqActivate" );
+_LIT( KSourceCommandSignalContextValueActiveReqDeactivate, "ActiveReqDeactivate" );
+_LIT( KSourceCommandSignalContextValueDeactiveReqDeactivate, "DeactiveReqDeactivate" );
+_LIT( KSourceCommandSignalContextValueError, "Error" );
+
+_LIT( KContextValueTriggerForSourceCommandClient, "SourceCommandClient" );
+
+_LIT( KReservedActionPublishContext, "publishContext" );
+_LIT( KReservedActionPublishContext2, "PUBLISHCONTEXT" );
+_LIT( KReservedActionSourceCommand, "sourceCommand" );
+_LIT( KReservedActionSourceCommand2, "SOURCECOMMAND" );
+
+_LIT( KRomScriptAutoDefineContextSource, "RomScript" );
+_LIT( KRomScriptAutoDefineContextType, "NewContext" );
+_LIT( KRomScriptAutoDefineContextValue, "AutoDefined" );
+_LIT( KRomScriptTriggerAutoDefineContextSource, "TestRomScript" );
+_LIT( KRomScriptTriggerAutoDefineContextType, "PublishContext" );
+_LIT( KRomScriptTriggerAutoDefineContextValue, "AutoDefine" );
+
+_LIT( KRomScriptDetectedAutoDefinedContextSource, "AutoDefined" );
+_LIT( KRomScriptDetectedAutoDefinedContextType, "RomScriptContext" );
+_LIT( KRomScriptDetectedAutoDefinedContextValue, "Detected" );
+
+// LOCAL DEFINITIONS
+
+/**
+ * Clean up item for RContextObjectArray
+ */
+LOCAL_C void CleanupContextObjectArray( TAny* aArray )
+ {
+ RContextObjectArray* array = static_cast<RContextObjectArray*>( aArray );
+ array->ResetAndDestroy();
+ }
+
+/**
+ * Clean up function for RContextObjectArray
+ */
+LOCAL_C void CleanupResetAndDestroyPushL( RContextObjectArray& aArray )
+ {
+ TCleanupItem item( CleanupContextObjectArray, &aArray );
+ CleanupStack::PushL( item );
+ }
+
+/**
+ * Clean up item for RContextQueryArray
+ */
+LOCAL_C void CleanupContextQueryArray( TAny* aArray )
+ {
+ RContextQueryArray* array = static_cast<RContextQueryArray*>( aArray );
+ array->ResetAndDestroy();
+ }
+
+/**
+ * Clean up function for RContextQueryArray
+ */
+LOCAL_C void CleanupResetAndDestroyPushL( RContextQueryArray& aArray )
+ {
+ TCleanupItem item( CleanupContextQueryArray, &aArray );
+ CleanupStack::PushL( item );
+ }
+
+/**
+ * Wait info.
+ */
+NONSHARABLE_CLASS( TWaitInfo )
+ {
+public:
+
+ CPeriodic* iPeriodic;
+ CActiveSchedulerWait* iWait;
+ };
+
+/**
+ * Call back method when we need to stop active scheduler wait.
+ */
+LOCAL_C 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;
+ }
+
+/**
+ * Helper method to wait current scheduler before teardown is completed.
+ */
+LOCAL_C void Wait( 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;
+
+ // Start timer and wait
+ TCallBack cb( WaitCallBack, &info );
+ periodic->Start( aIntervalInMicorseconds, aIntervalInMicorseconds, cb );
+ wait->Start();
+
+ // Cleanup
+ CleanupStack::PopAndDestroy( wait );
+ CleanupStack::PopAndDestroy( periodic );
+ }
+
+const TInt KDelay = 2000000; // 2 seconds
+const TInt KConfigDelay = 4000;
+
+/**
+ * Orders source command sender identities.
+ * @param aFirst First source command sender id.
+ * @param aSecond Second source command sender id.
+ * @return Zero if the uid and the script id of the first and second are equal.
+ * Negative value if the uid of the first is less than the uid of the second
+ * or script id of the first is less than second's when uid are equal.
+ * Positive value if the uid of the first is greater than the uid of the
+ * second or script id of the first is greater than second's when uid are
+ * equal.
+ */
+ LOCAL_C TInt SourceCommandSenderIdOrder(
+ const TCFSourceCommandSenderId& aFirst,
+ const TCFSourceCommandSenderId& aSecond )
+ {
+ TInt orderValue = 1;
+
+ if ( aFirst.iSender == aSecond.iSender )
+ {
+ if ( aFirst.iScriptId == aSecond.iScriptId )
+ {
+ orderValue = 0;
+ }
+ else if ( aFirst.iScriptId < aSecond.iScriptId )
+ {
+ orderValue = -1;
+ }
+ }
+ else if ( aFirst.iSender < aSecond.iSender )
+ {
+ orderValue = -1;
+ }
+
+ return orderValue;
+ }
+
+
+// CONSTRUCTION
+MT_CFClient* MT_CFClient::NewL( )
+ {
+ MT_CFClient* self = MT_CFClient::NewLC ( );
+ CleanupStack::Pop ( );
+
+ return self;
+ }
+
+MT_CFClient* MT_CFClient::NewLC( )
+ {
+ MT_CFClient* self = new( ELeave ) MT_CFClient();
+ CleanupStack::PushL ( self );
+
+ self->ConstructL ( );
+
+ return self;
+ }
+
+// Destructor (virtual by CBase)
+MT_CFClient::~MT_CFClient( )
+ {
+ Teardown();
+
+ // Enable screen saver
+ CFEnvUtils::EnableScreenSaver( ETrue );
+ }
+
+// Default constructor
+MT_CFClient::MT_CFClient( )
+ {
+ }
+
+// Second phase construct
+void MT_CFClient::ConstructL( )
+ {
+ // The ConstructL from the base class CEUnitTestSuiteClass must be called.
+ // It generates the test case table.
+ CEUnitTestSuiteClass::ConstructL ( );
+
+ // Disable screen saver
+ CFEnvUtils::EnableScreenSaver( EFalse );
+ }
+
+// METHODS
+
+void MT_CFClient::ContextIndicationL(const CCFContextIndication& aChangedContext )
+ {
+ if ( iCheckContextData )
+ {
+ CheckContextDataIndicationL ( aChangedContext );
+ }
+ else
+ {
+ CheckContextIndicationL ( aChangedContext );
+ }
+
+ // Common for both indications
+ if ( iWait && !iCheckA && !iCheckB )
+ {
+ if ( iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ if ( iDeleteClient )
+ {
+ delete iClient;
+ iClient = NULL;
+ iDeleteClient = EFalse;
+ }
+ }
+
+void MT_CFClient::ActionIndicationL(const CCFActionIndication& aActionToExecute )
+ {
+ TPtrC actionId( aActionToExecute.Identifier() );
+ if ( iLastActionId )
+ {
+ delete iLastActionId;
+ iLastActionId = NULL;
+ }
+ iLastActionId = actionId.AllocL();
+
+ if ( iCheckA )
+ {
+ const RKeyValueArray& params = aActionToExecute.Parameters ( );
+ EUNIT_ASSERT_DESC( actionId == KActionA,
+ "Incorrect action identifier!" );
+ EUNIT_ASSERT_DESC( params.Count() == 1,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[0]->Key() == KActionAParamA1,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[0]->Value() == KActionAValueA1,
+ "Incorrect action param count!" )
+ if ( iCountActionAIndications )
+ {
+ --iExpectedActionAIndicationCount;
+ if ( !iExpectedActionAIndicationCount )
+ {
+ iCheckA = EFalse;
+ }
+ }
+ else
+ {
+ iCheckA = EFalse;
+ }
+ }
+ else if ( iCheckB )
+ {
+ const RKeyValueArray& params = aActionToExecute.Parameters ( );
+ EUNIT_ASSERT_DESC( actionId == KActionB,
+ "Incorrect action identifier!" );
+ EUNIT_ASSERT_DESC( params.Count() == 2,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[0]->Key() == KActionBParamB1,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[0]->Value() == KActionBValueB1,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[1]->Key() == KActionBParamB2,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[1]->Value() == KActionBValueB2,
+ "Incorrect action param count!" )
+ iCheckB = EFalse;
+ }
+ else if ( iCheckRegisterScriptAction )
+ {
+ const RKeyValueArray& params = aActionToExecute.Parameters ( );
+ EUNIT_ASSERT_DESC( actionId == _L("RegisterScriptAction"),
+ "Incorrect action identifier!" );
+ EUNIT_ASSERT_DESC( params.Count() == 1,
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[0]->Key() == _L("ParamA1"),
+ "Incorrect action param count!" )
+ EUNIT_ASSERT_DESC( params[0]->Value() == _L("ValueA1"),
+ "Incorrect action param count!" )
+ iCheckRegisterScriptAction = EFalse;
+ }
+ else if ( iCheckCustomAction )
+ {
+ EUNIT_ASSERT_DESC( iCustomActionId == actionId,
+ "Incorrect action id" );
+ const RKeyValueArray
+ & params = aActionToExecute.Parameters ( );
+ EUNIT_ASSERT_DESC( params.Count() == iCustomActionParams.Count(),
+ "Invalid amount of action parameters" );
+ for (TInt i = 0; i < iCustomActionParams.Count ( ); i++ )
+ {
+ CCFKeyValuePair* pair1 = iCustomActionParams[i];
+ CCFKeyValuePair* pair2 = params[i];
+ EUNIT_ASSERT_DESC( pair2->Key() == pair1->Key(),
+ "Invalid key" );
+ EUNIT_ASSERT_DESC( pair2->Value() == pair1->Value(),
+ "Invalid value" );
+ }
+ iCheckCustomAction = EFalse;
+ iCustomActionId.Zero ( );
+ iCustomActionParams.ResetAndDestroy ( );
+ }
+
+ if ( iWait && !iCheckA && !iCheckB && !iCheckRegisterScriptAction &&!iCheckCustomAction )
+ {
+ if ( iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+
+ if ( iDeleteClient )
+ {
+ delete iClient;
+ iClient = NULL;
+ iDeleteClient = EFalse;
+ }
+ }
+
+void MT_CFClient::HandleContextFrameworkError( TCFError aError,
+ const TDesC& aSource, const TDesC& aType )
+ {
+ if ( iCheckB )
+ {
+ EUNIT_ASSERT_DESC( aError == MCFListener::ESecurityCheckErrorForContextSubscription,
+ "Incorrect HandleContextFrameworkError error code!" );
+ EUNIT_ASSERT_DESC( aSource == iContextB->Source(),
+ "Incorrect HandleContextFrameworkError context source!" );
+ EUNIT_ASSERT_DESC( aType == iContextB->Type(),
+ "Incorrect HandleContextFrameworkError context type!" );
+ iCheckB = EFalse;
+ }
+ else if ( iCheckC )
+ {
+ EUNIT_ASSERT_DESC( aError == MCFListener::ESecurityCheckErrorForContextSubscription,
+ "Incorrect HandleContextFrameworkError error code!" );
+ EUNIT_ASSERT_DESC( aSource == iContextC->Source(),
+ "Incorrect HandleContextFrameworkError context source!" );
+ EUNIT_ASSERT_DESC( aType == iContextC->Type(),
+ "Incorrect HandleContextFrameworkError context type!" );
+ iCheckC = EFalse;
+ }
+ else if ( iCheckRomScriptContextAutoDefine )
+ {
+ EUNIT_ASSERT_DESC( aError == MCFListener::ESecurityCheckErrorForContextSubscription,
+ "Incorrect HandleContextFrameworkError error code!" );
+ EUNIT_ASSERT_DESC( aSource == KRomScriptAutoDefineContextSource,
+ "Incorrect HandleContextFrameworkError context source!" );
+ EUNIT_ASSERT_DESC( aType == KRomScriptAutoDefineContextType,
+ "Incorrect HandleContextFrameworkError context type!" );
+ iCheckRomScriptContextAutoDefine = EFalse;
+ if ( iTestDelay )
+ {
+ iTestDelay->Stop();
+ }
+ }
+
+ if ( iWait && !iCheckA && !iCheckB && !iCheckC && !iCheckRomScriptContextAutoDefine )
+ {
+ if ( iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ }
+
+TAny* MT_CFClient::Extension( const TUid& aExtensionUid ) const
+ {
+ switch ( aExtensionUid.iUid )
+ {
+ case KCFContextSourceInterfaceUidValue:
+ {
+ if ( iReturnContextSourceInterface )
+ {
+ MCFContextSource* csinterface = (MCFContextSource*) this;
+ return (TAny*) csinterface;
+ }
+ break;
+ }
+ default:
+ {
+ return NULL;
+ }
+ }
+ return NULL;
+ }
+
+// from MCFContextSource
+void MT_CFClient::Subscribers( const TDesC& aContextSource,
+ const TDesC& aContextType )
+ {
+ if ( iCheckSubscribersNoSubscribersCalled )
+ {
+ iCheckSubscribersNoSubscribersCalled = EFalse;
+ iSubscribersCalled = ETrue;
+ EUNIT_ASSERT_DESC(
+ iExpectedSubscribersSource.Compare( aContextSource ) == 0,
+ "No expected source");
+ EUNIT_ASSERT_DESC(
+ iExpectedSubscribersType.Compare( aContextType ) == 0,
+ "No expected type");
+
+ if ( iWait )
+ {
+ if ( iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ }
+ }
+
+// from MCFContextSource
+void MT_CFClient::NoSubscribers( const TDesC& aContextSource,
+ const TDesC& aContextType )
+ {
+ if ( iCheckSubscribersNoSubscribersCalled )
+ {
+ iCheckSubscribersNoSubscribersCalled = EFalse;
+ iNoSubscribersCalled = ETrue;
+ EUNIT_ASSERT_DESC(
+ iExpectedSubscribersSource.Compare( aContextSource ) == 0,
+ "No expected source");
+ EUNIT_ASSERT_DESC(
+ iExpectedSubscribersType.Compare( aContextType ) == 0,
+ "No expected type");
+
+ if ( iWait )
+ {
+ if ( iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ }
+ }
+
+// from MCFContextSource
+void MT_CFClient::HandleCommand( const CCFContextSourceCommand& aCommand )
+ {
+ TPtrC id( aCommand.Name() );
+ EUNIT_ASSERT_DESC( id.CompareF( KSourceCommandId ) == 0,
+ "No expected source command id" );
+
+ // Parse context source command
+ const RKeyValueArray& attributes = aCommand.Attributes();
+ EUNIT_ASSERT_DESC( attributes.Count() == 1, "No expected attribute count" );
+
+ TUid sourceUid = aCommand.SourceUid();
+ RThread thread;
+ EUNIT_ASSERT_DESC( sourceUid == thread.SecureId(), "No expected uid" );
+ thread.Close();
+
+ const RSourceCommandParameterArray& params = aCommand.Parameters();
+ EUNIT_ASSERT_DESC( params.Count() >= 1, "No expected parameter count" );
+
+ TPtrC paramName( params[ 0 ]->Name() );
+ EUNIT_ASSERT_DESC( paramName.CompareF( KSourceCommandParamCmd ) == 0,
+ "No expected param name" );
+
+ const RKeyValueArray& paramAttributes = params[ 0 ]->Attributes();
+ EUNIT_ASSERT_DESC( paramAttributes.Count() == 1, "No expected parameter attribute count" );
+
+ CCFKeyValuePair* keyValuePair = paramAttributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeType ) == 0,
+ "Type attribute expected" );
+
+ TLinearOrder< TCFSourceCommandSenderId > cmdSenderOrder(
+ SourceCommandSenderIdOrder );
+ TCFSourceCommandSenderId sender = aCommand.Sender();
+ TInt pos = iActiveRequests.FindInOrder( sender, cmdSenderOrder );
+
+ TPtrC cmdType( keyValuePair->Value() );
+ if ( cmdType.CompareF( KSourceCommandAttributeValueActivate ) == 0 )
+ {
+ if ( pos == KErrNotFound )
+ {
+ iActiveRequests.InsertInOrder( sender, cmdSenderOrder );
+ }
+ CheckActivateSourceCommandParams( params );
+ }
+ else if ( cmdType.CompareF( KSourceCommandAttributeValueDeactivate ) == 0 )
+ {
+ if ( pos != KErrNotFound )
+ {
+ iActiveRequests.Remove( pos );
+ }
+ CheckDeactivateSourceCommandParams( params );
+ }
+ else
+ {
+ EUNIT_ASSERT_DESC( EFalse, "WRONG type attribute value" );
+ }
+
+ iHandleCommandCalled = ETrue;
+
+ if ( iWait && iWait->IsStarted() )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+
+void MT_CFClient::CheckActivateSourceCommandParams(
+ const RSourceCommandParameterArray& aParams )
+ {
+ EUNIT_ASSERT_DESC( aParams.Count() == 2, "No expected param count" );
+
+ // Check 1. param
+ CCFContextSourceCommandParameter* param = aParams[ 0 ];
+ TPtrC paramName( param->Name() );
+ EUNIT_ASSERT_DESC( paramName.CompareF( KSourceCommandParamCmd ) == 0,
+ "No expected param name" );
+
+ // Check 1. param attributes
+ const RKeyValueArray& attributes = param->Attributes();
+ EUNIT_ASSERT_DESC( attributes.Count() == 1, "No expected attribute count" );
+ CCFKeyValuePair* keyValuePair = attributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeType ) == 0,
+ "Type attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueActivate ) == 0,
+ "No expected type attribute value" );
+
+ // Check 1. param nested params
+ const RSourceCommandParameterArray& nestedParams = param->Parameters();
+ EUNIT_ASSERT_DESC( nestedParams.Count() == 2, "No expected nested parameter count" );
+
+ // Check 1. param 1. nested params attributes
+ CCFContextSourceCommandParameter* nestedParam = nestedParams[ 0 ];
+ EUNIT_ASSERT_DESC( nestedParam->Name().CompareF(
+ KSourceCommandParamCmdParam ) == 0,
+ "Parameter cmdParam expected" );
+ const RKeyValueArray& nestedParamAttributes = nestedParam->Attributes();
+ EUNIT_ASSERT_DESC( nestedParamAttributes.Count() == 1,
+ "No expected nested parameter attribute count" );
+ keyValuePair = nestedParamAttributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeMode ) == 0,
+ "Mode attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueClean ) == 0,
+ "No expected mode attribute value" );
+
+ // Check 1. param 1. nested params parameters
+ const RSourceCommandParameterArray& nested2Params = nestedParam->Parameters();
+ EUNIT_ASSERT_DESC( nested2Params.Count() == 1, "No expected nested parameter count" );
+
+ // Check 1. param 1. nested params parameters attributes
+ nestedParam = nested2Params[ 0 ];
+ EUNIT_ASSERT_DESC( nestedParam->Name().CompareF(
+ KSourceCommandParamModifiers ) == 0,
+ "Modifiers param expected" );
+ const RKeyValueArray& nested2ParamAttributes = nestedParam->Attributes();
+ EUNIT_ASSERT_DESC( nested2ParamAttributes.Count() == 1,
+ "No expected nested parameter attribute count" );
+ keyValuePair = nested2ParamAttributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeValue ) == 0,
+ "Value attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueReally ) == 0,
+ "No expected value attribute value" );
+
+ const RSourceCommandParameterArray& nested3Params = nestedParam->Parameters();
+ EUNIT_ASSERT_DESC( nested3Params.Count() == 0, "No expected nested parameter count" );
+
+ // Check 1. param 2. nested params attributes
+ nestedParam = nestedParams[ 1 ];
+ EUNIT_ASSERT_DESC( nestedParam->Name().CompareF(
+ KSourceCommandParamCmdParam ) == 0,
+ "Parameter cmdParam expected" );
+ const RKeyValueArray& nested3ParamAttributes = nestedParam->Attributes();
+ EUNIT_ASSERT_DESC( nested3ParamAttributes.Count() == 1,
+ "No expected nested parameter attribute count" );
+ keyValuePair = nested3ParamAttributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeOverride ) == 0,
+ "Override attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueYes ) == 0,
+ "No expected override attribute value" );
+
+ const RSourceCommandParameterArray& nested4Params = nestedParam->Parameters();
+ EUNIT_ASSERT_DESC( nested4Params.Count() == 0, "No expected nested parameter count" );
+
+ // Check 2. param
+ param = aParams[ 1 ];
+ paramName.Set( param->Name() );
+ EUNIT_ASSERT_DESC( paramName.CompareF( KSourceCommandParamCmdInfo ) == 0,
+ "No expected param name" );
+
+ // Check 2. param attributes
+ const RKeyValueArray& attributes2 = param->Attributes();
+ EUNIT_ASSERT_DESC( attributes2.Count() == 1, "No expected attribute count" );
+ keyValuePair = attributes2[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeType ) == 0,
+ "Type attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueActivate ) == 0,
+ "No expected type attribute value" );
+
+ // Check 2. param nested params
+ const RSourceCommandParameterArray& nestedParams2 = param->Parameters();
+ EUNIT_ASSERT_DESC( nestedParams2.Count() == 1, "No expected nested parameter count" );
+
+ // Check 2. param nested params attributes
+ nestedParam = nestedParams2[ 0 ];
+ EUNIT_ASSERT_DESC( nestedParam->Name().CompareF(
+ KSourceCommandParamCmdParam ) == 0,
+ "Parameter cmdParam expected" );
+ const RKeyValueArray& nestedParamAttributes2 = nestedParam->Attributes();
+ EUNIT_ASSERT_DESC( nestedParamAttributes2.Count() == 1,
+ "No expected nested parameter attribute count" );
+ keyValuePair = nestedParamAttributes2[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeText ) == 0,
+ "Text attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueText ) == 0,
+ "No expected text attribute value" );
+
+ // Check 2. param 1. nested params parameters
+ const RSourceCommandParameterArray& nested2Params2 = nestedParam->Parameters();
+ EUNIT_ASSERT_DESC( nested2Params2.Count() == 0, "No expected nested parameter count" );
+ }
+
+void MT_CFClient::CheckDeactivateSourceCommandParams(
+ const RSourceCommandParameterArray& aParams )
+ {
+ EUNIT_ASSERT_DESC( aParams.Count() == 1, "No expected param count" );
+
+ // Check param
+ CCFContextSourceCommandParameter* param = aParams[ 0 ];
+ TPtrC paramName( param->Name() );
+ EUNIT_ASSERT_DESC( paramName.CompareF( KSourceCommandParamCmd ) == 0,
+ "No expected param name" );
+
+ // Check param attributes
+ const RKeyValueArray& attributes = param->Attributes();
+ EUNIT_ASSERT_DESC( attributes.Count() == 1, "No expected attribute count" );
+ CCFKeyValuePair* keyValuePair = attributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeType ) == 0,
+ "Type attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueDeactivate ) == 0,
+ "No expected type attribute value" );
+
+ // Check param nested params
+ const RSourceCommandParameterArray& nestedParams = param->Parameters();
+ EUNIT_ASSERT_DESC( nestedParams.Count() == 1, "No expected nested parameter count" );
+
+ // Check param nested params attributes
+ CCFContextSourceCommandParameter* nestedParam = nestedParams[ 0 ];
+ EUNIT_ASSERT_DESC( nestedParam->Name().CompareF(
+ KSourceCommandParamCmdParam ) == 0,
+ "Parameter cmdParam expected" );
+ const RKeyValueArray& nestedParamAttributes = nestedParam->Attributes();
+ EUNIT_ASSERT_DESC( nestedParamAttributes.Count() == 1,
+ "No expected nested parameter attribute count" );
+ keyValuePair = nestedParamAttributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeMode ) == 0,
+ "Mode attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueFull ) == 0,
+ "No expected mode attribute value" );
+
+ // Check param nested params parameters
+ const RSourceCommandParameterArray& nested2Params = nestedParam->Parameters();
+ EUNIT_ASSERT_DESC( nested2Params.Count() == 1, "No expected nested parameter count" );
+
+ // Check param nested params parameters attributes
+ nestedParam = nested2Params[ 0 ];
+ EUNIT_ASSERT_DESC( nestedParam->Name().CompareF(
+ KSourceCommandParamModifiers ) == 0,
+ "Modifiers param expected" );
+ const RKeyValueArray& nested2ParamAttributes = nestedParam->Attributes();
+ EUNIT_ASSERT_DESC( nested2ParamAttributes.Count() == 1,
+ "No expected nested parameter attribute count" );
+ keyValuePair = nested2ParamAttributes[ 0 ];
+ EUNIT_ASSERT_DESC( keyValuePair->Key().CompareF(
+ KSourceCommandAttributeValue ) == 0,
+ "Value attribute expected" );
+ EUNIT_ASSERT_DESC( keyValuePair->Value().CompareF(
+ KSourceCommandAttributeValueNoException ) == 0,
+ "No expected value attribute value" );
+
+ const RSourceCommandParameterArray& nested3Params = nestedParam->Parameters();
+ EUNIT_ASSERT_DESC( nested3Params.Count() == 0, "No expected nested parameter count" );
+ }
+
+
+void MT_CFClient::SetupL( )
+ {
+ }
+
+void MT_CFClient::SetupClientL( )
+ {
+ User::LeaveIfError ( iFs.Connect ( ) );
+ iClient = CCFClient::NewL ( *this );
+ iAnotherClient = CCFClient::NewL ( *this );
+ iContextA = CCFContextObject::NewL ( );
+ iContextB = CCFContextObject::NewL ( );
+ iContextC = CCFContextObject::NewL ( );
+ iWait = new( ELeave ) CActiveSchedulerWait;
+ iContextDataA = CTestContextData::NewL ( _L("Key_A"), _L("Value_A") );
+ iContextDataB = CTestContextData::NewL ( _L("Key_B"), _L("Value_B") );
+ }
+
+void MT_CFClient::SetupNewClientL( )
+ {
+ iReturnContextSourceInterface = ETrue;
+ iTestDelay = CCFTestDelay::NewL ( );
+ SetupClientL ( );
+ }
+
+void MT_CFClient::SetupSourceSettingTestClientL( )
+ {
+ iTestDelay = CCFTestDelay::NewL ( );
+ SetupClientL ( );
+ }
+
+void MT_CFClient::Teardown( )
+ {
+ if ( iWait )
+ {
+ if ( iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ delete iWait;
+ iWait = NULL;
+ }
+
+ delete iClient;
+ iClient = NULL;
+
+ delete iAnotherClient;
+ iAnotherClient = NULL;
+
+ delete iContextA;
+ iContextA = NULL;
+
+ delete iContextB;
+ iContextB = NULL;
+
+ delete iContextC;
+ iContextC = NULL;
+ iFs.Close ( );
+
+ delete iContextDataA;
+ iContextDataA = NULL;
+
+ delete iContextDataB;
+ iContextDataB = NULL;
+
+ iReturnContextSourceInterface = EFalse;
+
+ iCustomActionParams.ResetAndDestroy();
+
+ delete iLastActionId;
+ iLastActionId = NULL;
+
+ iActiveRequests.Close();
+
+ if ( iTestDelay )
+ {
+ // Give some time for everything to be cleaned up.
+ iTestDelay->Start ( 100000 ); // 100 ms
+ }
+
+ delete iTestDelay;
+ iTestDelay = NULL;
+ }
+
+void MT_CFClient::TeardownAndScriptCleanup( )
+ {
+ iClient->DeleteScripts ( );
+ iClient->RestoreRomScript ( _L("test-scriptUpgradeRom") );
+ iClient->RestoreRomScript ( _L("test-scriptUpgradeRomClientMissingCapability") );
+ Teardown ( );
+ }
+
+void MT_CFClient::CheckContextIndicationL(
+ const CCFContextIndication& aChangedContext )
+ {
+ if ( iCheckA )
+ {
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( co.Source() == iContextA->Source(),
+ "Incorrect context source in context indication!" );
+ EUNIT_ASSERT_DESC( co.Type() == iContextA->Type(),
+ "Incorrect context type in context indication!" );
+ EUNIT_ASSERT_DESC( co.Value() == iContextA->Value(),
+ "Incorrect context value in context indication!" );
+ iCheckA = EFalse;
+ }
+ else if ( iCheckB )
+ {
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( co.Source() == iContextB->Source(),
+ "Incorrect context source in context indication!" );
+ EUNIT_ASSERT_DESC( co.Type() == iContextB->Type(),
+ "Incorrect context type in context indication!" );
+ EUNIT_ASSERT_DESC( co.Value() == iContextB->Value(),
+ "Incorrect context value in context indication!" );
+ iCheckB = EFalse;
+ }
+ else if ( iCheckPluginSubscribersCalled )
+ {
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( iExpectedSubscribersSource == co.Source(),
+ "No expected plugin subscriber source");
+ EUNIT_ASSERT_DESC( iExpectedSubscribersType == co.Type(),
+ "No expected plugin subscriber type");
+ EUNIT_ASSERT_DESC( iExpectedSubscribersValue == co.Value(),
+ "No expected plugin subscriber value");
+
+ iPluginSubscribersCalled = ETrue;
+ iCheckPluginSubscribersCalled = EFalse;
+
+ if ( iWait && iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ else if ( iCheckSourceCommandHandled )
+ {
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( iExpectedSubscribersSource == co.Source(),
+ "No expected source command signal context source");
+ EUNIT_ASSERT_DESC( iExpectedSubscribersType == co.Type(),
+ "No expected source command signal context type");
+ EUNIT_ASSERT_DESC( iExpectedSubscribersValue == co.Value(),
+ "No expected source command signal context value");
+
+ iSourceCommandHandled = ETrue;
+ iCheckSourceCommandHandled = EFalse;
+
+ if ( iWait && iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ else if ( iCheckRomScriptContextAutoDefineDetected )
+ {
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( iExpectedSubscribersSource == co.Source(),
+ "No expected source command signal context source");
+ EUNIT_ASSERT_DESC( iExpectedSubscribersType == co.Type(),
+ "No expected source command signal context type");
+ EUNIT_ASSERT_DESC( iExpectedSubscribersValue == co.Value(),
+ "No expected source command signal context value");
+
+ iCheckRomScriptContextAutoDefineDetected = EFalse;
+
+ if ( iWait && iWait->IsStarted ( ) )
+ {
+ iWait->AsyncStop ( );
+ }
+ }
+ }
+
+void MT_CFClient::CheckContextDataIndicationL(
+ const CCFContextIndication& aChangedContext )
+ {
+ if ( iCheckA )
+ {
+ // Check context
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( co.Source() == iContextA->Source(),
+ "Incorrect context source in context indication!" );
+ EUNIT_ASSERT_DESC( co.Type() == iContextA->Type(),
+ "Incorrect context type in context indication!" );
+ EUNIT_ASSERT_DESC( co.Value() == iContextA->Value(),
+ "Incorrect context value in context indication!" );
+
+ // Check data object
+ EUNIT_ASSERT_DESC( aChangedContext.Uid() == KTestContextDataUid,
+ "Incorrect context data UID!" );
+ if ( aChangedContext.Uid ( )== KTestContextDataUid )
+ {
+ CCFContextIndication
+ & indication =const_cast<CCFContextIndication&>( aChangedContext );
+ CTestContextData* contextData =CTestContextData::NewLC ( KNullDesC,
+ KNullDesC );
+ indication.CreateDataObjectL ( *contextData );
+ EUNIT_ASSERT_DESC( contextData->Key() == iContextDataA->Key(),
+ "Incorrect context data object comparison!" );
+ EUNIT_ASSERT_DESC( contextData->Value() == iContextDataA->Value(),
+ "Incorrect context data object comparison!" );
+ CleanupStack::PopAndDestroy ( contextData );
+ }
+ iCheckA = EFalse;
+ }
+ else if ( iCheckB )
+ {
+ // Check context
+ const CCFContextObject& co = aChangedContext.Context ( );
+ EUNIT_ASSERT_DESC( co.Source() == iContextB->Source(),
+ "Incorrect context source in context indication!" );
+ EUNIT_ASSERT_DESC( co.Type() == iContextB->Type(),
+ "Incorrect context type in context indication!" );
+ EUNIT_ASSERT_DESC( co.Value() == iContextB->Value(),
+ "Incorrect context value in context indication!" );
+
+ // Check data object
+ EUNIT_ASSERT_DESC( aChangedContext.Uid() == KTestContextDataUid,
+ "Incorrect context data UID!" );
+ if ( aChangedContext.Uid ( )== KTestContextDataUid )
+ {
+ CCFContextIndication
+ & indication =const_cast<CCFContextIndication&>( aChangedContext );
+ CTestContextData* contextData =CTestContextData::NewLC (
+ KNullDesC, KNullDesC );
+ indication.CreateDataObjectL ( *contextData );
+ EUNIT_ASSERT_DESC( contextData->Key() == iContextDataB->Key(),
+ "Incorrect context data object comparison!" );
+ EUNIT_ASSERT_DESC( contextData->Value() == iContextDataB->Value(),
+ "Incorrect context data object comparison!" );
+ CleanupStack::PopAndDestroy ( contextData );
+ }
+ iCheckB = EFalse;
+ }
+ }
+
+void MT_CFClient::ConfigureContextL( CCFContextObject& aContext )
+ {
+ Wait ( KConfigDelay );
+
+ TBuf<256> buf( KNullDesC );
+ TTime time;
+ time.HomeTime ( );
+
+ buf.Format ( KContextSourceFormat, time.Int64 ( ) );
+ aContext.SetSourceL ( buf );
+
+ buf.Format ( KContextTypeFormat, time.Int64 ( ) );
+ aContext.SetTypeL ( buf );
+
+ buf.Format ( KContextValueFormat, time.Int64 ( ) );
+ aContext.SetValueL ( buf );
+ }
+
+void MT_CFClient::UpdateContextValueL( CCFContextObject& aContext )
+ {
+ Wait ( KConfigDelay );
+
+ TBuf<256> buf( KNullDesC );
+ TTime time;
+ time.HomeTime ( );
+
+ buf.Format ( KContextValueFormat, time.Int64 ( ) );
+ aContext.SetValueL ( buf );
+ }
+
+void MT_CFClient::UpdateContextTypeL( CCFContextObject& aContext )
+ {
+ Wait ( KConfigDelay );
+
+ TBuf<256> buf( KNullDesC );
+ TTime time;
+ time.HomeTime ( );
+
+ buf.Format ( KContextTypeFormat, time.Int64 ( ) );
+ aContext.SetTypeL ( buf );
+ }
+
+HBufC* MT_CFClient::ConfigureActionIdLC( )
+ {
+ Wait ( KConfigDelay );
+
+ TTime time;
+ time.HomeTime ( );
+ HBufC* actionId = HBufC::NewLC ( 256 );
+ TPtr actionIdPtr = actionId->Des ( );
+ actionIdPtr.Format ( KActionIdFormat, time.Int64 ( ) );
+
+ return actionId;
+ }
+
+HBufC8* MT_CFClient::LoadScriptFromFile( const TDesC& aFilePath )
+ {
+ HBufC8* script= NULL;
+ RFile file;
+ TFileName fileName;
+ fileName.Copy (_L("z:\\data\\cftestdata\\testscripts\\") );
+ fileName.Append (aFilePath );
+ TInt err = file.Open ( iFs, fileName, EFileRead );
+ if ( err == KErrNone )
+ {
+ TInt size = 0;
+ err = file.Size ( size );
+ if ( err == KErrNone )
+ {
+ script = HBufC8::New ( size );
+ if ( script )
+ {
+ TPtr8 scriptPtr = script->Des ( );
+ err = file.Read ( scriptPtr );
+ if ( err == KErrNone )
+ {
+ // Strip all unnecassary data from script
+ TInt pos = scriptPtr.FindF ( KScriptStartTag );
+ if ( pos != KErrNotFound )
+ {
+ scriptPtr.Copy ( scriptPtr.MidTPtr ( pos ) );
+ }
+ else
+ {
+ // Incorrect script
+ delete script;
+ script = NULL;
+ }
+ }
+ else
+ {
+ delete script;
+ script = NULL;
+ }
+ }
+ }
+ }
+ else
+ {
+ EUNIT_PRINT( _L("MT_CFClient::LoadScriptFromFile - Loading file [%S] failed with code = %d"),
+ &fileName, err );
+ }
+
+ // Cleanup
+ file.Close ( );
+ return script;
+ }
+
+void MT_CFClient::ResetCustomAction()
+ {
+ iCheckCustomAction = EFalse;
+ iCustomActionId.Zero();
+ iCustomActionParams.ResetAndDestroy();
+ }
+
+TBool MT_CFClient::LastActionIdEquals( const TDesC& aId )
+ {
+ if ( iLastActionId )
+ {
+ return ( *iLastActionId == aId );
+ }
+ else
+ {
+ return EFalse;
+ }
+ }
+
+void MT_CFClient::DeleteLastActionId()
+ {
+ delete iLastActionId;
+ iLastActionId = NULL;
+ }
+
+//-----------------------------------------------------------------------------
+// CFClient module tests
+//-----------------------------------------------------------------------------
+//
+void MT_CFClient::MT_CCFClient_NewLL( )
+ {
+ CCFClient* client = CCFClient::NewL ( *this );
+ CleanupStack::PushL ( client );
+
+ EUNIT_ASSERT_DESC( client, "CCFClient class instance not created!" );
+
+ CleanupStack::PopAndDestroy ( client );
+ }
+
+void MT_CFClient::MT_CCFClient_NewLCL( )
+ {
+ CCFClient* client = CCFClient::NewLC ( *this );
+
+ EUNIT_ASSERT_DESC( client, "CCFClient class instance not created!" );
+
+ CleanupStack::PopAndDestroy ( client );
+ }
+
+void MT_CFClient::MT_CCFClient_DefineContextL( )
+ {
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+ TInt err = KErrNone;
+
+ // x. Define context from two different clients when context onwer is set
+ //--------------------------------------------------------------------------
+ iReturnContextSourceInterface = ETrue;
+ CCFClient* client = CCFClient::NewLC ( *this );
+ CCFClient* client2 = CCFClient::NewLC ( *this );
+ ConfigureContextL ( *context );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+ err = client2->DefineContext ( context->Source ( ), context->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Incorrect DefineContext return value! " );
+ CleanupStack::PopAndDestroy ( client2 );
+ CleanupStack::PopAndDestroy ( client );
+
+ // x. Define context, delete client and redefine context
+ //--------------------------------------------------------------------------
+ iReturnContextSourceInterface = ETrue;
+ ConfigureContextL ( *context );
+ client = CCFClient::NewLC ( *this );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+ CleanupStack::PopAndDestroy ( client );
+
+ client = CCFClient::NewLC ( *this );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+ err = client->DefineContext ( context->Source ( ), KNullDesC, KFailSec );
+ CleanupStack::PopAndDestroy ( client );
+
+ // x. Define context, delete client and redefine context
+ //--------------------------------------------------------------------------
+ client = CCFClient::NewLC ( *this );
+ err = client->DefineContext ( context->Source(), KNullDesC, KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect DefineContext return value! " );
+ err = client->DefineContext ( KNullDesC, context->Type ( ), KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect DefineContext return value! " );
+ CleanupStack::PopAndDestroy ( client );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( context );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribersNosubscribersL( )
+ {
+ TInt err = KErrNone;
+
+ // Define context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+
+ // Delete & re-create client causing de-registering of publisher.
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL ( *this );
+
+ // in this case redefine should work (same client)
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+
+ // Test if we get Subscribers() callback if we add subscription
+ iCheckSubscribersNoSubscribersCalled = ETrue;
+ iSubscribersCalled = EFalse;
+ iExpectedSubscribersSource.Copy ( iContextA->Source ( ) );
+ iExpectedSubscribersType.Copy ( iContextA->Type ( ) );
+
+ CCFContextSubscription* subscription= NULL;
+ // Define a context and subscribe it
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ iWait->Start ( );
+ EUNIT_ASSERT_DESC( iSubscribersCalled, "MCFContextSource::Subscribers not called" );
+ EUNIT_ASSERT_DESC( !iCheckSubscribersNoSubscribersCalled, "Subscribers not called" );
+
+ // Test if we get NoSubsscribers() callback if we remove subscription
+ iCheckSubscribersNoSubscribersCalled = ETrue;
+ iSubscribersCalled = EFalse;
+ iNoSubscribersCalled = EFalse;
+ iExpectedSubscribersSource.Copy ( iContextA->Source ( ) );
+ iExpectedSubscribersType.Copy ( iContextA->Type ( ) );
+
+ // Define a context and subscribe it
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->UnsubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iNoSubscribersCalled, "MCFContextSource::NoSubscribers not called" );
+ EUNIT_ASSERT_DESC( !iCheckSubscribersNoSubscribersCalled, "Subscribers not called" );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribersNosubscribersPluginL( )
+ {
+ TInt err = KErrNone;
+
+ // Subscribe to value context signalling plugin "reactions".
+ // below // CLEANUP<< valueSub
+ CCFContextSubscription* valueSub = CCFContextSubscription::NewLC ( );
+ valueSub->SetContextSourceL ( KTestContextSource );
+ valueSub->SetContextTypeL ( KTestContextValueType );
+ err = iClient->SubscribeContext ( *valueSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Test if plugin gets Subscribers() callback if we add subscription
+ iExpectedSubscribersSource.Copy ( KTestContextSource );
+ iExpectedSubscribersType.Copy ( KTestContextValueType );
+ iExpectedSubscribersValue.Copy ( KTestContextValueSubsOk );
+
+ // 1.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ // below // CLEANUP<< pluginSub1
+ CCFContextSubscription* pluginSub1 = CCFContextSubscription::NewLC ( );
+ pluginSub1->SetContextSourceL ( KTestContextSource );
+ pluginSub1->SetContextTypeL ( KTestContextType );
+ err = iClient->SubscribeContext ( *pluginSub1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Wait for correct context as answer.
+ iTestDelay->Start ( 250000 ); // 250 ms
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+
+ // 2.Subscription via iAnotherClient
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ // below // CLEANUP<< pluginSub2
+ CCFContextSubscription* pluginSub2 = CCFContextSubscription::NewLC ( );
+ pluginSub2->SetContextSourceL ( KTestContextSource );
+ pluginSub2->SetContextTypeL ( KTestContextType );
+ err = iAnotherClient->SubscribeContext ( *pluginSub2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Wait and no answer expected.
+ iTestDelay->Start ( 500000 ); // 0.5 s
+ EUNIT_ASSERT_DESC( iCheckPluginSubscribersCalled, "SubscribeContext was detected by plugin" );
+ EUNIT_ASSERT_DESC( !iPluginSubscribersCalled, "SubscribeContext was detected by plugin" );
+
+ // Unsubscribe 2.Subscription via iAnotherClient
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ err = iAnotherClient->UnsubscribeContext ( *pluginSub2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ // Wait and no answer expected.
+ iTestDelay->Start ( 250000 ); // 250 ms
+ EUNIT_ASSERT_DESC( iCheckPluginSubscribersCalled, "UnsubscribeContext was detected by plugin" );
+ EUNIT_ASSERT_DESC( !iPluginSubscribersCalled, "UnsubscribeContext was detected by plugin" );
+
+ // Test if plugin gets NoSubscribers() callback if we remove last subscription
+ iExpectedSubscribersSource.Copy ( KTestContextSource );
+ iExpectedSubscribersType.Copy ( KTestContextValueType );
+ iExpectedSubscribersValue.Copy ( KTestContextValueNosubsOk );
+
+ // Unsubscribe 1.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ err = iClient->UnsubscribeContext ( *pluginSub1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ // Wait for correct context as answer.
+ iTestDelay->Start ( 500000 ); // 0.5 s
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "UnsubscribeContext was not detected by plugin" );
+
+ err = iClient->UnsubscribeContext ( *valueSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ CleanupStack::PopAndDestroy ( pluginSub2 ); //CLEANUP>> pluginSub2
+ CleanupStack::PopAndDestroy ( pluginSub1 ); //CLEANUP>> pluginSub1
+ CleanupStack::PopAndDestroy ( valueSub ); //CLEANUP>> valueSub
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribersNosubscribersPlugin2L( )
+ {
+ TInt err = KErrNone;
+
+ // Subscribe to value context signalling plugin "reactions".
+ // below // CLEANUP<< valueSub
+ CCFContextSubscription* valueSub = CCFContextSubscription::NewLC ( );
+ valueSub->SetContextSourceL ( KTestContextSource );
+ valueSub->SetContextTypeL ( KTestContextValueType );
+ err = iClient->SubscribeContext ( *valueSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Test if plugin gets Subscribers() callback if we add subscription
+ iExpectedSubscribersSource.Copy ( KTestContextSource );
+ iExpectedSubscribersType.Copy ( KTestContextValueType );
+ iExpectedSubscribersValue.Copy ( KTestContextValueSubsOk );
+
+ // 1.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ // below // CLEANUP<< pluginSub1
+ CCFContextSubscription* pluginSub1 = CCFContextSubscription::NewLC ( );
+ pluginSub1->SetContextSourceL ( KTestContextSource );
+ pluginSub1->SetContextTypeL ( KTestContextType );
+ err = iClient->SubscribeContext ( *pluginSub1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Wait for correct context as answer.
+ iTestDelay->Start ( 250000 ); // 250 ms
+ EUNIT_ASSERT_DESC( !iCheckPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+
+ // 2.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ // below // CLEANUP<< pluginSub2
+ CCFContextSubscription* pluginSub2 = CCFContextSubscription::NewLC ( );
+ pluginSub2->SetContextSourceL ( KTestContextSource );
+ pluginSub2->SetContextTypeL ( KTestContextType2 );
+ err = iAnotherClient->SubscribeContext ( *pluginSub2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Wait and no answer expected.
+ iTestDelay->Start ( 500000 ); // 0.5 s
+ EUNIT_ASSERT_DESC( !iCheckPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+
+ // 3.Subscription dummy
+ // below // CLEANUP<< dummySub
+ CCFContextSubscription* dummySub = CCFContextSubscription::NewLC();
+ dummySub->SetContextSourceL( _L( "jusTaDummySubSource" ) );
+ dummySub->SetContextTypeL( _L( "jusTaDummySubType" ) );
+ err = iClient->SubscribeContext( *dummySub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Test if plugin gets NoSubscribers() callback if we remove last subscription
+ iExpectedSubscribersSource.Copy ( KTestContextSource );
+ iExpectedSubscribersType.Copy ( KTestContextValueType );
+ iExpectedSubscribersValue.Copy ( KTestContextValueNosubsOk );
+
+ // Unsubscribe 1.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ err = iClient->UnsubscribeContext ( *pluginSub1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ // Wait and no answer expected.
+ iTestDelay->Start ( 500000 ); // 500 ms
+ EUNIT_ASSERT_DESC( !iCheckPluginSubscribersCalled, "UnsubscribeContext was not detected by plugin" );
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "UnsubscribeContext was not detected by plugin" );
+
+ // Test if plugin gets NoSubscribers() callback if we remove last subscription
+ iExpectedSubscribersSource.Copy ( KTestContextSource );
+ iExpectedSubscribersType.Copy ( KTestContextValueType );
+ iExpectedSubscribersValue.Copy ( KTestContextValueNosubsOk );
+
+ // Unsubscribe 2.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ err = iAnotherClient->UnsubscribeContext ( *pluginSub2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ // Wait for correct context as answer.
+ iTestDelay->Start ( 500000 ); // 0.5 s
+ EUNIT_ASSERT_DESC( !iCheckPluginSubscribersCalled, "UnsubscribeContext was not detected by plugin" );
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "UnsubscribeContext was not detected by plugin" );
+
+ // Unsubscribe 3.Subscription dummy
+ err = iClient->UnsubscribeContext( *dummySub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ err = iClient->UnsubscribeContext ( *valueSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ CleanupStack::PopAndDestroy ( dummySub ); //CLEANUP>> dummySub
+ CleanupStack::PopAndDestroy ( pluginSub2 ); //CLEANUP>> pluginSub2
+ CleanupStack::PopAndDestroy ( pluginSub1 ); //CLEANUP>> pluginSub1
+ CleanupStack::PopAndDestroy ( valueSub ); //CLEANUP>> valueSub
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribersNosubscribersPlugin3L()
+ {
+ TInt err = KErrNone;
+
+ // Subscribe to value context signalling plugin "reactions".
+ // below // CLEANUP<< valueSub
+ CCFContextSubscription* valueSub = CCFContextSubscription::NewLC ( );
+ valueSub->SetContextSourceL ( KTestContextSource );
+ valueSub->SetContextTypeL ( KTestContextValueType );
+ err = iClient->SubscribeContext ( *valueSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Test if plugin gets Subscribers() callback if we add subscription
+ iExpectedSubscribersSource.Copy ( KTestContextSource );
+ iExpectedSubscribersType.Copy ( KTestContextValueType );
+ iExpectedSubscribersValue.Copy ( KTestContextValueSubsOk );
+
+ // 1.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ // below // CLEANUP<< pluginSub1
+ CCFContextSubscription* pluginSub1 = CCFContextSubscription::NewLC ( );
+ pluginSub1->SetContextSourceL ( KTestContextSource );
+ pluginSub1->SetContextTypeL ( KTestContextType );
+ err = iClient->SubscribeContext ( *pluginSub1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Wait for correct context as answer.
+ iTestDelay->Start ( 250000 ); // 250 ms
+ EUNIT_ASSERT_DESC( !iCheckPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+
+ // 2.Subscription
+ iCheckPluginSubscribersCalled = ETrue;
+ iPluginSubscribersCalled = EFalse;
+ // below // CLEANUP<< pluginSub2
+ CCFContextSubscription* pluginSub2 = CCFContextSubscription::NewLC ( );
+ pluginSub2->SetContextSourceL ( KTestContextSource );
+ pluginSub2->SetContextTypeL ( KTestContextType2 );
+ err = iAnotherClient->SubscribeContext ( *pluginSub2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Wait and no answer expected.
+ iTestDelay->Start ( 500000 ); // 0.5 s
+ EUNIT_ASSERT_DESC( !iCheckPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+ EUNIT_ASSERT_DESC( iPluginSubscribersCalled, "SubscribeContext was not detected by plugin" );
+
+ // 3.Subscription dummy
+ // below // CLEANUP<< dummySub
+ CCFContextSubscription* dummySub = CCFContextSubscription::NewLC();
+ dummySub->SetContextSourceL( _L( "jusTaDummySubSource" ) );
+ dummySub->SetContextTypeL( _L( "jusTaDummySubType" ) );
+ err = iClient->SubscribeContext( *dummySub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Unsubscribe Subscriptions by deleting the client
+ delete iClient;
+ iClient = NULL;
+ delete iAnotherClient;
+ iAnotherClient = NULL;
+
+ CleanupStack::PopAndDestroy ( dummySub ); //CLEANUP>> dummySub
+ CleanupStack::PopAndDestroy ( pluginSub2 ); //CLEANUP>> pluginSub2
+ CleanupStack::PopAndDestroy ( pluginSub1 ); //CLEANUP>> pluginSub1
+ CleanupStack::PopAndDestroy ( valueSub ); //CLEANUP>> valueSub
+ }
+
+void MT_CFClient::MT_CCFClient_ContextSourceCommandPluginL( )
+ {
+ TInt err = KErrNone;
+
+ // Subscribe to value context signalling plugin "reactions".
+ // below // CLEANUP<< sourceCmdSignalSub
+ CCFContextSubscription* sourceCmdSignalSub = CCFContextSubscription::NewLC();
+ sourceCmdSignalSub->SetContextSourceL( KSourceCommandSignalContextSource );
+ sourceCmdSignalSub->SetContextTypeL( KSourceCommandSignalContextType );
+ err = iClient->SubscribeContext( *sourceCmdSignalSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Define context // CLEANUP<< context
+ CCFContextObject* context = CCFContextObject::NewLC(
+ KSourceCommandPluginScriptContextSource,
+ KSourceCommandScriptContextType,
+ KSourceCommandScript1ContextValueDeactivate );
+ err = iClient->DefineContext( context->Source(), context->Type(),
+ KPassSec, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+
+ // Registering scripts with context source command as action
+ HBufC8* script = LoadScriptFromFile(_L("test-sourceCommandPlugIn.xml") );
+ TInt scriptId( -1 );
+ err = iClient->RegisterScript( _L("test-sourceCommandPlugIn.xml"),
+ *script,
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ delete script;
+ script = NULL;
+
+ script = LoadScriptFromFile(_L("test-sourceCommandPlugIn2.xml") );
+ TInt scriptId2( -1 );
+ err = iClient->RegisterScript( _L("test-sourceCommandPlugIn2.xml"),
+ *script,
+ scriptId2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // 1. Publish script1 deactivate
+ // Test values that plugin responds correctly to source command
+ iExpectedSubscribersSource.Copy( KSourceCommandSignalContextSource );
+ iExpectedSubscribersType.Copy( KSourceCommandSignalContextType );
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueDeactiveReqDeactivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 2. Publish script2 deactivate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueDeactiveReqDeactivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 3. Publish script1 activate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueActivated );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueActivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 4. Publish script1 activate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueActiveReqActivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueActivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 5. Publish script2 activate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueActiveReqActivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueActivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 6. Publish script2 deactivate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueActiveReqDeactivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 7. Publish script2 deactivate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueActiveReqDeactivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 8. Publish script1 deactivate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueDeactivated );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ // 9. Publish script2 deactivate
+ iExpectedSubscribersValue.Copy( KSourceCommandSignalContextValueDeactiveReqDeactivate );
+ iCheckSourceCommandHandled = ETrue;
+ iSourceCommandHandled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for correct context as answer.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( !iCheckSourceCommandHandled, "Source command was not checked" );
+ EUNIT_ASSERT_DESC( iSourceCommandHandled, "Source command was not detected by plugin" );
+
+ err = iClient->UnsubscribeContext( *sourceCmdSignalSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+
+ err = iClient->DeregisterScript( scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when de-registering script!" );
+ err = iClient->DeregisterScript( scriptId2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when de-registering script!" );
+
+ CleanupStack::PopAndDestroy( context ); // CLEANUP>> context
+ CleanupStack::PopAndDestroy( sourceCmdSignalSub );//CLEANUP>> sourceCmdSignalSub
+ }
+
+void MT_CFClient::MT_CCFClient_ContextSourceCommandClientL( )
+ {
+ TInt err = KErrNone;
+
+ // Define context // CLEANUP<< context
+ CCFContextObject* context = CCFContextObject::NewLC(
+ KSourceCommandClientScriptContextSource,
+ KSourceCommandScriptContextType,
+ KSourceCommandScript1ContextValueDeactivate );
+ err = iClient->DefineContext( context->Source(), context->Type(),
+ KPassSec, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value! " );
+
+ // Registering scripts with context source command as action
+ HBufC8* script = LoadScriptFromFile(_L("test-sourceCommand.xml") );
+ TInt scriptId( -1 );
+ err = iClient->RegisterScript( _L("test-sourceCommand.xml"),
+ *script,
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ delete script;
+ script = NULL;
+
+ script = LoadScriptFromFile(_L("test-sourceCommand2.xml") );
+ TInt scriptId2( -1 );
+ err = iClient->RegisterScript( _L("test-sourceCommand2.xml"),
+ *script,
+ scriptId2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // 1. Publish script1 deactivate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 0, "Client source active request count error" );
+
+ // 2. Publish script2 deactivate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 0, "Client source active request count error" );
+
+ // 3. Publish script1 activate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueActivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 1, "Client source active request count error" );
+
+ // 4. Publish script1 activate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueActivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 1, "Client source active request count error" );
+
+ // 5. Publish script2 activate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueActivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 2, "Client source active request count error" );
+
+ // 6. Publish script2 deactivate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 1, "Client source active request count error" );
+
+ // 7. Publish script2 deactivate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 1, "Client source active request count error" );
+
+ // 8. Publish script1 deactivate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript1ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 0, "Client source active request count error" );
+
+ // 9. Publish script2 deactivate
+ iHandleCommandCalled = EFalse;
+ context->SetValueL( KSourceCommandScript2ContextValueDeactivate );
+ err = iClient->PublishContext( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ // Wait for call to handle command.
+ iWait->Start();
+ EUNIT_ASSERT_DESC( iHandleCommandCalled, "Source command was not detected by client" );
+ EUNIT_ASSERT_DESC( iActiveRequests.Count() == 0, "Client source active request count error" );
+
+ err = iClient->DeregisterScript( scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when de-registering script!" );
+ err = iClient->DeregisterScript( scriptId2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when de-registering script!" );
+
+ CleanupStack::PopAndDestroy( context ); // CLEANUP>> context
+ }
+
+void MT_CFClient::MT_CCFClient_PublishContextL( )
+ {
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+ CCFClient* client = CCFClient::NewLC ( *this );
+ TInt err = KErrNone;
+
+ // Try to publish context which has not been defined
+ ConfigureContextL ( *context );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Incorrect PublishContext return value!" );
+
+ // Define context and publish it
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Delete client and publish same context
+ CleanupStack::PopAndDestroy ( client );
+ client = CCFClient::NewLC ( *this );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Define a new context and publish it
+ ConfigureContextL ( *context );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Test incorrect context values
+ context->SetSourceL ( KNullDesC );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect PublishContext return value!" );
+ context->SetTypeL ( KNullDesC );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect PublishContext return value!" );
+ context->SetValueL ( KNullDesC );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect PublishContext return value!" );
+
+ // Define context where we do not have access
+ ConfigureContextL ( *context );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Incorrect PublishContext return value!" );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( client );
+ CleanupStack::PopAndDestroy ( context );
+ }
+
+void MT_CFClient::MT_CCFClient_PublishContextWithDataL( )
+ {
+ _LIT( KKey, "Key" );
+ _LIT( KValue, "Value" );
+
+ CTestContextData* contextData = CTestContextData::NewLC ( KKey, KValue );
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+ CCFClient* client = CCFClient::NewLC ( *this );
+ TInt err = KErrNone;
+
+ // Try to publish context which has not been defined
+ ConfigureContextL ( *context );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Incorrect PublishContext return value!" );
+
+ // Define context and publish it
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Delete client and publish same context
+ CleanupStack::PopAndDestroy ( client );
+ client = CCFClient::NewLC ( *this );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Define a new context and publish it
+ ConfigureContextL ( *context );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Test incorrect context values
+ context->SetSourceL ( KNullDesC );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect PublishContext return value!" );
+ context->SetTypeL ( KNullDesC );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect PublishContext return value!" );
+ context->SetValueL ( KNullDesC );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Incorrect PublishContext return value!" );
+
+ // Define context where we do not have access
+ ConfigureContextL ( *context );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Incorrect PublishContext return value!" );
+
+ // Publish context data with invalid UID
+ ConfigureContextL ( *context );
+ contextData->SetUid ( KNullUid );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrNotSupported, "Incorrect PublishContext return value!" );
+
+ // Publish too big context data
+ const TInt length = 16*1024;
+ HBufC* data = HBufC::NewLC ( length );
+ TPtr dataPtr( data->Des ( ));
+ dataPtr.Fill ( 'z', length );
+ contextData->SetKeyL ( dataPtr );
+ contextData->SetValueL ( dataPtr );
+ contextData->SetUid ( KTestContextDataUid );
+ CleanupStack::PopAndDestroy ( data );
+ ConfigureContextL ( *context );
+ err = client->DefineContext ( context->Source ( ), context->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ err = client->PublishContext ( *context, *contextData );
+ EUNIT_ASSERT_DESC( err == KErrTooBig, "Incorrect PublishContext return value!" );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( client );
+ CleanupStack::PopAndDestroy ( context );
+ CleanupStack::PopAndDestroy ( contextData );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext1L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define a context and subscribe it
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish a new context value and wait for context indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish a new context value and wait for context indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext2L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define a new context with no access and wait for error message
+ ConfigureContextL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextB->Source ( ) );
+ subscription->SetContextTypeL ( iContextB->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+ iCheckB = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext3L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define two contexts with access and subscribe both of them
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ ConfigureContextL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextB->Source ( ) );
+ subscription->SetContextTypeL ( iContextB->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish both context at the same time and wait for two indications
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextB );
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Publish both context at the same time and wait for two indications
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextB );
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext4L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define two context where other we have access and other we don't
+ // Subscribe both contexts
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ ConfigureContextL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextB->Source ( ) );
+ subscription->SetContextTypeL ( iContextB->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish both context at the same time and wait for two indications
+ iCheckA = ETrue;
+ iCheckB = ETrue;
+
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ UpdateContextValueL ( *iContextB );
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Incorrect PublishContext return value!" );
+ if ( iCheckA || iCheckB )
+ {
+ iWait->Start ( );
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext5L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // First subscribe a context
+ ConfigureContextL ( *iContextA );
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Define the context with access
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new context value and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext6L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // First subscribe a context
+ ConfigureContextL ( *iContextB );
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextB->Source ( ) );
+ subscription->SetContextTypeL ( iContextB->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Define the context with no access and wait for error
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext7L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define two contexts with no access
+ ConfigureContextL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ ConfigureContextL ( *iContextC );
+ err = iClient->DefineContext ( iContextC->Source ( ), iContextC->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // subscribe both contexts and wait for errors
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextB->Source ( ) );
+ subscription->SetContextTypeL ( iContextB->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextC->Source ( ) );
+ subscription->SetContextTypeL ( iContextC->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+ iCheckB = ETrue;
+ iCheckC = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext8L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define two contexts
+ ConfigureContextL ( *iContextA );
+ iContextA->SetTypeL ( KContextTypeFormatWild );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ iContextB->CopyL ( *iContextA );
+ UpdateContextTypeL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Subscribe with sub type match
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ subscription->SetSubTypeMatch ( ETrue );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish contextB and wait for indication
+ UpdateContextValueL ( *iContextB );
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Publish contextA and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContext9L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Run this set twice to get regression
+ static const TInt KCount = 2;
+ for (TInt i = 0; i < KCount; i++ )
+ {
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ),
+ iContextA->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Subscribe context but indicate only changes
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ subscription->SetOnlyChangesIndicated ( ETrue );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Update context value, Publish context and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish same context, context indication should not happen
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckA, "Context should not have been indicated!" );
+ iCheckA = EFalse;
+
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ),
+ iContextA->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Subscribe context but indicate only changes
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ subscription->SetOnlyChangesIndicated ( EFalse );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish context and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish context and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iDeleteClient = ETrue;
+ iWait->Start ( );
+
+ EUNIT_ASSERT_DESC( !iClient, "Client not deleted!" );
+ iClient = CCFClient::NewL ( *this );
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextFromDifferentClientsL( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define two contexts with access and subscribe both of them
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ ConfigureContextL ( *iContextB );
+ err = iAnotherClient->DefineContext ( iContextB->Source ( ),
+ iContextB->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextB->Source ( ) );
+ subscription->SetContextTypeL ( iContextB->Type ( ) );
+ err = iAnotherClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish both context at the same time and wait for two indications
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextB );
+ err = iAnotherClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Publish both context at the same time and wait for two indications
+ UpdateContextValueL ( *iContextA );
+ err = iAnotherClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextB );
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextCombinedL( )
+ {
+ MT_CCFClient_SubscribeContext1L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext2L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext3L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext4L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext5L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext6L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext7L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext8L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContext9L ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextData1L( )
+ {
+ iCheckContextData = ETrue;
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define a context
+ // Subscribe the context with data
+ // Publish new context value with data
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetDataObjectEnabled ( ETrue );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA, *iContextDataA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Unsubscribe context
+ // Publish new context value, context indication should not happen
+ err = iClient->UnsubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA, *iContextDataA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckA, "Context should not have been indicated!" );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextData2L( )
+ {
+ iCheckContextData = ETrue;
+ CCFContextSubscription* subscriptionA= NULL;
+ CCFContextSubscription* subscriptionB= NULL;
+ TInt err = KErrNone;
+
+ // Define two contexts
+ // Subscribe the contexts with datas
+ // Publish new context values with datas
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ ConfigureContextL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscriptionA = CCFContextSubscription::NewLC ( );
+ subscriptionA->SetDataObjectEnabled ( ETrue );
+ subscriptionA->SetContextSourceL ( iContextA->Source ( ) );
+ subscriptionA->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscriptionA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscriptionA );
+ subscriptionB = CCFContextSubscription::NewLC ( );
+ subscriptionB->SetDataObjectEnabled ( ETrue );
+ subscriptionB->SetContextSourceL ( iContextB->Source ( ) );
+ subscriptionB->SetContextTypeL ( iContextB->Type ( ) );
+ err = iClient->SubscribeContext ( *subscriptionB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscriptionB );
+
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA, *iContextDataA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextB );
+ err = iClient->PublishContext ( *iContextB, *iContextDataB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextData3L( )
+ {
+ iCheckContextData = ETrue;
+ CCFContextSubscription* subscriptionA= NULL;
+ CCFContextSubscription* subscriptionB= NULL;
+ TInt err = KErrNone;
+
+ // Define two contexts from different clients
+ // Subscribe the contexts with datas from different clients
+ // Publish new context values with datas from different clients
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+ ConfigureContextL ( *iContextB );
+ err = iAnotherClient->DefineContext ( iContextB->Source ( ),
+ iContextB->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscriptionA = CCFContextSubscription::NewLC ( );
+ subscriptionA->SetDataObjectEnabled ( ETrue );
+ subscriptionA->SetContextSourceL ( iContextA->Source ( ) );
+ subscriptionA->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscriptionA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscriptionA );
+ subscriptionB = CCFContextSubscription::NewLC ( );
+ subscriptionB->SetDataObjectEnabled ( ETrue );
+ subscriptionB->SetContextSourceL ( iContextB->Source ( ) );
+ subscriptionB->SetContextTypeL ( iContextB->Type ( ) );
+ err = iAnotherClient->SubscribeContext ( *subscriptionB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscriptionB );
+
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA, *iContextDataA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextB );
+ err = iAnotherClient->PublishContext ( *iContextB, *iContextDataB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextData4L( )
+ {
+ iCheckContextData = ETrue;
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define a context
+ // Subscribe the context
+ // Publish new context value from context source plug-in
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetDataObjectEnabled ( ETrue );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ CCFContextObjectImpl* contextImpl = static_cast<CCFContextObjectImpl*>( iContextA );
+ UpdateContextValueL ( *iContextA );
+ HBufC8* buf = HBufC8::NewLC ( contextImpl->Size ( ) );
+ TPtr8 bufPtr( buf->Des ( ));
+ RDesWriteStream stream( bufPtr);
+ stream.PushL ( );
+ contextImpl->ExternalizeL ( stream );
+ err = RProperty::Set ( KContextSourceTestCategory, KPublishContextKey,
+ bufPtr );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Failed to set property!" );
+ CleanupStack::PopAndDestroy ( &stream );
+ CleanupStack::PopAndDestroy ( buf );
+ iCheckA = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeContextDataCombinedL( )
+ {
+ MT_CCFClient_SubscribeContextData1L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContextData2L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContextData3L ( );
+ Wait ( 5000 );
+ MT_CCFClient_SubscribeContextData4L ( );
+ }
+
+void MT_CFClient::MT_CCFClient_UnsubscribeContext1L( )
+ {
+ iCheckContextData = EFalse;
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Subscribe context
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+
+ // Publish context and wait for indication
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ if ( iCheckA )
+ {
+ iWait->Start ( );
+ }
+
+ // Unsubscribe context
+ err = iClient->UnsubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish context, context indication should not happen
+ iCheckA = ETrue;
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckA, "Context should not have been indicated!" );
+ iCheckA = EFalse;
+ }
+
+void MT_CFClient::MT_CCFClient_UnsubscribeContext2L( )
+ {
+ CCFContextSubscription* subscription= NULL;
+ TInt err = KErrNone;
+
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Subscribe context
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish context and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Delete client
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL ( *this );
+
+ // Publish context, context indication should not happen
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckA, "Context should not have been indicated!" );
+ iCheckA = EFalse;
+
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Subscribe context
+ subscription = CCFContextSubscription::NewLC ( );
+ subscription->SetContextSourceL ( iContextA->Source ( ) );
+ subscription->SetContextTypeL ( iContextA->Type ( ) );
+ err = iClient->SubscribeContext ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeContext return value!" );
+ CleanupStack::PopAndDestroy ( subscription );
+
+ // Publish context and wait for indication
+ UpdateContextValueL ( *iContextA );
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+ }
+
+void MT_CFClient::MT_CCFClient_UnsubscribeContextCombinedL( )
+ {
+ MT_CCFClient_UnsubscribeContext1L ( );
+ Wait ( 5000 );
+ MT_CCFClient_UnsubscribeContext2L ( );
+ }
+
+void MT_CFClient::MT_CCFClient_RequestContext1L( )
+ {
+ CCFContextQuery* query= NULL;
+ TInt err = KErrNone;
+
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new context value
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Configure query to match published context and request context
+ query = CCFContextQuery::NewLC ( iContextA->Source ( ), iContextA->Type ( ) );
+ RContextObjectArray array;
+ CleanupResetAndDestroyPushL ( array );
+ err = iClient->RequestContext ( *query, array );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( array.Count() == 1, "Incorrect result array count!" );
+ EUNIT_ASSERT_DESC( array[0]->Source() == iContextA->Source(), "Incorrect context source!" );
+ EUNIT_ASSERT_DESC( array[0]->Type() == iContextA->Type(), "Incorrect context type!" );
+
+ // Request same context again
+ array.ResetAndDestroy ( );
+ err = iClient->RequestContext ( *query, array );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( array.Count() == 1, "Incorrect result array count!" );
+ EUNIT_ASSERT_DESC( array[0]->Source() == iContextA->Source(), "Incorrect context source!" );
+ EUNIT_ASSERT_DESC( array[0]->Type() == iContextA->Type(), "Incorrect context type!" );
+
+ // Define a context
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new context value
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Configure query to match published context and request context
+ query->SetSourceL ( iContextA->Source ( ) );
+ query->SetTypeL ( iContextA->Type ( ) );
+ array.ResetAndDestroy ( );
+ err = iClient->RequestContext ( *query, array );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( array.Count() == 1, "Incorrect result array count!" );
+ EUNIT_ASSERT_DESC( array[0]->Source() == iContextA->Source(), "Incorrect context source!" );
+ EUNIT_ASSERT_DESC( array[0]->Type() == iContextA->Type(), "Incorrect context type!" );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( &array );
+ CleanupStack::PopAndDestroy ( query );
+ }
+
+void MT_CFClient::MT_CCFClient_RequestContext2L( )
+ {
+ CCFContextQuery* query= NULL;
+ TInt err = KErrNone;
+
+ // Define a context where we have no access
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Configure query to match the defined context and request context
+ query = CCFContextQuery::NewLC ( iContextA->Source ( ), iContextA->Type ( ) );
+ RContextObjectArray array;
+ CleanupResetAndDestroyPushL ( array );
+ err = iClient->RequestContext ( *query, array );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( array.Count() == 0, "Incorrect result array count!" );
+
+ // Define a context where we have no access
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Configure query to match the defined context and request context
+ query->SetSourceL ( iContextA->Source ( ) );
+ query->SetTypeL ( iContextA->Type ( ) );
+ array.ResetAndDestroy ( );
+ err = iClient->RequestContext ( *query, array );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( array.Count() == 0, "Incorrect result array count!" );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( &array );
+ CleanupStack::PopAndDestroy ( query );
+ }
+
+void MT_CFClient::MT_CCFClient_RequestContext3L( )
+ {
+ CCFContextQuery* query= NULL;
+ TInt err = KErrNone;
+
+ // Define a contextA
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new contextA value
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Define a contextB
+ iContextB->CopyL ( *iContextA );
+ UpdateContextTypeL ( *iContextB );
+ UpdateContextValueL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new contextB value
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Define a contextC
+ iContextC->CopyL ( *iContextA );
+ UpdateContextTypeL ( *iContextC );
+ err = iClient->DefineContext ( iContextC->Source ( ), iContextC->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Configure query to match the defined contexts and request contexts
+ query = CCFContextQuery::NewLC ( iContextA->Source ( ),
+ KContextTypeFormatWild );
+ query->SetSubTypeMatch ( ETrue );
+ RContextObjectArray array;
+ CleanupResetAndDestroyPushL ( array );
+ err = iClient->RequestContext ( *query, array );
+ TInt count = array.Count ( );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( count == 2, "Incorrect result array count!" );
+ CCFContextObject* context= NULL;
+ for (TInt i = 0; i < count; i++ )
+ {
+ context = array[i];
+ EUNIT_ASSERT_DESC( context->Source() == iContextA->Source() ||
+ context->Source() == iContextB->Source(),
+ "Incorrect context source!" );
+ EUNIT_ASSERT_DESC( context->Type() == iContextA->Type() ||
+ context->Type() == iContextB->Type(),
+ "Incorrect context type!" );
+ EUNIT_ASSERT_DESC( context->Type() != iContextC->Type(),
+ "Incorrect context type!" );
+ }
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( &array );
+ CleanupStack::PopAndDestroy ( query );
+ }
+
+void MT_CFClient::MT_CCFClient_RequestContextSetL( )
+ {
+ CCFContextQuery* query= NULL;
+ TInt err = KErrNone;
+
+ // Define a contextA
+ ConfigureContextL ( *iContextA );
+ err = iClient->DefineContext ( iContextA->Source ( ), iContextA->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new contextA value
+ err = iClient->PublishContext ( *iContextA );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Define a contextB
+ iContextB->CopyL ( *iContextA );
+ UpdateContextTypeL ( *iContextB );
+ UpdateContextValueL ( *iContextB );
+ err = iClient->DefineContext ( iContextB->Source ( ), iContextB->Type ( ),
+ KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Publish new contextB value
+ err = iClient->PublishContext ( *iContextB );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+
+ // Define a contextC
+ iContextC->CopyL ( *iContextA );
+ UpdateContextTypeL ( *iContextC );
+ err = iClient->DefineContext ( iContextC->Source ( ), iContextC->Type ( ),
+ KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineContext return value!" );
+
+ // Configure three queries to match the defined contexts and request contexts
+ RContextQueryArray queryArray;
+ CleanupResetAndDestroyPushL ( queryArray );
+ query = CCFContextQuery::NewLC ( iContextA->Source ( ), iContextA->Type ( ) );
+ queryArray.AppendL ( query );
+ CleanupStack::Pop ( query );
+
+ query = CCFContextQuery::NewLC ( iContextB->Source ( ), iContextB->Type ( ) );
+ queryArray.AppendL ( query );
+ CleanupStack::Pop ( query );
+
+ query = CCFContextQuery::NewLC ( iContextC->Source ( ), iContextC->Type ( ) );
+ queryArray.AppendL ( query );
+ CleanupStack::Pop ( query );
+
+ // Request context and check results
+ RContextObjectArray resultArray;
+ CleanupResetAndDestroyPushL ( resultArray );
+ err = iClient->RequestContextSet ( queryArray, resultArray );
+ TInt count = resultArray.Count ( );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( count == 2, "Incorrect result array count!" );
+ CCFContextObject* context= NULL;
+ for (TInt i = 0; i < count; i++ )
+ {
+ context = resultArray[i];
+ EUNIT_ASSERT_DESC( context->Source() == iContextA->Source() ||
+ context->Source() == iContextB->Source(),
+ "Incorrect context source!" );
+ EUNIT_ASSERT_DESC( context->Type() == iContextA->Type() ||
+ context->Type() == iContextB->Type(),
+ "Incorrect context type!" );
+ EUNIT_ASSERT_DESC( context->Type() != iContextC->Type(),
+ "Incorrect context type!" );
+ }
+
+ // Request same contexts again and check results
+ resultArray.ResetAndDestroy ( );
+ err = iClient->RequestContextSet ( queryArray, resultArray );
+ count = resultArray.Count ( );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect RequestContext return value!" );
+ EUNIT_ASSERT_DESC( count == 2, "Incorrect result array count!" );
+ context = NULL;
+ for (TInt i = 0; i < count; i++ )
+ {
+ context = resultArray[i];
+ EUNIT_ASSERT_DESC( context->Source() == iContextA->Source() ||
+ context->Source() == iContextB->Source(),
+ "Incorrect context source!" );
+ EUNIT_ASSERT_DESC( context->Type() == iContextA->Type() ||
+ context->Type() == iContextB->Type(),
+ "Incorrect context type!" );
+ EUNIT_ASSERT_DESC( context->Type() != iContextC->Type(),
+ "Incorrect context type!" );
+ }
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( &resultArray );
+ CleanupStack::PopAndDestroy ( &queryArray );
+ }
+
+void MT_CFClient::MT_CCFClient_RequestContextCombinedL( )
+ {
+ MT_CCFClient_RequestContext1L ( );
+ MT_CCFClient_RequestContext2L ( );
+ MT_CCFClient_RequestContext3L ( );
+ MT_CCFClient_RequestContextSetL ( );
+ }
+
+void MT_CFClient::MT_CCFClient_DefineActionL( )
+ {
+ TInt err = KErrNone;
+ HBufC* actionId= NULL;
+
+ // Define action with access
+ actionId = ConfigureActionIdLC ( );
+ err = iClient->DefineAction ( *actionId, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+ CleanupStack::PopAndDestroy ( actionId );
+
+ // Define another action with access
+ actionId = ConfigureActionIdLC ( );
+ err = iClient->DefineAction ( *actionId, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+
+ // Try to define already defined action
+ err = iClient->DefineAction ( *actionId, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Incorrect DefineAction return value!" );
+
+ // Delete client, re-instantiate and define the same action than above
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+ err = iClient->DefineAction ( *actionId, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+ CleanupStack::PopAndDestroy ( actionId );
+
+ // Define action with no access
+ Wait ( KConfigDelay );
+ actionId = ConfigureActionIdLC ( );
+ err = iClient->DefineAction ( *actionId, KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+ CleanupStack::PopAndDestroy ( actionId );
+
+ // Try to define reserved action ids
+ err = iClient->DefineAction ( KReservedActionPublishContext, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Incorrect DefineAction return value!" );
+ err = iClient->DefineAction ( KReservedActionPublishContext2, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Incorrect DefineAction return value!" );
+ err = iClient->DefineAction ( KReservedActionSourceCommand, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Incorrect DefineAction return value!" );
+ err = iClient->DefineAction ( KReservedActionSourceCommand2, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Incorrect DefineAction return value!" );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeAction1L( )
+ {
+ TInt err = KErrNone;
+ HBufC* actionId= NULL;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+
+ // Define action with access and subscribe it
+ actionId = ConfigureActionIdLC ( );
+ err = iClient->DefineAction ( *actionId, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+
+ subscription->SetActionIdentifierL ( *actionId );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ // Delete client, re-define action and subscribe it
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+
+ err = iClient->DefineAction ( *actionId, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+
+ subscription->SetActionIdentifierL ( *actionId );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+ CleanupStack::PopAndDestroy ( actionId );
+
+ // Define action with no access and subscribe it
+ Wait ( KConfigDelay );
+ actionId = ConfigureActionIdLC ( );
+ err = iClient->DefineAction ( *actionId, KFailSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect DefineAction return value!" );
+
+ subscription->SetActionIdentifierL ( *actionId );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Incorrect SubscribeAction return value!" );
+ CleanupStack::PopAndDestroy ( actionId );
+
+ // Try to subscribe an action which has not been defined
+ Wait ( KConfigDelay );
+ actionId = ConfigureActionIdLC ( );
+ subscription->SetActionIdentifierL ( *actionId );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Incorrect SubscribeAction return value!" );
+ CleanupStack::PopAndDestroy ( actionId );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeAction2L( )
+ {
+ TInt err = KErrNone;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+
+ // Run following set twice to get regression
+ static const TInt KCount = 2;
+ for (TInt i = 0; i < KCount; i++ )
+ {
+ // Define actions used in test-cfclient.rul
+ iClient->DefineAction ( KActionA, KPassSec );
+ iClient->DefineAction ( KActionB, KPassSec );
+
+ // Define contexts used in test-cfclient.rul
+ iClient->DefineContext ( KContextSourceA, KContextTypeA, KPassSec );
+
+ // Subscribe both actions
+ subscription->SetActionIdentifierL ( KActionA );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ subscription->SetActionIdentifierL ( KActionB );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish context [SourceA: TypeA: ValueB] and wait for action indications
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish context [SourceA: TypeA: ValueB] and wait for action indications
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iDeleteClient = ETrue;
+ iWait->Start ( );
+ EUNIT_ASSERT_DESC( !iClient, "Client instance not deleted!" );
+ iClient = CCFClient::NewL ( *this );
+ }
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( context );
+ CleanupStack::PopAndDestroy ( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeAction3L( )
+ {
+ // x. Preconditions
+ //--------------------------------------------------------------------------
+ TInt err = KErrNone;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC( );
+ CCFContextObject* context = CCFContextObject::NewLC( );
+
+ // Define contexts used in test-cfclient.rul
+ iClient->DefineContext( KContextSourceA, KContextTypeA, KPassSec );
+
+ // Set context to "incorrect" state
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+
+ // x. Define action a and subscribe it, delete client and publish context
+ //--------------------------------------------------------------------------
+ err = iClient->DefineAction ( KActionA, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define action failed" );
+
+ subscription->SetActionIdentifierL( KActionA );
+ err = iClient->SubscribeAction( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ // Check that the action is indicatated
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckA = ETrue;
+ iWait->Start();
+
+ // Reset context value
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+
+ // Delete client and publish context
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckA = ETrue;
+ Wait( KSecond );
+ EUNIT_ASSERT_DESC( iCheckA, "Something went terribly wrong" );
+
+ // Reset context value
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+
+ // x. Re-define action a and subscribe it
+ //--------------------------------------------------------------------------
+ err = iClient->DefineAction ( KActionA, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define action failed" );
+
+ subscription->SetActionIdentifierL( KActionA );
+ err = iClient->SubscribeAction( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ // Check that the action is indicatated
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckA = ETrue;
+ iWait->Start();
+
+ // x. Clean up
+ //--------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy( context );
+ CleanupStack::PopAndDestroy( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeAction4L( )
+ {
+ // x. Pre-conditions
+ // -------------------------------------------------------------------------
+ TInt err = KErrNone;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC( );
+ CCFContextObject* context = CCFContextObject::NewLC( );
+
+ // Define contexts used in test-cfclient.rul
+ iClient->DefineContext( KContextSourceA, KContextTypeA, KPassSec );
+
+ // Set context to "incorrect" state
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+
+ // x. Define action
+ // -------------------------------------------------------------------------
+ err = iClient->DefineAction ( KActionA, KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define action failed" );
+
+ // x. Delete client and re-initialize
+ // -------------------------------------------------------------------------
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+
+ // x. Subscribe action
+ // -------------------------------------------------------------------------
+ subscription->SetActionIdentifierL( KActionA );
+ err = iClient->SubscribeAction( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ // x. Publish context and wait for action indication
+ // -------------------------------------------------------------------------
+ context->SetSourceL( KContextSourceA );
+ context->SetTypeL( KContextTypeA );
+ context->SetValueL( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+
+ // Wait for action indication
+ iCheckA = ETrue;
+ iWait->Start();
+
+ // x. Clean up
+ // -------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy( context );
+ CleanupStack::PopAndDestroy( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeActionFromDifferentClientsL( )
+ {
+ TInt err = KErrNone;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+
+ // Define actions used in test-cfclient.rul
+ iClient->DefineAction ( KActionA, KPassSec );
+ iClient->DefineAction ( KActionB, KPassSec );
+
+ // Define contexts used in test-cfclient.rul
+ iClient->DefineContext ( KContextSourceA, KContextTypeA, KPassSec );
+
+ // Subscribe both actions but from different clients
+ subscription->SetActionIdentifierL ( KActionA );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ subscription->SetActionIdentifierL ( KActionB );
+ err = iAnotherClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish context [SourceA: TypeA: ValueB] and wait for action indications
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iAnotherClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( context );
+ CleanupStack::PopAndDestroy ( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeActionFromDifferentClients2L( )
+ {
+ TInt err = KErrNone;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+
+ // Define action used in test-cfclient.rul
+ iClient->DefineAction ( KActionA, KPassSec );
+
+ // Define contexts used in test-cfclient.rul
+ iClient->DefineContext ( KContextSourceA, KContextTypeA, KPassSec );
+
+ // Subscribe same action from different clients
+ subscription->SetActionIdentifierL ( KActionA );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ err = iAnotherClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ iCheckB = EFalse;
+ iCountActionAIndications = ETrue;
+ iExpectedActionAIndicationCount = 2;
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indications
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+ EUNIT_ASSERT_DESC( iExpectedActionAIndicationCount == 0, "Unexpected amount of action indications!" );
+ iCountActionAIndications = EFalse;
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( context );
+ CleanupStack::PopAndDestroy ( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_SubscribeActionCombinedL( )
+ {
+ MT_CCFClient_SubscribeAction1L ( );
+ Wait( KSecond );
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+
+ MT_CCFClient_SubscribeAction2L ( );
+ Wait( KSecond );
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+
+ MT_CCFClient_SubscribeAction3L ( );
+ Wait( KSecond );
+ delete iClient;
+ iClient = NULL;
+ iClient = CCFClient::NewL( *this );
+
+ MT_CCFClient_SubscribeAction4L ( );
+ }
+
+void MT_CFClient::MT_CCFClient_UnsubscribeActionL( )
+ {
+ TInt err = KErrNone;
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+ CCFContextObject* context = CCFContextObject::NewLC ( );
+
+ // Define actions used in test-cfclient.rul
+ iClient->DefineAction ( KActionA, KPassSec );
+ iClient->DefineAction ( KActionB, KPassSec );
+
+ // Define contexts used in test-cfclient.rul
+ iClient->DefineContext ( KContextSourceA, KContextTypeA, KPassSec );
+
+ // Subscribe both actions
+ subscription->SetActionIdentifierL ( KActionA );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ subscription->SetActionIdentifierL ( KActionB );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // Publish context [SourceA: TypeA: ValueB] and wait for action indications
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Unsubscribe actionA
+ subscription->SetActionIdentifierL ( KActionA );
+ err = iClient->UnsubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueA], should not receive action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckA, "Action indication received!" );
+ iCheckA = EFalse;
+
+ // Publish context [SourceA: TypeA: ValueB] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Unsubscribe actionB
+ subscription->SetActionIdentifierL ( KActionB );
+ err = iClient->UnsubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect UnsubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueB], should not reveice action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckB = ETrue;
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckB, "Action indication received!" );
+ iCheckB = EFalse;
+
+ // subscribe actionA again
+ subscription->SetActionIdentifierL ( KActionA );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueA] and wait for action indication
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueA );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iWait->Start ( );
+
+ // subscribe actionB again
+ subscription->SetActionIdentifierL ( KActionB );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ // Publish context [SourceA: TypeA: ValueB] and wait for action indications
+ context->SetSourceL ( KContextSourceA );
+ context->SetTypeL ( KContextTypeA );
+ context->SetValueL ( KContextValueB );
+ err = iClient->PublishContext ( *context );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect PublishContext return value!" );
+ iCheckA = ETrue;
+ iCheckB = ETrue;
+ iWait->Start ( );
+
+ // Clean up
+ CleanupStack::PopAndDestroy ( context );
+ CleanupStack::PopAndDestroy ( subscription );
+ }
+
+void MT_CFClient::MT_CCFClient_RegisterScriptL( )
+ {
+ TInt err;
+
+ // Define context
+ CCFContextObject* co = CCFContextObject::NewLC ( );
+ co->SetSourceL (_L("RegisterScriptSource") );
+ co->SetTypeL (_L("RegisterScriptType") );
+ err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ //EUNIT_ASSERT( err == KErrNone );
+
+ // define context with no access
+ err = iClient->DefineContext ( _L("RegisterScriptSource"),
+ _L("RegisterScriptTypeNoAccess"), KFailSec );
+ //EUNIT_ASSERT( err == KErrNone );
+
+ // Define action
+ iClient->DefineAction ( _L("RegisterScriptAction"), KPassSec );
+
+ // Define action with no access
+ iClient->DefineAction ( _L("RegisterScriptActionNoAccess"), KFailSec );
+
+ TInt scriptId;
+
+ // 1. registering script fails because no context defined
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-registerscript-nocontextdefined.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "No error when registering script!" );
+
+ // 2. registering script fails because no action defined
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-registerscript-noactiondefined.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "No error when registering script!" );
+
+ // 3. registering script fails because no capabilities
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-registerscript-nocontextaccess.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "No error when registering script!" );
+
+ // 4. registering script fails because no action defined
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-registerscript-noactionaccess.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "No error when registering script!" );
+
+ // 5. registering script succeeds
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-registerscript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+
+ // Subscribe both actions
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+ subscription->SetActionIdentifierL ( _L("RegisterScriptAction") );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone,
+ "Incorrect SubscribeAction return value!" );
+
+ // 4. test that we will get action indications
+ co->SetValueL (_L("RegisterScriptValue") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone,
+ "Incorrect PublishContext return value!" );
+
+ iCheckRegisterScriptAction = ETrue;
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy ( subscription );
+ CleanupStack::PopAndDestroy ( co );
+
+ // 6. Deregister script
+
+ err = iClient->DeregisterScript ( scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Deregistering script caused error!" );
+
+ }
+
+void MT_CFClient::MT_CCFClient_RegisterScriptDesL( )
+ {
+ TInt err;
+
+ // Define context
+ CCFContextObject* co = CCFContextObject::NewLC ( );
+ co->SetSourceL (_L("RegisterScriptSource") );
+ co->SetTypeL (_L("RegisterScriptType") );
+ err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ //EUNIT_ASSERT( err == KErrNone );
+
+ // define context with no access
+ err = iClient->DefineContext ( _L("RegisterScriptSource"),
+ _L("RegisterScriptTypeNoAccess"), KFailSec );
+ //EUNIT_ASSERT( err == KErrNone );
+
+ // Define action
+ iClient->DefineAction ( _L("RegisterScriptAction"), KPassSec );
+
+ // Define action with no access
+ iClient->DefineAction ( _L("RegisterScriptActionNoAccess"), KFailSec );
+
+ TInt scriptId;
+
+ // 1. registering script fails because no context defined
+ HBufC8* script = LoadScriptFromFile (_L("test-registerscript-nocontextdefined.xml") );
+ err = iClient->RegisterScript (
+ _L("test-registerscript-nocontextdefined.xml"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "No error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // 2. registering script fails because no action defined
+ script = LoadScriptFromFile (_L("test-registerscript-noactiondefined.xml") );
+ err = iClient->RegisterScript (
+ _L("test-registerscript-noactiondefined.xml"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "No error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // 3. registering script fails because no capabilities
+ script = LoadScriptFromFile (_L("test-registerscript-nocontextaccess.xml") );
+ err = iClient->RegisterScript (
+ _L("test-registerscript-nocontextaccess.xml"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "No error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // 4. registering script fails because no action defined
+ script = LoadScriptFromFile (_L("test-registerscript-noactionaccess.xml") );
+ err = iClient->RegisterScript (
+ _L("test-registerscript-noactionaccess.xml"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "No error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // 5. registering script succeeds
+ script = LoadScriptFromFile (_L("test-registerscript.xml") );
+ err = iClient->RegisterScript (
+ _L("test-registerscript.xml"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ delete script;
+ script = NULL;
+
+ // Subscribe both actions
+ CCFActionSubscription* subscription = CCFActionSubscription::NewLC ( );
+ subscription->SetActionIdentifierL ( _L("RegisterScriptAction") );
+ err = iClient->SubscribeAction ( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone,
+ "Incorrect SubscribeAction return value!" );
+
+ // 6. test that we will get action indications
+
+ co->SetValueL (_L("RegisterScriptValue") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone,
+ "Incorrect PublishContext return value!" );
+
+ iCheckRegisterScriptAction = ETrue;
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy ( subscription );
+ CleanupStack::PopAndDestroy ( co );
+
+ // 7. Deregister script
+
+ err = iClient->DeregisterScript ( scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Deregistering script caused error!" );
+ }
+
+void MT_CFClient::MT_CCFClient_DeregisterScriptL( )
+ {
+ // 1. Try to remove script we did not register -> should fail
+ TInt err = iClient->DeregisterScript ( 1 );
+ EUNIT_ASSERT_DESC( err != KErrNone,
+ "Succeeded to deregister script loaded by CF/registered by others" );
+ }
+
+void MT_CFClient::MT_CCFClient_SaveContextSourceSettingL( )
+ {
+ // 1. Install setting succeeds
+ TInt err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when installing settings3!" );
+
+ TBool
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( fileExists, "Error, cannot find settings3 file after install!" );
+
+ // 2. Uninstall setting succeeds
+ err = iClient->DeleteContextSourceSetting (
+ _L("testcontextsourcesetting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when uninstalling settings3!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, file settings3 still exists after uninstall!" );
+
+ if ( iTestDelay )
+ {
+ iTestDelay->Start ( 100000 ); // 100 ms
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_SaveContextSourceSetting2L( )
+ {
+ // 1. Installing bogus setting file, fails
+ TInt
+ err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontext_source_setting_4.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Error when installing settings_4!" );
+
+ TBool
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontext_source_setting_4.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, settings_4 file exists after install!" );
+
+ // 2. Installing existing setting file not allowed by the plugin, fails
+ err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting4.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "Error when installing settings4!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting4.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, settings4 file exists after install!" );
+
+ // 3. Installing existing setting file for bogus plugin, fails
+ err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting4.xml"),
+ KBogusContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrBadHandle, "Error when installing settings4 for bogus source!" );
+
+ // 4. Installing setting passing from CheckValidity but leaving from
+ // UpdateSettingsL because of invalid settings!
+ // This should not happen for real source plugins.
+ err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting7.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrGeneral, "Error when installing settings7!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting7.xml" ) );
+ EUNIT_ASSERT_DESC( fileExists, "Error, cannot find settings7 file after install!" );
+
+ // 5. Uninstall setting succeeds, must do this because setting file was
+ // stored by the above failing call.
+ err = iClient->DeleteContextSourceSetting (
+ _L("testcontextsourcesetting7.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when uninstalling settings3!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting7.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, file settings3 still exists after uninstall!" );
+
+ if ( iTestDelay )
+ {
+ iTestDelay->Start ( 100000 ); // 100 ms
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_DeleteContextSourceSettingL( )
+ {
+ // 1. Uninstall bogus setting, fails
+ TBool
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontext_source_setting3.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, file testcontext_source_setting3 exists!" );
+
+ TInt err = iClient->DeleteContextSourceSetting (
+ _L("testcontext_source_setting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Error when uninstalling bogus setting!" );
+
+ // 2. Uninstall setting from bogus source, fails
+ err = iClient->DeleteContextSourceSetting (
+ _L("testcontextsourcesetting3.xml"),
+ KBogusContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrBadHandle, "Error when uninstalling setting from bogus source!" );
+
+ if ( iTestDelay )
+ {
+ iTestDelay->Start ( 100000 ); // 100 ms
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_DeleteContextSourceSetting2L( )
+ {
+ // 1. Install setting succeeds
+ TInt err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when installing settings3!" );
+
+ TBool
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( fileExists, "Error, cannot find settings3 file after install!" );
+
+ // 2. Install 2nd setting succeeds
+ err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting5.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when installing settings5!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting5.xml" ) );
+ EUNIT_ASSERT_DESC( fileExists, "Error, cannot find settings5 file after install!" );
+
+ // 3. Uninstall all client settings succeeds
+ err = iClient->DeleteContextSourceSettings (KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when uninstalling all client installed settings!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, file settings3 still exists after uninstall!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting5.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, file settings5 still exists after uninstall!" );
+
+ // 4. Uninstall all client settings, no exists, fails
+ err = iClient->DeleteContextSourceSettings (KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Error when uninstalling all client installed settings!" );
+
+ if ( iTestDelay )
+ {
+ iTestDelay->Start ( 100000 ); // 100 ms
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_UpgradeContextSourceSettingL( )
+ {
+ // 1. Install setting succeeds
+ TInt err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\testcontextsourcesetting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when installing settings3!" );
+
+ TBool
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( fileExists, "Error, cannot find settings3 file after install!" );
+
+ // 2. Upgrade setting succeeds
+ err = iClient->SaveContextSourceSetting (
+ _L("z:\\data\\cftestdata\\testsettings\\settingupgrade\\testcontextsourcesetting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when upgrading settings3!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( fileExists, "Error, cannot find settings3 file after install!" );
+
+ // 3. Uninstall setting succeeds
+ err = iClient->DeleteContextSourceSetting (
+ _L("testcontextsourcesetting3.xml"),
+ KTestContextSourcePluginImplUid );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when uninstalling settings3!" );
+
+ fileExists = BaflUtils::FileExists (
+ iFs,
+ _L( "C:\\Private\\10282BC4\\Settings\\10002001\\20000fb1_testcontextsourcesetting3.xml" ) );
+ EUNIT_ASSERT_DESC( !fileExists, "Error, file settings3 still exists after uninstall!" );
+
+ if ( iTestDelay )
+ {
+ iTestDelay->Start ( 100000 ); // 100 ms
+ }
+ }
+
+void MT_CFClient::MT_CCFClient_SaveScriptL( )
+ {
+ // Change timestamp to yesterday
+ TTime currentTime;
+ currentTime.UniversalTime();
+ TDateTime dateTime = currentTime.DateTime();
+ dateTime.SetHour( dateTime.Hour() - 1 );
+
+ // Update new time
+ TTime entryTime( dateTime );
+
+ CCFContextObject* co = CCFContextObject::NewLC ( );
+ CCFActionSubscription* actionSubscription = CCFActionSubscription::NewLC ( );
+
+ // Setup preconditions
+ // -------------------------------------------------------------------------
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ TInt err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ err = iClient->DefineAction ( _L("saveScript"), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define action failed" );
+
+ actionSubscription->SetActionIdentifierL ( _L("saveScript") );
+ err = iClient->SubscribeAction ( *actionSubscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ // x. Save script with full path
+ // -------------------------------------------------------------------------
+ TInt scriptId = KErrNotFound;
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ EUNIT_ASSERT_DESC( scriptId > 0, "Script id incorrect" );
+ TBool exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC (
+ _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // x. Save the same script and check that the time stamp changes
+ // -------------------------------------------------------------------------
+ err = iFs.SetModified(
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul"), entryTime );
+ TEntry oldEntry;
+ err = iFs.Entry (
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul"),
+ oldEntry );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Entry get failed" );
+
+ User::After( 100000 );
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ EUNIT_ASSERT_DESC( scriptId > 0, "Script id incorrect" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ TEntry newEntry;
+ err = iFs.Entry (
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul"),
+ newEntry );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Entry get failed" );
+ EUNIT_ASSERT_DESC( oldEntry.iModified < newEntry.iModified,
+ "Script not updated" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // x. Save a script update with the same name
+ // -------------------------------------------------------------------------
+ HBufC8* script = LoadScriptFromFile ( _L("test-saveScript2.xml") );
+ User::LeaveIfNull ( script );
+ CleanupStack::PushL ( script );
+
+ err = iClient->SaveScript ( _L("test-saveScript"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("updateTriggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy ( script );
+
+ // x. Save a script update with the same name (regression)
+ // -------------------------------------------------------------------------
+ script = LoadScriptFromFile ( _L("test-saveScript.xml") );
+ User::LeaveIfNull ( script );
+ CleanupStack::PushL ( script );
+
+ err = iClient->SaveScript ( _L("test-saveScript"), *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy ( script );
+
+ // x. Save a new script via full path
+ // -------------------------------------------------------------------------
+ scriptId = KErrNotFound;
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript2.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ EUNIT_ASSERT_DESC( scriptId > 0, "Script id incorrect" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript2.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC (
+ _L("id"), _L("updateTriggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // x. Save script with incorrect parameters
+ // -------------------------------------------------------------------------
+ err = iClient->SaveScript ( KNullDesC, scriptId );
+ EUNIT_ASSERT_DESC( err != KErrNone, "Save script failed" );
+ err = iClient->SaveScript ( KNullDesC, KNullDesC8, scriptId );
+ EUNIT_ASSERT_DESC( err != KErrNone, "Save script failed" );
+
+ // x. Delete all scripts, register script and then try to save the script
+ // -------------------------------------------------------------------------
+ err = iClient->DeleteScripts();
+ EUNIT_ASSERT_DESC( err == KErrNone, "Delete scripts failed" );
+ exists = BaflUtils::FolderExists( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\") );
+ EUNIT_ASSERT_DESC( !exists, "Delete scripts failed" );
+
+ err = iClient->RegisterScript(
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Register script failed" );
+ EUNIT_ASSERT_DESC( scriptId > 0, "Register script failed" );
+
+ TInt previousScriptId = scriptId;
+ err = iClient->SaveScript(
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ EUNIT_ASSERT_DESC( scriptId > 0, "Save script failed" );
+ EUNIT_ASSERT_DESC( scriptId == previousScriptId, "Save script failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // Clean up
+ // -------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy ( actionSubscription );
+ CleanupStack::PopAndDestroy ( co );
+ }
+
+void MT_CFClient::MT_CCFClient_DeleteScriptL( )
+ {
+ CCFContextObject* co = CCFContextObject::NewLC( );
+ CCFActionSubscription* actionSubscription = CCFActionSubscription::NewLC( );
+
+ // Setup preconditions
+ // -------------------------------------------------------------------------
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ TInt err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ err = iClient->DefineAction ( _L("saveScript"), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define action failed" );
+
+ actionSubscription->SetActionIdentifierL ( _L("saveScript") );
+ err = iClient->SubscribeAction ( *actionSubscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ TInt scriptId = KErrNotFound;
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ TBool exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript2.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript2.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ // x. Delete script and check that action is not indicated
+ // -------------------------------------------------------------------------
+ err = iClient->DeleteScript ( _L("test-saveScript") );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Delete script failed" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckCustomAction, "Delete script failed" );
+
+ // x. Delete script and check that action is not indicated
+ // -------------------------------------------------------------------------
+ err = iClient->DeleteScript ( _L("test-saveScript2") );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Delete script failed" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript2.rul") );
+ EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
+ exists = BaflUtils::FolderExists ( iFs, _L("c:\\private\\10282bc4\\rules\\20000fb1\\") );
+ EUNIT_ASSERT_DESC( !exists, "Delete script failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("updateTriggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckCustomAction, "Delete script failed" );
+
+ // x. Delete script after a saved script has been deregistered
+ // -------------------------------------------------------------------------
+ scriptId = KErrNotFound;
+ err = iClient->SaveScript(
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ err = iClient->DeregisterScript( scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Deregister script failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC( _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckCustomAction, "Deregister script failed" );
+
+ err = iClient->DeleteScript ( _L("test-saveScript") );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Delete script failed" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
+
+ // x. Delete with incorrect parameters
+ // -------------------------------------------------------------------------
+ err = iClient->DeleteScript ( KNullDesC );
+ EUNIT_ASSERT_DESC( err == KErrArgument, "Delete script failed" );
+ err = iClient->DeleteScript ( _L("test-saveScript") );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Delete script failed" );
+ err = iClient->DeleteScript ( _L("test-saveScript2") );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Delete script failed" );
+ err = iClient->DeleteScript ( _L("dummyScript") );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Delete script failed" );
+
+ // Clean up
+ // -------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy ( actionSubscription );
+ CleanupStack::PopAndDestroy ( co );
+ }
+
+void MT_CFClient::MT_CCFClient_DeleteScriptsL( )
+ {
+ CCFContextObject* co = CCFContextObject::NewLC ( );
+ CCFActionSubscription* actionSubscription = CCFActionSubscription::NewLC ( );
+
+ // Setup preconditions
+ // -------------------------------------------------------------------------
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ TInt err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ err = iClient->DefineAction ( _L("saveScript"), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define action failed" );
+
+ actionSubscription->SetActionIdentifierL ( _L("saveScript") );
+ err = iClient->SubscribeAction ( *actionSubscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ TInt scriptId = KErrNotFound;
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ TBool exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ err = iClient->SaveScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-saveScript2.xml"),
+ scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript2.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script not saved" );
+
+ // x. Delete all scripts by uid
+ // -------------------------------------------------------------------------
+ err = iClient->DeleteScripts ( );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Delete scripts failed" );
+
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript.rul") );
+ EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\20000fb1\\test-saveScript2.rul") );
+ EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
+ exists = BaflUtils::FolderExists ( iFs, _L("c:\\private\\10282bc4\\rules\\20000fb1\\") );
+ EUNIT_ASSERT_DESC( !exists, "Delete script failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("triggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckCustomAction, "Delete scripts failed" );
+
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("save.script.2") );
+ co->SetValueL ( _L("trigger") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("saveScript" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("updateTriggered") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ Wait ( KDelay );
+ EUNIT_ASSERT_DESC( iCheckCustomAction, "Delete scripts failed" );
+
+ // x. Try to delete all scripts if none found
+ // -------------------------------------------------------------------------
+ err = iClient->DeleteScripts ( );
+ EUNIT_PRINT( _L("DeleteScrips: err = %d"), err );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Delete scripts failed" );
+
+ // Clean up
+ // -------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy ( actionSubscription );
+ CleanupStack::PopAndDestroy ( co );
+ }
+
+void MT_CFClient::MT_CCFClient_UpgradeRomScriptL( )
+ {
+ CCFContextObject* co = CCFContextObject::NewLC ( );
+ CCFActionSubscription* actionSubscription = CCFActionSubscription::NewLC ( );
+
+ // Setup preconditions
+ // -------------------------------------------------------------------------
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("upgrade") );
+ TInt err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ err = iClient->DefineAction ( _L("romUpgrade"), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define action failed" );
+
+ actionSubscription->SetActionIdentifierL ( _L("romUpgrade") );
+ err = iClient->SubscribeAction ( *actionSubscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ // x. Upgrade 'test-scriptUpgradeRom' script and check that the script
+ // really is upgraded
+ // -------------------------------------------------------------------------
+
+ // Upgrade with file name
+ err = iClient->UpgradeRomScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-scriptUpgradeRom.xml") );
+ EUNIT_PRINT( _L("UpgradeRomScript: err = %d"), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Upgrade rom script failed" );
+
+ co->SetValueL ( _L("true") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC (
+ _L("id"), _L("true") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // Restore original rom script
+ err = iClient->RestoreRomScript ( _L("test-scriptUpgradeRom") );
+ EUNIT_PRINT( _L("RestoreRomScript: err = %d"), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Restore script failed" );
+
+ // Upgrade with file name and script
+ HBufC8* script = LoadScriptFromFile ( _L("test-scriptUpgradeRom.xml") );
+ EUNIT_ASSERT_DESC( script, "Script not loaded" );
+ CleanupStack::PushL ( script );
+
+ err = iClient->UpgradeRomScript ( _L("test-scriptUpgradeRom"), *script );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Upgrade rom script failed" );
+
+ co->SetValueL ( _L("true") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("true") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy ( script );
+
+ // Restore original rom script
+ err = iClient->RestoreRomScript ( _L("test-scriptUpgradeRom") );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Restore script failed" );
+
+ co->SetValueL ( _L("false") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("false") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // x. Upgrade 'test-scriptUpgradeRom' script and check that the upgrade
+ // fails with KErrAccessDenied (script is missing capability)
+ // -------------------------------------------------------------------------
+ script = LoadScriptFromFile ( _L("test-scriptUpgradeRomCapabilitiesMissing.xml") );
+ EUNIT_ASSERT_DESC( script, "Script not loaded" );
+ CleanupStack::PushL ( script );
+
+ err = iClient->UpgradeRomScript ( _L("test-scriptUpgradeRom"), *script );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Upgrade rom script failed" );
+
+ co->SetValueL ( _L("false") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("false") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy( script );
+
+ // x. Upgrade 'test-scriptUpgradeRom' script and check that the upgrade
+ // fails with KErrAccessDenied (script is missing upgrade security)
+ // -------------------------------------------------------------------------
+ script = LoadScriptFromFile ( _L("test-scriptUpgradeRomNoUpgradeSecurity.xml") );
+ EUNIT_ASSERT_DESC( script, "Script not loaded" );
+ CleanupStack::PushL ( script );
+
+ err = iClient->UpgradeRomScript ( _L("test-scriptUpgradeRom"), *script );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Upgrade rom script failed" );
+
+ co->SetValueL ( _L("false") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("false") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy( script );
+
+ // x. Upgrade 'test-scriptUpgradeRom' script and check that the upgrade
+ // fails with KErrAccessDenied (client is missing capabilities)
+ // -------------------------------------------------------------------------
+ script = LoadScriptFromFile ( _L("test-scriptUpgradeRom.xml") );
+ EUNIT_ASSERT_DESC( script, "Script not loaded" );
+ CleanupStack::PushL ( script );
+
+ err = iClient->UpgradeRomScript (
+ _L("test-scriptUpgradeRomClientMissingCapability"), *script );
+ EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Upgrade rom script failed" );
+
+ co->SetValueL ( _L("false") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("false") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ CleanupStack::PopAndDestroy( script );
+
+ // Clean up
+ // -------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy ( actionSubscription );
+ CleanupStack::PopAndDestroy ( co );
+ }
+
+void MT_CFClient::MT_CCFClient_RestoreRomScriptL( )
+ {
+ CCFContextObject* co = CCFContextObject::NewLC ( );
+ CCFActionSubscription* actionSubscription = CCFActionSubscription::NewLC ( );
+
+ // Setup preconditions
+ // -------------------------------------------------------------------------
+ co->SetSourceL ( _L("test") );
+ co->SetTypeL (_L("upgrade") );
+ TInt err = iClient->DefineContext ( co->Source ( ), co->Type ( ), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define context failed" );
+
+ err = iClient->DefineAction ( _L("romUpgrade"), KPassSec );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists,
+ "Define action failed" );
+
+ actionSubscription->SetActionIdentifierL ( _L("romUpgrade") );
+ err = iClient->SubscribeAction ( *actionSubscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe action failed" );
+
+ // x. Check that rom script is currently registered
+ // -------------------------------------------------------------------------
+ co->SetValueL ( _L("false") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ CCFKeyValuePair* keyValue = CCFKeyValuePair::NewLC( _L("id"), _L("false") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ // x. Upgrade rom script and check, restore rom script and check
+ // -------------------------------------------------------------------------
+ err = iClient->UpgradeRomScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-scriptUpgradeRom.xml") );
+ EUNIT_PRINT( _L("UpgradeRomScript: err = %d"), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Upgrade rom script failed" );
+
+ co->SetValueL ( _L("true") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("true") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ TBool exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\test-scriptUpgradeRom.rul") );
+ EUNIT_ASSERT_DESC( exists, "Script upgrade not found" );
+
+ err = iClient->RestoreRomScript ( _L("test-scriptUpgradeRom") );
+ EUNIT_PRINT( _L("RestoreRomScript: err = %d"), err );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Restore script failed" );
+ co->SetValueL ( _L("false") );
+ err = iClient->PublishContext ( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
+ iCheckCustomAction = ETrue;
+ iCustomActionId = _L("romUpgrade" );
+ keyValue = CCFKeyValuePair::NewLC ( _L("id"), _L("false") );
+ iCustomActionParams.AppendL ( keyValue );
+ CleanupStack::Pop ( keyValue );
+ iWait->Start ( );
+
+ exists = BaflUtils::FileExists ( iFs,
+ _L("c:\\private\\10282bc4\\rules\\test-scriptUpgradeRom.rul") );
+ EUNIT_ASSERT_DESC( !exists, "Script upgrade not deleted" );
+
+ // x. Try to restore a script which does not exist
+ // -------------------------------------------------------------------------
+ err = iClient->RestoreRomScript ( _L("dummyRomScript") );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Restore script failed" );
+
+ // Clean up
+ // -------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy ( actionSubscription );
+ CleanupStack::PopAndDestroy ( co );
+ }
+
+void MT_CFClient::MT_CCFClient_OperationUnsubscribingL()
+ {
+ // Define context
+ CCFContextObject* co1 = CCFContextObject::NewLC();
+ co1->SetSourceL(_L("Test"));
+ co1->SetTypeL(_L("Counting"));
+ TInt err = iClient->DefineContext( co1->Source(), co1->Type(), KPassSec );
+ EUNIT_ASSERT_DESC( ( err == KErrNone || err == KErrAlreadyExists ),
+ "DefineContext failed!" );
+
+ // Define actions
+ err = iClient->DefineAction( _L("testAction"), KPassSec );
+ EUNIT_ASSERT_DESC( ( err == KErrNone || err == KErrAlreadyExists ),
+ "Incorrect DefineAction return value!" );
+ err = iClient->DefineAction( _L("testAction2"), KPassSec );
+ EUNIT_ASSERT_DESC( ( err == KErrNone || err == KErrAlreadyExists ),
+ "Incorrect DefineAction return value!" );
+
+ // Subscribe both actions
+ CCFActionSubscription* actionSub = CCFActionSubscription::NewLC();
+ actionSub->SetActionIdentifierL ( _L("testAction") );
+ err = iClient->SubscribeAction ( *actionSub );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ CCFActionSubscription* actionSub2 = CCFActionSubscription::NewLC();
+ actionSub2->SetActionIdentifierL ( _L("testAction2") );
+ err = iClient->SubscribeAction ( *actionSub2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Incorrect SubscribeAction return value!" );
+
+ DeleteLastActionId();
+
+ // Publish context before loading so that subscribing will find the initial
+ // value used to evaluate the operation
+ co1->SetValueL(_L("A"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action received although script not registered!" );
+
+ // Register script1
+ TInt scriptId1;
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-countOneShotWithoutValue.xml"),
+ scriptId1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ EUNIT_ASSERT_DESC( scriptId1 >= 0, "Parse error!" );
+
+ // Register script2
+ TInt scriptId2;
+ err = iClient->RegisterScript (
+ _L("z:\\data\\cftestdata\\testscripts\\test-countOneShotWithoutValue2.xml"),
+ scriptId2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Error when registering script!" );
+ EUNIT_ASSERT_DESC( scriptId2 >= scriptId1, "Parse error!" );
+
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ // Publish COUNTED context, no event should come
+ co1->SetValueL(_L("B"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ // Publish COUNTED context, event MUST come
+ co1->SetValueL(_L("A"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ iWait->Start();
+ EUNIT_ASSERT_DESC( LastActionIdEquals( _L("testAction")),
+ "Script did not cause event!" );
+
+ DeleteLastActionId();
+
+ // Publish COUNTED context, event MUST come
+ co1->SetValueL(_L("B"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ iWait->Start();
+ EUNIT_ASSERT_DESC( LastActionIdEquals( _L("testAction2")),
+ "Script did not cause event!" );
+
+ DeleteLastActionId();
+
+ // Publish COUNTED context, no event should come
+ co1->SetValueL(_L("A"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ // Publish COUNTED context, no event should come
+ co1->SetValueL(_L("B"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ // Publish COUNTED context, no event should come
+ co1->SetValueL(_L("A"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ // Publish COUNTED context, no event should come
+ co1->SetValueL(_L("B"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ // Publish COUNTED context, no event should come
+ co1->SetValueL(_L("A"));
+ err = iClient->PublishContext( *co1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+ EUNIT_ASSERT_DESC( !iLastActionId, "Action should not have been received!" );
+
+ CleanupStack::PopAndDestroy( actionSub2 );
+ CleanupStack::PopAndDestroy( actionSub );
+ CleanupStack::PopAndDestroy( co1 );
+
+ err = iClient->DeregisterScript ( scriptId1 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Deregistering script caused error!" );
+ err = iClient->DeregisterScript ( scriptId2 );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Deregistering script caused error!" );
+ }
+
+void MT_CFClient::MT_CCFClient_RomScriptContextAutoDefineL()
+ {
+ // x. Preconditions
+ //--------------------------------------------------------------------------
+ CCFContextObject* co = CCFContextObject::NewLC();
+ CCFContextSubscription* subscription = CCFContextSubscription::NewLC();
+ _LIT_SECURITY_POLICY_PASS( alwaysPass );
+
+ // x. Subscribe context which has not been defined and check
+ // that a context indication is received.
+ //--------------------------------------------------------------------------
+
+ // Subscribe context:
+ // source.romPublishContext
+ // type.romPublishContext.reply
+ subscription->SetContextSourceL( _L("source.romPublishContext") );
+ subscription->SetContextTypeL( _L("type.romPublishContext.reply") );
+ TInt err = iClient->SubscribeContext( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe context failed!" );
+
+ // Define and publish context:
+ // source.romPublishContext
+ // type.romPublishContext
+ // true
+ err = iClient->DefineContext(
+ _L("source.romPublishContext"),
+ _L("type.romPublishContext"),
+ alwaysPass );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+
+ co->SetSourceL( _L("source.romPublishContext") );
+ co->SetTypeL( _L("type.romPublishContext") );
+ co->SetValueL( _L("true") );
+ err = iClient->PublishContext( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed!" );
+
+ // Wait for context indication, this should not happen
+ iCheckA = ETrue;
+ iContextA->SetSourceL( _L("source.romPublishContext") );
+ iContextA->SetTypeL( _L("type.romPublishContext.reply") );
+ iContextA->SetValueL( _L("true") );
+ Wait( KSecond * 2 );
+ EUNIT_ASSERT_DESC( iCheckA, "Context indication received!" );
+
+ // Double check that context is not defined:
+ // source.romPublishContext
+ // type.romPublishContext.reply
+ co->SetSourceL( _L("source.romPublishContext") );
+ co->SetTypeL( _L("type.romPublishContext.reply") );
+ co->SetValueL( _L("false") );
+ err = iClient->PublishContext( *co );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Undefined context was published!" );
+
+ // x. Register script with auto define context, this should fail since the
+ // context is not auto defined.
+ //--------------------------------------------------------------------------
+ HBufC8* script = LoadScriptFromFile( _L("test-romPublishContext.xml") );
+ EUNIT_ASSERT_DESC( script, "Unable to load script 'test-romPublishContext.xml'!" );
+ TInt scriptId( KErrNotFound );
+ err = iClient->RegisterScript( _L("client-test-romPublishContext.xml"),
+ *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Script register should fail with code KErrNotFound!" );
+ EUNIT_ASSERT_DESC( scriptId == KErrNotFound, "Incorrect script ID!" );
+ delete script;
+
+ // x. Clean up
+ //--------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy( subscription );
+ CleanupStack::PopAndDestroy( co );
+ }
+
+void MT_CFClient::MT_CCFClient_RomScriptContextAutoDefine2L()
+ {
+ // x. Preconditions
+ //--------------------------------------------------------------------------
+ CCFContextObject* co = CCFContextObject::NewLC();
+ CCFContextSubscription* subscription = CCFContextSubscription::NewLC();
+ _LIT_SECURITY_POLICY_PASS( alwaysPass );
+
+ // x. Subscribe context which has not been defined and check
+ // that a context indication is received.
+ //--------------------------------------------------------------------------
+
+ // Subscribe context:
+ // source.romPublishContext2
+ // type.romPublishContext2.reply
+ subscription->SetContextSourceL( _L("source.romPublishContext2") );
+ subscription->SetContextTypeL( _L("type.romPublishContext2.reply") );
+ TInt err = iClient->SubscribeContext( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe context failed!" );
+
+ // Define and publish context:
+ // source.romPublishContext2
+ // type.romPublishContext2
+ // true
+ err = iClient->DefineContext(
+ _L("source.romPublishContext2"),
+ _L("type.romPublishContext2"),
+ alwaysPass );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+
+ co->SetSourceL( _L("source.romPublishContext2") );
+ co->SetTypeL( _L("type.romPublishContext2") );
+ co->SetValueL( _L("true") );
+ err = iClient->PublishContext( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed!" );
+
+ // Wait for context indication
+ iCheckA = ETrue;
+ iContextA->SetSourceL( _L("source.romPublishContext2") );
+ iContextA->SetTypeL( _L("type.romPublishContext2.reply") );
+ iContextA->SetValueL( _L("true") );
+ Wait( KSecond * 2 );
+ EUNIT_ASSERT_DESC( !iCheckA, "Context indication not received!" );
+
+ // Double check that context is defined:
+ // source.romPublishContext2
+ // type.romPublishContext2.reply
+ err = iClient->DefineContext(
+ _L("source.romPublishContext2"),
+ _L("type.romPublishContext2.reply"),
+ alwaysPass );
+ EUNIT_ASSERT_DESC( err == KErrAlreadyExists, "Define context should fail with code KErrAlreadyExists!" );
+
+ // x. Register script with auto define context, this should fail with KErrPermissionDenied
+ // since the client can only read (subscribe) the context which is auto defined.
+ //--------------------------------------------------------------------------
+ HBufC8* script = LoadScriptFromFile( _L("test-romPublishContext2.xml") );
+ CleanupStack::PushL( script );
+ EUNIT_ASSERT_DESC( script, "Unable to load script 'test-romPublishContext2.xml'!" );
+ TInt scriptId( KErrNotFound );
+ err = iClient->RegisterScript( _L("client-test-romPublishContext2.xml"),
+ *script, scriptId );
+ EUNIT_PRINT( _L("RegisterScript completed with code: %d"), err );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "Script register should fail with code KErrPermissionDenied!" );
+ EUNIT_ASSERT_DESC( scriptId == KErrNotFound, "Incorrect script ID!" );
+ CleanupStack::PopAndDestroy( script );
+
+ // x. Clean up
+ //--------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy( subscription );
+ CleanupStack::PopAndDestroy( co );
+ }
+
+void MT_CFClient::MT_CCFClient_RomScriptContextAutoDefine3L()
+ {
+ // x. Preconditions
+ //--------------------------------------------------------------------------
+ CCFContextObject* co = CCFContextObject::NewLC();
+ CCFContextSubscription* subscription = CCFContextSubscription::NewLC();
+ _LIT_SECURITY_POLICY_PASS( alwaysPass );
+
+ // x. Subscribe context which has not been defined and check
+ // that a context indication is received.
+ //--------------------------------------------------------------------------
+
+ // Subscribe context:
+ // source.romPublishContext3
+ // type.romPublishContext3.reply
+ subscription->SetContextSourceL( _L("source.romPublishContext3") );
+ subscription->SetContextTypeL( _L("type.romPublishContext3.reply") );
+ TInt err = iClient->SubscribeContext( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe context failed!" );
+
+ // Define and publish context:
+ // source.romPublishContext3
+ // type.romPublishContext3
+ // true
+ err = iClient->DefineContext(
+ _L("source.romPublishContext3"),
+ _L("type.romPublishContext3"),
+ alwaysPass );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+
+ co->SetSourceL( _L("source.romPublishContext3") );
+ co->SetTypeL( _L("type.romPublishContext3") );
+ co->SetValueL( _L("true") );
+ err = iClient->PublishContext( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed!" );
+
+ // Wait for context indication, this should not happen
+ iCheckA = ETrue;
+ iContextA->SetSourceL( _L("source.romPublishContext3") );
+ iContextA->SetTypeL( _L("type.romPublishContext3.reply") );
+ iContextA->SetValueL( _L("true") );
+ Wait( KSecond * 2 );
+ EUNIT_ASSERT_DESC( iCheckA, "Context indication received!" );
+
+ // Double check that context is not defined:
+ // source.romPublishContext3
+ // type.romPublishContext3.reply
+ co->SetSourceL( _L("source.romPublishContext3") );
+ co->SetTypeL( _L("type.romPublishContext3.reply") );
+ co->SetValueL( _L("false") );
+ err = iClient->PublishContext( *co );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Undefined context was published!" );
+
+ // x. Register script with auto define context, this should fail since the
+ // context is not auto defined.
+ //--------------------------------------------------------------------------
+ HBufC8* script = LoadScriptFromFile( _L("test-romPublishContext3.xml") );
+ CleanupStack::PushL( script );
+ EUNIT_ASSERT_DESC( script, "Unable to load script 'test-romPublishContext3.xml'!" );
+ TInt scriptId( KErrNotFound );
+ err = iClient->RegisterScript( _L("client-test-romPublishContext3.xml"),
+ *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrNotFound, "Script register should fail with code KErrNotFound!" );
+ EUNIT_ASSERT_DESC( scriptId == KErrNotFound, "Incorrect script ID!" );
+ CleanupStack::PopAndDestroy( script );
+
+ // x. Clean up
+ //--------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy( subscription );
+ CleanupStack::PopAndDestroy( co );
+ }
+
+void MT_CFClient::MT_CCFClient_RomScriptContextAutoDefine4L()
+ {
+ // x. Preconditions
+ //--------------------------------------------------------------------------
+ CCFContextObject* co = CCFContextObject::NewLC();
+ CCFContextSubscription* subscription = CCFContextSubscription::NewLC();
+ _LIT_SECURITY_POLICY_PASS( alwaysPass );
+
+ // x. Publish a context which triggers a publishContext action from a test-romPublishContext4.xml
+ // which will auto define a context. test-romPublishContext5.xml rule file
+ // has subscribed to this context.
+ // A new context is auto defined from test-romPublishContext4.xml
+ // which is subscribed by this test case.
+ // Check that the context indication is received.
+ //--------------------------------------------------------------------------
+
+ // Subscribe context:
+ // source.romPublishContext5
+ // type.romPublishContext5.reply
+ subscription->SetContextSourceL( _L("source.romPublishContext5") );
+ subscription->SetContextTypeL( _L("type.romPublishContext5.reply") );
+ TInt err = iClient->SubscribeContext( *subscription );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Subscribe context failed!" );
+
+ // Define and publish context:
+ // source.romPublishContext4
+ // type.romPublishContext4
+ // true
+ err = iClient->DefineContext(
+ _L("source.romPublishContext4"),
+ _L("type.romPublishContext4"),
+ alwaysPass );
+ EUNIT_ASSERT_DESC( err == KErrNone || err == KErrAlreadyExists, "Define context failed!" );
+
+ co->SetSourceL( _L("source.romPublishContext4") );
+ co->SetTypeL( _L("type.romPublishContext4") );
+ co->SetValueL( _L("true") );
+ err = iClient->PublishContext( *co );
+ EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+
+ // Wait for context indication
+ iCheckA = ETrue;
+ iContextA->SetSourceL( _L("source.romPublishContext5") );
+ iContextA->SetTypeL( _L("type.romPublishContext5.reply") );
+ iContextA->SetValueL( _L("true") );
+ Wait( KSecond * 2 );
+ EUNIT_ASSERT_DESC( !iCheckA, "Context indication not received!" );
+
+ // x. Register scripts with auto define context, this should fail since the
+ // client can only read (subscribe) the auto defined context.
+ //--------------------------------------------------------------------------
+ HBufC8* script = LoadScriptFromFile( _L("test-romPublishContext4.xml") );
+ CleanupStack::PushL( script );
+ EUNIT_ASSERT_DESC( script, "Unable to load script 'test-romPublishContext4.xml'!" );
+ TInt scriptId( KErrNotFound );
+ err = iClient->RegisterScript( _L("client-test-romPublishContext4.xml"),
+ *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "Script register should fail with code KErrPermissionDenied!" );
+ EUNIT_ASSERT_DESC( scriptId == KErrNotFound, "Incorrect script ID!" );
+ CleanupStack::PopAndDestroy( script );
+
+ script = LoadScriptFromFile( _L("test-romPublishContext5.xml") );
+ CleanupStack::PushL( script );
+ EUNIT_ASSERT_DESC( script, "Unable to load script 'test-romPublishContext5.xml'!" );
+ scriptId = KErrNotFound;
+ err = iClient->RegisterScript( _L("client-test-romPublishContext5.xml"),
+ *script, scriptId );
+ EUNIT_ASSERT_DESC( err == KErrPermissionDenied, "Script register should fail with code KErrPermissionDenied!" );
+ EUNIT_ASSERT_DESC( scriptId == KErrNotFound, "Incorrect script ID!" );
+ CleanupStack::PopAndDestroy( script );
+
+ // x. Clean up
+ //--------------------------------------------------------------------------
+ CleanupStack::PopAndDestroy( subscription );
+ CleanupStack::PopAndDestroy( co );
+ }
+
+// TEST TABLE
+
+EUNIT_BEGIN_TEST_TABLE(
+ MT_CFClient,
+ "CFClient module test.",
+ "MODULE" )
+
+EUNIT_TEST(
+ "NewL - test ",
+ "CCFClient",
+ "NewL",
+ "FUNCTIONALITY",
+ SetupL, MT_CCFClient_NewLL, Teardown)
+
+EUNIT_TEST(
+ "NewLC - test ",
+ "CCFClient",
+ "NewLC",
+ "FUNCTIONALITY",
+ SetupL, MT_CCFClient_NewLCL, Teardown)
+
+EUNIT_TEST(
+ "DefineContext - test ",
+ "CCFClient",
+ "DefineContext",
+ "FUNCTIONALITY",
+ SetupL, MT_CCFClient_DefineContextL, Teardown)
+
+EUNIT_TEST(
+ "Subscribers-NoSubscribers - test ",
+ "CCFClient",
+ "Subscribers-NoSubscribers",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_SubscribersNosubscribersL, Teardown)
+
+EUNIT_TEST(
+ "Subscribers-NoSubscribersPlugin - test ",
+ "CCFClient",
+ "Subscribers-NoSubscribers",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_SubscribersNosubscribersPluginL, Teardown)
+
+EUNIT_TEST(
+ "2 Subscribers-NoSubscribersPlugin - test ",
+ "CCFClient",
+ "Subscribers-NoSubscribers",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_SubscribersNosubscribersPlugin2L, Teardown)
+
+EUNIT_TEST(
+ "3 Subscribers-NoSubscribersPlugin - test ",
+ "CCFClient",
+ "Subscribers-NoSubscribers",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_SubscribersNosubscribersPlugin3L, Teardown)
+
+EUNIT_TEST(
+ "PluginHandleSourceCommand - test ",
+ "CCFClient",
+ "HandleCommand",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_ContextSourceCommandPluginL, Teardown)
+
+EUNIT_TEST(
+ "ClientHandleSourceCommand - test ",
+ "CCFClient",
+ "HandleCommand",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_ContextSourceCommandClientL, Teardown)
+
+EUNIT_TEST(
+ "PublishContext - test ",
+ "CCFClient",
+ "PublishContext",
+ "FUNCTIONALITY",
+ SetupL, MT_CCFClient_PublishContextL, Teardown)
+
+EUNIT_TEST(
+ "PublishContextWithData - test ",
+ "CCFClient",
+ "PublishContext",
+ "FUNCTIONALITY",
+ SetupL, MT_CCFClient_PublishContextWithDataL, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 1 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext1L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 2 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext2L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 3 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext3L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 4 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext4L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 5 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext5L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 6 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext6L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 7 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext7L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 8 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext8L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext 9 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContext9L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext from separate clients - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextFromDifferentClientsL, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext combined - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextCombinedL, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext with data 1 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextData1L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext with data 2 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextData2L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext with data 3 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextData3L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext with data 4 - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextData4L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeContext with data combined - test ",
+ "CCFClient",
+ "SubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeContextDataCombinedL, Teardown)
+
+EUNIT_TEST(
+ "UnsubscribeContext 1 - test ",
+ "CCFClient",
+ "UnsubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_UnsubscribeContext1L, Teardown)
+
+EUNIT_TEST(
+ "UnsubscribeContext 2 - test ",
+ "CCFClient",
+ "UnsubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_UnsubscribeContext2L, Teardown)
+
+EUNIT_TEST(
+ "UnsubscribeContext combined - test ",
+ "CCFClient",
+ "UnsubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_UnsubscribeContextCombinedL, Teardown)
+
+EUNIT_TEST(
+ "RequestContext 1 - test ",
+ "CCFClient",
+ "RequestContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RequestContext1L, Teardown)
+
+EUNIT_TEST(
+ "RequestContext 2 - test ",
+ "CCFClient",
+ "RequestContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RequestContext2L, Teardown)
+
+EUNIT_TEST(
+ "RequestContext 3 - test ",
+ "CCFClient",
+ "RequestContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RequestContext3L, Teardown)
+
+EUNIT_TEST(
+ "RequestContextSet - test ",
+ "CCFClient",
+ "RequestContextSet",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RequestContextSetL, Teardown)
+
+EUNIT_TEST(
+ "RequestContext combined - test ",
+ "CCFClient",
+ "RequestContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RequestContextCombinedL, Teardown)
+
+EUNIT_TEST(
+ "DefineAction - test ",
+ "CCFClient",
+ "DefineAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_DefineActionL, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction 1 - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeAction1L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction 2 - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeAction2L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction 3 - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeAction3L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction 4 - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeAction4L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction from different client - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeActionFromDifferentClientsL, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction (same) from different client 2 - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeActionFromDifferentClients2L, Teardown)
+
+EUNIT_TEST(
+ "SubscribeAction combined - test ",
+ "CCFClient",
+ "SubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SubscribeActionCombinedL, Teardown)
+
+EUNIT_TEST(
+ "UnsubscribeAction - test ",
+ "CCFClient",
+ "UnsubscribeAction",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_UnsubscribeActionL, Teardown)
+
+EUNIT_TEST(
+ "RegisterScript - test ",
+ "CCFClient",
+ "RegisterScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RegisterScriptL, Teardown)
+
+EUNIT_TEST(
+ "RegisterScript - test ",
+ "CCFClient",
+ "RegisterScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RegisterScriptL, Teardown)
+
+EUNIT_TEST(
+ "DeregisterScript - test ",
+ "CCFClient",
+ "DeregisterScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_DeregisterScriptL, Teardown)
+
+EUNIT_TEST(
+ "SaveContextSourceSetting - test ",
+ "CCFClient",
+ "SaveContextSourceSetting",
+ "FUNCTIONALITY",
+ SetupSourceSettingTestClientL, MT_CCFClient_SaveContextSourceSettingL, Teardown)
+
+EUNIT_TEST(
+ "SaveContextSourceSetting - test2 ",
+ "CCFClient",
+ "SaveContextSourceSetting",
+ "FUNCTIONALITY",
+ SetupSourceSettingTestClientL, MT_CCFClient_SaveContextSourceSetting2L, Teardown)
+
+EUNIT_TEST(
+ "DeleteContextSourceSetting - test ",
+ "CCFClient",
+ "DeleteContextSourceSetting",
+ "FUNCTIONALITY",
+ SetupSourceSettingTestClientL, MT_CCFClient_DeleteContextSourceSettingL, Teardown)
+
+EUNIT_TEST(
+ "DeleteContextSourceSetting - test2 ",
+ "CCFClient",
+ "DeleteContextSourceSetting",
+ "FUNCTIONALITY",
+ SetupSourceSettingTestClientL, MT_CCFClient_DeleteContextSourceSetting2L, Teardown)
+
+EUNIT_TEST(
+ "UpgradeContextSourceSetting - test ",
+ "CCFClient",
+ "SaveContextSourceSetting",
+ "FUNCTIONALITY",
+ SetupSourceSettingTestClientL, MT_CCFClient_UpgradeContextSourceSettingL, Teardown)
+
+EUNIT_TEST(
+ "SaveScript - test ",
+ "CCFClient",
+ "SaveScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_SaveScriptL, TeardownAndScriptCleanup)
+
+EUNIT_TEST(
+ "DeleteScript - test ",
+ "CCFClient",
+ "DeleteScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_DeleteScriptL, TeardownAndScriptCleanup)
+
+EUNIT_TEST(
+ "DeleteScripts - test ",
+ "CCFClient",
+ "DeleteScripts",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_DeleteScriptsL, TeardownAndScriptCleanup)
+
+EUNIT_TEST(
+ "UpgradeRomScript - test ",
+ "CCFClient",
+ "UpgradeRomScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_UpgradeRomScriptL, TeardownAndScriptCleanup)
+
+EUNIT_TEST(
+ "RestoreRomScript - test ",
+ "CCFClient",
+ "RestoreRomScript",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_RestoreRomScriptL, TeardownAndScriptCleanup)
+
+EUNIT_TEST(
+ "Count op unsubscribing - test with two scripts without value",
+ "CCFClient",
+ "UnsubscribeContext",
+ "FUNCTIONALITY",
+ SetupClientL, MT_CCFClient_OperationUnsubscribingL, Teardown)
+
+EUNIT_TEST(
+ "RomRule AutoDef - test rom script context auto define",
+ "CCFClient",
+ "DefineContext",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_RomScriptContextAutoDefineL, Teardown)
+
+EUNIT_TEST(
+ "RomRul AutoDef 2 - test rom script context auto define",
+ "CCFClient",
+ "DefineContext",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_RomScriptContextAutoDefine2L, Teardown)
+
+EUNIT_TEST(
+ "RomRul AutoDef 3 - test rom script context auto define",
+ "CCFClient",
+ "DefineContext",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_RomScriptContextAutoDefine3L, Teardown)
+
+EUNIT_TEST(
+ "RomRul AutoDef 4 - test rom script context auto define",
+ "CCFClient",
+ "DefineContext",
+ "FUNCTIONALITY",
+ SetupNewClientL, MT_CCFClient_RomScriptContextAutoDefine4L, Teardown)
+
+EUNIT_END_TEST_TABLE
+
+// END OF FILE