contextframework/cfw/tsrc/public/basic/MT_CFScriptEngine/MT_CFScriptEngine.cpp
changeset 0 2e3d3ce01487
child 28 b0b858956ed5
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 /*
       
     2 * Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 //  CLASS HEADER
       
    20 #include "MT_CFScriptEngine.h"
       
    21 
       
    22 //  EXTERNAL INCLUDES
       
    23 #include <EUnitMacros.h>
       
    24 #include <ECom/ECom.h>
       
    25 #include <bautils.h>
       
    26 
       
    27 #include "CFContextSubscription.h"
       
    28 #include "CFContextSubscriptionImpl.h"
       
    29 #include "CFContextObject.h"
       
    30 #include "CFContextObjectImpl.h"
       
    31 #include "CFScriptHandler.h"
       
    32 
       
    33 //  INTERNAL INCLUDES
       
    34 #include "CFTestDelay.h"
       
    35 #include "cffakeenv.h"
       
    36 #include "ScriptEventNotifierSession.h"
       
    37 #include "basicoperationspluginconst.hrh"
       
    38 #include "cfcommon.h"
       
    39 #include "cfenvutils.h"
       
    40 
       
    41 // CONSTANTS
       
    42 
       
    43 const TUid KMT_CfScriptEngineUid = {0x7E577E57};
       
    44 const TUid KMT_CfScriptEngineOtherUid = {0x074E074E};
       
    45 const TUid KCFServerUid = {0x10282BC4};
       
    46 
       
    47 _LIT( KCFPrivateFolder, "c:\\private\\10282BC4\\rules\\" );
       
    48 
       
    49 // CONSTRUCTION
       
    50 MT_CFScriptEngine* MT_CFScriptEngine::NewL()
       
    51     {
       
    52     MT_CFScriptEngine* self = MT_CFScriptEngine::NewLC();
       
    53     CleanupStack::Pop();
       
    54 
       
    55     return self;
       
    56     }
       
    57 
       
    58 MT_CFScriptEngine* MT_CFScriptEngine::NewLC()
       
    59     {
       
    60     MT_CFScriptEngine* self = new( ELeave ) MT_CFScriptEngine();
       
    61     CleanupStack::PushL( self );
       
    62 
       
    63     self->ConstructL();
       
    64 
       
    65     return self;
       
    66     }
       
    67 
       
    68 // Destructor (virtual by CBase)
       
    69 MT_CFScriptEngine::~MT_CFScriptEngine()
       
    70     {
       
    71     // Enable screen saver
       
    72     CFEnvUtils::EnableScreenSaver( ETrue );
       
    73     }
       
    74 
       
    75 // Default constructor
       
    76 MT_CFScriptEngine::MT_CFScriptEngine()
       
    77     {
       
    78     }
       
    79 
       
    80 // Second phase construct
       
    81 void MT_CFScriptEngine::ConstructL()
       
    82     {
       
    83     // The ConstructL from the base class CEUnitTestSuiteClass must be called.
       
    84     // It generates the test case table.
       
    85     CEUnitTestSuiteClass::ConstructL();
       
    86 
       
    87     // Disable screen saver
       
    88     CFEnvUtils::EnableScreenSaver( EFalse );
       
    89     }
       
    90 
       
    91 
       
    92 //  METHODS
       
    93 
       
    94 void MT_CFScriptEngine::SetupEmptyL(  )
       
    95     {
       
    96     User::LeaveIfError( iFs.Connect() );
       
    97     BaflUtils::EnsurePathExistsL( iFs, KCFPrivateFolder );
       
    98     iFileMan = CFileMan::NewL( iFs );
       
    99     iTestDelay = CCFTestDelay::NewL();
       
   100     }
       
   101 
       
   102 void MT_CFScriptEngine::SetupL(  )
       
   103     {
       
   104     SetupEmptyL();
       
   105 
       
   106     iDummyScriptEngineSession = CScriptEventNotifierSession::NewL();
       
   107 
       
   108     iCFFakeEnv = CCFFakeEnv::NewL();    
       
   109     }
       
   110 
       
   111 void MT_CFScriptEngine::Teardown(  )
       
   112     {
       
   113     TeardownNoFinalClose();
       
   114     
       
   115 #ifdef __WINS__
       
   116     REComSession::FinalClose();
       
   117 #endif
       
   118     }
       
   119 
       
   120 void MT_CFScriptEngine::TeardownNoFinalClose(  )
       
   121     {    
       
   122     iTestDelay->Start(100000); // 0.1 seconds
       
   123 
       
   124     delete iDummyScriptEngineSession;
       
   125     iDummyScriptEngineSession = NULL;
       
   126 
       
   127     iTestDelay->Start(100000); // 0.1 seconds
       
   128     delete iTestDelay;
       
   129     iTestDelay = NULL;
       
   130 
       
   131     delete iCFFakeEnv;
       
   132     iCFFakeEnv = NULL;
       
   133 
       
   134     CleanupSystemDrive();
       
   135     delete iFileMan;
       
   136     
       
   137     iFs.Close();
       
   138     }
       
   139 
       
   140 // -----------------------------------------------------------------------------
       
   141 // MT_CFScriptEngine::LoadScriptFromFile
       
   142 // -----------------------------------------------------------------------------
       
   143 //
       
   144 HBufC8* MT_CFScriptEngine::LoadScriptFromFile( const TDesC& aFilePath )
       
   145     {
       
   146     HBufC8* script = NULL;
       
   147     RFile file;
       
   148     TFileName fileName;
       
   149     fileName.Copy(_L("z:\\data\\cftestdata\\testscripts\\"));
       
   150     fileName.Append(aFilePath);
       
   151     TInt err = file.Open( iFs, fileName, EFileRead );
       
   152     if( err == KErrNone )
       
   153         {
       
   154         TInt size = 0;
       
   155         err = file.Size( size );
       
   156         if( err == KErrNone )
       
   157             {
       
   158             script = HBufC8::New( size );
       
   159             if( script )
       
   160                 {
       
   161                 TPtr8 scriptPtr = script->Des();
       
   162                 err = file.Read( scriptPtr );
       
   163                 if( err == KErrNone )
       
   164                     {
       
   165                     // Strip all unnecassary data from script
       
   166                     TInt pos = scriptPtr.FindF( KScriptStartTag );
       
   167                     if( pos != KErrNotFound )
       
   168                         {
       
   169                         scriptPtr.Copy( scriptPtr.MidTPtr( pos ) );
       
   170                         }
       
   171                     else
       
   172                         {
       
   173                         // Incorrect script
       
   174                         delete script;
       
   175                         script = NULL;
       
   176                         }
       
   177                     }
       
   178                 else
       
   179                     {
       
   180                     delete script;
       
   181                     script = NULL;
       
   182                     }
       
   183                 }
       
   184             }
       
   185         }
       
   186 
       
   187     // Cleanup
       
   188     file.Close();
       
   189     return script;
       
   190     }
       
   191 
       
   192 
       
   193 TInt MT_CFScriptEngine::FindParameter(const RKeyValueArray& aArray,
       
   194     const TDesC& aKey, const TDesC& aValue)
       
   195     {
       
   196     TInt index = KErrNotFound;
       
   197     TBool found = EFalse;
       
   198     for (TInt i = 0; i < aArray.Count(); i++)
       
   199         {
       
   200         if ( aArray[i]->Key() == aKey )
       
   201             {
       
   202             if ( index == KErrNotFound )
       
   203                 {
       
   204                 index = i;
       
   205                 if ( aArray[i]->Value() == aValue )
       
   206                     {
       
   207                     found = ETrue;
       
   208                     }
       
   209                 else
       
   210                     {
       
   211                     return -3; // found but wrong value!
       
   212                     }
       
   213                 }
       
   214             else
       
   215                 {
       
   216                 index = -2; // Duplicate found!
       
   217                 }
       
   218             }
       
   219         }
       
   220     if (found)
       
   221         {
       
   222         return index;
       
   223         }
       
   224     return KErrNotFound;
       
   225     }
       
   226 
       
   227 
       
   228 TInt MT_CFScriptEngine::FindIndex( const RArray<TInt>& aArray, TInt aIndex )
       
   229     {
       
   230     TInt index = KErrNotFound;
       
   231     TBool found = EFalse;
       
   232     for (TInt i = 0; i < aArray.Count(); i++)
       
   233         {
       
   234         if ( aArray[i] == aIndex )
       
   235             {
       
   236             if ( index == KErrNotFound )
       
   237                 {
       
   238                 index = i;
       
   239                 found = ETrue;
       
   240                 }
       
   241             else
       
   242                 {
       
   243                 index = -2; // Duplicate found!
       
   244                 }
       
   245             }
       
   246         }
       
   247     if (found)
       
   248         {
       
   249         return index;
       
   250         }
       
   251     return KErrNotFound;
       
   252     }
       
   253 
       
   254 
       
   255 void MT_CFScriptEngine::CleanupSystemDrive()
       
   256     {
       
   257     iFileMan->RmDir( KCFPrivateFolder );
       
   258     }
       
   259 
       
   260 
       
   261 void MT_CFScriptEngine::MT_CCFScriptEvent_NewLL(  )
       
   262     {
       
   263     EUNIT_ASSERT_DESC( EFalse, "Test case not implemented!" );
       
   264     }
       
   265 
       
   266 void MT_CFScriptEngine::MT_CCFScriptEvent_ScriptIdL(  )
       
   267     {
       
   268     EUNIT_ASSERT_DESC( EFalse, "Test case not implemented!" );
       
   269     }
       
   270 
       
   271 void MT_CFScriptEngine::MT_CCFScriptEvent_IdentifierL(  )
       
   272     {
       
   273     EUNIT_ASSERT_DESC( EFalse, "Test case not implemented!" );
       
   274     }
       
   275 
       
   276 void MT_CFScriptEngine::MT_CCFScriptEvent_ParametersL(  )
       
   277     {
       
   278     EUNIT_ASSERT_DESC( EFalse, "Test case not implemented!" );
       
   279     }
       
   280 
       
   281 void MT_CFScriptEngine::MT_CCFScriptHandler_NewLL(  )
       
   282     {
       
   283     // below                                        // CLEANUP<< fakeEnv
       
   284     CCFFakeEnv* fakeEnv = CCFFakeEnv::NewLC();
       
   285 
       
   286     CCFScriptHandler* instance
       
   287         = CCFScriptHandler::NewL( *fakeEnv, iFs, *fakeEnv, *fakeEnv );
       
   288     CleanupStack::PushL ( instance );
       
   289     EUNIT_ASSERT_DESC ( instance, "CCFScriptHandler not created!" );
       
   290 
       
   291     CleanupStack::PopAndDestroy( instance );
       
   292     CleanupStack::PopAndDestroy( fakeEnv );         // CLEANUP<< fakeEnv
       
   293     }
       
   294 
       
   295 void MT_CFScriptEngine::MT_CCFScriptHandler_NewLCL(  )
       
   296     {
       
   297     // below                                        // CLEANUP<< fakeEnv
       
   298     CCFFakeEnv* fakeEnv = CCFFakeEnv::NewLC();
       
   299 
       
   300     CCFScriptHandler* instance
       
   301         = CCFScriptHandler::NewLC( *fakeEnv, iFs, *fakeEnv, *fakeEnv );
       
   302     EUNIT_ASSERT_DESC ( instance, "CCFScriptHandler not created!" );
       
   303 
       
   304     MCFStarterObserver* observer = (MCFStarterObserver*) instance;
       
   305     observer->InitializePhaseL( CCFPhaseBase::ECFDeviceStarting );
       
   306     observer->InitializePhaseL( CCFPhaseBase::ECFDeviceStarted );
       
   307     observer->InitializePhaseL( CCFPhaseBase::ECFStartEnd );
       
   308 
       
   309     CleanupStack::PopAndDestroy( instance );
       
   310     CleanupStack::PopAndDestroy( fakeEnv );         // CLEANUP<< fakeEnv
       
   311     }
       
   312 
       
   313 
       
   314 void MT_CFScriptEngine::MT_CCFScriptHandler_RemoveScriptByIdL(  )
       
   315     {
       
   316     RThread thread;
       
   317     CleanupClosePushL(thread);
       
   318 
       
   319     // Define context
       
   320     CCFContextObject* co = CCFContextObject::NewLC();
       
   321     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   322     co->SetSourceL(_L("t"));
       
   323     co->SetTypeL(_L("t.p.app"));
       
   324     TInt err = iCFFakeEnv->DefineContext( co->Source(),
       
   325             co->Type(), alwaysPass, alwaysPass );
       
   326     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   327 
       
   328     // load script
       
   329     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   330     TInt id = iCFFakeEnv->AddScript(
       
   331             _L("test-equals.xml"), *script, thread.SecureId(), thread);
       
   332     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   333     delete script;
       
   334 
       
   335     // CONTEXT 1
       
   336     co->SetValueL(_L("ok"));
       
   337     iCFFakeEnv->ClearFireClientEvent();
       
   338     err = iCFFakeEnv->PublishContext( *co, thread );
       
   339     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   340     EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
       
   341     EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
       
   342          "Script ID does not match!" );
       
   343     EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
       
   344         "Identifier does not match!" );
       
   345 
       
   346     err = iCFFakeEnv->RemoveScriptById( id, thread );
       
   347     EUNIT_ASSERT( err == KErrNone );
       
   348 
       
   349     // Check that original script does not cause events anymore
       
   350     co->SetValueL(_L("notok"));
       
   351     iCFFakeEnv->ClearFireClientEvent();
       
   352     err = iCFFakeEnv->PublishContext( *co, thread );
       
   353     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   354     EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
       
   355          "Script did fired although wrong context value!" );
       
   356 
       
   357     co->SetValueL(_L("ok"));
       
   358     iCFFakeEnv->ClearFireClientEvent();
       
   359     err = iCFFakeEnv->PublishContext( *co, thread );
       
   360     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   361     EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(),
       
   362          "Script did fire event!" );
       
   363 
       
   364     CleanupStack::PopAndDestroy( co );
       
   365     CleanupStack::PopAndDestroy( &thread );
       
   366     }
       
   367 
       
   368 
       
   369 void MT_CFScriptEngine::MT_CCFScriptHandler_RemoveScriptsBySessionL(  )
       
   370     {
       
   371     RThread thread;
       
   372     CleanupClosePushL(thread);
       
   373 
       
   374     // Define and publish context
       
   375     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   376     TInt err = iCFFakeEnv->DefineContext( _L("t"),
       
   377             _L("t.p.app"), alwaysPass, alwaysPass );
       
   378     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   379 
       
   380     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   381     TInt id1 = iCFFakeEnv->AddScript(
       
   382             _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   383     EUNIT_ASSERT_DESC( id1 >= 0, "Parse error!" );
       
   384     delete script;
       
   385 
       
   386     // Define context
       
   387     err = iCFFakeEnv->DefineContext( _L("Sensor"),
       
   388             _L("X.RawValue"), alwaysPass, alwaysPass );
       
   389     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   390 
       
   391     script = LoadScriptFromFile(_L("test-greater.xml"));
       
   392     TInt id2 = iCFFakeEnv->AddScript(
       
   393         _L("test-greater.xml"), *script, KMT_CfScriptEngineOtherUid, thread,
       
   394         *iDummyScriptEngineSession, NULL );
       
   395     EUNIT_ASSERT_DESC( id2 >= 0, "Parse error!" );
       
   396     delete script;
       
   397 
       
   398     // Define contexts
       
   399     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   400             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
   401     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   402     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   403             _L("Foreground.View"), alwaysPass, alwaysPass );
       
   404     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   405 
       
   406     script = LoadScriptFromFile(_L("test-and.xml"));
       
   407     TInt id3 = iCFFakeEnv->AddScript(
       
   408             _L("test-and.xml"),*script, KMT_CfScriptEngineUid, thread);
       
   409     EUNIT_ASSERT_DESC( id3 >= 0, "Parse error!" );
       
   410     delete script;
       
   411 
       
   412     TInt numRemoved = iCFFakeEnv->RemoveScriptsBySession( *iCFFakeEnv );
       
   413 
       
   414     const RArray<TInt>& scriptIds = iCFFakeEnv->GetEveryScriptId();
       
   415     EUNIT_ASSERT_DESC( scriptIds.Count() == 1,
       
   416         "Wrong count of Ids in array!" );
       
   417 
       
   418     // Check that all Ids are found
       
   419     EUNIT_ASSERT ( FindIndex( scriptIds, id2 ) >= 0 );
       
   420 
       
   421     CleanupStack::PopAndDestroy( &thread );
       
   422     }
       
   423 
       
   424 
       
   425 void MT_CFScriptEngine::MT_CCFScriptHandler_RemoveScriptByNameL()
       
   426     {
       
   427     _LIT( KScriptName1, "test-and.xml" );
       
   428     _LIT( KScriptName2, "test-or.xml" );
       
   429     HBufC8* script1 = LoadScriptFromFile( KScriptName1 );
       
   430     HBufC8* script2 = LoadScriptFromFile( KScriptName2 );
       
   431     EUNIT_ASSERT_DESC( script1 && script2, "Scripts not loaded" );
       
   432     if( script1 && script2 )
       
   433         {
       
   434         CleanupStack::PushL( script1 );
       
   435         CleanupStack::PushL( script2 );
       
   436         
       
   437         const TUid KClient1Uid = {0x12340001};
       
   438         const TUid KClient2Uid = {0x12340002};
       
   439 
       
   440         // Define needed contexts for scripts
       
   441         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   442         TInt err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   443             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
   444         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   445         err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   446             _L("Foreground.View"), alwaysPass, alwaysPass );
       
   447         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   448         
       
   449         // Test data
       
   450         RThread thread;
       
   451         CleanupClosePushL( thread );
       
   452         TInt id = 0;
       
   453         TInt scriptCount = 0;
       
   454         
       
   455         // Add script 1 from client 1
       
   456         id = iCFFakeEnv->AddScript( KScriptName1, *script1,
       
   457             KClient1Uid, thread );
       
   458         EUNIT_ASSERT_DESC( id >= 0, "Add script failed" );
       
   459         scriptCount = iCFFakeEnv->NumberOfScripts();
       
   460         EUNIT_ASSERT_DESC( scriptCount == id, "Invalid number of scripts" );
       
   461         
       
   462         // Add script 2 from client 1
       
   463         id = iCFFakeEnv->AddScript( KScriptName2, *script2,
       
   464             KClient1Uid, thread );
       
   465         EUNIT_ASSERT_DESC( id >= 0, "Add script failed" );
       
   466         scriptCount = iCFFakeEnv->NumberOfScripts();
       
   467         EUNIT_ASSERT_DESC( scriptCount == id, "Invalid number of scripts" );
       
   468         
       
   469         // Add script 1 from client 2
       
   470         id = iCFFakeEnv->AddScript( KScriptName1, *script1,
       
   471             KClient2Uid, thread );
       
   472         EUNIT_ASSERT_DESC( id >= 0, "Add script failed" );
       
   473         scriptCount = iCFFakeEnv->NumberOfScripts();
       
   474         EUNIT_ASSERT_DESC( scriptCount == id, "Invalid number of scripts" );
       
   475         
       
   476         // Add script 2 from client 2
       
   477         id = iCFFakeEnv->AddScript( KScriptName2, *script1,
       
   478             KClient2Uid, thread );
       
   479         EUNIT_ASSERT_DESC( id >= 0, "Add script failed" );
       
   480         scriptCount = iCFFakeEnv->NumberOfScripts();
       
   481         EUNIT_ASSERT_DESC( scriptCount == id, "Invalid number of scripts" );
       
   482         
       
   483         // Remove script 1 by name from client 1
       
   484         err = iCFFakeEnv->RemoveScriptByName( KScriptName1, KClient1Uid );
       
   485         EUNIT_ASSERT_DESC( err == KErrNone, "Invalid return value" );
       
   486         scriptCount = iCFFakeEnv->NumberOfScriptsByOwner( KClient1Uid );
       
   487         EUNIT_ASSERT_DESC( scriptCount == 1, "Invalid number of scripts" );
       
   488         
       
   489         // Remove script 1 by name from client 2
       
   490         err = iCFFakeEnv->RemoveScriptByName( KScriptName1, KClient2Uid );
       
   491         EUNIT_ASSERT_DESC( err == KErrNone, "Invalid return value" );
       
   492         scriptCount = iCFFakeEnv->NumberOfScriptsByOwner( KClient2Uid );
       
   493         EUNIT_ASSERT_DESC( scriptCount == 1, "Invalid number of scripts" );
       
   494         
       
   495         // Remove script 2 by name from client 1
       
   496         err = iCFFakeEnv->RemoveScriptByName( KScriptName2, KClient1Uid );
       
   497         EUNIT_ASSERT_DESC( err == KErrNone, "Invalid return value" );
       
   498         scriptCount = iCFFakeEnv->NumberOfScriptsByOwner( KClient1Uid );
       
   499         EUNIT_ASSERT_DESC( scriptCount == 0, "Invalid number of scripts" );
       
   500         
       
   501         // Remove script 2 by name from client 2
       
   502         err = iCFFakeEnv->RemoveScriptByName( KScriptName2, KClient2Uid );
       
   503         EUNIT_ASSERT_DESC( err == KErrNone, "Invalid return value" );
       
   504         scriptCount = iCFFakeEnv->NumberOfScriptsByOwner( KClient2Uid );
       
   505         EUNIT_ASSERT_DESC( scriptCount == 0, "Invalid number of scripts" );
       
   506         
       
   507         // Clean up
       
   508         CleanupStack::PopAndDestroy( &thread );
       
   509         CleanupStack::PopAndDestroy( script2 );
       
   510         CleanupStack::PopAndDestroy( script1 );
       
   511         }
       
   512     }
       
   513 
       
   514 
       
   515 void MT_CFScriptEngine::MT_CCFScriptHandler_RemoveScriptByUidL()
       
   516     {
       
   517     _LIT( KScriptName1, "test-and.xml" );
       
   518     _LIT( KScriptName2, "test-or.xml" );
       
   519     HBufC8* script1 = LoadScriptFromFile( KScriptName1 );
       
   520     HBufC8* script2 = LoadScriptFromFile( KScriptName2 );
       
   521     EUNIT_ASSERT_DESC( script1 && script2, "Scripts not loaded" );
       
   522     if( script1 && script2 )
       
   523         {
       
   524         CleanupStack::PushL( script1 );
       
   525         CleanupStack::PushL( script2 );
       
   526         
       
   527         // Define needed contexts for scripts
       
   528         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   529         TInt err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   530             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
   531         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   532         err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   533             _L("Foreground.View"), alwaysPass, alwaysPass );
       
   534         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   535         
       
   536         // Test data
       
   537         RThread thread;
       
   538         CleanupClosePushL( thread );
       
   539         TInt id = 0;
       
   540         TInt scriptCount = 0;
       
   541         const TUid KUid1 = {0x12340000};
       
   542         const TUid KUid2 = {0x12340001};
       
   543         
       
   544         // Add script 1 twice
       
   545         TInt count = 0;
       
   546         for( TInt i = 0; i < 2; i++ )
       
   547             {
       
   548             id = iCFFakeEnv->AddScript( KScriptName1, *script1,
       
   549                 KUid1, thread );
       
   550             count++;
       
   551             EUNIT_ASSERT_DESC( id >= 0, "Add script failed" );
       
   552             scriptCount = iCFFakeEnv->NumberOfScripts();
       
   553             EUNIT_ASSERT_DESC( scriptCount == count, "Invalid number of scripts" );
       
   554             }
       
   555         
       
   556         // Add script 2 three times
       
   557         for( TInt i = 0; i < 3; i++ )
       
   558             {
       
   559             id = iCFFakeEnv->AddScript( KScriptName2, *script2,
       
   560                 KUid2, thread );
       
   561             count++;
       
   562             EUNIT_ASSERT_DESC( id >= 0, "Add script failed" );
       
   563             scriptCount = iCFFakeEnv->NumberOfScripts();
       
   564             EUNIT_ASSERT_DESC( scriptCount == count, "Invalid number of scripts" );
       
   565             }
       
   566         
       
   567         // Remove scripts by uid1
       
   568         err = iCFFakeEnv->RemoveScriptByUid( KUid1 );
       
   569         EUNIT_ASSERT_DESC( err == KErrNone, "RemoveScriptByUid failed" );
       
   570         scriptCount = iCFFakeEnv->NumberOfScripts();
       
   571         EUNIT_ASSERT_DESC( scriptCount == 3, "Invalid number of scripts" );
       
   572         scriptCount = iCFFakeEnv->NumberOfScriptsByOwner( KUid1 );
       
   573         EUNIT_ASSERT_DESC( scriptCount == 0, "Invalid number of scripts" );
       
   574 
       
   575         // Remove scripts by uid2
       
   576         err = iCFFakeEnv->RemoveScriptByUid( KUid2 );
       
   577         EUNIT_ASSERT_DESC( err == KErrNone, "RemoveScriptByUid failed" );
       
   578         scriptCount = iCFFakeEnv->NumberOfScripts();
       
   579         EUNIT_ASSERT_DESC( scriptCount == 0, "Invalid number of scripts" );
       
   580         scriptCount = iCFFakeEnv->NumberOfScriptsByOwner( KUid2 );
       
   581         EUNIT_ASSERT_DESC( scriptCount == 0, "Invalid number of scripts" );
       
   582 
       
   583         // Clean up
       
   584         CleanupStack::PopAndDestroy( &thread );
       
   585         CleanupStack::PopAndDestroy( script2 );
       
   586         CleanupStack::PopAndDestroy( script1 );
       
   587         }
       
   588     }
       
   589 
       
   590 
       
   591 void MT_CFScriptEngine::MT_CCFScriptHandler_NumberOfScriptsL(  )
       
   592     {
       
   593     RThread thread;
       
   594     CleanupClosePushL(thread);
       
   595 
       
   596     EUNIT_ASSERT_DESC( iCFFakeEnv->NumberOfScripts() == 0,
       
   597             "Wrong number of scripts returned!" );
       
   598 
       
   599     // Define and publish context
       
   600     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   601     TInt err = iCFFakeEnv->DefineContext( _L("t"),
       
   602             _L("t.p.app"), alwaysPass, alwaysPass );
       
   603     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   604 
       
   605     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   606     TInt id = iCFFakeEnv->AddScript(
       
   607             _L("test-equals.xml"),*script, KMT_CfScriptEngineUid, thread);
       
   608     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   609     delete script;
       
   610 
       
   611     EUNIT_ASSERT_DESC( iCFFakeEnv->NumberOfScripts() == 1,
       
   612             "Wrong number of scripts returned!" );
       
   613 
       
   614     // Define context
       
   615     err = iCFFakeEnv->DefineContext( _L("Sensor"),
       
   616             _L("X.RawValue"), alwaysPass, alwaysPass );
       
   617     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   618 
       
   619     script = LoadScriptFromFile(_L("test-greater.xml"));
       
   620     id = iCFFakeEnv->AddScript(_L("test-greater.xml"),
       
   621             *script, KMT_CfScriptEngineOtherUid, thread);
       
   622     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   623     delete script;
       
   624 
       
   625     EUNIT_ASSERT_DESC( iCFFakeEnv->NumberOfScripts() == 2,
       
   626             "Wrong number of scripts returned!" );
       
   627 
       
   628     CleanupStack::PopAndDestroy( &thread );
       
   629     }
       
   630 
       
   631 
       
   632 void MT_CFScriptEngine::MT_CCFScriptHandler_ScriptLengthL(  )
       
   633     {
       
   634     RThread thread;
       
   635     CleanupClosePushL(thread);
       
   636 
       
   637     // Define and publish context
       
   638     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   639     TInt err = iCFFakeEnv->DefineContext( _L("t"),
       
   640             _L("t.p.app"), alwaysPass, alwaysPass );
       
   641     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   642 
       
   643     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   644     TInt id1 = iCFFakeEnv->AddScript(
       
   645             _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   646     EUNIT_ASSERT_DESC( id1 >= 0, "Parse error!" );
       
   647 
       
   648     TInt origLength = script->Length();
       
   649     delete script;
       
   650 
       
   651     EUNIT_ASSERT( iCFFakeEnv->ScriptLength( id1 ) == origLength);
       
   652 
       
   653     CleanupStack::PopAndDestroy( &thread );
       
   654     }
       
   655 
       
   656 
       
   657 void MT_CFScriptEngine::MT_CCFScriptHandler_NumberOfScriptsByOwnerL(  )
       
   658     {
       
   659     RThread thread;
       
   660     CleanupClosePushL(thread);
       
   661 
       
   662     EUNIT_ASSERT_DESC(
       
   663             iCFFakeEnv->NumberOfScriptsByOwner(KMT_CfScriptEngineUid) == 0,
       
   664             "Wrong number of scripts returned!" );
       
   665 
       
   666     // Define and publish context
       
   667     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   668     TInt err = iCFFakeEnv->DefineContext( _L("t"),
       
   669             _L("t.p.app"), alwaysPass, alwaysPass );
       
   670     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   671 
       
   672     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   673     TInt id = iCFFakeEnv->AddScript(
       
   674             _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   675     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   676     delete script;
       
   677 
       
   678     EUNIT_ASSERT_DESC(
       
   679             iCFFakeEnv->NumberOfScriptsByOwner(KMT_CfScriptEngineUid) == 1,
       
   680             "Wrong number of scripts returned!" );
       
   681 
       
   682     // Define context for test-greater.xml
       
   683     err = iCFFakeEnv->DefineContext( _L("Sensor"),
       
   684             _L("X.RawValue"), alwaysPass, alwaysPass );
       
   685     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   686 
       
   687     script = LoadScriptFromFile(_L("test-greater.xml"));
       
   688     id = iCFFakeEnv->AddScript(_L("test-greater.xml"),
       
   689             *script, KMT_CfScriptEngineOtherUid, thread);
       
   690     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   691     delete script;
       
   692 
       
   693     EUNIT_ASSERT_DESC(
       
   694             iCFFakeEnv->NumberOfScriptsByOwner(KMT_CfScriptEngineUid) == 1,
       
   695             "Wrong number of scripts returned!" );
       
   696 
       
   697     // Define contexts test-and.xml -script
       
   698     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   699             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
   700     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   701     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   702             _L("Foreground.View"), alwaysPass, alwaysPass );
       
   703     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   704 
       
   705     script = LoadScriptFromFile(_L("test-and.xml"));
       
   706     id = iCFFakeEnv->AddScript(
       
   707             _L("test-and.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   708     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   709     delete script;
       
   710 
       
   711     EUNIT_ASSERT_DESC(
       
   712             iCFFakeEnv->NumberOfScriptsByOwner(KMT_CfScriptEngineUid) == 2,
       
   713             "Wrong number of scripts returned!" );
       
   714 
       
   715     CleanupStack::PopAndDestroy( &thread );
       
   716     }
       
   717 
       
   718 void MT_CFScriptEngine::MT_CCFScriptHandler_GetEveryScriptIdL(  )
       
   719     {
       
   720     RThread thread;
       
   721     CleanupClosePushL(thread);
       
   722 
       
   723     // Define context for test-equals.xml
       
   724     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   725     TInt err = iCFFakeEnv->DefineContext( _L("t"),
       
   726             _L("t.p.app"), alwaysPass, alwaysPass );
       
   727     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   728 
       
   729     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   730     TInt id1 = iCFFakeEnv->AddScript(
       
   731             _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   732     EUNIT_ASSERT_DESC( id1 >= 0, "Parse error!" );
       
   733     delete script;
       
   734 
       
   735     // Define context for test-greater.xml
       
   736     err = iCFFakeEnv->DefineContext( _L("Sensor"),
       
   737             _L("X.RawValue"), alwaysPass, alwaysPass );
       
   738     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   739 
       
   740     script = LoadScriptFromFile(_L("test-greater.xml"));
       
   741     TInt id2 = iCFFakeEnv->AddScript(_L("test-greater.xml"),
       
   742             *script, KMT_CfScriptEngineOtherUid, thread);
       
   743     EUNIT_ASSERT_DESC( id2 >= 0, "Parse error!" );
       
   744     delete script;
       
   745 
       
   746 
       
   747     // Define contexts test-and.xml -script
       
   748     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   749             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
   750     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   751     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   752             _L("Foreground.View"), alwaysPass, alwaysPass );
       
   753     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   754 
       
   755     script = LoadScriptFromFile(_L("test-and.xml"));
       
   756     TInt id3 = iCFFakeEnv->AddScript(
       
   757             _L("test-and.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   758     EUNIT_ASSERT_DESC( id3 >= 0, "Parse error!" );
       
   759     delete script;
       
   760 
       
   761     const RArray<TInt>& scriptIds = iCFFakeEnv->GetEveryScriptId();
       
   762     EUNIT_ASSERT_DESC( scriptIds.Count() == 3, "Wrong count of Ids in array!" );
       
   763 
       
   764     // Check that all Ids are found
       
   765     EUNIT_ASSERT ( FindIndex( scriptIds, id1 ) >= 0 );
       
   766     EUNIT_ASSERT ( FindIndex( scriptIds, id2 ) >= 0 );
       
   767     EUNIT_ASSERT ( FindIndex( scriptIds, id3 ) >= 0 );
       
   768 
       
   769     CleanupStack::PopAndDestroy( &thread );
       
   770     }
       
   771 
       
   772 
       
   773 void MT_CFScriptEngine::MT_CCFScriptHandler_GetEveryScriptIdByOwnerL(  )
       
   774     {
       
   775     RThread thread;
       
   776     CleanupClosePushL(thread);
       
   777 
       
   778     // Define context for test-equals.xml
       
   779     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   780     TInt err = iCFFakeEnv->DefineContext( _L("t"),
       
   781             _L("t.p.app"), alwaysPass, alwaysPass );
       
   782     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   783 
       
   784     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   785     TInt id1 = iCFFakeEnv->AddScript(
       
   786             _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   787     EUNIT_ASSERT_DESC( id1 >= 0, "Parse error!" );
       
   788     delete script;
       
   789 
       
   790     // Define context for test-greater.xml
       
   791     err = iCFFakeEnv->DefineContext( _L("Sensor"),
       
   792             _L("X.RawValue"), alwaysPass, alwaysPass );
       
   793     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   794 
       
   795     script = LoadScriptFromFile(_L("test-greater.xml"));
       
   796     TInt id2 = iCFFakeEnv->AddScript(_L("test-greater.xml"),
       
   797             *script, KMT_CfScriptEngineOtherUid, thread);
       
   798     EUNIT_ASSERT_DESC( id2 >= 0, "Parse error!" );
       
   799     delete script;
       
   800 
       
   801     // Define contexts test-and.xml -script
       
   802     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   803             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
   804     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   805     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
   806             _L("Foreground.View"), alwaysPass, alwaysPass );
       
   807     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   808 
       
   809     script = LoadScriptFromFile(_L("test-and.xml"));
       
   810     TInt id3 = iCFFakeEnv->AddScript(
       
   811             _L("test-and.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   812     EUNIT_ASSERT_DESC( id3 >= 0, "Parse error!" );
       
   813     delete script;
       
   814 
       
   815     const RArray<TInt>& scriptIds
       
   816         = iCFFakeEnv->GetEveryScriptIdByOwner(KMT_CfScriptEngineUid);
       
   817     EUNIT_ASSERT_DESC( scriptIds.Count() == 2,
       
   818         "Wrong count of Ids in array!" );
       
   819 
       
   820     EUNIT_ASSERT ( FindIndex( scriptIds, id1 ) >= 0 );
       
   821     EUNIT_ASSERT ( FindIndex( scriptIds, id3 ) >= 0 );
       
   822 
       
   823     CleanupStack::PopAndDestroy( &thread );
       
   824     }
       
   825 
       
   826 
       
   827 void MT_CFScriptEngine::MT_CCFScriptHandler_UpdateScriptL(  )
       
   828     {
       
   829     RThread thread;
       
   830     CleanupClosePushL(thread);
       
   831 
       
   832     // Define and publish context
       
   833     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   834     CCFContextObject* co = CCFContextObject::NewLC();
       
   835     co->SetSourceL(_L("t"));
       
   836     co->SetTypeL(_L("t.p.app"));
       
   837     TInt err = iCFFakeEnv->DefineContext( co->Source(),
       
   838             co->Type(), alwaysPass, alwaysPass );
       
   839     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   840 
       
   841     // load script
       
   842     HBufC8* script = LoadScriptFromFile(_L("test-equals.xml"));
       
   843     TInt id = iCFFakeEnv->AddScript(
       
   844             _L("test-equals.xml"), *script, KMT_CfScriptEngineUid, thread);
       
   845     EUNIT_ASSERT_DESC( id >= 0, "Parse error!" );
       
   846     delete script;
       
   847 
       
   848     // CONTEXT 1
       
   849     co->SetValueL(_L("ok"));
       
   850     iCFFakeEnv->ClearFireClientEvent();
       
   851     err = iCFFakeEnv->PublishContext( *co, thread );
       
   852     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   853     EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
       
   854     EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
       
   855          "Script ID does not match!" );
       
   856     EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
       
   857         "Identifier does not match!" );
       
   858 
       
   859     // Define context
       
   860     CCFContextObject* co2 = CCFContextObject::NewLC();
       
   861     co2->SetSourceL(_L("Sensor"));
       
   862     co2->SetTypeL(_L("X.RawValue"));
       
   863     err = iCFFakeEnv->DefineContext( co2->Source(),
       
   864             co2->Type(), alwaysPass, alwaysPass );
       
   865     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   866 
       
   867     // update script
       
   868     HBufC8* updatedScript = LoadScriptFromFile(_L("test-less.xml"));
       
   869     err = iCFFakeEnv->UpdateScript(id,  thread,  *updatedScript, NULL );
       
   870     EUNIT_ASSERT_DESC( err == KErrNone, "Update error!" );
       
   871     delete updatedScript;
       
   872 
       
   873     // TEST 1: Should fire event if value < 150
       
   874     co2->SetValueL(_L("149")); // value in script: 150
       
   875     err = iCFFakeEnv->PublishContext( *co2, thread );
       
   876     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   877     EUNIT_ASSERT_DESC( iCFFakeEnv->ClientEventFired(), "Script did not fire event!" );
       
   878     EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventScriptId() == id,
       
   879          "Script ID does not match!" );
       
   880     EUNIT_ASSERT_DESC( iCFFakeEnv->ScriptEventIdentifier() == _L("startApp"),
       
   881         "Identifier does not match!" );
       
   882 
       
   883     // Check that original script does not cause events anymore
       
   884     co->SetValueL(_L("notok"));
       
   885     iCFFakeEnv->ClearFireClientEvent();
       
   886     err = iCFFakeEnv->PublishContext( *co, thread );
       
   887     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   888     EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did fire event!" );
       
   889 
       
   890     co->SetValueL(_L("ok"));
       
   891     iCFFakeEnv->ClearFireClientEvent();
       
   892     err = iCFFakeEnv->PublishContext( *co, thread );
       
   893     EUNIT_ASSERT_DESC( err == KErrNone, "PublishContext failed!" );
       
   894     EUNIT_ASSERT_DESC( !iCFFakeEnv->ClientEventFired(), "Script did fire event!" );
       
   895 
       
   896     CleanupStack::PopAndDestroy( co2 );
       
   897     CleanupStack::PopAndDestroy( co );
       
   898     CleanupStack::PopAndDestroy( &thread );
       
   899     }
       
   900 
       
   901 
       
   902 void MT_CFScriptEngine::MT_CCFScriptHandler_SaveScriptL()
       
   903     {    
       
   904     // Change timestamp to yesterday
       
   905     TTime time;
       
   906     time.UniversalTime();
       
   907     TDateTime dateTime = time.DateTime();
       
   908     dateTime.SetHour( dateTime.Hour() - 1 );
       
   909     
       
   910     // Update new time
       
   911     TTime entryTime( dateTime );
       
   912 
       
   913     // Load script
       
   914     HBufC8* script1 = LoadScriptFromFile( _L( "test-saveScript.xml" ) );
       
   915     EUNIT_ASSERT_DESC( script1 , "Scripts not loaded" );
       
   916     if( script1 )
       
   917         {
       
   918         CleanupStack::PushL( script1 );
       
   919         const TUid KUidClient1 = {0x12340001};
       
   920         const TUid KUidClient2 = {0x12340002};
       
   921         TInt err = KErrNone;
       
   922         TInt scriptId = 0;
       
   923         TBool exists = EFalse;
       
   924         _LIT( KClient1Path1, "c:\\private\\10282BC4\\rules\\12340001\\script1.rul" );
       
   925         _LIT( KClient1Path2, "c:\\private\\10282BC4\\rules\\12340001\\script2.rul" );
       
   926         _LIT( KClient2Path1, "c:\\private\\10282BC4\\rules\\12340002\\script1.rul" );
       
   927         _LIT( KClient2Path2, "c:\\private\\10282BC4\\rules\\12340002\\script2.rul" );
       
   928         _LIT( KUpgradePath, "c:\\private\\10282BC4\\rules\\scriptupgrade.rul" );
       
   929         RThread client;
       
   930         CleanupClosePushL( client );
       
   931         
       
   932         // Define needed contexts for scripts
       
   933         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
   934         CCFContextObject* co = CCFContextObject::NewLC();
       
   935         co->SetSourceL( _L("test") );
       
   936         co->SetTypeL( _L("save.script") );
       
   937         err = iCFFakeEnv->DefineContext( co->Source(), co->Type(), alwaysPass, alwaysPass );
       
   938         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
   939 
       
   940         // Test script saving from different clients
       
   941         const TInt KCount = 5;
       
   942         for( TInt i = 0; i < KCount; i++ )
       
   943             {
       
   944             TPtrC fullPath( KNullDesC );
       
   945             TUid uid = {0x00000000};
       
   946             switch( i )
       
   947                 {
       
   948                 case 0:
       
   949                     {
       
   950                     fullPath.Set( KClient1Path1 );
       
   951                     uid = KUidClient1;
       
   952                     break;
       
   953                     }
       
   954                 case 1:
       
   955                     {
       
   956                     fullPath.Set( KClient1Path2 );
       
   957                     uid = KUidClient1;
       
   958                     break;
       
   959                     }
       
   960                 case 2:
       
   961                     {
       
   962                     fullPath.Set( KClient2Path1 );
       
   963                     uid = KUidClient2;
       
   964                     break;
       
   965                     }
       
   966                 case 3:
       
   967                     {
       
   968                     fullPath.Set( KClient2Path2 );
       
   969                     uid = KUidClient2;
       
   970                     break;
       
   971                     }
       
   972                 case 4:
       
   973                     {
       
   974                     fullPath.Set( KUpgradePath );
       
   975                     uid = KCFServerUid;
       
   976                     break;
       
   977                     }
       
   978                 default:
       
   979                     {
       
   980                     break;
       
   981                     }
       
   982                 }
       
   983             TParsePtrC parse( fullPath );
       
   984             scriptId = iCFFakeEnv->AddScript( parse.Name(), *script1, uid,
       
   985                 client );
       
   986             EUNIT_ASSERT_DESC( scriptId == i + 1, "Invalid script id" );
       
   987             err = iCFFakeEnv->SaveScript( *script1, scriptId, uid );
       
   988             EUNIT_ASSERT_DESC( err == KErrNone, "SaveScript failed" );
       
   989             exists = BaflUtils::FolderExists( iFs, parse.DriveAndPath() );
       
   990             EUNIT_ASSERT_DESC( exists, "Folder not created" );
       
   991             exists = BaflUtils::FileExists( iFs, parse.FullName() );
       
   992             EUNIT_ASSERT_DESC( exists, "File not created" );
       
   993             
       
   994             err = iFs.SetModified( fullPath, entryTime );
       
   995             EUNIT_ASSERT_DESC( err == KErrNone, "Failed to set modified time" );
       
   996             TEntry oldEntry;
       
   997             err = iFs.Entry( fullPath, oldEntry );
       
   998             EUNIT_ASSERT_DESC( err == KErrNone, "Failed to get file entry" );
       
   999             
       
  1000             // Save script again and check that it has been replaced
       
  1001             User::After( 100000 );
       
  1002             err = iCFFakeEnv->SaveScript( *script1, scriptId, uid );
       
  1003             EUNIT_ASSERT_DESC( err == KErrNone, "SaveScript failed" );
       
  1004             TEntry newEntry;
       
  1005             err = iFs.Entry( fullPath, newEntry );
       
  1006             EUNIT_ASSERT_DESC( err == KErrNone, "Failed to get file entry" );
       
  1007             EUNIT_ASSERT_DESC( oldEntry.iModified < newEntry.iModified,
       
  1008                 "Saved script not updated" );
       
  1009             }
       
  1010         
       
  1011         // Try to save a script from with a wrong owner UID
       
  1012         scriptId = iCFFakeEnv->AddScript( _L( "test" ), *script1, KUidClient1,   
       
  1013             client );
       
  1014         err = iCFFakeEnv->SaveScript( *script1, scriptId, KUidClient2 );
       
  1015         EUNIT_ASSERT_DESC( err == KErrAccessDenied,
       
  1016             "Allowed to save script with a wrong client uid" );
       
  1017         
       
  1018         // Check that the saved script are loaded when script engine
       
  1019         // is initialized
       
  1020         delete iCFFakeEnv;
       
  1021         iCFFakeEnv = NULL;
       
  1022         iCFFakeEnv = CCFFakeEnv::NewL();
       
  1023         iCFFakeEnv->InitAllPhasesL();
       
  1024         TInt numOfScripts = iCFFakeEnv->NumberOfScriptsByOwner( KUidClient1 );
       
  1025         EUNIT_ASSERT_DESC( numOfScripts == 2, "Invalid number of scripts" );
       
  1026         numOfScripts = iCFFakeEnv->NumberOfScriptsByOwner( KUidClient2 );
       
  1027         EUNIT_ASSERT_DESC( numOfScripts == 2, "Invalid number of scripts" );
       
  1028 
       
  1029         co->SetSourceL( _L("test") );
       
  1030         co->SetTypeL( _L("save.script") );
       
  1031         err = iCFFakeEnv->DefineContext( co->Source(), co->Type(), alwaysPass, alwaysPass );
       
  1032         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1033         co->SetValueL( _L("true") );
       
  1034         err = iCFFakeEnv->PublishContext( *co, client );
       
  1035         EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1036         
       
  1037         TBool eventFired = iCFFakeEnv->ClientEventFired();
       
  1038         EUNIT_ASSERT_DESC( eventFired, "Event not fired" );
       
  1039         TPtrC actionId( iCFFakeEnv->ScriptEventIdentifier() );
       
  1040         EUNIT_ASSERT_DESC( actionId == _L("saveScript"), "Incorrect action id" );
       
  1041         const RKeyValueArray& params = iCFFakeEnv->ScriptEventParameters();
       
  1042         EUNIT_ASSERT_DESC( params[0]->Key() == _L("id"), "Incorrect action id" );
       
  1043         EUNIT_ASSERT_DESC( params[0]->Value() == _L("triggered"), "Incorrect action id value" );
       
  1044         
       
  1045         // Clean up
       
  1046         CleanupStack::PopAndDestroy( co );
       
  1047         CleanupStack::PopAndDestroy( &client );
       
  1048         CleanupStack::PopAndDestroy( script1 );
       
  1049         }
       
  1050     }
       
  1051 
       
  1052 
       
  1053 void MT_CFScriptEngine::MT_CCFScriptHandler_DeleteScriptByNameL()
       
  1054     {
       
  1055     // Load script
       
  1056     HBufC8* script = LoadScriptFromFile( _L( "test-and.xml" ) );
       
  1057     EUNIT_ASSERT_DESC( script , "Scripts not loaded" );
       
  1058     User::LeaveIfNull( script );
       
  1059     CleanupStack::PushL( script );
       
  1060     RThread client;
       
  1061     CleanupClosePushL( client );
       
  1062     
       
  1063     // Test data
       
  1064     const TUid KUidClient1 = {0x12340001};
       
  1065     const TUid KUidClient2 = {0x12340002};
       
  1066     _LIT( KClient1Path1, "c:\\private\\10282BC4\\rules\\12340001\\script1.rul" );
       
  1067     _LIT( KClient1Path2, "c:\\private\\10282BC4\\rules\\12340001\\script2.rul" );
       
  1068     _LIT( KClient2Path1, "c:\\private\\10282BC4\\rules\\12340002\\script1.rul" );
       
  1069     _LIT( KClient2Path2, "c:\\private\\10282BC4\\rules\\12340002\\script2.rul" );
       
  1070 
       
  1071     TInt err = KErrNone;
       
  1072     TInt scriptId = 0;
       
  1073     TBool exists = EFalse;        
       
  1074     
       
  1075     // Define needed contexts for scripts
       
  1076     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1077     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
  1078         _L("Foreground.Application"), alwaysPass, alwaysPass );
       
  1079     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1080     err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
  1081         _L("Foreground.View"), alwaysPass, alwaysPass );
       
  1082     EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1083 
       
  1084     // Add and save scripts
       
  1085     const TInt KCount = 4;
       
  1086     for( TInt i = 0; i < KCount; i++ )
       
  1087         {
       
  1088         TPtrC fullPath( KNullDesC );
       
  1089         TUid uid = {0x00000000};
       
  1090         switch( i )
       
  1091             {
       
  1092             case 0:
       
  1093                 {
       
  1094                 fullPath.Set( KClient1Path1 );
       
  1095                 uid = KUidClient1;
       
  1096                 break;
       
  1097                 }
       
  1098             case 1:
       
  1099                 {
       
  1100                 fullPath.Set( KClient1Path2 );
       
  1101                 uid = KUidClient1;
       
  1102                 break;
       
  1103                 }
       
  1104             case 2:
       
  1105                 {
       
  1106                 fullPath.Set( KClient2Path1 );
       
  1107                 uid = KUidClient2;
       
  1108                 break;
       
  1109                 }
       
  1110             case 3:
       
  1111                 {
       
  1112                 fullPath.Set( KClient2Path2 );
       
  1113                 uid = KUidClient2;
       
  1114                 break;
       
  1115                 }
       
  1116             default:
       
  1117                 {
       
  1118                 break;
       
  1119                 }
       
  1120             }
       
  1121         TParsePtrC parse( fullPath );
       
  1122         scriptId = iCFFakeEnv->AddScript( parse.Name(), *script, uid,
       
  1123             client );
       
  1124         EUNIT_ASSERT_DESC( scriptId == i + 1, "Invalid script id" );
       
  1125         err = iCFFakeEnv->SaveScript( *script, scriptId, uid );
       
  1126         EUNIT_ASSERT_DESC( err == KErrNone, "SaveScript failed" );
       
  1127         }
       
  1128     
       
  1129     // Delete and check scripts
       
  1130     for( TInt i = 0; i < KCount; i++ )
       
  1131         {
       
  1132         switch( i )
       
  1133             {
       
  1134             case 0:
       
  1135                 {
       
  1136                 err = iCFFakeEnv->DeleteScriptByName( KClient1Path1, KUidClient1 );
       
  1137                 EUNIT_ASSERT_DESC( err == KErrNone, "Delete script failed" );
       
  1138                 exists = BaflUtils::FileExists( iFs, KClient1Path1 );
       
  1139                 EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1140                 
       
  1141                 err = iCFFakeEnv->RemoveScriptByName( KClient1Path1, KUidClient1 );
       
  1142                 EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by name failed" );
       
  1143                 break;
       
  1144                 }
       
  1145             case 1:
       
  1146                 {
       
  1147                 err = iCFFakeEnv->DeleteScriptByName( KClient1Path2, KUidClient1 );
       
  1148                 EUNIT_ASSERT_DESC( err == KErrNone, "Delete script failed" );
       
  1149                 exists = BaflUtils::FileExists( iFs, KClient1Path2 );
       
  1150                 EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1151                 
       
  1152                 err = iCFFakeEnv->RemoveScriptByName( KClient1Path2, KUidClient1 );
       
  1153                 EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by name failed" );
       
  1154                 
       
  1155                 // Check that folder is deleted
       
  1156                 TParsePtrC parse( KClient1Path1 );
       
  1157                 exists = BaflUtils::FolderExists( iFs, parse.DriveAndPath() );
       
  1158                 EUNIT_ASSERT_DESC( !exists, "Folder not deleted" );
       
  1159                 break;
       
  1160                 }
       
  1161             case 2:
       
  1162                 {
       
  1163                 err = iCFFakeEnv->RemoveScriptByName( KClient2Path1, KUidClient2 );
       
  1164                 EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by name failed" );
       
  1165 
       
  1166                 err = iCFFakeEnv->DeleteScriptByName( KClient2Path1, KUidClient2 );
       
  1167                 EUNIT_ASSERT_DESC( err == KErrDeregisterNotNeeded, "Delete script failed" );
       
  1168                 exists = BaflUtils::FileExists( iFs, KClient2Path1 );
       
  1169                 EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1170                 break;
       
  1171                 }
       
  1172             case 3:
       
  1173                 {
       
  1174                 err = iCFFakeEnv->RemoveScriptByName( KClient2Path2, KUidClient2 );
       
  1175                 EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by name failed" );
       
  1176 
       
  1177                 err = iCFFakeEnv->DeleteScriptByName( KClient2Path2, KUidClient2 );
       
  1178                 EUNIT_ASSERT_DESC( err == KErrDeregisterNotNeeded, "Delete script failed" );
       
  1179                 exists = BaflUtils::FileExists( iFs, KClient2Path2 );
       
  1180                 EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1181                 
       
  1182                 // Check that folder is deleted
       
  1183                 TParsePtrC parse( KClient2Path1 );
       
  1184                 exists = BaflUtils::FolderExists( iFs, parse.DriveAndPath() );
       
  1185                 EUNIT_ASSERT_DESC( !exists, "Folder not deleted" );
       
  1186                 break;
       
  1187                 }
       
  1188             default:
       
  1189                 {
       
  1190                 break;
       
  1191                 }
       
  1192             }
       
  1193         }
       
  1194     
       
  1195     // Try to delete a script which does not exist
       
  1196     err = iCFFakeEnv->DeleteScriptByName( _L( "notfound.rul" ), KUidClient1 );
       
  1197     EUNIT_ASSERT_DESC( err == KErrNotFound, "Delete script failed" );
       
  1198     
       
  1199     // x. Clean up
       
  1200     // -------------------------------------------------------------------------
       
  1201     CleanupStack::PopAndDestroy( &client );
       
  1202     CleanupStack::PopAndDestroy( script );
       
  1203     }
       
  1204 
       
  1205 
       
  1206 void MT_CFScriptEngine::MT_CCFScriptHandler_DeleteScriptByName2L()
       
  1207     {
       
  1208     // Preconditions
       
  1209     // -------------------------------------------------------------------------
       
  1210     HBufC8* script = LoadScriptFromFile( _L("test-countRepeatingWithValuePersistent.xml") );
       
  1211     EUNIT_ASSERT_DESC( script , "Scripts not loaded" );
       
  1212     User::LeaveIfNull( script );
       
  1213     CleanupStack::PushL( script );
       
  1214     RThread client;
       
  1215     CleanupClosePushL( client );    
       
  1216     CCFContextObject* co = CCFContextObject::NewLC();
       
  1217 
       
  1218     const TUid KClientUid = {0x12340001};
       
  1219     _LIT( KScript,
       
  1220         "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent.rul" );
       
  1221     _LIT( KScriptPresistencyFile,
       
  1222         "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent-testCountPersistency.dat" );
       
  1223 
       
  1224     // Define needed contexts
       
  1225     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1226     TInt err = iCFFakeEnv->DefineContext( _L("Test"), _L("Counting"), alwaysPass, alwaysPass );
       
  1227     EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1228     err = iCFFakeEnv->DefineContext( _L("Test"), _L("Control"), alwaysPass, alwaysPass );
       
  1229     EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1230 
       
  1231     // Add script and save it
       
  1232     // -------------------------------------------------------------------------
       
  1233     TInt scriptId = iCFFakeEnv->AddScript( KScript, *script, KClientUid, client );
       
  1234     EUNIT_ASSERT_DESC( scriptId > 0, "Add script failed" );
       
  1235     err = iCFFakeEnv->SaveScript( *script, scriptId, KClientUid );
       
  1236     EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
       
  1237 
       
  1238     // Publish context so that persistent data file is created
       
  1239     // -------------------------------------------------------------------------
       
  1240     co->SetSourceL( _L("Test") );
       
  1241     co->SetTypeL( _L("Counting") );
       
  1242     co->SetValueL( _L("A") );
       
  1243     err = iCFFakeEnv->PublishContext( *co, client );
       
  1244     EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1245     TBool exists = BaflUtils::FileExists( iFs, KScriptPresistencyFile );
       
  1246     EUNIT_ASSERT_DESC( exists, "Persistency file not created" );
       
  1247     
       
  1248     // Remove script by name and delete script by name
       
  1249     // -------------------------------------------------------------------------
       
  1250     err = iCFFakeEnv->RemoveScriptByName( KScript, KClientUid );
       
  1251     EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by name failed" );
       
  1252     err = iCFFakeEnv->DeleteScriptByName( KScript, KClientUid );
       
  1253     EUNIT_ASSERT_DESC( err == KErrDeregisterNotNeeded, "Delete script by name failed" );
       
  1254     
       
  1255     // Check that script file and persistency file are removed
       
  1256     exists = BaflUtils::FileExists( iFs, KScript );
       
  1257     EUNIT_ASSERT_DESC( !exists, "Script file not deleted" );
       
  1258     exists = BaflUtils::FileExists( iFs, KScriptPresistencyFile );
       
  1259     EUNIT_ASSERT_DESC( !exists, "Script persistency file not deleted" );
       
  1260     exists = BaflUtils::FolderExists( iFs, KScript );
       
  1261     EUNIT_ASSERT_DESC( !exists, "Client rule folder not removed" );
       
  1262 
       
  1263     // Clean up
       
  1264     // -------------------------------------------------------------------------
       
  1265     CleanupStack::PopAndDestroy( co );
       
  1266     CleanupStack::PopAndDestroy( &client );
       
  1267     CleanupStack::PopAndDestroy( script );
       
  1268     }
       
  1269 
       
  1270 
       
  1271 void MT_CFScriptEngine::MT_CCFScriptHandler_DeleteScriptByUidL()
       
  1272     {
       
  1273     // Load script
       
  1274     HBufC8* script = LoadScriptFromFile( _L( "test-and.xml" ) );
       
  1275     EUNIT_ASSERT_DESC( script , "Scripts not loaded" );
       
  1276     if( script )
       
  1277         {
       
  1278         CleanupStack::PushL( script );
       
  1279         RThread client;
       
  1280         CleanupClosePushL( client );
       
  1281         
       
  1282         // Test data
       
  1283         const TUid KUidClient1 = {0x12340001};
       
  1284         const TUid KUidClient2 = {0x12340002};
       
  1285         _LIT( KClient1Path1, "c:\\private\\10282BC4\\rules\\12340001\\script1.rul" );
       
  1286         _LIT( KClient1Path2, "c:\\private\\10282BC4\\rules\\12340001\\script2.rul" );
       
  1287         _LIT( KClient2Path1, "c:\\private\\10282BC4\\rules\\12340002\\script1.rul" );
       
  1288         _LIT( KClient2Path2, "c:\\private\\10282BC4\\rules\\12340002\\script2.rul" );
       
  1289 
       
  1290         TInt err = KErrNone;
       
  1291         TInt scriptId = 0;
       
  1292         TBool exists = EFalse;        
       
  1293         
       
  1294         // Define needed contexts for scripts
       
  1295         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1296         err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
  1297             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
  1298         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1299         err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
  1300             _L("Foreground.View"), alwaysPass, alwaysPass );
       
  1301         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1302 
       
  1303         // Add and save scripts
       
  1304         const TInt KCount = 4;
       
  1305         for( TInt i = 0; i < KCount; i++ )
       
  1306             {
       
  1307             TPtrC fullPath( KNullDesC );
       
  1308             TUid uid = {0x00000000};
       
  1309             switch( i )
       
  1310                 {
       
  1311                 case 0:
       
  1312                     {
       
  1313                     fullPath.Set( KClient1Path1 );
       
  1314                     uid = KUidClient1;
       
  1315                     break;
       
  1316                     }
       
  1317                 case 1:
       
  1318                     {
       
  1319                     fullPath.Set( KClient1Path2 );
       
  1320                     uid = KUidClient1;
       
  1321                     break;
       
  1322                     }
       
  1323                 case 2:
       
  1324                     {
       
  1325                     fullPath.Set( KClient2Path1 );
       
  1326                     uid = KUidClient2;
       
  1327                     break;
       
  1328                     }
       
  1329                 case 3:
       
  1330                     {
       
  1331                     fullPath.Set( KClient2Path2 );
       
  1332                     uid = KUidClient2;
       
  1333                     break;
       
  1334                     }
       
  1335                 default:
       
  1336                     {
       
  1337                     break;
       
  1338                     }
       
  1339                 }
       
  1340             TParsePtrC parse( fullPath );
       
  1341             scriptId = iCFFakeEnv->AddScript( parse.Name(), *script, uid,
       
  1342                 client );
       
  1343             EUNIT_ASSERT_DESC( scriptId == i + 1, "Invalid script id" );
       
  1344             err = iCFFakeEnv->SaveScript( *script, scriptId, uid );
       
  1345             EUNIT_ASSERT_DESC( err == KErrNone, "SaveScript failed" );
       
  1346             }
       
  1347         
       
  1348         // Delete and check scripts - test 1
       
  1349         err = iCFFakeEnv->DeleteScriptByUid( KUidClient1 );
       
  1350         EUNIT_ASSERT_DESC( err == KErrNone, "Delete script by uid failed" );
       
  1351         exists = BaflUtils::FileExists( iFs, KClient1Path1 );
       
  1352         EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1353         exists = BaflUtils::FileExists( iFs, KClient1Path2 );
       
  1354         EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1355         TParsePtrC parse1( KClient1Path1 );
       
  1356         exists = BaflUtils::FolderExists( iFs, parse1.DriveAndPath() );
       
  1357         EUNIT_ASSERT_DESC( !exists, "Folder not removed" );
       
  1358         
       
  1359         // Remove, delete and check scripts - test 2
       
  1360         err = iCFFakeEnv->RemoveScriptByUid( KUidClient2 );
       
  1361         EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by uid failed" );
       
  1362         err = iCFFakeEnv->DeleteScriptByUid( KUidClient2 );
       
  1363         EUNIT_ASSERT_DESC( err == KErrDeregisterNotNeeded, "Delete script by uid failed" );
       
  1364         exists = BaflUtils::FileExists( iFs, KClient2Path1 );
       
  1365         EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1366         exists = BaflUtils::FileExists( iFs, KClient2Path2 );
       
  1367         EUNIT_ASSERT_DESC( !exists, "Script not deleted" );
       
  1368         TParsePtrC parse2( KClient2Path1 );
       
  1369         exists = BaflUtils::FolderExists( iFs, parse2.DriveAndPath() );
       
  1370         EUNIT_ASSERT_DESC( !exists, "Folder not removed" );
       
  1371         
       
  1372         // Delete scripts form a client which does not own any scripts
       
  1373         err = iCFFakeEnv->DeleteScriptByUid( KUidClient2 );
       
  1374         EUNIT_ASSERT_DESC( err == KErrNotFound || err == KErrPathNotFound,
       
  1375             "Delete script by uid failed" );
       
  1376         
       
  1377         // Clean up
       
  1378         CleanupStack::PopAndDestroy( &client );
       
  1379         CleanupStack::PopAndDestroy( script );
       
  1380         }
       
  1381     }
       
  1382 
       
  1383 
       
  1384 void MT_CFScriptEngine::MT_CCFScriptHandler_AlreadyExistsL()
       
  1385     {
       
  1386     // Load script
       
  1387     HBufC8* script = LoadScriptFromFile( _L( "test-and.xml" ) );
       
  1388     EUNIT_ASSERT_DESC( script , "Scripts not loaded" );
       
  1389     if( script )
       
  1390         {
       
  1391         CleanupStack::PushL( script );
       
  1392         RThread client;
       
  1393         CleanupClosePushL( client );
       
  1394 
       
  1395         // Test data
       
  1396         const TUid KUidClient1 = {0x12340001};
       
  1397         const TUid KUidClient2 = {0x12340002};
       
  1398         _LIT( KClient1Path1, "c:\\private\\10282BC4\\rules\\12340001\\script1.rul" );
       
  1399         _LIT( KClient1Path2, "c:\\private\\10282BC4\\rules\\12340001\\script2.rul" );
       
  1400         _LIT( KClient2Path1, "c:\\private\\10282BC4\\rules\\12340002\\script1.rul" );
       
  1401         _LIT( KClient2Path2, "c:\\private\\10282BC4\\rules\\12340002\\script2.rul" );
       
  1402 
       
  1403         TInt err = KErrNone;
       
  1404         TInt scriptId = 0;
       
  1405         TBool exists = EFalse;        
       
  1406 
       
  1407         // Define needed contexts for scripts
       
  1408         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1409         err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
  1410             _L("Foreground.Application"), alwaysPass, alwaysPass );
       
  1411         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1412         err = iCFFakeEnv->DefineContext( _L("Application.State"),
       
  1413             _L("Foreground.View"), alwaysPass, alwaysPass );
       
  1414         EUNIT_ASSERT_DESC( err == KErrNone, "DefineContext failed!" );
       
  1415 
       
  1416         // Add and save scripts
       
  1417         const TInt KCount = 4;
       
  1418         for( TInt i = 0; i < KCount; i++ )
       
  1419             {
       
  1420             TPtrC fullPath( KNullDesC );
       
  1421             TUid uid = {0x00000000};
       
  1422             switch( i )
       
  1423                 {
       
  1424                 case 0:
       
  1425                     {
       
  1426                     fullPath.Set( KClient1Path1 );
       
  1427                     uid = KUidClient1;
       
  1428                     break;
       
  1429                     }
       
  1430                 case 1:
       
  1431                     {
       
  1432                     fullPath.Set( KClient1Path2 );
       
  1433                     uid = KUidClient1;
       
  1434                     break;
       
  1435                     }
       
  1436                 case 2:
       
  1437                     {
       
  1438                     fullPath.Set( KClient2Path1 );
       
  1439                     uid = KUidClient2;
       
  1440                     break;
       
  1441                     }
       
  1442                 case 3:
       
  1443                     {
       
  1444                     fullPath.Set( KClient2Path2 );
       
  1445                     uid = KUidClient2;
       
  1446                     break;
       
  1447                     }
       
  1448                 default:
       
  1449                     {
       
  1450                     break;
       
  1451                     }
       
  1452                 }
       
  1453             TParsePtrC parse( fullPath );
       
  1454             scriptId = iCFFakeEnv->AddScript( parse.Name(), *script, uid,
       
  1455                 client );
       
  1456             EUNIT_ASSERT_DESC( scriptId == i + 1, "Invalid script id" );
       
  1457             err = iCFFakeEnv->SaveScript( *script, scriptId, uid );
       
  1458             EUNIT_ASSERT_DESC( err == KErrNone, "SaveScript failed" );
       
  1459             exists = iCFFakeEnv->AlreadyExists( parse.Name(), uid, scriptId );
       
  1460             EUNIT_ASSERT_DESC( exists, "Already exists failed" );
       
  1461             }
       
  1462         
       
  1463         // Check script which has not been added
       
  1464         scriptId = KErrNotFound;
       
  1465         exists = iCFFakeEnv->AlreadyExists( _L( "notadded.rul" ), KUidClient1, scriptId );
       
  1466         EUNIT_ASSERT_DESC( !exists, "Already exists failed" );
       
  1467         EUNIT_ASSERT_DESC( scriptId == KErrNotFound, "Invalid script id" );
       
  1468 
       
  1469         // Clean up
       
  1470         CleanupStack::PopAndDestroy( &client );
       
  1471         CleanupStack::PopAndDestroy( script );
       
  1472         }
       
  1473     }
       
  1474 
       
  1475 
       
  1476 void MT_CFScriptEngine::MT_CCFScriptHandler_CleanupPersistentDataByNameL()
       
  1477     {
       
  1478     // Load script
       
  1479     HBufC8* script = LoadScriptFromFile( _L("test-countRepeatingWithValuePersistent.xml") );
       
  1480     EUNIT_ASSERT_DESC( script , "Scripts not loaded" );
       
  1481     if( script )
       
  1482         {
       
  1483         CleanupStack::PushL( script );
       
  1484         RThread client;
       
  1485         CleanupClosePushL( client );
       
  1486         
       
  1487         // Test data
       
  1488         const TUid KUidClient1 = {0x12340001};
       
  1489         const TUid KUidClient2 = {0x12340002};
       
  1490         _LIT( KClient1Path,
       
  1491             "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent.rul" );
       
  1492         _LIT( KClient2Path,
       
  1493             "c:\\private\\10282BC4\\rules\\12340002\\test-countRepeatingWithValuePersistent.rul" );
       
  1494         _LIT( KClient1PresistencyFile,
       
  1495             "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent-testCountPersistency.dat" );
       
  1496         _LIT( KClient2PresistencyFile,
       
  1497             "c:\\private\\10282BC4\\rules\\12340002\\test-countRepeatingWithValuePersistent-testCountPersistency.dat" );
       
  1498         
       
  1499         // Define needed contexts
       
  1500         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1501         TInt err = iCFFakeEnv->DefineContext( _L("Test"), _L("Counting"),
       
  1502             alwaysPass, alwaysPass );
       
  1503         EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1504         err = iCFFakeEnv->DefineContext( _L("Test"), _L("Control"),
       
  1505             alwaysPass, alwaysPass );
       
  1506         EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1507         
       
  1508         // Add scripts
       
  1509         const TInt KCount = 2;
       
  1510         for( TInt i = 0; i < KCount; i++ )
       
  1511             {
       
  1512             TPtrC fullPath( KNullDesC );
       
  1513             TUid uid = {0x0};
       
  1514             switch( i )
       
  1515                 {
       
  1516                 case 0:
       
  1517                     {
       
  1518                     fullPath.Set( KClient1Path );
       
  1519                     uid = KUidClient1;
       
  1520                     break;
       
  1521                     }
       
  1522                 case 1:
       
  1523                     {
       
  1524                     fullPath.Set( KClient2Path );
       
  1525                     uid = KUidClient2;
       
  1526                     break;
       
  1527                     }
       
  1528                 default:
       
  1529                     {
       
  1530                     break;
       
  1531                     }
       
  1532                 }
       
  1533             TParsePtrC parse( fullPath );
       
  1534             TInt scriptId = iCFFakeEnv->AddScript( parse.Name(), *script, uid,
       
  1535                 client );
       
  1536             EUNIT_ASSERT_DESC( err == KErrNone, "Add script failed" );
       
  1537             }
       
  1538         
       
  1539         // Publish new context for Test, Counting
       
  1540         CCFContextObject* context = CCFContextObject::NewLC(
       
  1541             _L("Test"), _L("Counting"), _L("A") );
       
  1542         err = iCFFakeEnv->PublishContext( *context, client );
       
  1543         EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1544         
       
  1545         // check that persistency files exists
       
  1546         TBool exists = BaflUtils::FileExists( iFs, KClient1PresistencyFile );
       
  1547         EUNIT_ASSERT_DESC( exists, "Persistency file not created" );
       
  1548         exists = BaflUtils::FileExists( iFs, KClient2PresistencyFile );
       
  1549         EUNIT_ASSERT_DESC( exists, "Persistency file not created" );
       
  1550         
       
  1551         // Cleanup persistent data
       
  1552         for( TInt i = 0; i < KCount; i++ )
       
  1553             {
       
  1554             TPtrC scriptFilePath( KNullDesC );
       
  1555             TPtrC presistencyFilePath( KNullDesC );
       
  1556             TUid uid = {0x0};
       
  1557             switch( i )
       
  1558                 {
       
  1559                 case 0:
       
  1560                     {
       
  1561                     scriptFilePath.Set( KClient1Path );
       
  1562                     presistencyFilePath.Set( KClient1PresistencyFile );
       
  1563                     uid = KUidClient1;
       
  1564                     break;
       
  1565                     }
       
  1566                 case 1:
       
  1567                     {
       
  1568                     scriptFilePath.Set( KClient2Path );
       
  1569                     presistencyFilePath.Set( KClient2PresistencyFile );
       
  1570                     uid = KUidClient2;
       
  1571                     break;
       
  1572                     }
       
  1573                 default:
       
  1574                     {
       
  1575                     break;
       
  1576                     }
       
  1577                 }
       
  1578             TParsePtrC parse( scriptFilePath );
       
  1579             iCFFakeEnv->CleanupPersistentDataByName( parse.Name(), uid );
       
  1580             exists = BaflUtils::FileExists( iFs, presistencyFilePath );
       
  1581             EUNIT_ASSERT_DESC( !exists, "Cleanup persistent data by name failed" );
       
  1582             }
       
  1583 
       
  1584         // Clean up
       
  1585         CleanupStack::PopAndDestroy( context );
       
  1586         CleanupStack::PopAndDestroy( &client );
       
  1587         CleanupStack::PopAndDestroy( script );
       
  1588         }
       
  1589     }
       
  1590 
       
  1591 
       
  1592 void MT_CFScriptEngine::MT_CCFScriptHandler_CleanupPersistentDataByUidL()
       
  1593     {
       
  1594     // Load script
       
  1595     HBufC8* script1 = LoadScriptFromFile( _L("test-countRepeatingWithValuePersistent.xml") );
       
  1596     EUNIT_ASSERT_DESC( script1 , "Script1 not loaded" );
       
  1597     CleanupStack::PushL( script1 );
       
  1598     
       
  1599     HBufC8* script2 = LoadScriptFromFile( _L("test-countRepeatingWithValuePersistent2.xml") );
       
  1600     EUNIT_ASSERT_DESC( script2 , "Script2 not loaded" );
       
  1601     CleanupStack::PushL( script2 );
       
  1602 
       
  1603     RThread client;
       
  1604     CleanupClosePushL( client );
       
  1605     
       
  1606     // Test data
       
  1607     const TUid KUidClient1 = {0x12340001};
       
  1608     const TUid KUidClient2 = {0x12340002};
       
  1609     _LIT( KClient1Path,
       
  1610         "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent.rul" );
       
  1611     _LIT( KClient1Path2,
       
  1612         "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent2.rul" );
       
  1613     _LIT( KClient1PresistencyFile,
       
  1614         "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent-testCountPersistency.dat" );
       
  1615     _LIT( KClient1PresistencyFile2,
       
  1616         "c:\\private\\10282BC4\\rules\\12340001\\test-countRepeatingWithValuePersistent2-testCountPersistency2.dat" );
       
  1617     _LIT( KClient2Path,
       
  1618         "c:\\private\\10282BC4\\rules\\12340002\\test-countRepeatingWithValuePersistent.rul" );
       
  1619     _LIT( KClient2PresistencyFile,
       
  1620         "c:\\private\\10282BC4\\rules\\12340002\\test-countRepeatingWithValuePersistent-testCountPersistency.dat" );
       
  1621     
       
  1622     // Define needed contexts
       
  1623     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1624     TInt err = iCFFakeEnv->DefineContext( _L("Test"), _L("Counting"),
       
  1625         alwaysPass, alwaysPass );
       
  1626     EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1627     err = iCFFakeEnv->DefineContext( _L("Test"), _L("Control"),
       
  1628         alwaysPass, alwaysPass );
       
  1629     EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1630     
       
  1631     // Add scripts
       
  1632     const TInt KCount = 3;
       
  1633     for( TInt i = 0; i < KCount; i++ )
       
  1634         {
       
  1635         TPtrC fullPath( KNullDesC );
       
  1636         TUid uid = {0x0};
       
  1637         TPtrC8 script( KNullDesC8 );
       
  1638         switch( i )
       
  1639             {
       
  1640             case 0:
       
  1641                 {
       
  1642                 fullPath.Set( KClient1Path );
       
  1643                 uid = KUidClient1;
       
  1644                 script.Set( *script1 );
       
  1645                 break;
       
  1646                 }
       
  1647             case 1:
       
  1648                 {
       
  1649                 fullPath.Set( KClient1Path2 );
       
  1650                 uid = KUidClient1;
       
  1651                 script.Set( *script2 );
       
  1652                 break;
       
  1653                 }
       
  1654             case 2:
       
  1655                 {
       
  1656                 fullPath.Set( KClient2Path );
       
  1657                 uid = KUidClient2;
       
  1658                 script.Set( *script1 );
       
  1659                 break;
       
  1660                 }
       
  1661             default:
       
  1662                 {
       
  1663                 break;
       
  1664                 }
       
  1665             }
       
  1666         TParsePtrC parse( fullPath );
       
  1667         TInt scriptId = iCFFakeEnv->AddScript( parse.Name(), script, uid,
       
  1668             client );
       
  1669         EUNIT_ASSERT_DESC( err == KErrNone, "Add script failed" );
       
  1670         }
       
  1671     
       
  1672     // Publish new context for Test, Counting
       
  1673     CCFContextObject* context = CCFContextObject::NewLC(
       
  1674         _L("Test"), _L("Counting"), _L("A") );
       
  1675     err = iCFFakeEnv->PublishContext( *context, client );
       
  1676     EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1677     
       
  1678     // check that persistency files exists
       
  1679     TBool exists = BaflUtils::FileExists( iFs, KClient1PresistencyFile );
       
  1680     EUNIT_ASSERT_DESC( exists, "Persistency file not created" );
       
  1681     exists = BaflUtils::FileExists( iFs, KClient1PresistencyFile2 );
       
  1682     EUNIT_ASSERT_DESC( exists, "Persistency file not created" );
       
  1683     exists = BaflUtils::FileExists( iFs, KClient2PresistencyFile );
       
  1684     EUNIT_ASSERT_DESC( exists, "Persistency file not created" );
       
  1685     
       
  1686     // Cleanup persistent data
       
  1687     iCFFakeEnv->CleanupPersistentDataByUid( KUidClient1 );
       
  1688     exists = BaflUtils::FileExists( iFs, KClient1PresistencyFile );
       
  1689     EUNIT_ASSERT_DESC( !exists, "Persistency file not created" );
       
  1690     exists = BaflUtils::FileExists( iFs, KClient1PresistencyFile2 );
       
  1691     EUNIT_ASSERT_DESC( !exists, "Persistency file not created" );
       
  1692 
       
  1693     iCFFakeEnv->CleanupPersistentDataByUid( KUidClient2 );
       
  1694     exists = BaflUtils::FileExists( iFs, KClient2PresistencyFile );
       
  1695     EUNIT_ASSERT_DESC( !exists, "Persistency file not created" );
       
  1696 
       
  1697     // Clean up
       
  1698     CleanupStack::PopAndDestroy( context );
       
  1699     CleanupStack::PopAndDestroy( &client );
       
  1700     CleanupStack::PopAndDestroy( script2 );
       
  1701     CleanupStack::PopAndDestroy( script1 );
       
  1702     }
       
  1703 
       
  1704 
       
  1705 void MT_CFScriptEngine::MT_CCFScriptHandler_RestoreRomScriptL()
       
  1706     {
       
  1707     // Load script
       
  1708     HBufC8* script = LoadScriptFromFile( _L("test-scriptUpgradeRom.xml") );
       
  1709     EUNIT_ASSERT_DESC( script , "Scripts not loaded" );
       
  1710     if( script )
       
  1711         {
       
  1712         CleanupStack::PushL( script );
       
  1713         RThread client;
       
  1714         CleanupClosePushL( client );
       
  1715         CCFContextObject* context = CCFContextObject::NewLC(
       
  1716             _L("test"), _L("upgrade"), _L("false") );
       
  1717         
       
  1718         // Define needed contexts
       
  1719         static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1720         TInt err = iCFFakeEnv->DefineContext( context->Source(), context->Type(),
       
  1721             alwaysPass, alwaysPass );
       
  1722         EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1723 
       
  1724         // Initialize script engine and test that rom script is used
       
  1725         iCFFakeEnv->InitAllPhasesL();
       
  1726         context->SetValueL( _L("false") );
       
  1727         err = iCFFakeEnv->PublishContext( *context, client );
       
  1728         EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1729         TBool eventFired = iCFFakeEnv->ClientEventFired();
       
  1730         EUNIT_ASSERT_DESC( eventFired, "Action not fired" );
       
  1731         TPtrC actionId = iCFFakeEnv->ScriptEventIdentifier();
       
  1732         EUNIT_ASSERT_DESC( actionId == _L("romUpgrade"), "Invalid action id" );
       
  1733         const RKeyValueArray& params = iCFFakeEnv->ScriptEventParameters();
       
  1734         EUNIT_ASSERT_DESC( params[0]->Key() == _L("id"), "Invalid action attribute" );
       
  1735         EUNIT_ASSERT_DESC( params[0]->Value() == _L("false"), "Invalid action attribute value" );
       
  1736         
       
  1737         // Upgrade rom script and test upgrade is used
       
  1738         TInt scriptId = 0;
       
  1739         TBool exists = iCFFakeEnv->AlreadyExists( _L("test-scriptUpgradeRom"),
       
  1740             KCFServerUid, scriptId );
       
  1741         EUNIT_ASSERT_DESC( exists, "Already exists failed" );
       
  1742         EUNIT_ASSERT_DESC( scriptId > 0, "Invalid script id" );
       
  1743         err = iCFFakeEnv->UpdateScript( scriptId, client, *script, NULL );
       
  1744         EUNIT_ASSERT_DESC( err == KErrNone, "Update script failed" );
       
  1745         err = iCFFakeEnv->SaveScript( *script, scriptId, KCFServerUid );
       
  1746         EUNIT_ASSERT_DESC( err == KErrNone, "Save script failed" );
       
  1747         
       
  1748         context->SetValueL( _L("true") );
       
  1749         err = iCFFakeEnv->PublishContext( *context, client );
       
  1750         EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1751         eventFired = iCFFakeEnv->ClientEventFired();
       
  1752         EUNIT_ASSERT_DESC( eventFired, "Action not fired" );
       
  1753         actionId.Set( iCFFakeEnv->ScriptEventIdentifier() );
       
  1754         EUNIT_ASSERT_DESC( actionId == _L("romUpgrade"), "Invalid action id" );
       
  1755         const RKeyValueArray& params1 = iCFFakeEnv->ScriptEventParameters();
       
  1756         EUNIT_ASSERT_DESC( params1[0]->Key() == _L("id"), "Invalid action attribute" );
       
  1757         EUNIT_ASSERT_DESC( params1[0]->Value() == _L("true"), "Invalid action attribute value" );
       
  1758         
       
  1759         // Delete script engine and initialize it again
       
  1760         // Check that rom upgrade is used instead of original rom script
       
  1761         delete iCFFakeEnv;
       
  1762         iCFFakeEnv = NULL;
       
  1763         iCFFakeEnv = CCFFakeEnv::NewL();
       
  1764         iCFFakeEnv->InitAllPhasesL();
       
  1765 
       
  1766         err = iCFFakeEnv->DefineContext( context->Source(), context->Type(),
       
  1767             alwaysPass, alwaysPass );
       
  1768         EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1769 
       
  1770         context->SetValueL( _L("true") );
       
  1771         err = iCFFakeEnv->PublishContext( *context, client );
       
  1772         EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1773         eventFired = iCFFakeEnv->ClientEventFired();
       
  1774         EUNIT_ASSERT_DESC( eventFired, "Action not fired" );
       
  1775         actionId.Set( iCFFakeEnv->ScriptEventIdentifier() );
       
  1776         EUNIT_ASSERT_DESC( actionId == _L("romUpgrade"), "Invalid action id" );
       
  1777         const RKeyValueArray& params2 = iCFFakeEnv->ScriptEventParameters();
       
  1778         EUNIT_ASSERT_DESC( params2[0]->Key() == _L("id"), "Invalid action attribute" );
       
  1779         EUNIT_ASSERT_DESC( params2[0]->Value() == _L("true"), "Invalid action attribute value" );
       
  1780         
       
  1781         // Restore rom script and check that rom script is used again
       
  1782         exists = iCFFakeEnv->AlreadyExists( _L("test-scriptUpgradeRom"),
       
  1783             KCFServerUid, scriptId );
       
  1784         EUNIT_ASSERT_DESC( exists, "Already exists failed" );
       
  1785         EUNIT_ASSERT_DESC( scriptId > 0, "Invalid script id" );
       
  1786         err = iCFFakeEnv->RestoreRomScript( scriptId, KCFServerUid, client );
       
  1787         EUNIT_ASSERT_DESC( err == KErrNone, "Restore script failed" );
       
  1788         
       
  1789         context->SetValueL( _L("false") );
       
  1790         err = iCFFakeEnv->PublishContext( *context, client );
       
  1791         EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1792         eventFired = iCFFakeEnv->ClientEventFired();
       
  1793         EUNIT_ASSERT_DESC( eventFired, "Action not fired" );
       
  1794         actionId.Set( iCFFakeEnv->ScriptEventIdentifier() );
       
  1795         EUNIT_ASSERT_DESC( actionId == _L("romUpgrade"), "Invalid action id" );
       
  1796         const RKeyValueArray& params3 = iCFFakeEnv->ScriptEventParameters();
       
  1797         EUNIT_ASSERT_DESC( params3[0]->Key() == _L("id"), "Invalid action attribute" );
       
  1798         EUNIT_ASSERT_DESC( params3[0]->Value() == _L("false"), "Invalid action attribute value" );
       
  1799 
       
  1800         // Clean up
       
  1801         CleanupStack::PopAndDestroy( context );
       
  1802         CleanupStack::PopAndDestroy( &client );
       
  1803         CleanupStack::PopAndDestroy( script );
       
  1804         }
       
  1805     }
       
  1806 
       
  1807 
       
  1808 void MT_CFScriptEngine::MT_CCFScriptHandler_InitAllPhasesL()
       
  1809     {
       
  1810     // Just check that script loading don't leak memory
       
  1811     iCFFakeEnv->InitAllPhasesL();
       
  1812     }
       
  1813 
       
  1814 
       
  1815 void MT_CFScriptEngine::MT_CCFScriptHandler_IsUpgradeAllowedL()
       
  1816     {
       
  1817     HBufC8* script = LoadScriptFromFile(
       
  1818         _L("test-scriptUpgradeRom.xml") );
       
  1819     EUNIT_ASSERT_DESC( script, "Failed to load script" );
       
  1820     CleanupStack::PushL( script );
       
  1821     
       
  1822     HBufC8* scriptMissingCaps = LoadScriptFromFile(
       
  1823         _L("test-scriptUpgradeRomCapabilitiesMissing.xml") );
       
  1824     EUNIT_ASSERT_DESC( scriptMissingCaps, "Failed to load script" );
       
  1825     CleanupStack::PushL( scriptMissingCaps );
       
  1826     
       
  1827     HBufC8* scriptNoCapsSet = LoadScriptFromFile(
       
  1828         _L("test-scriptUpgradeRomNoUpgradeSecurity.xml") );
       
  1829     EUNIT_ASSERT_DESC( scriptNoCapsSet, "Failed to load script" );
       
  1830     CleanupStack::PushL( scriptNoCapsSet );
       
  1831     
       
  1832     HBufC8* scriptClientMissingCaps = LoadScriptFromFile(
       
  1833         _L("test-scriptUpgradeRomClientMissingCapability.xml") );
       
  1834     EUNIT_ASSERT_DESC( scriptClientMissingCaps, "Failed to load script" );
       
  1835     CleanupStack::PushL( scriptClientMissingCaps );
       
  1836     
       
  1837     RThread client;
       
  1838     CleanupClosePushL( client );
       
  1839     
       
  1840     // Preconditions
       
  1841     // -------------------------------------------------------------------------
       
  1842     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1843     CCFContextObject* co = CCFContextObject::NewLC();
       
  1844     co->SetSourceL( _L("test") );
       
  1845     co->SetTypeL( _L("upgrade") );
       
  1846     TInt err = iCFFakeEnv->DefineContext( co->Source(), co->Type(),
       
  1847         alwaysPass, alwaysPass );
       
  1848     EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1849     
       
  1850     // Load all scripts found
       
  1851     iCFFakeEnv->InitAllPhasesL();
       
  1852     
       
  1853     // x. Check that upgrade is allowed with correct script
       
  1854     // -------------------------------------------------------------------------
       
  1855     err = iCFFakeEnv->IsUpgradeAllowed( _L("test-scriptUpgradeRom"),
       
  1856         *script, KCFServerUid, client, *iCFFakeEnv );
       
  1857     EUNIT_ASSERT_DESC( err == KErrNone, "Is upgrade allowed failed" );
       
  1858     
       
  1859     // x. Check that upgrade is not allowed -
       
  1860     //    Cabability missing from upgrade script
       
  1861     // -------------------------------------------------------------------------
       
  1862     err = iCFFakeEnv->IsUpgradeAllowed( _L("test-scriptUpgradeRom"),
       
  1863         *scriptMissingCaps, KCFServerUid, client, *iCFFakeEnv );
       
  1864     EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Is upgrade allowed failed" );
       
  1865 
       
  1866     // x. Check that upgrade is not allowed -
       
  1867     //    Capabilities not set in the script (using default AllFiles)
       
  1868     // -------------------------------------------------------------------------
       
  1869     err = iCFFakeEnv->IsUpgradeAllowed( _L("test-scriptUpgradeRom"),
       
  1870         *scriptNoCapsSet, KCFServerUid, client, *iCFFakeEnv );
       
  1871     EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Is upgrade allowed failed" );
       
  1872 
       
  1873     // x. Check that upgrade is not allowed -
       
  1874     //    Client does not have the required capability set
       
  1875     // -------------------------------------------------------------------------
       
  1876     err = iCFFakeEnv->IsUpgradeAllowed( _L("test-scriptUpgradeRomClientMissingCapability"),
       
  1877         *scriptNoCapsSet, KCFServerUid, client, *iCFFakeEnv );
       
  1878     EUNIT_ASSERT_DESC( err == KErrAccessDenied, "Is upgrade allowed failed" );
       
  1879 
       
  1880     // Cleanup
       
  1881     CleanupStack::PopAndDestroy( co );
       
  1882     CleanupStack::PopAndDestroy( &client );
       
  1883     CleanupStack::PopAndDestroy( scriptClientMissingCaps );
       
  1884     CleanupStack::PopAndDestroy( scriptNoCapsSet );
       
  1885     CleanupStack::PopAndDestroy( scriptMissingCaps );
       
  1886     CleanupStack::PopAndDestroy( script );
       
  1887     }
       
  1888 
       
  1889 
       
  1890 void MT_CFScriptEngine::MT_CCFScriptHandler_RemoveScriptByProviderUidL()
       
  1891     {
       
  1892     // x. Remove all scripts which have dependency to basic operations plugin
       
  1893     //--------------------------------------------------------------------------
       
  1894     iCFFakeEnv->InitAllPhasesL();
       
  1895     
       
  1896     // Get script count
       
  1897     TInt count = iCFFakeEnv->NumberOfScripts();
       
  1898     EUNIT_PRINT( _L("NumberOfScripts: count = %d"), count );
       
  1899     
       
  1900     // Get script ids
       
  1901     const RArray<TInt>& tempScriptIds = iCFFakeEnv->GetEveryScriptId();
       
  1902     RArray<TInt> scriptIds;
       
  1903     CleanupClosePushL( scriptIds );
       
  1904     for( TInt i = 0; i < tempScriptIds.Count(); i++ )
       
  1905         {
       
  1906         scriptIds.AppendL( tempScriptIds[i] );
       
  1907         }
       
  1908     
       
  1909     // Remove scripts byt provider uid KBasicOperationsPluginImplementationUid
       
  1910     TInt err = iCFFakeEnv->RemoveScriptByProviderUid(
       
  1911         TUid::Uid( KBasicOperationsPluginImplementationUid ), ETrue );
       
  1912     EUNIT_PRINT( _L("RemoveScriptByProviderUid: err = %d"), err );
       
  1913     EUNIT_ASSERT_DESC( err == KErrNone, "Remove script by provider uid failed" );
       
  1914 
       
  1915     // x. Rollback all scripts and check
       
  1916     //--------------------------------------------------------------------------
       
  1917     iCFFakeEnv->RollbackScripts();
       
  1918     TInt newCount = iCFFakeEnv->NumberOfScripts();
       
  1919     EUNIT_PRINT( _L("NumberOfScripts: newCount = %d"), newCount );
       
  1920     EUNIT_ASSERT_DESC( count == newCount, "Rollback scripts failed" );
       
  1921     
       
  1922     // Get script ids again, should match
       
  1923     const RArray<TInt>& tempNewScriptIds = iCFFakeEnv->GetEveryScriptId();
       
  1924     RArray<TInt> newScriptIds;
       
  1925     CleanupClosePushL( newScriptIds );
       
  1926     for( TInt i = 0; i < tempNewScriptIds.Count(); i++ )
       
  1927         {
       
  1928         newScriptIds.AppendL( tempScriptIds[i] );
       
  1929         }
       
  1930     EUNIT_ASSERT_DESC( scriptIds.Count() == newScriptIds.Count(), "Incorrect script ids count" );
       
  1931     for( TInt i = 0; i < scriptIds.Count(); i++ )
       
  1932         {
       
  1933         TInt id = KErrNotFound;
       
  1934         for( TInt y = 0; y < newScriptIds.Count(); y++ )
       
  1935             {
       
  1936             id = newScriptIds[y];
       
  1937             if( id == scriptIds[i] )
       
  1938                 {
       
  1939                 id = KErrNone;
       
  1940                 break;
       
  1941                 }
       
  1942             }
       
  1943         EUNIT_ASSERT_DESC( id == KErrNone, "Script ids does not match" );
       
  1944         }
       
  1945 
       
  1946     // x. Check from a rom script test-rollbackRom.xml that actions are fired
       
  1947     //--------------------------------------------------------------------------
       
  1948     static _LIT_SECURITY_POLICY_PASS( alwaysPass );
       
  1949     CCFContextObject* co = CCFContextObject::NewLC();
       
  1950     RThread client;
       
  1951     CleanupClosePushL( client );
       
  1952     
       
  1953     // Define context
       
  1954     co->SetSourceL( _L("rollback") );
       
  1955     co->SetTypeL( _L("rollback.status") );
       
  1956     err = iCFFakeEnv->DefineContext( co->Source(), co->Type(), alwaysPass, alwaysPass );
       
  1957     EUNIT_ASSERT_DESC( err == KErrNone, "Define context failed" );
       
  1958     
       
  1959     // Publish context
       
  1960     iCFFakeEnv->ClearFireClientEvent();
       
  1961     iCFFakeEnv->ClearFireClientEventCount();
       
  1962     co->SetValueL( _L("ok") );
       
  1963     err = iCFFakeEnv->PublishContext( *co, client );
       
  1964     
       
  1965     // Clean up
       
  1966     CleanupStack::PopAndDestroy( &client );
       
  1967     CleanupStack::PopAndDestroy( co );
       
  1968     EUNIT_ASSERT_DESC( err == KErrNone, "Publish context failed" );
       
  1969     
       
  1970     // Check that action is fired
       
  1971     TBool eventFired = iCFFakeEnv->ClientEventFired();
       
  1972     EUNIT_ASSERT_DESC( eventFired, "Action not fired" );
       
  1973     
       
  1974     TPtrC actionId( KNullDesC );
       
  1975     actionId.Set( iCFFakeEnv->ScriptEventIdentifier() );
       
  1976     EUNIT_ASSERT_DESC( actionId == _L("rollback"), "Invalid action id" );
       
  1977 
       
  1978     const RKeyValueArray& params = iCFFakeEnv->ScriptEventParameters();
       
  1979     EUNIT_ASSERT_DESC( params[0]->Key() == _L("status"), "Invalid action attribute" );
       
  1980     EUNIT_ASSERT_DESC( params[0]->Value() == _L("ok"), "Invalid action attribute value" );
       
  1981 
       
  1982     // x. clean up
       
  1983     //--------------------------------------------------------------------------
       
  1984     CleanupStack::PopAndDestroy( &newScriptIds );
       
  1985     CleanupStack::PopAndDestroy( &scriptIds );
       
  1986     }
       
  1987 
       
  1988 
       
  1989 //  TEST TABLE
       
  1990 
       
  1991 EUNIT_BEGIN_TEST_TABLE(
       
  1992     MT_CFScriptEngine,
       
  1993     "CFScriptEngine module test.",
       
  1994     "MODULE" )
       
  1995 
       
  1996 EUNIT_TEST(
       
  1997     "NewL - test ",
       
  1998     "CCFScriptHandler",
       
  1999     "NewL",
       
  2000     "FUNCTIONALITY",
       
  2001     SetupEmptyL, MT_CCFScriptHandler_NewLL, TeardownNoFinalClose)
       
  2002 
       
  2003 EUNIT_TEST(
       
  2004     "NewLC - test ",
       
  2005     "CCFScriptHandler",
       
  2006     "NewLC",
       
  2007     "FUNCTIONALITY",
       
  2008     SetupEmptyL, MT_CCFScriptHandler_NewLCL, Teardown)
       
  2009 
       
  2010 EUNIT_TEST(
       
  2011     "RemoveScriptById - test ",
       
  2012     "MCFScriptEngineInterface",
       
  2013     "Parameters",
       
  2014     "FUNCTIONALITY",
       
  2015     SetupL, MT_CCFScriptHandler_RemoveScriptByIdL, Teardown)
       
  2016 
       
  2017 EUNIT_TEST(
       
  2018     "RemoveScriptsBySession - test ",
       
  2019     "MCFScriptEngineInterface",
       
  2020     "Parameters",
       
  2021     "FUNCTIONALITY",
       
  2022     SetupL, MT_CCFScriptHandler_RemoveScriptsBySessionL, Teardown)
       
  2023 
       
  2024 EUNIT_TEST(
       
  2025     "RemoveScriptByName - test ",
       
  2026     "MCFScriptEngineInterface",
       
  2027     "Parameters",
       
  2028     "FUNCTIONALITY",
       
  2029     SetupL, MT_CCFScriptHandler_RemoveScriptByNameL, Teardown)
       
  2030 
       
  2031 EUNIT_TEST(
       
  2032     "RemoveScriptByUid - test ",
       
  2033     "MCFScriptEngineInterface",
       
  2034     "Parameters",
       
  2035     "FUNCTIONALITY",
       
  2036     SetupL, MT_CCFScriptHandler_RemoveScriptByUidL, Teardown)
       
  2037 
       
  2038 EUNIT_TEST(
       
  2039     "NumberOfScripts - test ",
       
  2040     "MCFScriptEngineInterface",
       
  2041     "Parameters",
       
  2042     "FUNCTIONALITY",
       
  2043     SetupL, MT_CCFScriptHandler_NumberOfScriptsL, Teardown)
       
  2044 
       
  2045 EUNIT_TEST(
       
  2046     "ScriptLength - test ",
       
  2047     "MCFScriptEngineInterface",
       
  2048     "Parameters",
       
  2049     "FUNCTIONALITY",
       
  2050     SetupL, MT_CCFScriptHandler_ScriptLengthL, Teardown)
       
  2051 
       
  2052 EUNIT_TEST(
       
  2053     "NumberOfScriptsByOwner - test ",
       
  2054     "MCFScriptEngineInterface",
       
  2055     "Parameters",
       
  2056     "FUNCTIONALITY",
       
  2057     SetupL, MT_CCFScriptHandler_NumberOfScriptsByOwnerL, Teardown)
       
  2058 
       
  2059 EUNIT_TEST(
       
  2060     "GetEveryScriptIdL - test ",
       
  2061     "MCFScriptEngineInterface",
       
  2062     "Parameters",
       
  2063     "FUNCTIONALITY",
       
  2064     SetupL, MT_CCFScriptHandler_GetEveryScriptIdL, Teardown)
       
  2065 
       
  2066 EUNIT_TEST(
       
  2067     "GetEveryScriptIdByOwnerL - test ",
       
  2068     "MCFScriptEngineInterface",
       
  2069     "Parameters",
       
  2070     "FUNCTIONALITY",
       
  2071     SetupL, MT_CCFScriptHandler_GetEveryScriptIdByOwnerL, Teardown)
       
  2072 
       
  2073 EUNIT_TEST(
       
  2074     "UpdateScriptL - test ",
       
  2075     "MCFScriptEngineInterface",
       
  2076     "Parameters",
       
  2077     "FUNCTIONALITY",
       
  2078     SetupL, MT_CCFScriptHandler_UpdateScriptL, Teardown)
       
  2079 
       
  2080 EUNIT_TEST(
       
  2081     "SaveScript - test ",
       
  2082     "MCFScriptEngineInterface",
       
  2083     "Parameters",
       
  2084     "FUNCTIONALITY",
       
  2085     SetupL, MT_CCFScriptHandler_SaveScriptL, Teardown)
       
  2086 
       
  2087 EUNIT_TEST(
       
  2088     "DeleteScriptByName - test ",
       
  2089     "MCFScriptEngineInterface",
       
  2090     "Parameters",
       
  2091     "FUNCTIONALITY",
       
  2092     SetupL, MT_CCFScriptHandler_DeleteScriptByNameL, Teardown)
       
  2093 
       
  2094 EUNIT_TEST(
       
  2095     "DeleteScriptByName 2 - test",
       
  2096     "MCFScriptEngineInterface",
       
  2097     "Parameters",
       
  2098     "FUNCTIONALITY",
       
  2099     SetupL, MT_CCFScriptHandler_DeleteScriptByName2L, Teardown)
       
  2100 
       
  2101 EUNIT_TEST(
       
  2102     "DeleteScriptByUid - test ",
       
  2103     "MCFScriptEngineInterface",
       
  2104     "Parameters",
       
  2105     "FUNCTIONALITY",
       
  2106     SetupL, MT_CCFScriptHandler_DeleteScriptByUidL, Teardown)
       
  2107 
       
  2108 EUNIT_TEST(
       
  2109     "AlreadyExists - test ",
       
  2110     "MCFScriptEngineInterface",
       
  2111     "Parameters",
       
  2112     "FUNCTIONALITY",
       
  2113     SetupL, MT_CCFScriptHandler_AlreadyExistsL, Teardown)
       
  2114 
       
  2115 EUNIT_TEST(
       
  2116     "CleanupPersistentDataByName - test ",
       
  2117     "MCFScriptEngineInterface",
       
  2118     "Parameters",
       
  2119     "FUNCTIONALITY",
       
  2120     SetupL, MT_CCFScriptHandler_CleanupPersistentDataByNameL, Teardown)
       
  2121 
       
  2122 EUNIT_TEST(
       
  2123     "CleanupPersistentDataByUid - test ",
       
  2124     "MCFScriptEngineInterface",
       
  2125     "Parameters",
       
  2126     "FUNCTIONALITY",
       
  2127     SetupL, MT_CCFScriptHandler_CleanupPersistentDataByUidL, Teardown)
       
  2128 
       
  2129 EUNIT_TEST(
       
  2130     "RestoreRomScript - test ",
       
  2131     "MCFScriptEngineInterface",
       
  2132     "Parameters",
       
  2133     "FUNCTIONALITY",
       
  2134     SetupL, MT_CCFScriptHandler_RestoreRomScriptL, Teardown)
       
  2135 
       
  2136 EUNIT_TEST(
       
  2137     "Init all phases - test ",
       
  2138     "MCFScriptEngineInterface",
       
  2139     "Parameters",
       
  2140     "FUNCTIONALITY",
       
  2141     SetupL, MT_CCFScriptHandler_InitAllPhasesL, Teardown)
       
  2142 
       
  2143 EUNIT_TEST(
       
  2144     "IsUpgradeAllowed - test ",
       
  2145     "MCFScriptEngineInterface",
       
  2146     "IsUpgradeAllowed",
       
  2147     "FUNCTIONALITY",
       
  2148     SetupL, MT_CCFScriptHandler_IsUpgradeAllowedL, Teardown)
       
  2149 
       
  2150 EUNIT_TEST(
       
  2151     "RemoveScriptByProviderUid - test ",
       
  2152     "MCFScriptEngineInterface",
       
  2153     "RemoveScriptByProviderUid",
       
  2154     "FUNCTIONALITY",
       
  2155     SetupL, MT_CCFScriptHandler_RemoveScriptByProviderUidL, Teardown)
       
  2156 
       
  2157 EUNIT_END_TEST_TABLE
       
  2158 
       
  2159 //  END OF FILE