ximpfw/tsrc/src/t_presencecache/T_PresenceCache.cpp
changeset 0 e6b17d312c8b
equal deleted inserted replaced
-1:000000000000 0:e6b17d312c8b
       
     1 /*
       
     2 * Copyright (c) 2006 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: XIMP Framework Test Code 
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 //  CLASS HEADER
       
    20 #include "T_PresenceCache.h"
       
    21 
       
    22 //  EXTERNAL INCLUDES
       
    23 #include <EUnitMacros.h>
       
    24 #include <EUnitDecorators.h>
       
    25 
       
    26 
       
    27 #include <presenceinfoimp.h>
       
    28 #include <presenceinfo.h>
       
    29 #include <personpresenceinfoimp.h>
       
    30 #include <presenceinfofieldimp.h>
       
    31 #include <presenceinfofield.h>
       
    32 #include <presenceinfofieldcollectionimp.h>
       
    33 #include <presenceinfofieldcollection.h>
       
    34 #include <ximpbase.h>
       
    35 #include <presenceinfofieldvaluetext.h>
       
    36 #include <presenceinfofieldvaluetextimp.h>
       
    37 #include <presencebuddyinfo.h>
       
    38 #include <presencebuddyinfolist.h>
       
    39 #include <presencecacheclient.h>
       
    40 #include <ximpidentityimp.h>
       
    41 #include <ximpidentity.h>
       
    42 #include <presenceinfofieldvaluebinary.h>
       
    43 #include <presenceinfofieldvaluebinaryimp.h>
       
    44 
       
    45 #include <presencefeeder.h>
       
    46 
       
    47 
       
    48 // Implementation files used for testing only
       
    49 #include "presencebuddyinfoimp.h"
       
    50 #include "presenceinfoimp.h"
       
    51 #include "presencebuddyinfolistimp.h"
       
    52 
       
    53 
       
    54 // CONSTANTS
       
    55 _LIT8( KIdentityField, "Identity" );
       
    56 
       
    57 _LIT( KBuddyId1sip, "sip:BuddyId1@xyz.com" );
       
    58 _LIT( KBuddyId2sip, "sip:BuddyId2@xyz.com" );
       
    59 _LIT( KBuddyId3sip, "sip:BuddyId3@xyz.com" );
       
    60 _LIT( KBuddyId1ECE, "ECE:BuddyId1@xyz.com" );
       
    61 _LIT( KBuddyId2ECE, "ECE:BuddyId2@xyz.com" );
       
    62 _LIT( KBuddyId3ECE, "ECE:BuddyId3@xyz.com" );
       
    63 _LIT( KBuddyId1MSN, "MSN:BuddyId1@xyz.com" );
       
    64 _LIT( KBuddyId2MSN, "MSN:BuddyId2@xyz.com" );
       
    65 _LIT( KBuddyId3MSN, "MSN:BuddyId3@xyz.com" );
       
    66 _LIT( KBuddyId1VoIP, "VoIP:BuddyId1@xyz.com" );
       
    67 _LIT( KBuddyId2VoIP, "VoIP:BuddyId2@xyz.com" );
       
    68 _LIT( KBuddyId3VoIP, "VoIP:BuddyId3@xyz.com" );
       
    69 _LIT( KBuddyId1ICQ, "ICQ:BuddyId1@xyz.com" );
       
    70 _LIT( KBuddyId2ICQ, "ICQ:BuddyId2@xyz.com" );
       
    71 _LIT( KBuddyId3ICQ, "ICQ:BuddyId3@xyz.com" );
       
    72 _LIT( KBuddyId1no, "no:BuddyId1@xyz.com" );
       
    73 _LIT( KBuddyId2no, "no:BuddyId2@xyz.com" );
       
    74 _LIT( KBuddyId3no, "no:BuddyId3@xyz.com" );
       
    75 
       
    76 _LIT( KBuddyId1, "BuddyId1@xyz.com" );
       
    77 _LIT( KBuddyId2, "BuddyId2@xyz.com" );
       
    78 _LIT( KBuddyId3, "BuddyId3@xyz.com" );
       
    79 
       
    80 _LIT( KText1, "KText1" );
       
    81 _LIT( KText2, "KText2" );
       
    82 _LIT( KText3, "KText3" );
       
    83 _LIT( KText4, "KText4" );
       
    84 _LIT( KText5, "KText5" );
       
    85 _LIT( KText6, "KText6" );
       
    86 
       
    87 _LIT( KService1, "sip" );
       
    88 _LIT( KService2, "ECE" );
       
    89 _LIT( KService3, "MSN" );
       
    90 _LIT( KService4, "VoIP" );
       
    91 _LIT( KService5, "ICQ" );
       
    92 _LIT( KService6, "no" );
       
    93 
       
    94 //  INTERNAL INCLUDES
       
    95 
       
    96 
       
    97 // CONSTRUCTION
       
    98 T_PresenceCache* T_PresenceCache::NewL()
       
    99     {
       
   100     T_PresenceCache* self = T_PresenceCache::NewLC();
       
   101     CleanupStack::Pop();
       
   102 
       
   103     return self;
       
   104     }
       
   105 
       
   106 T_PresenceCache* T_PresenceCache::NewLC()
       
   107     {
       
   108     T_PresenceCache* self = new( ELeave ) T_PresenceCache();
       
   109     CleanupStack::PushL( self );
       
   110 
       
   111     self->ConstructL();
       
   112 
       
   113     return self;
       
   114     }
       
   115 
       
   116 // Destructor (virtual by CBase)
       
   117 T_PresenceCache::~T_PresenceCache()
       
   118     {
       
   119     }
       
   120 
       
   121 // Default constructor
       
   122 T_PresenceCache::T_PresenceCache()
       
   123     {
       
   124     }
       
   125 
       
   126 // Second phase construct
       
   127 void T_PresenceCache::ConstructL()
       
   128     {
       
   129     // The ConstructL from the base class CEUnitTestSuiteClass must be called.
       
   130     // It generates the test case table.
       
   131     CEUnitTestSuiteClass::ConstructL();
       
   132     
       
   133     iCoverageTesting=EFalse;
       
   134     }
       
   135 
       
   136 //  METHODS
       
   137 
       
   138 
       
   139 void T_PresenceCache::SetupL(  )
       
   140     {
       
   141     __UHEAP_MARK;
       
   142     iMPresenceCacheWriter = MPresenceCacheWriter::NewL();
       
   143     iMPresenceCacheReader = MPresenceCacheReader::NewL();
       
   144     
       
   145     iPresenceFeeder = MPresenceFeeder::NewL(KService6);
       
   146     }
       
   147     
       
   148 
       
   149 void T_PresenceCache::Teardown(  )
       
   150     {
       
   151     if(iMPresenceCacheReader)
       
   152         delete iMPresenceCacheReader;
       
   153     delete iMPresenceCacheWriter;
       
   154     delete iPresenceFeeder;
       
   155     delete iExpectedNotifyContent;
       
   156     
       
   157     if(iPresBuddyInfoList)
       
   158         delete iPresBuddyInfoList;
       
   159     REComSession::FinalClose();
       
   160     User::SetJustInTime( ETrue );
       
   161     __UHEAP_MARKEND;
       
   162     }
       
   163     
       
   164 void T_PresenceCache::T__PresenceInfoL()
       
   165     {
       
   166     // Try to read while empty
       
   167     MXIMPIdentity* identity = iMPresenceCacheReader->NewIdentityLC();
       
   168     identity->SetIdentityL(KBuddyId1);
       
   169     
       
   170     //KErrArgument
       
   171     MPresenceInfo* presInfoRead = iMPresenceCacheReader->PresenceInfoLC(*identity);
       
   172     EUNIT_ASSERT_EQUALS( (TInt)presInfoRead, NULL );
       
   173     
       
   174     //empty read
       
   175     identity->SetIdentityL(KBuddyId1sip);
       
   176     presInfoRead = iMPresenceCacheReader->PresenceInfoLC(*identity);
       
   177     EUNIT_ASSERT_EQUALS( (TInt)presInfoRead, NULL );
       
   178     
       
   179     // write buddy presence info
       
   180     MPresenceBuddyInfo* buddyPresInfoWrite = 
       
   181                         MakeBuddyPresenceInfoLC(KBuddyId1sip, KText1);
       
   182     TInt err = iMPresenceCacheWriter->WritePresenceL(buddyPresInfoWrite);
       
   183                                                 
       
   184     // Now read it
       
   185     presInfoRead = iMPresenceCacheReader->PresenceInfoLC(*identity);
       
   186     
       
   187     
       
   188     //Now verify it
       
   189     const CPresenceInfoImp* actualInfo = 
       
   190         TXIMPGetImpClassOrPanic<const CPresenceInfoImp>::From(*(buddyPresInfoWrite->PresenceInfo()));
       
   191         
       
   192     CPresenceInfoImp* readInfo = 
       
   193         TXIMPGetImpClassOrPanic<CPresenceInfoImp>::From(*presInfoRead);    
       
   194     
       
   195     TBool same = actualInfo->EqualsContent(*readInfo);
       
   196 
       
   197     CleanupStack::PopAndDestroy(3); //identity, buddyPresInfoWrite, presInfoRead;   
       
   198                                                 
       
   199     EUNIT_ASSERT_EQUALS( same, ETrue );
       
   200     }
       
   201     
       
   202    
       
   203 void T_PresenceCache::T_WriteReadPresenceAsyncL()
       
   204     {
       
   205   
       
   206     //MPresenceBuddyInfoList* buddyInfoList = CPresenceBuddyInfoListImp::NewLC(); 
       
   207     MPresenceBuddyInfoList* buddyInfoList =  
       
   208                             iMPresenceCacheWriter->NewPresenceBuddyInfoListLC(KNullDesC);
       
   209     //buddyInfoList->SetServiceNameL(KService1);
       
   210     // write buddies in all services
       
   211     MPresenceBuddyInfo* buddyPresInfoWrite(NULL);
       
   212     
       
   213     TInt err2(KErrNone);
       
   214     
       
   215     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId1sip, KText1);
       
   216     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   217     
       
   218     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId2sip, KText1);
       
   219     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   220 
       
   221     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId3sip, KText1);
       
   222     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   223 
       
   224     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId1ECE, KText1);
       
   225     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   226     
       
   227     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId2ECE, KText1);
       
   228     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   229 
       
   230     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId3ECE, KText1);
       
   231     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   232 
       
   233     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId1MSN, KText1);
       
   234     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   235     
       
   236     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId2MSN, KText1);
       
   237     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   238 
       
   239     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId3MSN, KText1);
       
   240     buddyInfoList->AddOrReplace(buddyPresInfoWrite);CleanupStack::Pop(1);
       
   241 
       
   242         
       
   243     //Only For increasing coverage for lists
       
   244     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   245     identity->SetIdentityL(KBuddyId3no);
       
   246     EUNIT_ASSERT_EQUALS( buddyInfoList->FindAndRemove(*identity), KErrNotFound);
       
   247     EUNIT_ASSERT_EQUALS( buddyInfoList->Count(), 9);
       
   248     buddyPresInfoWrite =MakeBuddyPresenceInfoLC(KBuddyId3no, KText1);
       
   249     EUNIT_ASSERT_EQUALS( buddyInfoList->AddOrReplace(buddyPresInfoWrite), KErrNone);
       
   250     
       
   251     EUNIT_ASSERT_EQUALS( buddyInfoList->Count(), 10);
       
   252     EUNIT_ASSERT_EQUALS( buddyInfoList->FindAndRemove(*identity), KErrNone);
       
   253     EUNIT_ASSERT_EQUALS( buddyInfoList->Count(), 9);
       
   254     EUNIT_ASSERT_EQUALS( buddyInfoList->FindAndRemove(*identity), KErrNotFound);
       
   255     CleanupStack::Pop(1); // buddyPresInfoWrite
       
   256     EUNIT_ASSERT_EQUALS( (TInt)(buddyInfoList->FindAndGet(*identity)), NULL);
       
   257     CleanupStack::PopAndDestroy(1); // identity
       
   258     
       
   259     //calling async write function
       
   260     TInt err = iMPresenceCacheWriter->WritePresenceL(buddyInfoList,this);
       
   261     //if (err==KErrNone)
       
   262     //    WaitComplete();
       
   263    //Try Cancelling
       
   264     err = iMPresenceCacheWriter->CancelWrite(); //always cancels receiving callback
       
   265     //Write Again
       
   266     err = iMPresenceCacheWriter->WritePresenceL(buddyInfoList,this);
       
   267     if (err==KErrNone)
       
   268         WaitComplete();
       
   269     else //Try again
       
   270         {
       
   271         err = iMPresenceCacheWriter->WritePresenceL(buddyInfoList,this);
       
   272         if (err==KErrNone)
       
   273             WaitComplete();
       
   274         }
       
   275     EUNIT_ASSERT_EQUALS( iErrorFromHandler, KErrNone);
       
   276     
       
   277     
       
   278     // read from 3rd service MSN
       
   279     err = iMPresenceCacheReader->AllBuddiesPresenceInService(KService3, this);
       
   280     //Try Cancelling
       
   281     err = iMPresenceCacheReader->CancelRead();
       
   282     // Try reading again
       
   283     err = iMPresenceCacheReader->AllBuddiesPresenceInService(KService3, this);
       
   284     if (err+1)
       
   285         WaitComplete();
       
   286     EUNIT_ASSERT_EQUALS( iErrorFromHandler, KErrNone);
       
   287     
       
   288         
       
   289     //Now verify it, pick something to verify
       
   290     CPresenceBuddyInfoImp* actualInfo(NULL);
       
   291     CPresenceBuddyInfoImp* readInfo(NULL);
       
   292     RPointerArray<MPresenceBuddyInfo> myArraywrite = buddyInfoList->GetObjectCollection();
       
   293     
       
   294     RPointerArray<MPresenceBuddyInfo> myArrayread; // wont be owned
       
   295     
       
   296     TBool same1(EFalse);
       
   297     if(iPresBuddyInfoList) // if list is received, compare for 3rd service MSN
       
   298     	{
       
   299     	myArrayread = iPresBuddyInfoList->GetObjectCollection(); //not owned
       
   300         //1
       
   301         actualInfo = 
       
   302             TXIMPGetImpClassOrPanic<CPresenceBuddyInfoImp>::From(*(myArraywrite[6]));
       
   303             
       
   304         readInfo = 
       
   305             TXIMPGetImpClassOrPanic<CPresenceBuddyInfoImp>::From(*(myArrayread[0]));   
       
   306         
       
   307         same1 = actualInfo->EqualsContent(*readInfo);
       
   308     	}
       
   309     
       
   310     
       
   311     // read for first service sip	
       
   312     err = iMPresenceCacheReader->AllBuddiesPresenceInService(KService1, this);
       
   313     if (err+1)
       
   314         WaitComplete();
       
   315     EUNIT_ASSERT_EQUALS( iErrorFromHandler, KErrNone);
       
   316     TBool same2(EFalse);
       
   317     if(iPresBuddyInfoList) // if list is received, compare for 1st service SIP
       
   318         {
       
   319         myArrayread = iPresBuddyInfoList->GetObjectCollection(); //not owned 
       
   320         
       
   321         actualInfo = 
       
   322             TXIMPGetImpClassOrPanic<CPresenceBuddyInfoImp>::From(*(myArraywrite[2]));
       
   323             
       
   324         readInfo = 
       
   325             TXIMPGetImpClassOrPanic<CPresenceBuddyInfoImp>::From(*(myArrayread[2]));   
       
   326         
       
   327         same2 = actualInfo->EqualsContent(*readInfo);  	
       
   328      	}
       
   329     
       
   330     
       
   331     // All buddies count
       
   332     TInt count = iMPresenceCacheReader->BuddyCountInAllServices();
       
   333     
       
   334     // buddies count in specific service
       
   335     TInt count2 = iMPresenceCacheReader->BuddyCountInService(KService2);
       
   336     
       
   337     
       
   338     // Testing DeletePresenceL    
       
   339     MXIMPIdentity* identity2 = CXIMPIdentityImp::NewLC();
       
   340     identity2->SetIdentityL(KBuddyId3MSN);
       
   341     TInt remove = iMPresenceCacheWriter->DeletePresenceL(*identity2);
       
   342     EUNIT_ASSERT_EQUALS( remove, KErrNone );
       
   343     remove = iMPresenceCacheWriter->DeletePresenceL(*identity2);
       
   344     EUNIT_ASSERT_EQUALS( remove, KErrNotFound );
       
   345     identity2->SetIdentityL(KBuddyId3ICQ);
       
   346     remove = iMPresenceCacheWriter->DeletePresenceL(*identity2);
       
   347     EUNIT_ASSERT_EQUALS( remove, KErrNotFound );
       
   348     CleanupStack::PopAndDestroy(1); //identity2;   
       
   349 
       
   350    
       
   351    
       
   352     TInt serviceCount = iMPresenceCacheReader->ServicesCount();
       
   353     
       
   354     CleanupStack::PopAndDestroy(1); //buddyInfoList;   
       
   355                                                 
       
   356     EUNIT_ASSERT_EQUALS( same1, ETrue );
       
   357     EUNIT_ASSERT_EQUALS( same2, ETrue );
       
   358     EUNIT_ASSERT_EQUALS( count, 9 );
       
   359     EUNIT_ASSERT_EQUALS( count2, 3 );
       
   360     EUNIT_ASSERT_EQUALS( serviceCount, 3 );
       
   361     
       
   362     }
       
   363     
       
   364     
       
   365 void T_PresenceCache::T_DeletingAndCancellingL()
       
   366     {
       
   367     //Empty Reading
       
   368     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   369     identity->SetIdentityL(KBuddyId1);
       
   370   
       
   371     
       
   372     CleanupStack::PopAndDestroy(1); //identity
       
   373     
       
   374     //Empty counting functions
       
   375     
       
   376     // All buddies count
       
   377     TInt count = iMPresenceCacheReader->BuddyCountInAllServices();
       
   378     EUNIT_ASSERT_EQUALS( count, 0 );
       
   379     
       
   380     // buddies count in specific service
       
   381     TInt count2 = iMPresenceCacheReader->BuddyCountInService(KService2);
       
   382     EUNIT_ASSERT_EQUALS( count2, KErrNotFound );
       
   383 
       
   384    
       
   385     //Services count
       
   386     TInt serviceCount = iMPresenceCacheReader->ServicesCount();
       
   387     EUNIT_ASSERT_EQUALS( serviceCount, 0 );
       
   388     
       
   389     
       
   390     //Empty async reading
       
   391     TInt err = iMPresenceCacheReader->AllBuddiesPresenceInService(KService3, this);
       
   392     if (err+1)
       
   393         WaitComplete();
       
   394     EUNIT_ASSERT_EQUALS( iErrorFromHandler, KErrNotFound);
       
   395     
       
   396     //Writing async and verify results// this checks cancelling also
       
   397     T_WriteReadPresenceAsyncL();
       
   398     
       
   399     // Now try deleting
       
   400     err = iMPresenceCacheWriter->DeleteService(KService3);
       
   401     EUNIT_ASSERT_EQUALS( err, KErrNone);
       
   402     
       
   403     //Try deleting again
       
   404     err = iMPresenceCacheWriter->DeleteService(KService3);
       
   405     EUNIT_ASSERT_EQUALS( err, KErrNotFound);
       
   406     
       
   407     //Try reading the deleted presence
       
   408     err = iMPresenceCacheReader->AllBuddiesPresenceInService(KService3, this);
       
   409     if (err==KErrNone)
       
   410         WaitComplete();
       
   411     EUNIT_ASSERT_EQUALS( iErrorFromHandler, KErrNotFound);
       
   412     }
       
   413     
       
   414 void T_PresenceCache::T_PerformanceL()
       
   415     {
       
   416     
       
   417     
       
   418     
       
   419     
       
   420     }
       
   421     
       
   422 void T_PresenceCache::T_RunAllL()
       
   423     {
       
   424     T__PresenceInfoL();    
       
   425     T_DeleteAllCacheL();
       
   426     
       
   427     T_WriteReadPresenceAsyncL();
       
   428     T_DeleteAllCacheL();
       
   429     
       
   430     T_DeletingAndCancellingL();
       
   431     // let the destructor delete the cache
       
   432     }
       
   433     
       
   434     
       
   435 //Utility Functions    
       
   436 MPresenceInfo* T_PresenceCache::MakePresenceInfoLC()
       
   437     {
       
   438     MPresenceInfo* presInfo = CPresenceInfoImp::NewLC();
       
   439     
       
   440     MPresenceInfoFieldValueText* value = CPresenceInfoFieldValueTextImp::NewLC();
       
   441     value->SetTextValueL(KBuddyId1);
       
   442     
       
   443     MPresenceInfoField* infoField = CPresenceInfoFieldImp::NewLC();
       
   444     infoField->SetFieldTypeL(KIdentityField);
       
   445     infoField->SetFieldValue(value);
       
   446     
       
   447     
       
   448     MPersonPresenceInfo* personPres = CPersonPresenceInfoImp::NewLC();
       
   449     MPresenceInfoFieldCollection& fieldCol = personPres->Fields();
       
   450     fieldCol.AddOrReplaceFieldL(infoField);
       
   451     TInt fieldCount= fieldCol.FieldCount();
       
   452         
       
   453     presInfo->SetPersonPresenceL(personPres);
       
   454     
       
   455     CleanupStack::Pop(3);//personPres,infoField,value
       
   456     
       
   457     return presInfo;
       
   458     }
       
   459 
       
   460 // Utility function but also test some code
       
   461 MPresenceBuddyInfo* T_PresenceCache::MakeBuddyPresenceInfoLC(
       
   462                                                 const TDesC& id, const TDesC& text)
       
   463     {
       
   464     // it sets objects differently for different flag values of iCoverageTesting
       
   465     // just of code coverage purpose
       
   466     if(iCoverageTesting) 
       
   467         { // make the new 
       
   468         iCoverageTesting = !iCoverageTesting;
       
   469         MPresenceBuddyInfo* buddyPresInfo = iMPresenceCacheWriter->NewBuddyPresenceInfoLC();
       
   470         MPresenceInfo* presInfo = iMPresenceCacheWriter->NewPresenceInfoLC();
       
   471         
       
   472         MPresenceInfoFieldValueText* value = CPresenceInfoFieldValueTextImp::NewLC();
       
   473         value->SetTextValueL(text);
       
   474         
       
   475         MPresenceInfoField* infoField = CPresenceInfoFieldImp::NewLC();
       
   476         infoField->SetFieldTypeL(KIdentityField);
       
   477         infoField->SetFieldValue(value);
       
   478         
       
   479         
       
   480         MPersonPresenceInfo* personPres = CPersonPresenceInfoImp::NewLC();
       
   481         MPresenceInfoFieldCollection& fieldCol = personPres->Fields();
       
   482         fieldCol.AddOrReplaceFieldL(infoField);
       
   483         TInt fieldCount= fieldCol.FieldCount();
       
   484             
       
   485         presInfo->SetPersonPresenceL(personPres);
       
   486         
       
   487         MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   488         identity->SetIdentityL(id);
       
   489         
       
   490         buddyPresInfo->Set(identity, presInfo);
       
   491         
       
   492         CleanupStack::Pop(5);//personPres,infoField,value,buddyPresInfo, identity
       
   493         
       
   494         return buddyPresInfo;
       
   495         }
       
   496     
       
   497     iCoverageTesting = !iCoverageTesting;    
       
   498     MPresenceBuddyInfo* buddyPresInfo = iMPresenceCacheWriter->NewBuddyPresenceInfoLC();
       
   499     MPresenceInfo* presInfo = iMPresenceCacheWriter->NewPresenceInfoLC();
       
   500     
       
   501     MPresenceInfoFieldValueText* value = CPresenceInfoFieldValueTextImp::NewLC();
       
   502     value->SetTextValueL(text);
       
   503     
       
   504     MPresenceInfoField* infoField = CPresenceInfoFieldImp::NewLC();
       
   505     infoField->SetFieldTypeL(KIdentityField);
       
   506     infoField->SetFieldValue(value);
       
   507     
       
   508     
       
   509     MPersonPresenceInfo* personPres = CPersonPresenceInfoImp::NewLC();
       
   510     MPresenceInfoFieldCollection& fieldCol = personPres->Fields();
       
   511     fieldCol.AddOrReplaceFieldL(infoField);
       
   512     TInt fieldCount= fieldCol.FieldCount();
       
   513         
       
   514     presInfo->SetPersonPresenceL(personPres);
       
   515     
       
   516     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   517     identity->SetIdentityL(id);
       
   518     
       
   519    
       
   520     //Call again for the sake of code coverage
       
   521     EUNIT_ASSERT_EQUALS( buddyPresInfo->SetBuddyId(identity), KErrNone);
       
   522     EUNIT_ASSERT_EQUALS( buddyPresInfo->SetPresenceInfo(presInfo), KErrNone);
       
   523     
       
   524     CleanupStack::Pop(5);//personPres,infoField,value,buddyPresInfo, identity
       
   525     
       
   526     return buddyPresInfo;
       
   527     }
       
   528     
       
   529 void T_PresenceCache::T_DeleteAllCacheL()
       
   530     {
       
   531     // all service uids
       
   532     TInt count = iMPresenceCacheReader->ServicesCount();
       
   533     TInt err(KErrNone);
       
   534     
       
   535     err = iMPresenceCacheWriter->DeleteService(KService1);
       
   536     err = iMPresenceCacheWriter->DeleteService(KService2);
       
   537     err = iMPresenceCacheWriter->DeleteService(KService3);
       
   538     err = iMPresenceCacheWriter->DeleteService(KService4);
       
   539     err = iMPresenceCacheWriter->DeleteService(KService5);
       
   540     err = iMPresenceCacheWriter->DeleteService(KService6);
       
   541     }
       
   542     
       
   543 void T_PresenceCache::T_MakePerformancePreconditionsL()
       
   544     {
       
   545     }
       
   546 
       
   547 // Buddy with status text and avater    
       
   548 MPresenceBuddyInfo*  T_PresenceCache::T_MakePerformanceBuddyLC(const TDesC& /*id*/ )
       
   549     {
       
   550     /*
       
   551     MPresenceBuddyInfo* buddyPresInfo = iMPresenceCacheWriter->NewBuddyPresenceInfoLC();
       
   552     MPresenceInfo* presInfo = iMPresenceCacheWriter->NewPresenceInfoLC();
       
   553     
       
   554     //Text field
       
   555     MPresenceInfoFieldValueText* value = CPresenceInfoFieldValueTextImp::NewLC();
       
   556     value->SetTextValueL(text);
       
   557     
       
   558     MPresenceInfoField* infoField = CPresenceInfoFieldImp::NewLC();
       
   559     infoField->SetFieldTypeL(KIdentityField);
       
   560     infoField->SetFieldValue(value);
       
   561     
       
   562     //Binary field
       
   563     MPresenceInfoFieldValueBinay* value = CPresenceInfoFieldValueBinaryImp::NewLC();
       
   564     value->SetBinaryValueL(text);
       
   565     
       
   566     MPresenceInfoField* infoField = CPresenceInfoFieldImp::NewLC();
       
   567     infoField->SetFieldTypeL(KIdentityField);
       
   568     infoField->SetFieldValue(value);
       
   569     
       
   570     
       
   571     
       
   572     MPersonPresenceInfo* personPres = CPersonPresenceInfoImp::NewLC();
       
   573     MPresenceInfoFieldCollection& fieldCol = personPres->Fields();
       
   574     fieldCol.AddOrReplaceFieldL(infoField);
       
   575     TInt fieldCount= fieldCol.FieldCount();
       
   576         
       
   577     presInfo->SetPersonPresenceL(personPres);
       
   578     
       
   579     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   580     identity->SetIdentityL(id);
       
   581     
       
   582     TUid serviceid;
       
   583     serviceid.iUid = service;
       
   584     
       
   585     buddyPresInfo->Set(serviceid, identity, presInfo);
       
   586     
       
   587     CleanupStack::Pop(5);//personPres,infoField,value,buddyPresInfo, identity
       
   588     
       
   589     return buddyPresInfo;*/
       
   590     }
       
   591 
       
   592 
       
   593 void T_PresenceCache::T_SubscribeBuddy1Response()
       
   594     {    
       
   595     // Notice: First set the initial state for User1, this is needed at least now. 
       
   596     MPresenceBuddyInfo* initInfo = MakeBuddyPresenceInfoLC(KBuddyId1no, KText1);        
       
   597     TInt err = iMPresenceCacheWriter->WritePresenceL(initInfo);
       
   598     CleanupStack::PopAndDestroy(  ); // initInfo      
       
   599     EUNIT_ASSERT_EQUALS( err, 0 );    
       
   600         
       
   601     err = iMPresenceCacheReader->SetObserverForSubscribedNotifications( this );   
       
   602     EUNIT_ASSERT_EQUALS( err, 0 );    
       
   603     
       
   604     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   605     identity->SetIdentityL(KBuddyId1no);
       
   606     
       
   607     err = iMPresenceCacheReader->SubscribePresenceBuddyChangeL( *identity);      
       
   608     CleanupStack::PopAndDestroy(1); //identity    
       
   609     EUNIT_ASSERT_EQUALS( err, 0 );
       
   610     
       
   611     // Presence feeder 
       
   612     iExpectedNotifyStatus = KErrNone;
       
   613     iNbrNotifys = 1;
       
   614     iPresenceFeeder->SetAvailabilityL( KBuddyId1, MPresenceFeeder::ENotAvailable, KText2);
       
   615         
       
   616     // TODO: 
       
   617     delete iExpectedNotifyContent;
       
   618     iExpectedNotifyContent = NULL;
       
   619     iExpectedNotifyContent = 
       
   620         MakeBuddyPresenceInfoLC(KBuddyId1no, KText2);
       
   621     CleanupStack::Pop(  );  // iExpectedNotifyContent
       
   622     err = iMPresenceCacheWriter->WritePresenceL(iExpectedNotifyContent);    
       
   623     EUNIT_ASSERT_EQUALS( err, 0 );
       
   624     
       
   625     iPresenceFeeder->RemoveAvailabilityL(KBuddyId2);                
       
   626     
       
   627     // Now we start to wait callback method HandlePresenceNotificationL  
       
   628     WaitComplete();
       
   629     }
       
   630 
       
   631 void T_PresenceCache::T_SubscribeBuddyAndUnsubscribe()
       
   632     {
       
   633     // Test few error cases first
       
   634             
       
   635     // Test null parameter error case
       
   636     TInt err = iMPresenceCacheReader->SetObserverForSubscribedNotifications( NULL );   
       
   637     EUNIT_ASSERT_EQUALS( err, KErrArgument );
       
   638     
       
   639     // Test subscription without callback registeration
       
   640     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   641     identity->SetIdentityL(KBuddyId1ECE);    
       
   642  
       
   643     err = iMPresenceCacheReader->SubscribePresenceBuddyChangeL( *identity); 
       
   644     EUNIT_ASSERT_EQUALS( err, KErrNotReady );    
       
   645     
       
   646     // Now make successful subscription  
       
   647     err = iMPresenceCacheReader->SetObserverForSubscribedNotifications( this );   
       
   648     EUNIT_ASSERT_EQUALS( err, 0 );    
       
   649     err = iMPresenceCacheReader->SubscribePresenceBuddyChangeL( *identity);     
       
   650     EUNIT_ASSERT_EQUALS( err, 0);
       
   651     
       
   652     // Make successful unsubscription    
       
   653     iMPresenceCacheReader->UnSubscribePresenceBuddyChangeL( *identity);        
       
   654     
       
   655     CleanupStack::PopAndDestroy(1); //identity        
       
   656     // Now we start to wait callback method HandlePresenceNotificationL    
       
   657     }
       
   658 
       
   659 void T_PresenceCache::T_SubscribeBuddyManyResponses()
       
   660     {  
       
   661     // Notice: First set the initial state for User1, this is needed at least now. 
       
   662     MPresenceBuddyInfo* initInfo = MakeBuddyPresenceInfoLC(KBuddyId1no, KText1);        
       
   663     TInt err = iMPresenceCacheWriter->WritePresenceL(initInfo);
       
   664     CleanupStack::PopAndDestroy(  ); // initInfo      
       
   665     EUNIT_ASSERT_EQUALS( err, 0 );  
       
   666     
       
   667     err = iMPresenceCacheReader->SetObserverForSubscribedNotifications( this );   
       
   668     EUNIT_ASSERT_EQUALS( err, 0 );    
       
   669     
       
   670     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   671     identity->SetIdentityL(KBuddyId1no);
       
   672     
       
   673     err = iMPresenceCacheReader->SubscribePresenceBuddyChangeL( *identity);      
       
   674     CleanupStack::PopAndDestroy(1); //identity    
       
   675     EUNIT_ASSERT_EQUALS( err, 0 );
       
   676     
       
   677     // Presence feeder 
       
   678     iExpectedNotifyStatus = KErrNone;
       
   679     iNbrNotifys = 4;
       
   680     iPresenceFeeder->SetAvailabilityL( KBuddyId1, MPresenceFeeder::ENotAvailable, KText2);
       
   681         
       
   682     delete iExpectedNotifyContent;
       
   683     iExpectedNotifyContent = NULL;
       
   684     iExpectedNotifyContent = 
       
   685         MakeBuddyPresenceInfoLC(KBuddyId1no, KText1);
       
   686     CleanupStack::Pop(  );  // iExpectedNotifyContent 
       
   687     err = iMPresenceCacheWriter->WritePresenceL(iExpectedNotifyContent);    
       
   688     EUNIT_ASSERT_EQUALS( err, 0 );
       
   689                    
       
   690     // Now we start to wait callback method HandlePresenceNotificationL  
       
   691     WaitComplete();        
       
   692     }
       
   693     
       
   694 void T_PresenceCache::T_DeleteBeforeNotify()
       
   695     {
       
   696     // Notice: First set the initial state for User1, this is needed at least now. 
       
   697     TInt err;
       
   698     /*
       
   699     MPresenceBuddyInfo* initInfo = MakeBuddyPresenceInfoLC( KServiceUid6, KBuddyId1, KText1);        
       
   700     TInt err = iMPresenceCacheWriter->WritePresenceL(initInfo);
       
   701     CleanupStack::PopAndDestroy(  ); // initInfo      
       
   702     EUNIT_ASSERT_EQUALS( err, 0 ); */   
       
   703         
       
   704     err = iMPresenceCacheReader->SetObserverForSubscribedNotifications( this );   
       
   705     EUNIT_ASSERT_EQUALS( err, 0 );    
       
   706     
       
   707     MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   708     identity->SetIdentityL(KBuddyId1no);
       
   709     
       
   710     err = iMPresenceCacheReader->SubscribePresenceBuddyChangeL( *identity);      
       
   711     CleanupStack::PopAndDestroy(1); //identity    
       
   712     EUNIT_ASSERT_EQUALS( err, 0 );
       
   713     
       
   714     // Presence feeder 
       
   715     iExpectedNotifyStatus = KErrNone;
       
   716     iNbrNotifys = 1;
       
   717     
       
   718     
       
   719     delete iMPresenceCacheReader;
       
   720     iMPresenceCacheReader = NULL;
       
   721         
       
   722     // TODO: 
       
   723     delete iExpectedNotifyContent;
       
   724     iExpectedNotifyContent = NULL;
       
   725     iExpectedNotifyContent = 
       
   726         MakeBuddyPresenceInfoLC(KBuddyId1no, KText2);
       
   727     CleanupStack::Pop(  );  // iExpectedNotifyContent
       
   728     err = iMPresenceCacheWriter->WritePresenceL(iExpectedNotifyContent);    
       
   729     EUNIT_ASSERT_EQUALS( err, 0 );
       
   730     
       
   731     //no notification should come, since we have deleted the subscriber
       
   732     }
       
   733 
       
   734 
       
   735 // Callback observers
       
   736     
       
   737 void T_PresenceCache::HandlePresenceWriteL(TInt aErrorCode)
       
   738     {
       
   739 	EUNIT_PRINT(_L("HandlePresenceWriteL"));
       
   740 	EUNIT_PRINT(_L("    aErrorCode: %d"), aErrorCode);
       
   741     iCbReceived = ETrue;
       
   742     iErrorFromHandler = aErrorCode;
       
   743 
       
   744     if( iWait.IsStarted() )
       
   745         {
       
   746         iWait.AsyncStop();
       
   747         }
       
   748     }
       
   749 
       
   750 void T_PresenceCache::HandlePresenceReadL(TInt aErrorCode,
       
   751                     MPresenceBuddyInfoList* aPresenceBuddyInfoList)
       
   752     {
       
   753 	EUNIT_PRINT(_L("HandlePresenceReadL"));
       
   754 	EUNIT_PRINT(_L("    aErrorCode: %d"), aErrorCode);
       
   755     iCbReceived = ETrue;
       
   756     iErrorFromHandler = aErrorCode;
       
   757     
       
   758     
       
   759     if(iPresBuddyInfoList)
       
   760     	delete iPresBuddyInfoList; iPresBuddyInfoList=NULL;
       
   761     iPresBuddyInfoList = aPresenceBuddyInfoList;
       
   762     
       
   763     if( iWait.IsStarted() )
       
   764         {
       
   765         iWait.AsyncStop();
       
   766         }
       
   767     }
       
   768     
       
   769 // *****************************************************************************   
       
   770                             
       
   771 void T_PresenceCache::HandlePresenceNotificationL(TInt aErrorCode,
       
   772                             MPresenceBuddyInfo* aPresenceBuddyInfo)
       
   773     {
       
   774 	EUNIT_PRINT(_L("HandlePresenceNotiicationL"));
       
   775 	EUNIT_PRINT(_L("    aErrorCode: %d"), aErrorCode);
       
   776     iCbReceived = ETrue;
       
   777     iErrorFromHandler = aErrorCode;
       
   778     
       
   779     // check what is expected
       
   780     EUNIT_ASSERT_EQUALS( aErrorCode, iExpectedNotifyStatus );     
       
   781     
       
   782     if ( aPresenceBuddyInfo )
       
   783         {
       
   784         // We do not want to get anything when not expecting it.
       
   785         TBool isNull = iExpectedNotifyContent ? EFalse : ETrue;
       
   786         EUNIT_ASSERT_EQUALS( isNull, EFalse  ); 
       
   787         // just check that this does not crash
       
   788         const MXIMPIdentity* buddyId = aPresenceBuddyInfo->BuddyId();
       
   789         // Then test the whole content 
       
   790         TBool eq = iExpectedNotifyContent->EqualsIdentity( aPresenceBuddyInfo );  
       
   791         EUNIT_ASSERT_EQUALS( eq, ETrue );          
       
   792         }
       
   793     else
       
   794         {
       
   795         EUNIT_PRINT(_L("  received buddyInfo is NULL"));        
       
   796         }
       
   797                
       
   798     delete aPresenceBuddyInfo; 
       
   799     
       
   800     iNbrNotifys--;
       
   801     
       
   802     /* The test sequence of complicated case is
       
   803      * sub Usr1
       
   804      * write Usr1 -> Notify
       
   805      * sub Usr2
       
   806      * write Usr1 -> Notify
       
   807      * write Usr2 -> Notify
       
   808      * unsub Usr2
       
   809      * write Usr2
       
   810      * delete Usr1 -> notify(empty)
       
   811      */
       
   812     
       
   813     switch ( iNbrNotifys )
       
   814         {
       
   815         case 3: 
       
   816             // subscribe U2
       
   817             {   
       
   818             // Notice: First set the initial state for User1, this is needed at least now. 
       
   819             MPresenceBuddyInfo* initInfo = MakeBuddyPresenceInfoLC(KBuddyId2no, KText2);        
       
   820             TInt err = iMPresenceCacheWriter->WritePresenceL(initInfo);
       
   821             CleanupStack::PopAndDestroy(  ); // initInfo      
       
   822             EUNIT_ASSERT_EQUALS( err, 0 ); 
       
   823             
       
   824             MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   825             identity->SetIdentityL(KBuddyId2no);            
       
   826             err = iMPresenceCacheReader->SubscribePresenceBuddyChangeL( *identity);      
       
   827             CleanupStack::PopAndDestroy(1); //identity    
       
   828             EUNIT_ASSERT_EQUALS( err, 0 );
       
   829             
       
   830             // Presence feeder 
       
   831             iExpectedNotifyStatus = KErrNone;                
       
   832             delete iExpectedNotifyContent;
       
   833             iExpectedNotifyContent = NULL;
       
   834             iExpectedNotifyContent = 
       
   835                 MakeBuddyPresenceInfoLC(KBuddyId1no, KText1);
       
   836             CleanupStack::Pop(  );  // iExpectedNotifyContent       
       
   837             err = iMPresenceCacheWriter->WritePresenceL(iExpectedNotifyContent);    
       
   838             EUNIT_ASSERT_EQUALS( err, 0 );   
       
   839             // Now we start to wait callback method HandlePresenceNotificationL               
       
   840             }
       
   841             break;
       
   842         case 2: 
       
   843             {
       
   844             // Presence feeder 
       
   845             iExpectedNotifyStatus = KErrNone;                
       
   846             delete iExpectedNotifyContent;
       
   847             iExpectedNotifyContent = NULL;
       
   848             iExpectedNotifyContent = 
       
   849                 MakeBuddyPresenceInfoLC(KBuddyId2no, KText3);
       
   850             CleanupStack::Pop(  );  // iExpectedNotifyContent       
       
   851             TInt err = iMPresenceCacheWriter->WritePresenceL(iExpectedNotifyContent);    
       
   852             EUNIT_ASSERT_EQUALS( err, 0 );   
       
   853             // Now we start to wait callback method HandlePresenceNotificationL          
       
   854             }
       
   855             break;
       
   856         case 1:
       
   857             {
       
   858             // Unsubscribe Usr2
       
   859             MXIMPIdentity* identity = CXIMPIdentityImp::NewLC();
       
   860             identity->SetIdentityL(KBuddyId2no);            
       
   861             iMPresenceCacheReader->UnSubscribePresenceBuddyChangeL( *identity );      
       
   862             CleanupStack::PopAndDestroy(1); //identity    
       
   863             
       
   864             // Write Usr2 
       
   865             iExpectedNotifyStatus = KErrNone;                
       
   866             delete iExpectedNotifyContent;
       
   867             iExpectedNotifyContent = NULL;   
       
   868             
       
   869             // delete Usr1
       
   870             iPresenceFeeder->RemovePresenceL(KBuddyId1no); 
       
   871             iExpectedNotifyContent = 
       
   872                MakeBuddyPresenceInfoLC( KBuddyId1no, KText3);
       
   873             TInt err =  iExpectedNotifyContent->SetPresenceInfo( NULL );
       
   874             EUNIT_ASSERT_EQUALS( err, KErrArgument ); 
       
   875             CleanupStack::Pop(  );  // iExpectedNotifyContent            
       
   876             
       
   877             // Now we start to wait callback method HandlePresenceNotificationL
       
   878             }
       
   879             break;
       
   880         case 0:
       
   881         default:         
       
   882             if( iWait.IsStarted() )
       
   883                 {
       
   884                 iWait.AsyncStop();
       
   885                 }
       
   886             break;   
       
   887         };
       
   888     
       
   889     }  
       
   890     
       
   891 // *****************************************************************************                                  
       
   892     
       
   893     
       
   894 void T_PresenceCache::T_TestFeeder()
       
   895     {
       
   896     iPresenceFeeder->SetAvailabilityL(KBuddyId1,MPresenceFeeder::ENotAvailable,KText2);
       
   897     iPresenceFeeder->SetAvailabilityL(KBuddyId1,MPresenceFeeder::ENotAvailable,KText2);
       
   898     iPresenceFeeder->RemoveAvailabilityL(KBuddyId2);
       
   899     iPresenceFeeder->RemoveAvailabilityL(KBuddyId1);
       
   900     iPresenceFeeder->SetAvailabilityL(KBuddyId1,MPresenceFeeder::ENotAvailable,KText2);
       
   901     iPresenceFeeder->RemovePresenceL(KBuddyId2);
       
   902     iPresenceFeeder->RemovePresenceL(KBuddyId1);
       
   903     iPresenceFeeder->SetAvailabilityL(KBuddyId1,MPresenceFeeder::ENotAvailable,KText2);
       
   904     iPresenceFeeder->RemoveAllPresences();
       
   905     }
       
   906     
       
   907 //  TEST TABLE
       
   908 EUNIT_BEGIN_TEST_TABLE(
       
   909     T_PresenceCache,
       
   910     "Presence Cache module tests.",
       
   911     "MODULE" )
       
   912     
       
   913 EUNIT_TEST(
       
   914     "T__PresenceInfoL",
       
   915     "PresenceCache",
       
   916     "T__PresenceInfoL",
       
   917     "FUNCTIONALITY",
       
   918     SetupL, T__PresenceInfoL, Teardown)
       
   919     
       
   920 EUNIT_TEST(
       
   921     "T_WriteReadPresenceAsyncL",
       
   922     "PresenceCache",
       
   923     "T_WriteReadPresenceAsyncL",
       
   924     "FUNCTIONALITY",
       
   925     SetupL, T_WriteReadPresenceAsyncL, Teardown)
       
   926     
       
   927 EUNIT_TEST(
       
   928 	    "T_DeletingAndCancellingL",
       
   929 	    "PresenceCache",
       
   930 	    "T_DeletingAndCancellingL",
       
   931 	    "FUNCTIONALITY",
       
   932 	    SetupL, T_DeletingAndCancellingL, Teardown)    
       
   933     
       
   934 EUNIT_TEST(
       
   935 	    "T_RunAllL",
       
   936 	    "PresenceCache",
       
   937 	    "T_RunAllL",
       
   938 	    "FUNCTIONALITY",
       
   939 	    SetupL, T_RunAllL, Teardown)
       
   940 	    
       
   941 EUNIT_TEST(
       
   942 	    "T_TestFeeder",
       
   943 	    "PresenceFeeder",
       
   944 	    "T_TestFeeder",
       
   945 	    "FUNCTIONALITY",
       
   946 	    SetupL, T_TestFeeder, Teardown)
       
   947     
       
   948 EUNIT_TEST(
       
   949 	    "T_SubscribeBuddyAndUnsubscribe",
       
   950 	    "PresenceCache",
       
   951 	    "T_SubscribeBuddyAndUnsubscribe",
       
   952 	    "FUNCTIONALITY",
       
   953 	    SetupL, T_SubscribeBuddyAndUnsubscribe, Teardown)	    
       
   954 	    
       
   955 EUNIT_TEST(
       
   956 	    "T_SubscribeBuddy1Response",
       
   957 	    "PresenceCache",
       
   958 	    "T_SubscribeBuddy1Response",
       
   959 	    "FUNCTIONALITY",
       
   960 	    SetupL, T_SubscribeBuddy1Response, Teardown)
       
   961         
       
   962 EUNIT_TEST(
       
   963         "T_SubscribeBuddyManyResponses",
       
   964         "PresenceCache",
       
   965         "T_SubscribeBuddyManyResponses",
       
   966         "FUNCTIONALITY",
       
   967         SetupL, T_SubscribeBuddyManyResponses, Teardown)
       
   968         
       
   969 EUNIT_TEST(
       
   970         "T_DeleteBeforeNotify",
       
   971         "PresenceCache",
       
   972         "T_DeleteBeforeNotify",
       
   973         "FUNCTIONALITY",
       
   974         SetupL, T_DeleteBeforeNotify, Teardown)
       
   975         
       
   976 EUNIT_END_TEST_TABLE
       
   977 
       
   978 //  END OF FILE