contextframework/cfw/tsrc/public/basic/MT_BasicOperationsPlugIn/mt_basicoperationsplugin.cpp
changeset 0 2e3d3ce01487
child 28 b0b858956ed5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/tsrc/public/basic/MT_BasicOperationsPlugIn/mt_basicoperationsplugin.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,5617 @@
+/*
+* Copyright (c) 2002 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:
+*
+*/
+
+//  CLASS HEADER
+#include "mt_basicoperationsplugin.h"
+
+//  EXTERNAL INCLUDES
+#include <EUnitMacros.h>
+#include <EUnitDecorators.h>
+#include <ECom/ECom.h>
+
+#include <bautils.h>
+
+#include "CFContextSubscription.h"
+#include "CFContextSubscriptionImpl.h"
+#include "CFContextObject.h"
+#include "CFContextObjectImpl.h"
+#include "CFScriptHandler.h"
+
+//  INTERNAL INCLUDES
+#include "CFTestDelay.h"
+#include "cffakeenv.h"
+#include "ScriptEventNotifierSession.h"
+#include "cfenvutils.h"
+
+// CONSTANTS
+
+const TUid KMT_CfScriptEngineUid = {0x7E577E57};
+//const TUid KMT_CfScriptEngineOtherUid = {0x074E074E};
+_LIT8( KScriptStartTag, "<script" );
+
+
+// CONSTRUCTION
+mt_basicoperationsplugin* mt_basicoperationsplugin::NewL()
+    {
+    mt_basicoperationsplugin* self = mt_basicoperationsplugin::NewLC();
+    CleanupStack::Pop();
+
+    return self;
+    }
+
+mt_basicoperationsplugin* mt_basicoperationsplugin::NewLC()
+    {
+    mt_basicoperationsplugin* self = new( ELeave ) mt_basicoperationsplugin();
+    CleanupStack::PushL( self );
+
+    self->ConstructL();
+
+    return self;
+    }
+
+// Destructor (virtual by CBase)
+mt_basicoperationsplugin::~mt_basicoperationsplugin()
+    {
+    // Enable screen saver
+    CFEnvUtils::EnableScreenSaver( ETrue );
+    }
+
+// Default constructor
+mt_basicoperationsplugin::mt_basicoperationsplugin()
+    {
+    }
+
+// Second phase construct
+void mt_basicoperationsplugin::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_basicoperationsplugin::SetupEmptyL(  )
+    {
+    User::LeaveIfError( iFs.Connect() );
+    iTestDelay = CCFTestDelay::NewL();
+    }
+
+void mt_basicoperationsplugin::SetupL(  )
+    {
+    SetupEmptyL();
+
+    iDummyScriptEngineSession = CScriptEventNotifierSession::NewL();
+
+    iCFFakeEnv = CCFFakeEnv::NewL();
+    }
+
+void mt_basicoperationsplugin::SetupMidtestL( CCFContextObject& aContext1,
+    CCFContextObject& aContext2,
+    const TDesC& aScriptFile )
+    {
+    iDummyScriptEngineSession = CScriptEventNotifierSession::NewL();
+
+    iCFFakeEnv = CCFFakeEnv::NewL();
+
+    RThread thread;
+    CleanupClosePushL( thread );
+
+    // Define contexts
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    TInt err = iCFFakeEnv->DefineContext( aContext1.Source(),
+            aContext1.Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    err = iCFFakeEnv->DefineContext( aContext2.Source(),
+            aContext2.Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    aContext1.SetValueL(_L("A"));
+    err = iCFFakeEnv->PublishContext( aContext1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    aContext2.SetValueL(_L("True"));
+    err = iCFFakeEnv->PublishContext( aContext2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( aScriptFile );
+    TInt id = iCFFakeEnv->AddScript( aScriptFile, *script,
+            KMT_CfScriptEngineUid, thread );
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::TeardownMidtest(  )
+    {
+    iTestDelay->Start(100000); // 0.1 seconds
+
+    delete iDummyScriptEngineSession;
+    iDummyScriptEngineSession = NULL;
+
+    delete iCFFakeEnv;
+    iCFFakeEnv = NULL;
+
+#ifdef __WINS__    
+    REComSession::FinalClose();
+#endif
+    }
+
+void mt_basicoperationsplugin::Teardown(  )
+    {
+    iTestDelay->Start(100000); // 0.1 seconds
+
+    delete iDummyScriptEngineSession;
+    iDummyScriptEngineSession = NULL;
+
+    iTestDelay->Start(100000); // 0.1 seconds
+    delete iTestDelay;
+    iTestDelay = NULL;
+
+    delete iCFFakeEnv;
+    iCFFakeEnv = NULL;
+
+    iFs.Close();
+
+#ifdef __WINS__    
+    REComSession::FinalClose();
+#endif
+    }
+
+// -----------------------------------------------------------------------------
+// mt_basicoperationsplugin::LoadScriptFromFile
+// -----------------------------------------------------------------------------
+//
+HBufC8* mt_basicoperationsplugin::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;
+                    }
+                }
+            }
+        }
+
+    // Cleanup
+    file.Close();
+    return script;
+    }
+
+// Format string to create persistent data file from:
+// - Owner uid
+// - Script name
+// - Persistent data name
+_LIT( KCFPersistenDataFormat, "c:\\private\\10282bc4\\rules\\%x\\%S-%S.dat" );
+
+void mt_basicoperationsplugin::DeletePersistencyFile( const TDesC& aScriptName,
+    const TDesC& aPersistencyFilename )
+    {
+    // Format name
+    TParsePtrC parse( aScriptName );
+    TPtrC scriptFilename( parse.Name() );
+    TParsePtrC parsePersistency( aPersistencyFilename );
+    TPtrC persistencyFilename( parsePersistency.Name() );
+
+    TFileName fileName;
+    fileName.Format( KCFPersistenDataFormat,
+            KMT_CfScriptEngineUid, &scriptFilename, &persistencyFilename );
+
+    TInt err = BaflUtils::DeleteFile( iFs, fileName );
+    EUNIT_ASSERT_DESC(
+            err == KErrNone || err == KErrNotFound || err == KErrPathNotFound, 
+            "Persistency file delete error!");
+    }
+
+TInt mt_basicoperationsplugin::FindParameter(const RKeyValueArray& aArray,
+    const TDesC& aKey, const TDesC& aValue)
+    {
+    TInt index = KErrNotFound;
+    TBool found = EFalse;
+    for (TInt i = 0; i < aArray.Count(); i++)
+        {
+        if ( aArray[i]->Key() == aKey )
+            {
+            if ( index == KErrNotFound )
+                {
+                index = i;
+                if ( aArray[i]->Value() == aValue )
+                    {
+                    found = ETrue;
+                    }
+                else
+                    {
+                    return -3; // found but wrong value!
+                    }
+                }
+            else
+                {
+                index = -2; // Duplicate found!
+                }
+            }
+        }
+    if (found)
+        {
+        return index;
+        }
+    return KErrNotFound;
+    }
+
+
+TInt mt_basicoperationsplugin::FindIndex( const RArray<TInt>& aArray, TInt aIndex )
+    {
+    TInt index = KErrNotFound;
+    TBool found = EFalse;
+    for (TInt i = 0; i < aArray.Count(); i++)
+        {
+        if ( aArray[i] == aIndex )
+            {
+            if ( index == KErrNotFound )
+                {
+                index = i;
+                found = ETrue;
+                }
+            else
+                {
+                index = -2; // Duplicate found!
+                }
+            }
+        }
+    if (found)
+        {
+        return index;
+        }
+    return KErrNotFound;
+    }
+
+    
+
+
+
+void mt_basicoperationsplugin::MT_ScriptTest_equals_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    TInt id = iCFFakeEnv->AddScript(_L("dummyscript"),
+            _L8("dummyscript"), KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id < 0, "No parse error of dummy script" );
+
+    // Define and publish context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("t"));
+    co->SetTypeL(_L("t.p.app"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    iCFFakeEnv->ClearFireClientEvent();
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
+    id = iCFFakeEnv->AddScript(
+            _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // publish context
+    co->SetValueL(_L("ok"));
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // Check parameters:
+    // appUid='10005901' viewUid='00000001' msgUid='00000000' msg='msg'
+    EUNIT_ASSERT(iCFFakeEnv->ScriptEventParameters().Count() == 4);
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("appUid"), _L("10005901")) >= 0 );
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("viewUid"), _L("00000001")) >= 0 );
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("msgUid"), _L("00000000")) >= 0 );
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("msg"), _L("msg")) >= 0 );
+
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    co->SetValueL(_L("notok"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    co->SetValueL(_L("ok"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+
+void mt_basicoperationsplugin::MT_ScriptTest_notEqual_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("t"));
+    co->SetTypeL(_L("t.p.app"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-notEqual.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-notEqual.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Should fire event if not ok value
+    co->SetValueL(_L("notok"));
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    // TEST 3: Should not fire event if context value ok
+    co->SetValueL(_L("ok"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 4: Should fire event if context value not ok
+    co->SetValueL(_L("notok"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+
+void mt_basicoperationsplugin::MT_ScriptTest_less_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("Sensor"));
+    co->SetTypeL(_L("X.RawValue"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    HBufC8* script = LoadScriptFromFile(_L("test-less.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-less.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Should fire event if value < 150
+    co->SetValueL(_L("149")); // value in script: 150
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    // TEST 3: Should not fire event if context value = 150
+    co->SetValueL(_L("150"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 4: Should fire event if context value < 150
+    co->SetValueL(_L("-1"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+
+void mt_basicoperationsplugin::MT_ScriptTest_greater_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    co->SetSourceL(_L("Sensor"));
+    co->SetTypeL(_L("X.RawValue"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    HBufC8* script = LoadScriptFromFile(_L("test-greater.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-greater.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Should fire event if value > 149
+    co->SetValueL(_L("150")); // value in script: 149
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    // TEST 3: Should not fire event if context value = 149
+    co->SetValueL(_L("149"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 4: Should fire event if context value > 149
+    co->SetValueL(_L("17400"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_lessOrEqual_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+
+    co->SetSourceL(_L("Sensor"));
+    co->SetTypeL(_L("Y.RawValue"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    HBufC8* script = LoadScriptFromFile(_L("test-lessOrEqual.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-lessOrEqual.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Should fire event if value <= 150
+    co->SetValueL(_L("150")); // value in script: 150
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    // TEST 3: Should not fire event if context value > 150
+    co->SetValueL(_L("151"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 4: Should fire event if context value <= 150
+    co->SetValueL(_L("-378"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+
+void mt_basicoperationsplugin::MT_ScriptTest_greaterOrEqual_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+
+    co->SetSourceL(_L("Sensor"));
+    co->SetTypeL(_L("Y.RawValue"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    HBufC8* script = LoadScriptFromFile(_L("test-greaterOrEqual.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-greaterOrEqual.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Should fire event if value >= 151
+    co->SetValueL(_L("151")); // value in script: 151
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    // TEST 3: Should not fire event if context value < 151
+    co->SetValueL(_L("150"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 4: Should fire event if context value >= 150
+    co->SetValueL(_L("23689"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+
+void mt_basicoperationsplugin::MT_ScriptTest_contains_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    TInt id = iCFFakeEnv->AddScript(_L("dummyscript"), 
+            _L8("dummyscript"), KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id < 0, "No parse error of dummy script" );
+
+    // Define and publish context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("t"));
+    co->SetTypeL(_L("t.p.app"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    iCFFakeEnv->ClearFireClientEvent();
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-contains.xml"));
+    id = iCFFakeEnv->AddScript(
+            _L("test-contains.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // publish context
+    co->SetValueL(_L("sisaltaa"));
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // Check parameters:
+    // appUid='10005901' viewUid='00000001' msgUid='00000000' msg='msg'
+    EUNIT_ASSERT(iCFFakeEnv->ScriptEventParameters().Count() == 4);
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("appUid"), _L("10005901")) >= 0 );
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("viewUid"), _L("00000001")) >= 0 );
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("msgUid"), _L("00000000")) >= 0 );
+    EUNIT_ASSERT( FindParameter(iCFFakeEnv->ScriptEventParameters(),
+        _L("msg"), _L("msg")) >= 0 );
+
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    co->SetValueL(_L("sisalt"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    co->SetValueL(_L("isalta"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_inRange_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("Sensor"));
+    co->SetTypeL(_L("Z.RawValue"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-inRange.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-inRange.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Should fire event if value 100-200
+    co->SetValueL(_L("100")); // range in script: 100-200
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    // TEST 3: Should not fire event if context value is outside 100-200
+    co->SetValueL(_L("99"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 3: Should not fire event if context value is outside 100-200
+    co->SetValueL(_L("201"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although wrong context value!" );
+
+    // TEST 4: Should fire event if context value in range 100-200
+    co->SetValueL(_L("200"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_contextChanged_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("Application.State"));
+    co->SetTypeL(_L("Foreground.View"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-contextChanged.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-contextChanged.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: Context Changed, should fire event
+    co->SetValueL(_L("WebBrowser"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFiredCount() == 1,
+        "Wrong amount of events!" );
+
+    // TEST 2: Should not fire event if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+         "Script did fired although context value did not change!" );
+
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFiredCount() == 1,
+        "Wrong amount of events!" );
+
+    // TEST 3: Should not fire again if value is changed
+    co->SetValueL(_L("WormGame"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fired although context changed!" );
+
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFiredCount() == 2,
+        "Wrong amount of events!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_contextUpdated_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    CCFContextObject* co = CCFContextObject::NewLC();
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    co->SetSourceL(_L("Application.State"));
+    co->SetTypeL(_L("Foreground.View"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-contextUpdated.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-contextUpdated.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: Context Changed, should fire event
+    co->SetValueL(_L("WebBrowser"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
+        "Identifier does not match!" );
+
+    // TEST 2: Should fire event even if the context value did not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fired!" );
+
+    // TEST 3: Should not fire again if value is changed
+    co->SetValueL(_L("WormGame"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+         "Script did not fired although context changed!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_and_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define contexts
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Application.State"));
+    co1->SetTypeL(_L("Foreground.Application"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Application.State"));
+    co2->SetTypeL(_L("Foreground.View"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-and.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-and.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: Only first context published should not cause event
+    co1->SetValueL(_L("MusicPlayer"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script cause event although both contexts not set!" );
+
+    // TEST 2: Both contexts published with right values should cause event
+    co2->SetValueL(_L("NowPlaying"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both context set with right values!" );
+
+    // TEST 3: Publish Context 1 again, no event should come
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event althought context 1 did not change!" );
+
+    // TEST 4: Change context 1 to wrong value, no event should come
+    co1->SetValueL(_L("WebBrowser"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event althought context 1 did not change!" );
+
+    // TEST 5: Change context 1 to right value, event should come
+    co1->SetValueL(_L("MusicPlayer"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both contexts have right value!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_and_contextChanged_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Application.State"));
+    co1->SetTypeL(_L("Foreground.Application"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();;
+    co2->SetSourceL(_L("Application.State"));
+    co2->SetTypeL(_L("Foreground.View"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-and-contextChanged.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-and-contextChanged.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: Only first context published should not cause event
+    co1->SetValueL(_L("MusicPlayer"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script cause event although both contexts not set!" );
+
+    // TEST 2: Both contexts published with right values should cause event
+    co2->SetValueL(_L("NowPlaying"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both context set with right values!" );
+
+    // TEST 3: Publish Context 2 again, no event should come
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event althought context 1 did not change!" );
+
+    // TEST 4: Change context 1 to wrong value, no event should come
+    co1->SetValueL(_L("WebBrowser"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event althought context 1 did not change!" );
+
+    // TEST 5: Change context 1 to right value, no event should come
+    // because contextChanged -operation
+    co1->SetValueL(_L("MusicPlayer"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event despite of contextChanged-operation!" );
+
+    // TEST 6: Change context 2 to wrong value, no event should come
+    co2->SetValueL(_L("Playlist"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script cause event although context 2 changed to wrong value!" );
+
+    // TEST 7: Change context 2 to right value, event should come
+    co2->SetValueL(_L("NowPlaying"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although context 2 changed to right value!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_and_contextUpdated_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Sensor"));
+    co1->SetTypeL(_L("DoubleTap"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-and-contextUpdated.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-and-contextUpdated.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: Wrong value should not cause event
+    iCFFakeEnv->ClearFireClientEventCount();
+    co1->SetValueL(_L("Left"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script cause event although wrong value!" );
+
+    // TEST 2: Value Right should cause event
+    co1->SetValueL(_L("Right"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although right value!" );
+
+    // TEST 3: Second publish should also give event although context did
+    // not change
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event when value did not change!" );
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_or_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Application.State"));
+    co1->SetTypeL(_L("Foreground.View"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-or.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-or.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: First value should cause event
+    co1->SetValueL(_L("MusicLibrary"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although right context value!" );
+
+    // TEST 3: Publish Context 1 again, no event should come
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event althought context 1 did not change!" );
+
+    // TEST 4: Change context 1 to wrong value, no event should come
+    co1->SetValueL(_L("WebBrowser"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event althought context 1 did not change!" );
+
+    // TEST 5: Change context 1 to right value, event should come
+    co1->SetValueL(_L("MusicShop"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although right value!" );
+
+    // TEST 6: Change context 1 to right value, event should come
+    co1->SetValueL(_L("MusicLibrary"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although right value!" );
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_not_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    co->SetSourceL(_L("Application.State"));
+    co->SetTypeL(_L("Foreground.View"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-not.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-not.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    // TEST 1: "Right" context should not cause event
+    co->SetValueL(_L("Settings"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did fire event!" );
+
+    // TEST 2: "Wrong" context should cause event
+    co->SetValueL(_L("MainView"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+
+    // TEST 3: Same "Wrong" context again should not cause event
+    co->SetValueL(_L("MainView"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did fire event!" );
+
+    // TEST 4: Another "Wrong" context should cause event
+    co->SetValueL(_L("AdvancedSettings"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_publishContext_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    co->SetSourceL(_L("t"));
+    co->SetTypeL(_L("t.p.app"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // we must define the context for <publishContext>
+    err = iCFFakeEnv->DefineContext( _L("Sensor"),
+            _L("Z.Acceleration"), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-publishContext.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-publishContext.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    CCFContextSubscription* subscription = CCFContextSubscription::NewL();
+    subscription->SetContextSourceL(_L("Sensor"));
+    subscription->SetContextTypeL(_L("Z.Acceleration"));
+
+    // make subscription
+    err = iCFFakeEnv->SubscribeContext( subscription, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "SubscribeContext failed!" );
+
+    // TEST 1: "Right" context should not cause event
+    co->SetValueL(_L("ok"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    // Check if we get context Sensor: Z.Acceleration: Medium
+    EUNIT_ASSERT_DESC ( iCFFakeEnv->IndicationArrived(),
+            "Context indication did not arrive");
+    const CCFContextObject& indicatedCo = iCFFakeEnv->IndicationContext();
+    EUNIT_ASSERT_DESC ( indicatedCo.Source() == _L("Sensor"),
+        "Source of indication does not match!" );
+    EUNIT_ASSERT_DESC ( indicatedCo.Type() == _L("Z.Acceleration"),
+        "Type of indication does not match!" );
+    EUNIT_ASSERT_DESC ( indicatedCo.Value() == _L("Medium"),
+        "Value of indication does not match!" );
+    iCFFakeEnv->SetIndicationArrived( EFalse );
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_publishContext2_L(  )
+    {
+    // x. Preconditions
+    // -------------------------------------------------------------------------
+    RThread thread;
+    CleanupClosePushL(thread);
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    
+    // x. Register script and publish the same context. 
+    //    Check that script is loaded and context published. 
+    // -------------------------------------------------------------------------
+
+    // Define context:
+    //  source.publishContext2
+    //  type.publishContext2
+    TInt err = iCFFakeEnv->DefineContext( _L("source.publishContext2"),
+        _L("type.publishContext2"),
+        alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+
+    // Define context:
+    //  source.publishContext2
+    //  type.publishContext2.reply
+    err = iCFFakeEnv->DefineContext( _L("source.publishContext2"),
+        _L("type.publishContext2.reply"),
+        alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+    
+    // Load script test_publishContext2.xml
+    HBufC8* script = LoadScriptFromFile(_L("test-publishContext2.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-publishContext2.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "test-publishContext2.xml: Parse error!" );
+    delete script;
+
+    // Subscribe context:
+    //  source.publishContext2
+    //  type.publishContext2.reply
+    CCFContextSubscription* subscription = CCFContextSubscription::NewL();
+    subscription->SetContextSourceL(_L("source.publishContext2"));
+    subscription->SetContextTypeL(_L("type.publishContext2.reply"));
+
+    err = iCFFakeEnv->SubscribeContext( subscription, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "SubscribeContext failed!" );
+
+    // Clear events 
+    iCFFakeEnv->ClearFireClientEvent();
+
+    // Subscribe context:
+    //  source.publishContext2
+    //  type.publishContext2
+    //  true
+    co->SetSourceL( _L("source.publishContext2") );
+    co->SetTypeL( _L("type.publishContext2") );
+    co->SetValueL( _L("true") );
+    
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "Published context failed!" );
+
+    // Check if we get context:
+    //  source.publishContext2
+    //  type.publishContext2.reply
+    //  true
+    EUNIT_ASSERT_DESC ( iCFFakeEnv->IndicationArrived(),
+            "Context indication did not arrive");
+    
+    const CCFContextObject& indicatedCo = iCFFakeEnv->IndicationContext();
+    EUNIT_ASSERT_DESC ( indicatedCo.Source() == _L("source.publishContext2"),
+        "Source of indication does not match!" );
+    
+    EUNIT_ASSERT_DESC ( indicatedCo.Type() == _L("type.publishContext2.reply"),
+        "Type of indication does not match!" );
+    
+    EUNIT_ASSERT_DESC ( indicatedCo.Value() == _L("true"),
+        "Value of indication does not match!" );
+    
+    iCFFakeEnv->SetIndicationArrived( EFalse );
+    
+    // x. Cleanup
+    // -------------------------------------------------------------------------
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_publishContext3_L(  )
+    {
+    // x. Preconditions
+    // -------------------------------------------------------------------------
+    RThread thread;
+    CleanupClosePushL(thread);
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    
+    // x. Register script and publish the same context. 
+    //    Check that script is loaded and context published. 
+    // -------------------------------------------------------------------------
+
+    // Define context:
+    //  source.publishContext3
+    //  type.publishContext3
+    TInt err = iCFFakeEnv->DefineContext( _L("source.publishContext3"),
+        _L("type.publishContext3"),
+        alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+
+    // Define context:
+    //  source.publishContext3
+    //  type.publishContext3.reply
+    err = iCFFakeEnv->DefineContext( _L("source.publishContext3"),
+        _L("type.publishContext3.reply"),
+        alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed!" );
+    
+    // Load script test_publishContext3.xml
+    HBufC8* script = LoadScriptFromFile(_L("test-publishContext3.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-publishContext3.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "test-publishContext3.xml: Parse error!" );
+    delete script;
+
+    // Subscribe context:
+    //  source.publishContext3
+    //  type.publishContext3.reply
+    CCFContextSubscription* subscription = CCFContextSubscription::NewL();
+    subscription->SetContextSourceL(_L("source.publishContext3"));
+    subscription->SetContextTypeL(_L("type.publishContext3.reply"));
+
+    err = iCFFakeEnv->SubscribeContext( subscription, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "SubscribeContext failed!" );
+
+    // Clear events 
+    iCFFakeEnv->ClearFireClientEvent();
+
+    // Subscribe context:
+    //  source.publishContext3
+    //  type.publishContext3
+    //  true
+    co->SetSourceL( _L("source.publishContext3") );
+    co->SetTypeL( _L("type.publishContext3") );
+    co->SetValueL( _L("true") );
+    
+    err = iCFFakeEnv->PublishContext( *co, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "Published context failed!" );
+
+    // Check if we get context:
+    //  source.publishContext3
+    //  type.publishContext3.reply
+    //  true
+    EUNIT_ASSERT_DESC ( iCFFakeEnv->IndicationArrived(),
+            "Context indication did not arrive");
+    
+    const CCFContextObject& indicatedCo = iCFFakeEnv->IndicationContext();
+    EUNIT_ASSERT_DESC ( indicatedCo.Source() == _L("source.publishContext3"),
+        "Source of indication does not match!" );
+    
+    EUNIT_ASSERT_DESC ( indicatedCo.Type() == _L("type.publishContext3.reply"),
+        "Type of indication does not match!" );
+    
+    EUNIT_ASSERT_DESC ( indicatedCo.Value() == _L("true"),
+        "Value of indication does not match!" );
+    
+    iCFFakeEnv->SetIndicationArrived( EFalse );
+    
+    // x. Cleanup
+    // -------------------------------------------------------------------------
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_elseif_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Application.State"));
+    co1->SetTypeL(_L("Foreground.View"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-elseif.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-elseif.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: First value should cause first event
+    co1->SetValueL(_L("NowPlaying"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both contexts not set!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("firstTestAction"),
+        "Identifier does not match!" );
+
+    // TEST 2: Second value should cause second event
+    co1->SetValueL(_L("Settings"));
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both contexts not set!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("secondTestAction"),
+        "Identifier does not match!" );
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_else_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Application.State"));
+    co1->SetTypeL(_L("Foreground.View"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-else.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-else.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: First value should cause first event
+    co1->SetValueL(_L("NowPlaying"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both contexts not set!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("firstTestAction"),
+        "Identifier does not match!" );
+
+    // TEST 2: Republishing same context should not cause event
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event although context did not change!" );
+
+    // TEST 3: Second value should cause second event
+    co1->SetValueL(_L("Settings"));
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event although both contexts not set!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("secondTestAction"),
+        "Identifier does not match!" );
+
+    // TEST 4: Republishing same context should not cause event
+    // because context value did not change -> no evaluation
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event although context did not change!" );
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_delay_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("t"));
+    co1->SetTypeL(_L("t.se.delay.a"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();;
+    co2->SetSourceL(_L("t"));
+    co2->SetTypeL(_L("t.se.delay.b"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load scripts
+    HBufC8* script1 = LoadScriptFromFile(_L("test-delay-script1.xml"));
+    TInt id1 = iCFFakeEnv->AddScript(_L("test-delay-script1.xml"),
+            *script1, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id1 >= 0, "Parse error!" );
+    delete script1;
+
+    HBufC8* script2 = LoadScriptFromFile(_L("test-delay-script2.xml"));
+    TInt id2 = iCFFakeEnv->AddScript(_L("test-delay-script2.xml"),
+            *script2, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id2 >= 0, "Parse error!" );
+    delete script2;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: A -> white, B = not initialized -> no events
+    co1->SetValueL(_L("white"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script cause event although both contexts not set!" );
+
+    // TEST 2: A = white, B -> white   -> no events
+    co2->SetValueL(_L("white"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    iTestDelay->Start(250000); // 250 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event although wrong values!" );
+
+    // TEST 3: A->blue, B=white, no event in 10 ms
+    co1->SetValueL(_L("blue"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    iTestDelay->Start(10000); // 10 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event although wrong values!" );
+
+    // TEST 4: A=blue, B->red
+    // script 1 should not fire events although temporary
+    // A=blue, B=white -situation because of evaluation delay
+    // script 2 should cause event at 200 ms
+    co2->SetValueL(_L("red"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    iTestDelay->Start(50000); // 50 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Event before 50 ms!" );
+    iTestDelay->Start(250000); // 50 ms + 250 ms = 300 ms
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id2,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("endUserAction2"),
+        "Identifier does not match!" );
+
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFiredCount() == 1,
+        "Wrong number of events!" );
+
+    // TEST 5: When context B is set back to white,
+    // script 1 should cause event at 200 ms
+    co2->SetValueL(_L("white"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    iTestDelay->Start(50000); // 50 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Event before 50 ms!" );
+    iTestDelay->Start(250000); // 50 ms + 250 ms = 300 ms
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id1,
+         "Script ID does not match!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("endUserAction1"),
+        "Identifier does not match!" );
+
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFiredCount() == 2,
+        "Wrong number of events!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_delay_contextRef_L(  )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define and publish context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("t"));
+    co1->SetTypeL(_L("t.se.delay.ca"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();;
+    co2->SetSourceL(_L("t"));
+    co2->SetTypeL(_L("t.se.delay.cb"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co3 = CCFContextObject::NewLC();
+    co3->SetSourceL(_L("t"));
+    co3->SetTypeL(_L("t.se.delay.cc"));
+    err = iCFFakeEnv->DefineContext( co3->Source(),
+            co3->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-delay-contextRef.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-delay-contextRef.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // TEST 1: First context should cause indication at 100 ms
+    co1->SetValueL(_L("update"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    // There should not be event at 50 ms
+    iTestDelay->Start(50000); // 50 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event at 50 ms!" );
+
+    // But at 150 ms there should
+    iTestDelay->Start(100000); // 50 + 100 ms = 150 ms
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not give event at 150 ms!" );
+
+    // TEST 2: Second context should cause indication at 200 ms
+    co2->SetValueL(_L("update"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    // There should not be event at 50 ms
+    iTestDelay->Start(50000); // 50 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event at 50 ms!" );
+
+    // But at 300 ms there should
+    iTestDelay->Start(250000); // 50 + 250 ms = 300 ms
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not give event at 300 ms!" );
+
+    // TEST 3: Third context should cause event immediately
+    co3->SetValueL(_L("update"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co3, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    // There should not be event immediately
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event immediately!" );
+
+    // TEST 4: Second context should cause indication at 200 ms
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    err = iCFFakeEnv->PublishContext( *co3, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+
+    // There should not be event at 10 ms
+    iTestDelay->Start(10000); // 10 ms
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script caused event before 10 ms!" );
+
+    // But at 300 ms there should
+    iTestDelay->Start(250000); // 10 + 250 ms = 260 ms
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did NOT give event at 250 ms!" );
+
+    CleanupStack::PopAndDestroy( co3 );
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countRepeating_withoutValue_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countRepeatingWithoutValue.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countRepeatingWithoutValue.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countRepeating_triggerWithoutValue_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countRepeatingWithoutValue2.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countRepeatingWithoutValue2.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countRepeating_withValue_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countRepeatingWithValue.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countRepeatingWithValue.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_withoutValue_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event although interval was not met!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countOneShotWithoutValue.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countOneShotWithoutValue.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_withValue_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event although interval was not met!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countOneShotWithValue.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countOneShotWithValue.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_remainWithValue_duration_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countOneShotWithValueDuration.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countOneShotWithValueDuration.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_changeWithValue_duration_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countOneShotWithValueDuration2.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countOneShotWithValueDuration2.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_triggerWithValue_duration_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-countOneShotWithValueDuration3.xml"));
+    TInt id = iCFFakeEnv->AddScript(_L("test-countOneShotWithValueDuration3.xml"),
+            *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    iTestDelay->Start(100000); // 0.1 seconds
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_remainWithValue_persistentDuration_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript(
+            KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_changeWithValue_persistentDuration_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration2.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript(
+            KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countOneShot_triggerWithValue_persistentDuration_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration3.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript(
+            KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::
+MT_ScriptTest_countOneShot_remainWithValue_persistentDuration2_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration4.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript( KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish CONTROL context, event should come since count is zero and value
+    // is false and thus not operation should be true
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come since count is zero and value
+    // is false and thus not operation should be true
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+    
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::
+MT_ScriptTest_countOneShot_remainWithValue_persistentDuration3_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration5.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript( KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish CONTROL context, event should come since counting to zero
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::
+MT_ScriptTest_countOneShot_remainWithValue_persistentDuration4_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration6.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript( KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish CONTROL context, no event should come since counting to zero and not
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::
+MT_ScriptTest_countOneShot_changeWithValue_persistentDuration2_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration7.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript( KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish CONTROL context, event should come since counting to zero
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::
+MT_ScriptTest_countOneShot_triggerWithValue_persistentDuration2_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countOneShotWithValuePersistentDuration8.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript( KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish CONTROL context, event should come since counting to zero
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countRepeating_withValue_persistent_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countRepeatingWithValuePersistent.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript(
+            KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, event MUST come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countRepeating_withValue_persistent2_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countRepeatingWithValuePersistent3.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript( KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish CONTROL context, event should come since counting to zero
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "No event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_countRepeating_triggerWithoutValue_persistent_L()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    _LIT( KTestScript, "test-countRepeatingWithoutValuePersistent.xml" );
+    _LIT( KPersistencyFileName, "testCountPersistency.dat");
+    DeletePersistencyFile( KTestScript, KPersistencyFileName );
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Test"));
+    co1->SetTypeL(_L("Counting"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    CCFContextObject* co2 = CCFContextObject::NewLC();
+    co2->SetSourceL(_L("Test"));
+    co2->SetTypeL(_L("Control"));
+    err = iCFFakeEnv->DefineContext( co2->Source(),
+            co2->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // Publish context before loading so that subscribing will find the initial
+    // value used to evaluate the operation
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile( KTestScript );
+    TInt id = iCFFakeEnv->AddScript(
+            KTestScript, *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+
+    iCFFakeEnv->ClearFireClientEventCount();
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+    
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // REINITIALIZE
+    TeardownMidtest();
+    iTestDelay->Start(300000); // 0.3 s
+    SetupMidtestL( *co1, *co2, KTestScript );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish COUNTED context, event MUST come
+    co1->SetValueL(_L("A"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(),
+        "Script did not cause event!" );
+
+    // Publish COUNTED context, no event should come
+    co1->SetValueL(_L("B"));
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co1, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("False"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    // Publish CONTROL context, no event should come
+    co2->SetValueL(_L("True"));
+    iCFFakeEnv->ClearFireClientEventCount();
+    iCFFakeEnv->ClearFireClientEvent();
+    err = iCFFakeEnv->PublishContext( *co2, thread );
+    EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
+    EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
+        "Script did cause event!" );
+
+    CleanupStack::PopAndDestroy( co2 );
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_SubscriptionSecurity_L( )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
+
+    // adding script should cause error because contexts
+    // used have not been defined
+    EUNIT_ASSERT_DESC( id < 0,
+        "No error of loading script without contexts defined!" );
+    delete script;
+    script = NULL;
+
+    // Define and publish context
+//    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    static _LIT_SECURITY_POLICY_FAIL( alwaysFail );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    co->SetSourceL(_L("t"));
+    co->SetTypeL(_L("t.p.app"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysFail, alwaysFail );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    script = LoadScriptFromFile(_L("test-equals.xml"));
+    id = iCFFakeEnv->AddScript(
+            _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
+
+    // adding script should cause error because contexts
+    // used have capability requirements that cannot be met
+    EUNIT_ASSERT_DESC( id < 0,
+        "No error despite of impossible capabilities defined!" );
+    delete script;
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_ActionSecurity_L( )
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define context
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co = CCFContextObject::NewLC();
+    co->SetSourceL(_L("t"));
+    co->SetTypeL(_L("t.p.app"));
+    TInt err = iCFFakeEnv->DefineContext( co->Source(),
+            co->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
+
+    iCFFakeEnv->SetActionNotFound( 1 );
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
+
+    // adding script should cause error because
+    // action is not present
+    EUNIT_ASSERT_DESC( id < 0,
+        "No error of loading script although action not found!" );
+    delete script;
+    script = NULL;
+
+    script = LoadScriptFromFile( _L("test-equals.xml") );
+
+    iCFFakeEnv->SetActionNotFound( 0 );
+    iCFFakeEnv->SetAlwaysFailingActionPolicy( 1 );
+    id = iCFFakeEnv->AddScript(
+            _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
+
+    // adding script should cause error because actions used
+    // have capability requirements that cannot be met
+    EUNIT_ASSERT_DESC( id < 0,
+        "No error of despite of impossible capabilities in action!" );
+    delete script;
+
+    CleanupStack::PopAndDestroy( co );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+void mt_basicoperationsplugin::MT_ScriptTest_OperationParsingL()
+    {
+    RThread thread;
+    CleanupClosePushL(thread);
+
+    // Define contexts
+    static _LIT_SECURITY_POLICY_PASS( alwaysPass );
+    CCFContextObject* co1 = CCFContextObject::NewLC();
+    co1->SetSourceL(_L("Application.State"));
+    co1->SetTypeL(_L("Foreground.Application"));
+    TInt err = iCFFakeEnv->DefineContext( co1->Source(),
+            co1->Type(), alwaysPass, alwaysPass );
+    EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
+
+    // load script
+    HBufC8* script = LoadScriptFromFile(_L("test-parsing.xml"));
+    TInt id = iCFFakeEnv->AddScript(
+            _L("test-parsing.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
+    delete script;
+    script = NULL;
+
+    script = LoadScriptFromFile(_L("test-parsing2.xml"));
+    id = iCFFakeEnv->AddScript(
+            _L("test-parsing2.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id < 0, "Parse error!" );
+    delete script;
+    script = NULL;
+
+    script = LoadScriptFromFile(_L("test-parsing3.xml"));
+    id = iCFFakeEnv->AddScript(
+            _L("test-parsing3.xml"), *script, KMT_CfScriptEngineUid, thread);
+    EUNIT_ASSERT_DESC( id < 0, "Parse error!" );
+    delete script;
+
+    CleanupStack::PopAndDestroy( co1 );
+    CleanupStack::PopAndDestroy( &thread );
+    }
+
+
+//  TEST TABLE
+EUNIT_BEGIN_TEST_TABLE(
+    mt_basicoperationsplugin,
+    "Add test suite description here.",
+    "MODULE" )
+
+
+EUNIT_TEST(
+    "<equals> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_equals_L, Teardown)
+
+EUNIT_TEST(
+    "<notEqual> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_notEqual_L, Teardown)
+
+EUNIT_TEST(
+    "<less> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_less_L, Teardown)
+
+EUNIT_TEST(
+    "<greater> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_greater_L, Teardown)
+
+EUNIT_TEST(
+    "<lessOrEqual> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_lessOrEqual_L, Teardown)
+
+EUNIT_TEST(
+    "<greaterOrEqual> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_greaterOrEqual_L, Teardown)
+
+EUNIT_TEST(
+    "<contains> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_contains_L, Teardown)
+
+EUNIT_TEST(
+    "<inRange> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_inRange_L, Teardown)
+
+EUNIT_TEST(
+    "<contextChanged> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_contextChanged_L, Teardown)
+
+EUNIT_TEST(
+    "<contextUpdated> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_contextUpdated_L, Teardown)
+
+EUNIT_TEST(
+    "<and> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_and_L, Teardown)
+
+EUNIT_TEST(
+    "<and><contextChanged> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_and_contextChanged_L, Teardown)
+
+EUNIT_TEST(
+    "<and><contextUpdated> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_and_contextUpdated_L, Teardown)
+
+EUNIT_TEST(
+    "<or> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_or_L, Teardown)
+
+EUNIT_TEST(
+    "<not> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_not_L, Teardown)
+
+EUNIT_TEST(
+    "<publishContext> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_publishContext_L, Teardown)
+
+EUNIT_TEST(
+    "<publishContext> - test 2",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_publishContext2_L, Teardown)
+
+EUNIT_TEST(
+    "<publishContext> - test 3",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_publishContext3_L, Teardown)
+
+EUNIT_TEST(
+    "<elseIf> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_elseif_L, Teardown)
+
+EUNIT_TEST(
+    "<else> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_else_L, Teardown)
+
+EUNIT_TEST(
+    "<script delay> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_delay_L, Teardown)
+
+EUNIT_TEST(
+    "<contextRef delay> - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_delay_contextRef_L, Teardown)
+
+EUNIT_TEST(
+    "<count repeatInterval> - test without value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countRepeating_withoutValue_L, Teardown)
+
+EUNIT_TEST(
+    "<count repeatInterval trigger> - test without value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countRepeating_triggerWithoutValue_L, Teardown)
+
+EUNIT_TEST(
+    "<count repeatInterval> - test with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countRepeating_withValue_L, Teardown)
+
+EUNIT_TEST(
+    "<count oneShot> - test without value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_withoutValue_L, Teardown)
+
+EUNIT_TEST(
+    "<count oneShot> - test with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_withValue_L, Teardown)
+
+EUNIT_TEST(
+    "<count oneShot remain> - test duration with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_remainWithValue_duration_L, Teardown)
+
+EUNIT_TEST(
+    "<count oneShot change> - test duration with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_changeWithValue_duration_L, Teardown)
+
+EUNIT_TEST(
+    "<count oneShot trigger> - test duration with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_triggerWithValue_duration_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers remain> - test persist duration with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_remainWithValue_persistentDuration_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers change> - test persist duration with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_changeWithValue_persistentDuration_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers trigger> - test persist duration with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_triggerWithValue_persistentDuration_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers2 remain> - test persist 2 duration with value and not",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_remainWithValue_persistentDuration2_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers3 remain> - test persist 3 count to zero with duration and value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_remainWithValue_persistentDuration3_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers4 remain> - test persist 4 count to zero with duration, value and not",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_remainWithValue_persistentDuration4_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers2 change> - test persist 2 count to zero with duration and value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_changeWithValue_persistentDuration2_L, Teardown)
+
+EUNIT_TEST(
+    "<count oS pers2 trigger> - test persist 2 count to zero with duration and value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countOneShot_triggerWithValue_persistentDuration2_L, Teardown)
+
+EUNIT_TEST(
+    "<count repeatInterval> - test persist with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countRepeating_withValue_persistent_L, Teardown)
+
+EUNIT_TEST(
+    "<count 2 repeatInterval> - test zero repeat interval and persist with value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countRepeating_withValue_persistent2_L, Teardown)
+
+EUNIT_TEST(
+    "<count repeatInterval trigger> - test persist without value",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_countRepeating_triggerWithoutValue_persistent_L, Teardown)
+
+EUNIT_TEST(
+    "parsing - test ",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_OperationParsingL, Teardown)
+
+EUNIT_TEST(
+    "script subscription security",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_SubscriptionSecurity_L, Teardown)
+
+EUNIT_TEST(
+    "script action security",
+    "MCFScriptEngineInterface",
+    "Parameters",
+    "FUNCTIONALITY",
+    SetupL, MT_ScriptTest_ActionSecurity_L, Teardown)
+    
+
+EUNIT_END_TEST_TABLE
+
+//  END OF FILE