imsrv_plat/ximp_core_feature_plugin_api/tsrc/src/t_presencewatcherlistmngt/t_presencewatcherlistmngt.cpp
changeset 0 e6b17d312c8b
child 23 482d5cf4c4b4
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:
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "eunittools.h"
       
    20 
       
    21 #include <eunitmacros.h>
       
    22 #include <ecom/ecom.h>
       
    23 #include <badesca.h>
       
    24 
       
    25 #include <ximpbase.h>
       
    26 #include <ximpclient.h>
       
    27 #include <presencefeatures.h>
       
    28 #include <presencepublishing.h>
       
    29 #include <ximpdatasubscriptionstate.h>
       
    30 #include <presentitygroups.h>
       
    31 #include <ximpobjectfactory.h>
       
    32 #include <presencewatching.h>
       
    33 #include <presenceobjectfactory.h>
       
    34 #include <ximpcontext.h>
       
    35 #include <ximpcontextstateevent.h>
       
    36 #include <ximprequestcompleteevent.h>
       
    37 #include <ximpstatus.h>
       
    38 #include <presentitypresenceevent.h>
       
    39 #include "prfwtestpresencedatautils.h"
       
    40 
       
    41 
       
    42 
       
    43 #include "t_presencewatcherlistmngt.h"
       
    44 
       
    45 // watcher list related includes
       
    46 #include "presencewatcherinfoimp.h"
       
    47 #include "presencewatcherlisteventimp.h"
       
    48 
       
    49 // other data model includes
       
    50 #include "ximpidentityimp.h"
       
    51 #include "ximpdatasubscriptionstateimp.h"
       
    52 #include "presentitygroupmemberinfoimp.h"
       
    53 #include "presenceinfofilterimp.h"
       
    54 
       
    55 // utils includes
       
    56 #include "ximpobjecthelpers.h"
       
    57 
       
    58 #include "ximprequestcompleteeventimp.h"
       
    59 
       
    60 // testing tool includes
       
    61 #include "prfwtestmessaging.h"
       
    62 #include "prfwtestmessenger.h"
       
    63 #include "prfwtestcontextwrappermgr.h"
       
    64 #include "prfwtestcontextwrapper.h"
       
    65 #include "prfwtestwaithelper.h"
       
    66 
       
    67 #include "prfwtestfilesrvmsg.h"
       
    68 #include "prfwtestfiletool.h"
       
    69 #include "prfwtestlistener.h"
       
    70 
       
    71 #include "prfwtestrobustnesstools.h"
       
    72 
       
    73 
       
    74 
       
    75 
       
    76 
       
    77 /*#include "presenceinfoimp.h"
       
    78 #include "presenceinfofilterimp.h"
       
    79 #include "prfwtestpresencedatautils.h"
       
    80 #include "ximpidentityimp.h"
       
    81 #include "presentitygroupmemberinfoimp.h"
       
    82 #include "ximpobjecthelpers.h"
       
    83 #include "prfwtestfilesrvmsg.h"
       
    84 #include "prfwtestwaithelper.h"*/
       
    85 
       
    86 _LIT8( KPrefix1, "PreA_" );
       
    87 _LIT8( KPrefix2, "PreB_" );
       
    88 _LIT8( KPrefix3, "PreC_" );
       
    89 _LIT8( KPrefix4, "PreD_" );
       
    90 
       
    91 // ============================ MEMBER FUNCTIONS ===============================
       
    92 
       
    93 // CONSTRUCTION
       
    94 T_PresenceWatcherListManagement* T_PresenceWatcherListManagement::NewL()
       
    95     {
       
    96     T_PresenceWatcherListManagement* self = new( ELeave ) T_PresenceWatcherListManagement;
       
    97     CleanupStack::PushL( self );
       
    98     self->ConstructL();
       
    99     CleanupStack::Pop( self );
       
   100 
       
   101     return self;
       
   102     }
       
   103 
       
   104 
       
   105 T_PresenceWatcherListManagement::~T_PresenceWatcherListManagement()
       
   106     {
       
   107     }
       
   108 
       
   109 
       
   110 void T_PresenceWatcherListManagement::ConstructL()
       
   111     {
       
   112     CEUnitTestSuiteClass::ConstructL();
       
   113     }
       
   114 
       
   115 
       
   116 T_PresenceWatcherListManagement::T_PresenceWatcherListManagement()
       
   117     {
       
   118     }
       
   119 
       
   120 
       
   121 
       
   122 // ===========================================================================
       
   123 // TEST CASE SETUP & TEARDOWN METHODS
       
   124 // ===========================================================================
       
   125 //
       
   126 
       
   127 void T_PresenceWatcherListManagement::Setup_L()
       
   128     {
       
   129         
       
   130     __UHEAP_MARK;
       
   131     PrfwTestRobustness::DoPreCleaning();
       
   132 
       
   133     iWrapperMgr = CXIMPTestContextWrapperMgr::NewL();
       
   134     iWrapperMgr->CreateWrapperL();
       
   135     }
       
   136 
       
   137 void T_PresenceWatcherListManagement::SetupMultiple_L()
       
   138     {
       
   139     __UHEAP_MARK;
       
   140     PrfwTestRobustness::DoPreCleaning();
       
   141 
       
   142     iWrapperMgr = CXIMPTestContextWrapperMgr::NewL();
       
   143     iWrapperMgr->CreateWrapperL();
       
   144     iWrapperMgr->CreateWrapperL();
       
   145     iWrapperMgr->CreateWrapperL();
       
   146     }
       
   147 
       
   148 
       
   149 void T_PresenceWatcherListManagement::BindL()
       
   150     {
       
   151     CXIMPTestContextWrapper* wrapper0 = iWrapperMgr->GetWrapperL( 0 );
       
   152 
       
   153     wrapper0->BindL( 0 );
       
   154     }
       
   155 
       
   156 void T_PresenceWatcherListManagement::BindAllL()
       
   157     {
       
   158     for( TInt a = 0; a < iWrapperMgr->WrapperCount(); ++a )
       
   159         {
       
   160         CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
       
   161         wrapper->BindL( 0 );
       
   162         }
       
   163     }
       
   164 
       
   165 
       
   166 void T_PresenceWatcherListManagement::Teardown()
       
   167     {
       
   168     delete iWrapperMgr;
       
   169     iWrapperMgr = NULL;
       
   170 
       
   171     REComSession::FinalClose();
       
   172 
       
   173     PrfwTestRobustness::DoPreCleaning();
       
   174         
       
   175     __UHEAP_MARKEND;
       
   176     }
       
   177 
       
   178 void T_PresenceWatcherListManagement::UnbindL()
       
   179     {
       
   180     // Do unbind
       
   181     CXIMPTestContextWrapper* wrapper0 = iWrapperMgr->GetWrapperL( 0 );
       
   182     wrapper0->UnbindL();
       
   183     }
       
   184 
       
   185 void T_PresenceWatcherListManagement::UnbindAllL()
       
   186     {
       
   187     for( TInt a = 0; a < iWrapperMgr->WrapperCount(); ++a )
       
   188         {
       
   189         CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
       
   190         wrapper->UnbindL();
       
   191         }
       
   192     }
       
   193 
       
   194 
       
   195 // ===========================================================================
       
   196 // TEST CASES for presentity presence subscription
       
   197 // ===========================================================================
       
   198 // Check that this don't leak memory
       
   199 void T_PresenceWatcherListManagement::T_BindUnbind_L()
       
   200     {
       
   201     BindL();
       
   202     UnbindL();
       
   203     }
       
   204 // ---------------------------------------------------------------------------
       
   205 // ---------------------------------------------------------------------------
       
   206 // Subscribe, unsubscribe - Single client
       
   207 void T_PresenceWatcherListManagement::T_SubscribePresenceWatcherList_Single_L()
       
   208     {
       
   209 
       
   210     EUNIT_PRINT( _L("Single client presence watcher list subscription") );
       
   211 
       
   212     BindL();
       
   213 
       
   214     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
   215     MXIMPContext* context = wrapper->GetContext();
       
   216     CXIMPTestMessenger* messenger = wrapper->GetMessenger();
       
   217 
       
   218     CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
       
   219     CleanupStack::PushL( listener2 );
       
   220 
       
   221     // Tell the protocol it should act normally
       
   222     messenger->SetNoError();
       
   223 
       
   224     // Get the interfaces
       
   225     MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
       
   226     MPresencePublishing& presPub = presFeat->PresencePublishing();
       
   227 
       
   228     //-------------------------------------------------
       
   229     // subscribe
       
   230 
       
   231     // Setup status event listener for RequestComplete
       
   232     // ---------------------------------------------
       
   233     listener2->Reset();
       
   234 
       
   235     // normal request complete
       
   236     TXIMPRequestId reqIdDummy;  // not checked
       
   237     CXIMPRequestCompleteEventImp* evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   238     listener2->ExpectL( evReqComplete );
       
   239     CleanupStack::Pop( evReqComplete );
       
   240 
       
   241 
       
   242     // Subscribe
       
   243     TXIMPRequestId reqId = presPub.SubscribePresenceWatcherListL();
       
   244 
       
   245     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Subscribe failed" );
       
   246 
       
   247     // verify that SubscribePresenceWatcherListL was called
       
   248     COMMONASSERT( messenger, EXIMPPlgTestSubscribePresenceWatcherListCalled, "SubscribePresenceWatcherListL was not called", ETrue, NULL );
       
   249 
       
   250     //-------------------------------------------------
       
   251     // refresh subscribe
       
   252 
       
   253     // Setup status event listener for RequestComplete
       
   254     listener2->Reset();
       
   255 
       
   256     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   257     listener2->ExpectL( evReqComplete );
       
   258     CleanupStack::Pop( evReqComplete );
       
   259 
       
   260     RPrWatLstInfoImpArray* currentList(NULL);
       
   261     CPresenceWatcherListEventImp* event = CreateWatcherListEventLCX(
       
   262         KNullDesC, KNullDesC,
       
   263         MXIMPDataSubscriptionState::ESubscriptionActive,
       
   264         MXIMPDataSubscriptionState::EDataUnavailable,
       
   265         ETestPWlCurrent, currentList);
       
   266     listener2->ExpectL( event );
       
   267     CleanupStack::Pop(); //event 3 to go.
       
   268     // ---------------------------------------------
       
   269 
       
   270     // Subscribe second time
       
   271     reqId = presPub.SubscribePresenceWatcherListL();
       
   272 
       
   273     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Refresh failed" );
       
   274     CleanupStack::PopAndDestroy( 3 ); // rest of the items.
       
   275 
       
   276     // verify that SubscribePresenceWatcherListL was called
       
   277     COMMONASSERT( messenger, EXIMPPlgTestSubscribePresenceWatcherListCalled, "SubscribePresenceWatcherListL was not called", ETrue, NULL );
       
   278 
       
   279 
       
   280     //-------------------------------------------------
       
   281     // unsubscribe
       
   282 
       
   283     // Setup status event listener for RequestComplete
       
   284     listener2->Reset();
       
   285 
       
   286     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   287     listener2->ExpectL( evReqComplete );
       
   288     CleanupStack::Pop( evReqComplete );
       
   289 
       
   290     // register interest
       
   291     reqId = presPub.UnsubscribePresenceWatcherListL();
       
   292 
       
   293     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Unsubscribe failed" );
       
   294 
       
   295     // verify that UnsubscribePresenceWatcherListL was called
       
   296     COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresenceWatcherListCalled, "UnsubscribePresenceWatcherListL was not called", ETrue, NULL );
       
   297 
       
   298     //-------------------------------------------------
       
   299     // unsubscribe nonsubscribed
       
   300 
       
   301     // Setup status event listener for RequestComplete
       
   302     listener2->Reset();
       
   303 
       
   304     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   305     listener2->ExpectL( evReqComplete );
       
   306     CleanupStack::Pop( evReqComplete );
       
   307 
       
   308     // register interest
       
   309     reqId = presPub.UnsubscribePresenceWatcherListL();
       
   310 
       
   311     // Wait for events on the request
       
   312     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Unsubscribe failed" );
       
   313 
       
   314     // verify that UpdateInterest was called
       
   315     COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresenceWatcherListCalled, "UnsubscribePresenceWatcherListL was not called", ETrue, NULL );
       
   316 
       
   317 
       
   318 
       
   319     listener2->SetEventSourceL( NULL );
       
   320 
       
   321     UnbindL();
       
   322 
       
   323     CleanupStack::PopAndDestroy( listener2 );
       
   324     }
       
   325 
       
   326 // ---------------------------------------------------------------------------
       
   327 // ---------------------------------------------------------------------------
       
   328 // Subscribe, Unsubscribe - Multiple clients
       
   329 void T_PresenceWatcherListManagement::T_SubscribePresenceWatcherList_Multiple_L()
       
   330     {
       
   331     EUNIT_PRINT( _L("Multiple client presence watcher list subscription") );
       
   332 
       
   333     BindAllL();
       
   334 
       
   335     TInt countOfWrappers = iWrapperMgr->WrapperCount();
       
   336     for( TInt a = 0; a < countOfWrappers; ++a )
       
   337         {
       
   338         CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
       
   339         MXIMPContext* context = wrapper->GetContext();
       
   340         CXIMPTestMessenger* messenger = wrapper->GetMessenger();
       
   341 
       
   342         // Tell the protocol it should act normally
       
   343         messenger->SetNoError();
       
   344 
       
   345         CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
       
   346         CleanupStack::PushL( listener2 );
       
   347 
       
   348         // Get the interfaces
       
   349         MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
       
   350         MPresencePublishing& presPub = presFeat->PresencePublishing();
       
   351 
       
   352         // Setup status event listener for RequestComplete
       
   353         listener2->Reset();
       
   354 
       
   355         TXIMPRequestId reqIdDummy;  // not checked
       
   356         CXIMPRequestCompleteEventImp* evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   357         listener2->ExpectL( evReqComplete );
       
   358         CleanupStack::Pop( evReqComplete );
       
   359 
       
   360         // Subscribe
       
   361         TXIMPRequestId reqId = presPub.SubscribePresenceWatcherListL();
       
   362 
       
   363         // Wait for events on the request
       
   364         EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Subscribe failed" );
       
   365 
       
   366         // verify that SubscribePresenceWatcherListL was called
       
   367         COMMONASSERT( messenger, EXIMPPlgTestSubscribePresenceWatcherListCalled, "SubscribePresenceWatcherListL was not called", ETrue, NULL );
       
   368 
       
   369         CleanupStack::PopAndDestroy( listener2 );
       
   370         }
       
   371     for( TInt a = 0; a < countOfWrappers; ++a )
       
   372         {
       
   373         CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( a );
       
   374         MXIMPContext* context = wrapper->GetContext();
       
   375         CXIMPTestMessenger* messenger = wrapper->GetMessenger();
       
   376 
       
   377         CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
       
   378         CleanupStack::PushL( listener2 );
       
   379 
       
   380         // Get the interfaces
       
   381         MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
       
   382         MPresencePublishing& presPub = presFeat->PresencePublishing();
       
   383 
       
   384         // Setup status event listener for RequestComplete
       
   385         listener2->Reset();
       
   386 
       
   387         TXIMPRequestId reqIdDummy;  // not checked
       
   388         CXIMPRequestCompleteEventImp* evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   389         listener2->ExpectL( evReqComplete );
       
   390         CleanupStack::Pop( evReqComplete );
       
   391 
       
   392         // Unsubscribe
       
   393         TXIMPRequestId reqId = presPub.UnsubscribePresenceWatcherListL();
       
   394 
       
   395         // Wait for events on the request
       
   396         EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Unsubscribe failed" );
       
   397 
       
   398         // verify that unsubscribe was called
       
   399         COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresenceWatcherListCalled,
       
   400             "UnsubscribePresenceWatcherListL was not called",
       
   401             ( a < 2 ) ? EFalse : ETrue,
       
   402             "UnsubscribePresenceWatcherListL was called" );
       
   403 
       
   404         CleanupStack::PopAndDestroy( listener2 );
       
   405         }
       
   406 
       
   407     UnbindAllL();
       
   408     }
       
   409 
       
   410 // ---------------------------------------------------------------------------
       
   411 // ---------------------------------------------------------------------------
       
   412 void T_PresenceWatcherListManagement::SubscribeL()
       
   413     {
       
   414     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
   415     MXIMPContext* context = wrapper->GetContext();
       
   416     CXIMPTestMessenger* messenger = wrapper->GetMessenger();
       
   417 
       
   418     // Get the interfaces
       
   419     MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
       
   420     MPresencePublishing& presPub = presFeat->PresencePublishing();
       
   421 
       
   422     CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
       
   423     CleanupStack::PushL( listener2 );
       
   424 
       
   425     // Setup status event listener for RequestComplete
       
   426     listener2->Reset();
       
   427 
       
   428     TXIMPRequestId reqIdDummy;  // not checked
       
   429     CXIMPRequestCompleteEventImp* evReqComplete =
       
   430                     CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   431     listener2->ExpectL( evReqComplete );
       
   432     CleanupStack::Pop( evReqComplete );
       
   433 
       
   434     // subscribe
       
   435     TXIMPRequestId reqId = presPub.SubscribePresenceWatcherListL();
       
   436 
       
   437     // Wait for events on the request
       
   438     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Subscribe failed" );
       
   439 
       
   440     COMMONASSERT( messenger, EXIMPPlgTestSubscribePresenceWatcherListCalled, "SubscribeWatcherListL was not called", ETrue, NULL );
       
   441 
       
   442     CleanupStack::PopAndDestroy( listener2 );
       
   443     }
       
   444 
       
   445 // ---------------------------------------------------------------------------
       
   446 // ---------------------------------------------------------------------------
       
   447 void T_PresenceWatcherListManagement::UnsubscribeL()
       
   448     {
       
   449     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
   450     MXIMPContext* context = wrapper->GetContext();
       
   451     CXIMPTestMessenger* messenger = wrapper->GetMessenger();
       
   452 
       
   453     // Get the interfaces
       
   454     MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
       
   455     MPresencePublishing& presPub = presFeat->PresencePublishing();
       
   456 
       
   457     // Setup status event listener for RequestComplete
       
   458     CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
       
   459     CleanupStack::PushL( listener2 );
       
   460 
       
   461     // Setup status event listener for RequestComplete
       
   462     listener2->Reset();
       
   463 
       
   464     TXIMPRequestId reqIdDummy;  // not checked
       
   465     CXIMPRequestCompleteEventImp* evReqComplete =
       
   466                     CXIMPRequestCompleteEventImp::NewLC( reqIdDummy );
       
   467     listener2->ExpectL( evReqComplete );
       
   468     CleanupStack::Pop( evReqComplete );
       
   469 
       
   470     // unsubscribe
       
   471     TXIMPRequestId reqId = presPub.UnsubscribePresenceWatcherListL();
       
   472 
       
   473     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "Unsbscribe failed" );
       
   474 
       
   475     // verify that UnsubscribeWatcherListL was called
       
   476     COMMONASSERT( messenger, EXIMPPlgTestUnsubscribePresenceWatcherListCalled, "UnsubscribeWatcherListL was not called", ETrue, NULL );
       
   477 
       
   478     CleanupStack::PopAndDestroy( listener2 );
       
   479 
       
   480     }
       
   481 
       
   482 // ---------------------------------------------------------------------------
       
   483 // ---------------------------------------------------------------------------
       
   484 void T_PresenceWatcherListManagement::T_HandlePresenceWatcherList_L()
       
   485     {
       
   486     EUNIT_PRINT( _L("Handle presence watcher list.") );
       
   487 
       
   488     BindL();
       
   489     SubscribeL();
       
   490 
       
   491     // ------------------------------------------------------
       
   492     // some startup stuff
       
   493     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
   494     MXIMPContext* context = wrapper->GetContext();
       
   495 
       
   496     CXIMPTestListener* listener2 = CXIMPTestListener::NewL( context );
       
   497     CleanupStack::PushL( listener2 );
       
   498     // ------------------------------------------------------
       
   499 
       
   500     // Tell the protocol it should act normally
       
   501     wrapper->GetMessenger()->SetNoError();
       
   502 
       
   503     // ------------------------------------------------------
       
   504     // 1. Create faked server message about watcher list (empty)
       
   505     SendSrvMsgL( CXIMPTestFileSrvMsg::ETestSrvMsgPresenceWatcherList );
       
   506 
       
   507     // ------------------------------------------------------
       
   508     // expect empty MPresencewatcherList event.
       
   509 
       
   510     RPrWatLstInfoImpArray* currentList(NULL);
       
   511     CPresenceWatcherListEventImp* event = CreateWatcherListEventLCX(
       
   512             KNullDesC, KNullDesC,
       
   513         MXIMPDataSubscriptionState::ESubscriptionActive,
       
   514         MXIMPDataSubscriptionState::EDataAvailable,
       
   515         ETestPWlCurrent, currentList);
       
   516 
       
   517     listener2->ExpectL( event );
       
   518     CleanupStack::Pop( event ); // 3 more items in cleanupstack
       
   519 
       
   520     //Waqas: Fixed task Ticket#22
       
   521     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "HandlePresenceWatcherListL failed" );
       
   522     CleanupStack::PopAndDestroy( 3 ); // lists
       
   523     // ------------------------------------------------------
       
   524 
       
   525 
       
   526     // ------------------------------------------------------
       
   527     // 2. Create faked server message about watcher list (new)
       
   528     listener2->Reset();
       
   529 
       
   530     _LIT16( KWatcherUri1,      "http://carpe.diem.com" );
       
   531     _LIT16( KWatcherDispName1, "DispnameA, LoremI" );
       
   532 
       
   533     SendSrvMsgL( KWatcherUri1,
       
   534                  KWatcherDispName1,
       
   535                  CXIMPTestFileSrvMsg::ETestSrvMsgPresenceWatcherList );
       
   536 
       
   537     // ------------------------------------------------------
       
   538     // MPresencewatcherList event.
       
   539 
       
   540     currentList = NULL; // previous one was destroyed
       
   541     //Now create the actual event
       
   542     event = CreateWatcherListEventLCX(  // previous event was destroyed
       
   543             KWatcherUri1, KWatcherDispName1,
       
   544         MXIMPDataSubscriptionState::ESubscriptionActive,
       
   545         MXIMPDataSubscriptionState::EDataAvailable,
       
   546         ETestPWlNew, currentList);
       
   547     
       
   548 
       
   549     listener2->ExpectL( event );
       
   550     CleanupStack::Pop( event ); // 3 more items in cleanupstack
       
   551 
       
   552     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "HandlePresenceWatcherListL failed" );
       
   553     CleanupStack::PopAndDestroy( 3 ); // lists
       
   554 
       
   555 
       
   556     // ------------------------------------------------------
       
   557     // 3. Create faked server message about watcher list (disappeared)
       
   558     listener2->Reset();
       
   559 
       
   560     SendSrvMsgL( CXIMPTestFileSrvMsg::ETestSrvMsgPresenceWatcherList );
       
   561     // ------------------------------------------------------
       
   562     // MPresencewatcherList event.
       
   563 
       
   564     CXIMPIdentityImp* idForEvent = CXIMPIdentityImp::NewLC( KWatcherUri1 );
       
   565     // we need to create current list to give to the event
       
   566     currentList = new ( ELeave ) RPrWatLstInfoImpArray; // previous is destroyed
       
   567     CleanupDeletePushL( currentList );
       
   568             // create the group info
       
   569     CPresenceWatcherInfoImp* watcherInfoForEvent = 
       
   570                             CPresenceWatcherInfoImp::NewLC( (MPresenceWatcherInfo::TWatcherType)0, *idForEvent, KWatcherDispName1);
       
   571     currentList->AppendL( watcherInfoForEvent );
       
   572     CleanupStack::Pop( watcherInfoForEvent );
       
   573     CleanupStack::Pop( currentList );
       
   574     CleanupStack::PopAndDestroy( idForEvent );    
       
   575 
       
   576 
       
   577     //Now create the actual event
       
   578     event = CreateWatcherListEventLCX(
       
   579             KWatcherUri1, KWatcherDispName1,
       
   580         MXIMPDataSubscriptionState::ESubscriptionActive,
       
   581         MXIMPDataSubscriptionState::EDataAvailable,
       
   582         ETestPWlDisappeared, currentList);
       
   583 
       
   584     listener2->ExpectL( event );
       
   585     CleanupStack::Pop( event ); // 3 more items in cleanupstack
       
   586 
       
   587     //Waqas: Fixed task Ticket#22
       
   588     EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "HandlePresenceWatcherListL failed" );
       
   589 
       
   590     CleanupStack::PopAndDestroy( 3 ); // lists
       
   591 
       
   592 
       
   593     // clean it up
       
   594     UnsubscribeL();
       
   595     
       
   596     /* TODO later on better time.
       
   597     // ------------------------------------------------------
       
   598     // 4. Create faked server message about watcher list (no subscribers to list)
       
   599     //    Make sure no event is 
       
   600     listener2->Reset();
       
   601     
       
   602     event = CreateWatcherListEventLCX(
       
   603             KNullDesC, KNullDesC,
       
   604             ETestPWlEmpty );
       
   605 
       
   606     //EUNIT_ASSERT_DESC( KErrNone == listener2->WaitAndAssertL(), "HandlePresenceWatcherListL failed" );
       
   607 
       
   608     */
       
   609     CleanupStack::PopAndDestroy( listener2 );
       
   610     
       
   611     UnbindL();
       
   612     }
       
   613 
       
   614 ////////////////////////////////////////////////////
       
   615 //// INTIA CASE 
       
   616 ////////////////////////////////////////////////////
       
   617 void T_PresenceWatcherListManagement::T_IndiaCase_L()
       
   618     {
       
   619 
       
   620     EUNIT_PRINT( _L("Presence notification subscribed list, Intia") );
       
   621    
       
   622 
       
   623     BindL();
       
   624 
       
   625     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
   626     MXIMPContext* presenceCtx = wrapper->GetContext();
       
   627     CXIMPTestMessenger* messenger = wrapper->GetMessenger();
       
   628 
       
   629     CXIMPTestListener* ctxObserver = CXIMPTestListener::NewL( presenceCtx );
       
   630     CleanupStack::PushL( ctxObserver );  // << ctxObserver
       
   631   
       
   632 
       
   633     // Tell the protocol it should act normally
       
   634     messenger->SetNoError();
       
   635 
       
   636        // Get the interfaces
       
   637     MPresenceFeatures* presFeat = wrapper->GetPresenceFeatures();
       
   638     MPresencePublishing& presPub = presFeat->PresencePublishing();
       
   639     MPresentityGroups& presGroups = presFeat->PresentityGroups();    
       
   640     MPresenceWatching& presWatch = presFeat->PresenceWatching();
       
   641     
       
   642     MXIMPObjectFactory& objFactory = presenceCtx->ObjectFactory();
       
   643     
       
   644     _LIT( KGroupId, "rakesh.harsh/Friends" );
       
   645     _LIT( KGroupDisplayName, "my_friend" );
       
   646     _LIT( KMemberId1, "user1" );
       
   647     _LIT( KMember1DisplayName, "user1DisplayName" );
       
   648     _LIT( KMemberId2, "user2" );
       
   649     _LIT( KMember2DisplayName, "user2DisplayName" );
       
   650     
       
   651     
       
   652     // Create test variables
       
   653     MXIMPIdentity* testGroupId = objFactory.NewIdentityLC();   // << testGroupId
       
   654     testGroupId->SetIdentityL( KGroupId ); 
       
   655         
       
   656     MXIMPIdentity* member1 = objFactory.NewIdentityLC(); // << member1
       
   657     member1->SetIdentityL( KMemberId1 );
       
   658     
       
   659     MXIMPIdentity* member2 = objFactory.NewIdentityLC(); // << member2
       
   660     member2->SetIdentityL( KMemberId2 );
       
   661     
       
   662     //////////////////////////////////////////////////////////////////////////
       
   663     // SUBSCRIBE PRESENTITY GROUP LIST
       
   664     //////////////////////////////////////////////////////////////////////////
       
   665     
       
   666     // Setup status event listener for RequestComplete
       
   667     TXIMPRequestId reqId;  
       
   668     ctxObserver->Reset();
       
   669     CXIMPRequestCompleteEventImp* evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqId );// << evReqComplete
       
   670     ctxObserver->ExpectL( evReqComplete );
       
   671     CleanupStack::Pop( evReqComplete ); // >> evReqComplete 
       
   672     
       
   673     SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
       
   674     
       
   675     // subscribe PresentityGroupList
       
   676     reqId = presGroups.SubscribePresentityGroupListL();
       
   677     
       
   678     // Wait for events on the request
       
   679     wrapper->WaitRequestAndStackEvents( reqId );
       
   680     wrapper->VerifyEventStackL( _L8("Subscribing presentity group list, complete with error: ") );
       
   681     
       
   682     // verify that SubscribePresentityGroupListL was called
       
   683     messenger->AssertSubscribePresentityGroupListCalled( ETrue );
       
   684     
       
   685     
       
   686     // get list request
       
   687 /*    TXIMPRequestId req = presGroups.SubscribePresentityGroupListL(); 
       
   688     ctxObserver->WaitOpToCompleteL( req );
       
   689 
       
   690     CUserAfter::AfterL( 1000000 );
       
   691 */
       
   692     
       
   693     //////////////////////////////////////////////////////////////////////////
       
   694     // SUBSCRIBE PRESENTITY GROUP CONTENT
       
   695     //////////////////////////////////////////////////////////////////////////    
       
   696 
       
   697     // Setup status event listener for RequestComplete
       
   698     ctxObserver->Reset();
       
   699     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqId );
       
   700     ctxObserver->ExpectL( evReqComplete );
       
   701     CleanupStack::Pop( evReqComplete );
       
   702     SetupListenerReqCompleteL( wrapper, EXIMPTestStatusEvents_RequestOk );
       
   703             
       
   704     // subscribe group content
       
   705     reqId = presGroups.SubscribePresentityGroupContentL( *testGroupId );
       
   706     
       
   707     // Wait for events on the request
       
   708     wrapper->WaitRequestAndStackEvents( reqId );
       
   709     wrapper->VerifyEventStackL( _L8("Subscribe presentity group content, complete with error: ") );
       
   710 
       
   711     COMMONASSERT( messenger, EXIMPPlgTestSubscribePresentityGroupContentCalled, "SubscribeGroupContentL was not called", ETrue, NULL );
       
   712     
       
   713 /*    TInt count = ctxObserver->gidcount;
       
   714     // List manage request
       
   715      for(TInt i = 0; i<count;i++)
       
   716      { 
       
   717       //get the content of the lists
       
   718        MXIMPIdentity*   tgid = objFactory.NewIdentityLC();
       
   719      tgid->SetIdentityL( ctxObserver->gid[i] ); 
       
   720     // tgid->SetIdentityL( _L("rakesh.harsh/basu2@nokia.com") );
       
   721       
       
   722       TXIMPRequestId  req = presGroups.SubscribePresentityGroupContentL( *tgid );
       
   723     
       
   724       ctxObserver->WaitOpToCompleteL( req );
       
   725     
       
   726       CleanupStack::PopAndDestroy( 1 ); //  tgid
       
   727      }  */
       
   728      
       
   729     //////////////////////////////////////////////////////////////////////////
       
   730     // CREATE PRESENTITY GROUP
       
   731     /////////////////////////////////////////////////////////////////////////
       
   732     
       
   733     // Setup status event listener for RequestComplete
       
   734     // This will also produce HandlePresentityGroupListEvent, since the
       
   735     // the group is subscribed 
       
   736     ctxObserver->Reset();
       
   737     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqId );
       
   738     ctxObserver->ExpectL( evReqComplete );
       
   739     CleanupStack::Pop( evReqComplete );//TODO???
       
   740 
       
   741     SetupListenerReqCompleteAllowEventsL( wrapper, EXIMPTestStatusEvents_RequestOk );
       
   742 
       
   743     // Create group
       
   744     reqId = presGroups.CreatePresentityGroupL( *testGroupId, KGroupDisplayName );
       
   745     
       
   746     // Wait for events on the request
       
   747     wrapper->WaitRequestAndStackEvents( reqId );
       
   748     wrapper->VerifyEventStackL( _L8("CreatePresentityGroupL failed, complete with error: ") );
       
   749     
       
   750     // verify that SubscribePresentityGroupListL was called
       
   751     messenger->AssertCreatePresentityGroupCalled( ETrue );
       
   752 
       
   753     
       
   754                    
       
   755     // first make a test group in our roster
       
   756  /*   MXIMPIdentity* newGroupId = objFactory.NewIdentityLC();//1
       
   757     newGroupId->SetIdentityL( _L("rakesh.harsh/Friends") );
       
   758 
       
   759     req = presGroups.CreatePresentityGroupL( *newGroupId,_L("my_friend") );
       
   760     // wait completion
       
   761     ctxObserver->WaitOpToCompleteL( req );
       
   762       
       
   763     CUserAfter::AfterL( 1000000 );*/
       
   764     
       
   765     //////////////////////////////////////////////////////////////////////////
       
   766     // ADD PRESENTITY GROUP MEMBER
       
   767     ////////////////////////////////////////////////////////////////////////// 
       
   768     
       
   769     // Setup event listener for RequestComplete
       
   770     ctxObserver->Reset();
       
   771     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqId ); // << evReqComplete
       
   772 
       
   773     // group id
       
   774     CXIMPIdentityImp* grid = CXIMPIdentityImp::NewLC( testGroupId->Identity() ); // << grid
       
   775     evReqComplete->AppendParamL( grid );
       
   776     CleanupStack::Pop(); // >> grid
       
   777 
       
   778     // id for member info
       
   779     CXIMPIdentityImp* miId = CXIMPIdentityImp::NewLC( KMemberId1 ); // << miId
       
   780     // member info
       
   781     CPresentityGroupMemberInfoImp* memInfoImp =
       
   782         CPresentityGroupMemberInfoImp::NewLC( *miId, KMember1DisplayName ); // << memInfoImp
       
   783     evReqComplete->AppendParamL( memInfoImp );
       
   784     CleanupStack::Pop(); // memInfoImp owned by AppendParamL    // >> memInfoImp
       
   785     CleanupStack::PopAndDestroy( miId ); // copy was made   // >>> miId
       
   786 
       
   787     ctxObserver->ExpectL( evReqComplete );
       
   788     CleanupStack::Pop( evReqComplete ); // >> evReqComplete
       
   789 
       
   790     // do the call
       
   791     reqId = presGroups.AddPresentityGroupMemberL(
       
   792             *testGroupId, *member1, KMember1DisplayName );
       
   793 
       
   794     // Wait for events on the request
       
   795     wrapper->WaitRequestAndStackEvents( reqId );
       
   796     messenger->AssertAddPresentityGroupMemberCalled( ETrue );
       
   797 
       
   798  
       
   799     //add a member
       
   800 /*    MXIMPIdentity* testContactId = objFactory.NewIdentityLC();
       
   801     testContactId->SetIdentityL( _L("mukesh") );
       
   802     req = presGroups.AddPresentityGroupMemberL( *newGroupId,
       
   803                                                 *testContactId,
       
   804                                                 _L("h2") );
       
   805     // wait completion
       
   806     ctxObserver->WaitOpToCompleteL( req );
       
   807     
       
   808     
       
   809     CUserAfter::AfterL( 1000000 );*/
       
   810     
       
   811     
       
   812     //////////////////////////////////////////////////////////////////////////
       
   813     // ADD PRESENTITY GROUP MEMBER
       
   814     ////////////////////////////////////////////////////////////////////////// 
       
   815 
       
   816     // Setup event listener for RequestComplete
       
   817     ctxObserver->Reset();
       
   818     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqId ); // << evReqComplete
       
   819 
       
   820     // group id
       
   821     CXIMPIdentityImp* grid2 = CXIMPIdentityImp::NewLC( testGroupId->Identity() );
       
   822     evReqComplete->AppendParamL( grid2 );
       
   823     CleanupStack::Pop(); // grid2
       
   824 
       
   825     // id for member info
       
   826     CXIMPIdentityImp* miId2 = CXIMPIdentityImp::NewLC( KMemberId2 );
       
   827     // member info
       
   828     CPresentityGroupMemberInfoImp* memInfoImp2 =
       
   829         CPresentityGroupMemberInfoImp::NewLC( *miId2, KMember2DisplayName );
       
   830     evReqComplete->AppendParamL( memInfoImp2 );
       
   831     CleanupStack::Pop(); // memInfoImp owned by AppendParamL
       
   832     CleanupStack::PopAndDestroy( miId2 ); // copy was made
       
   833 
       
   834     ctxObserver->ExpectL( evReqComplete );
       
   835     CleanupStack::Pop( evReqComplete );
       
   836     // reset the variable
       
   837     messenger->SetValueFor( EXIMPPlgTestAddPresentityGroupMemberCalled, 0 );
       
   838     // do the call
       
   839     reqId = presGroups.AddPresentityGroupMemberL(
       
   840             *testGroupId, *member2, KMember2DisplayName );
       
   841 
       
   842     // Wait for events on the request
       
   843     wrapper->WaitRequestAndStackEvents( reqId );
       
   844     messenger->AssertAddPresentityGroupMemberCalled( ETrue );
       
   845 
       
   846     
       
   847 /*    testContactId->SetIdentityL( _L("bb0") );
       
   848     req = presGroups.AddPresentityGroupMemberL( *newGroupId,
       
   849                                                 *testContactId,
       
   850                                                 _L("b1") );
       
   851     // wait completion
       
   852     ctxObserver->WaitOpToCompleteL( req );
       
   853     
       
   854 */    
       
   855     //////////////////////////////////////////////////////////////////////////
       
   856     // SUBSCRIBE PRESENTITY GROUP MEMBERS PRESENCE
       
   857     ////////////////////////////////////////////////////////////////////////// 
       
   858         
       
   859     // Setup status event listener for RequestComplete
       
   860     ctxObserver->Reset();
       
   861     evReqComplete = CXIMPRequestCompleteEventImp::NewLC( reqId );
       
   862     ctxObserver->ExpectL( evReqComplete );
       
   863     CleanupStack::Pop( evReqComplete );
       
   864     SetupListenerReqCompleteL( wrapper, EXIMPTestStatusEvents_RequestOk );
       
   865 
       
   866     
       
   867     // Set filter for the group
       
   868     MPresenceInfoFilter* gpif = presFeat->PresenceObjectFactory().NewPresenceInfoFilterLC();
       
   869     gpif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KStatusMessage  );
       
   870     gpif->AcceptPersonFilterL( NPresenceInfo::NFieldType::KAvatar );
       
   871 
       
   872     // register interest
       
   873     reqId = presWatch.SubscribePresentityGroupMembersPresenceL( *testGroupId, *gpif );
       
   874     
       
   875     CleanupStack::PopAndDestroy(); // >>> gpif
       
   876 
       
   877     // Wait for events on the request
       
   878     wrapper->WaitRequestAndStackEvents( reqId );
       
   879     wrapper->VerifyEventStackL( _L8("Subscribe presentity group members, complete with error: ") );
       
   880         
       
   881     // verify that UpdateInterest was called
       
   882     COMMONASSERT( messenger, EXIMPPlgTestSubscribePresentityGroupMembersPresesenceCalled, "SubscribePresentityGroupMembersPresenceL was not called", ETrue, NULL );
       
   883 
       
   884      
       
   885 
       
   886 /*    CUserAfter::AfterL( 1000000 );
       
   887     MPresenceWatching& presWatch = presenceCtx->PresenceWatching();
       
   888     MPresenceInfoFilter* infoFilt = objFactory.NewPresenceInfoFilterLC();
       
   889     req = presWatch.SubscribePresentityGroupMembersPresenceL( *newGroupId, *infoFilt );
       
   890     // wait completion
       
   891     ctxObserver->WaitOpToCompleteL( req );
       
   892     
       
   893    // req = presWatch.SubscribePresentityPresenceL( *testContactId, *infoFilt );
       
   894     // wait completion
       
   895    // ctxObserver->WaitOpToCompleteL( req );
       
   896     //MXIMPClient* presClient1 = NULL;
       
   897    // MXIMPContext* presenceCtx1 = NULL;
       
   898     //CUSContextObserver* ctxObserver1  = NULL;
       
   899     
       
   900     /*TInt pushCount1 = DoSetupDefaultContext1LC( presClient1,
       
   901                                               presenceCtx1,
       
   902                                               ctxObserver1 );
       
   903     
       
   904     ctxObserver->WaitOpToCompleteL( req );*/
       
   905  //   CUserAfter::AfterL( 60000000 ); //60 seconds
       
   906     
       
   907     /*if ( !iWait.IsStarted() )
       
   908 			{    
       
   909 			iWait.Start();  // CSI: 10 # iWait is not an active object
       
   910 			}
       
   911      */
       
   912     //code is for login with diff id 
       
   913      //Initialize XIMP client
       
   914  /*  #if 0
       
   915     MXIMPClient* presClient1 = MXIMPClient::NewClientL();
       
   916     CleanupDeletePushL( presClient );
       
   917       
       
   918     //Create new sink to receive presence context events
       
   919     CUSContextObserver* eventObserver1 = CUSContextObserver::NewLC();
       
   920 
       
   921     //Create new presence context
       
   922     MXIMPContext* presecenCtx1 = presClient->NewPresenceContextLC();
       
   923     presecenCtx1->RegisterObserverL( *eventObserver1 );
       
   924 
       
   925     //Bind context to desired presence service
       
   926     TUid protocolUid = TUid::Uid( KProtocolUid );
       
   927 
       
   928 
       
   929     //Bind context to desired presence service
       
   930      req = presecenCtx1->BindToL( protocolUid,
       
   931                                                KServerAddress,
       
   932                                                KUserName2,
       
   933                                                KPassword2,
       
   934                                                KIAP );
       
   935  
       
   936     //Wait with CActiveSchedulerWait the binding to complete
       
   937     //If binding fails, it is handled with leave
       
   938     eventObserver1->WaitOpToCompleteL( req );
       
   939     MXIMPIdentity* newGroupId1 = objFactory.NewIdentityLC();//1
       
   940     newGroupId1->SetIdentityL( _L("bb0/jaya") );
       
   941 
       
   942      req = presGroups.CreatePresentityGroupL( *newGroupId1,_L("my_sweety") );
       
   943     // wait completion
       
   944     ctxObserver->WaitOpToCompleteL( req );
       
   945       
       
   946     CUserAfter::AfterL( 1000000 );
       
   947     presecenCtx1->UnbindL();
       
   948     eventObserver1->WaitOpToCompleteL( req );
       
   949     CleanupStack::PopAndDestroy( 4 ); //newGroupId1,presecenCtx1,eventObserver1,presClient1
       
   950     
       
   951     #endif*/
       
   952     //code is for login with diff id end
       
   953     
       
   954     //add this user to bb0's contact list.i should  recieve notification
       
   955     
       
   956     //   delete group friend which is created above statement 
       
   957     //req = presGroups.DeletePresentityGroupL( *newGroupId );
       
   958     // wait completion
       
   959    // ctxObserver->WaitOpToCompleteL( req );
       
   960  //   CUserAfter::AfterL( 60000000 );
       
   961     //Unbind the context and wait completion
       
   962   //  req = presenceCtx->UnbindL();
       
   963   //  ctxObserver->WaitOpToCompleteL( req );
       
   964 
       
   965     //Destroy the context (it is automaticly unbind)
       
   966  //   CleanupStack::PopAndDestroy( 3 ); //  infoFilt,testContactId,newGroupId
       
   967  //   CleanupStack::PopAndDestroy( pushCount );	
       
   968  
       
   969  
       
   970     //////////////////////////////////////////////////////////////////////////
       
   971     // SEND DATA FOR GROUP MEMBER -> HANDLE PRESENTITY PRESENCE
       
   972     ////////////////////////////////////////////////////////////////////////// 
       
   973 
       
   974      
       
   975      // create test message
       
   976     CPresenceInfoImp* presenceInfo = CPresenceInfoImp::NewLC(); // << presenceInfo
       
   977     HBufC8* packedInfo = TXIMPObjectPacker< CPresenceInfoImp >::PackL( *presenceInfo );
       
   978     CleanupStack::PopAndDestroy( presenceInfo );// >>> presenceInfo
       
   979     CleanupStack::PushL( packedInfo );  // << packedInfo
       
   980     
       
   981     CXIMPIdentityImp* changed = CXIMPIdentityImp::NewLC( ); // << changed
       
   982     changed->SetIdentityL( KMemberId1 );
       
   983     HBufC8* packedId = TXIMPObjectPacker< CXIMPIdentityImp >::PackL( *changed );
       
   984     CleanupStack::PopAndDestroy(); // >>> changed
       
   985     CleanupStack::PushL( packedId );// << packedId
       
   986     
       
   987     RPointerArray< HBufC8 > bufferArray;
       
   988     CleanupClosePushL( bufferArray );   // << bufferArray
       
   989     bufferArray.AppendL( packedId );
       
   990     bufferArray.AppendL( packedInfo );
       
   991     
       
   992     HBufC8* packedBufferArray = TXIMPHBuf8Packer::PackArrayL( bufferArray );
       
   993     CleanupStack::PopAndDestroy( 2 ); // >>> packedId, packedInfo
       
   994     CleanupStack::PopAndDestroy(); // >>> bufferArray
       
   995     CleanupStack::PushL( packedBufferArray );   // << packedBufferArray
       
   996     
       
   997     // Send it to plugin 
       
   998     CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( CXIMPTestFileSrvMsg::ETestSrvMsgPresentityPresence, 
       
   999                                                              *packedBufferArray );
       
  1000     CleanupStack::PopAndDestroy( packedBufferArray );   // >>> packedBufferArray
       
  1001     
       
  1002     CleanupStack::PushL( srvMsg );  // << srvMsg
       
  1003     wrapper->FileTool().SrvMsgStoreL( srvMsg );
       
  1004     CleanupStack::PopAndDestroy( srvMsg );  // >>> srvMsg
       
  1005     wrapper->FileTool().CleanAllL();
       
  1006 
       
  1007     // Wait for server to handle srvmsg.
       
  1008     User::After( 4 * 1000000 );       
       
  1009 
       
  1010     COMMONASSERT( messenger, EXIMPPlgTestHandlePresentityPresenceCalled, "HandlePresentityPresenceL was not called", ETrue, NULL );
       
  1011 
       
  1012     CleanupStack::PopAndDestroy( 3 ); // >>> testGroupId, member1, member2
       
  1013     CleanupStack::PopAndDestroy( ctxObserver ); // >>> ctxObserver
       
  1014     
       
  1015     UnbindL(); 
       
  1016 
       
  1017 }
       
  1018 // ===========================================================================
       
  1019 // SETUP HELPERS FOR THE LISTENER
       
  1020 // ===========================================================================
       
  1021 //
       
  1022 
       
  1023 // ---------------------------------------------------------------------------
       
  1024 // ---------------------------------------------------------------------------
       
  1025 // send a faked server-originated message with watcher info made
       
  1026 // from the given uri and displayname
       
  1027 //
       
  1028 void T_PresenceWatcherListManagement::SendSrvMsgL(
       
  1029         const TDesC& aUri, const TDesC& aDispName,
       
  1030         TInt aMsgType )
       
  1031     {
       
  1032     // we'll use hard-coded wrapper 0 instance for now.
       
  1033     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
  1034 
       
  1035     // create a grant req info contained within the server-originated
       
  1036     // faked message
       
  1037     RXIMPObjOwningPtrArray<CPresenceWatcherInfoImp> watcherList;
       
  1038     CleanupClosePushL( watcherList );
       
  1039 
       
  1040     CXIMPIdentityImp* watcherId = CXIMPIdentityImp::NewLC( aUri );
       
  1041     CPresenceWatcherInfoImp* watcherItem =
       
  1042                 CPresenceWatcherInfoImp::NewLC(
       
  1043                             (MPresenceWatcherInfo::TWatcherType)0,
       
  1044                             *watcherId,
       
  1045                             aDispName );
       
  1046     watcherList.AppendL( watcherItem );
       
  1047     CleanupStack::Pop( watcherItem );
       
  1048     CleanupStack::PopAndDestroy( watcherId );
       
  1049 
       
  1050     HBufC8* packedArray =
       
  1051         TXIMPObjectPacker<CPresenceWatcherInfoImp>::PackArrayL( watcherList );
       
  1052     CleanupStack::PushL( packedArray );
       
  1053 
       
  1054     // use filetool to send it for plugin.
       
  1055     CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( aMsgType,
       
  1056             *packedArray );
       
  1057     CleanupStack::PushL( srvMsg );
       
  1058     wrapper->FileTool().CleanAllL();
       
  1059     wrapper->FileTool().SrvMsgStoreL( srvMsg );
       
  1060     CleanupStack::PopAndDestroy( 3 ); // srvMsg, packedArray, watcherList
       
  1061     }
       
  1062 
       
  1063 
       
  1064 // ---------------------------------------------------------------------------
       
  1065 // ---------------------------------------------------------------------------
       
  1066 // send a faked server-originated message with empty contents
       
  1067 //
       
  1068 void T_PresenceWatcherListManagement::SendSrvMsgL( TInt aMsgType )
       
  1069     {
       
  1070     // we'll use hard-coded wrapper 0 instance for now.
       
  1071     CXIMPTestContextWrapper* wrapper = iWrapperMgr->GetWrapperL( 0 );
       
  1072 
       
  1073     // create a server-originated faked message with empty contents
       
  1074     RXIMPObjOwningPtrArray<CPresenceWatcherInfoImp> watcherList;
       
  1075 
       
  1076     HBufC8* packedArray = TXIMPObjectPacker<CPresenceWatcherInfoImp>::PackArrayL( watcherList );
       
  1077     CleanupStack::PushL( packedArray );
       
  1078 
       
  1079     // use filetool to send it for plugin.
       
  1080     CXIMPTestFileSrvMsg* srvMsg = CXIMPTestFileSrvMsg::NewL( aMsgType,
       
  1081             *packedArray );
       
  1082     CleanupStack::PushL( srvMsg );
       
  1083     wrapper->FileTool().CleanAllL();
       
  1084     wrapper->FileTool().SrvMsgStoreL( srvMsg );
       
  1085     CleanupStack::PopAndDestroy( 2 ); // srvMsg, packedArray
       
  1086     }
       
  1087 
       
  1088 // ---------------------------------------------------------------------------
       
  1089 // ---------------------------------------------------------------------------
       
  1090 // create a watcher list event with given arrays
       
  1091 //
       
  1092 CPresenceWatcherListEventImp* T_PresenceWatcherListManagement::CreateWatcherListEventLCX(
       
  1093         const TDesC& aUri,
       
  1094         const TDesC& aDispName,
       
  1095             MXIMPDataSubscriptionState::TSubscriptionState aSubscriptionState,
       
  1096             MXIMPDataSubscriptionState::TDataState aDataState,
       
  1097             TTestPWlOperation aOperation,
       
  1098             RPrWatLstInfoImpArray* aCurrentList)
       
  1099     {
       
  1100     // create the arrays
       
  1101 
       
  1102 
       
  1103     // new list
       
  1104     RPrWatLstInfoImpArray* newList = new ( ELeave ) RPrWatLstInfoImpArray;
       
  1105     CleanupDeletePushL( newList );
       
  1106 
       
  1107     // current list, created by caller
       
  1108     if(!aCurrentList) // if client didnt created the list
       
  1109         aCurrentList = new ( ELeave ) RPrWatLstInfoImpArray;
       
  1110     CleanupDeletePushL( aCurrentList );
       
  1111 
       
  1112     // disappeared list
       
  1113     RPrWatLstInfoImpArray* disappearedList = new ( ELeave ) RPrWatLstInfoImpArray;
       
  1114     CleanupDeletePushL( disappearedList );
       
  1115 
       
  1116     // create the watcher info
       
  1117     CPresenceWatcherInfoImp* watcherInfoForEvent1 = NULL; 
       
  1118             {
       
  1119             CXIMPIdentityImp* idForEvent = CXIMPIdentityImp::NewLC( aUri );
       
  1120             watcherInfoForEvent1 = CPresenceWatcherInfoImp::NewLC( (MPresenceWatcherInfo::TWatcherType)0, *idForEvent, aDispName );
       
  1121             CleanupStack::Pop( watcherInfoForEvent1 );        
       
  1122             CleanupStack::PopAndDestroy( idForEvent ); 
       
  1123             CleanupStack::PushL( watcherInfoForEvent1 );        
       
  1124             }
       
  1125     
       
  1126     CPresenceWatcherInfoImp* watcherInfoForEvent2 = 
       
  1127             TXIMPObjectCloner< CPresenceWatcherInfoImp >::CloneLC( *watcherInfoForEvent1 );
       
  1128     
       
  1129     TInt count(0);
       
  1130     TBool found(EFalse);
       
  1131     TInt i(0);
       
  1132     
       
  1133     // put the given watcher info into the specified array
       
  1134     switch ( aOperation )
       
  1135         {
       
  1136         case ETestPWlNew:
       
  1137             {
       
  1138             newList->AppendL( watcherInfoForEvent2 );
       
  1139             CleanupStack::Pop( watcherInfoForEvent2 );
       
  1140             
       
  1141             aCurrentList->AppendL( watcherInfoForEvent1 );
       
  1142             CleanupStack::Pop( watcherInfoForEvent1 );
       
  1143             }
       
  1144             break;
       
  1145         case ETestPWlCurrent:
       
  1146             {
       
  1147             // don't add, thus return what user has given
       
  1148             CleanupStack::PopAndDestroy( watcherInfoForEvent2 ); // watcherInfoForEvent2
       
  1149             CleanupStack::PopAndDestroy( watcherInfoForEvent1 ); // watcherInfoForEvent1
       
  1150             }
       
  1151             break;
       
  1152         case ETestPWlDisappeared:
       
  1153             {
       
  1154             // search the given id in current list
       
  1155             count = aCurrentList->Count();
       
  1156             for(i=0;i<count;i++)
       
  1157                 {
       
  1158                 // if dispname and id are same
       
  1159                 if (( ((((*aCurrentList)[i])->WatcherId()).Identity()) == aUri )
       
  1160                     && ( (((*aCurrentList)[i])->WatcherDisplayName()) == aDispName ))
       
  1161                     {
       
  1162                     found = ETrue;
       
  1163             break;            
       
  1164                     }
       
  1165                 }
       
  1166             if(found) // do we need to leave if error? Waqas
       
  1167             {
       
  1168                 delete (*aCurrentList)[i];
       
  1169                 aCurrentList->Remove(i);
       
  1170                 disappearedList->AppendL( watcherInfoForEvent2 );
       
  1171                 CleanupStack::Pop( watcherInfoForEvent2 );
       
  1172                 }
       
  1173             else
       
  1174                 CleanupStack::PopAndDestroy( watcherInfoForEvent2 );
       
  1175             
       
  1176             CleanupStack::PopAndDestroy( watcherInfoForEvent1 );
       
  1177             }
       
  1178             break;
       
  1179         default:
       
  1180             {
       
  1181             User::Leave( KErrArgument );
       
  1182             }
       
  1183             break;            
       
  1184         };
       
  1185 
       
  1186     CXIMPDataSubscriptionStateImp* stateImp = CXIMPDataSubscriptionStateImp::NewLC();
       
  1187     stateImp->SetDataStateL( aDataState );
       
  1188     stateImp->SetSubscriptionStateL( aSubscriptionState );
       
  1189     CleanupStack::Pop( stateImp );
       
  1190 
       
  1191     // create the actual event
       
  1192     CPresenceWatcherListEventImp* tmp =
       
  1193         CPresenceWatcherListEventImp::NewLC(
       
  1194                 newList,
       
  1195                 aCurrentList,
       
  1196                 disappearedList,
       
  1197                 stateImp );
       
  1198      
       
  1199 
       
  1200     /*
       
  1201      * In cleanupstack there are 4 items, FIFO
       
  1202      *   - new list
       
  1203      *   - current list
       
  1204      *   - disappeared list
       
  1205      *   - event imp
       
  1206      */
       
  1207 
       
  1208     return tmp;
       
  1209     }
       
  1210 
       
  1211 void T_PresenceWatcherListManagement::SetupListenerReqCompleteL( CXIMPTestContextWrapper* aWrapper, TXIMPTestStatusEventTemplate aEventType )
       
  1212     {
       
  1213     RArray< TInt32 > array;
       
  1214     CleanupClosePushL( array );
       
  1215     array.AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
       
  1216     array.Append( MXIMPContextStateEvent::KInterfaceId );
       
  1217     array.Append( MPresentityPresenceEvent::KInterfaceId );
       
  1218     aWrapper->SetupListenerReqCompleteL( aEventType, &array );
       
  1219     CleanupStack::PopAndDestroy(); // array
       
  1220     }
       
  1221 
       
  1222 void T_PresenceWatcherListManagement::SetupListenerReqCompleteAllowEventsL(  CXIMPTestContextWrapper* aWrapper, TXIMPTestStatusEventTemplate aEventType )
       
  1223     {
       
  1224     RArray< TInt32 > array;
       
  1225     CleanupClosePushL( array );
       
  1226     array.AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
       
  1227     array.AppendL( MXIMPContextStateEvent::KInterfaceId );
       
  1228     array.AppendL( MPresentityPresenceEvent::KInterfaceId );
       
  1229     aWrapper->SetupListenerReqCompleteL( aEventType, &array );
       
  1230     CleanupStack::PopAndDestroy(); // array
       
  1231     }
       
  1232 
       
  1233 // ===========================================================================
       
  1234 // EVENT OBSERVER METHODS
       
  1235 // ===========================================================================
       
  1236 //
       
  1237 void T_PresenceWatcherListManagement::HandlePresenceContextEvent(
       
  1238     const MXIMPContext& aContext,
       
  1239     const MXIMPBase& aEvent )
       
  1240     {
       
  1241     iLastError = KErrNone;
       
  1242     TInt ifId = aEvent.GetInterfaceId();
       
  1243     TInt gg = MPresentityPresenceEvent::KInterfaceId;
       
  1244     if( ifId == MPresenceWatcherListEvent::KInterfaceId )
       
  1245         {
       
  1246         const MPresenceWatcherListEvent* watcherListEvent = 
       
  1247         TXIMPGetInterface< const MPresenceWatcherListEvent >::From( aEvent, MXIMPBase::EPanicIfUnknown );
       
  1248         
       
  1249         if( watcherListEvent->NewWatchersCount() )
       
  1250             {
       
  1251             iLastEvent = EWatcherList;
       
  1252             TInt count = watcherListEvent->NewWatchersCount();
       
  1253             for( TInt a = 0; a < count; ++a )
       
  1254                 {
       
  1255                 TRAPD( error,
       
  1256                     CPresenceWatcherInfoImp* watcherInfo = CPresenceWatcherInfoImp::NewLC(
       
  1257                         watcherListEvent->NewWatcher( a ).WatcherType(),
       
  1258                         watcherListEvent->NewWatcher( a ).WatcherId(),
       
  1259                         watcherListEvent->NewWatcher( a ).WatcherDisplayName() );
       
  1260                     iValidateArray.AppendL( watcherInfo );
       
  1261                     CleanupStack::Pop( watcherInfo );
       
  1262                     );
       
  1263                 if( error != KErrNone )
       
  1264                     {
       
  1265                     iLastError = error;
       
  1266                     return;
       
  1267                     }
       
  1268                 }
       
  1269             }
       
  1270             }
       
  1271     else if( ifId == MPresentityPresenceEvent::KInterfaceId )
       
  1272         {
       
  1273         const MPresentityPresenceEvent* presentityPresenceEvent = 
       
  1274         TXIMPGetInterface< const MPresentityPresenceEvent >::From( aEvent, MXIMPBase::EPanicIfUnknown );
       
  1275         const MXIMPIdentity& prId = presentityPresenceEvent->PresentityId();
       
  1276         const MPresenceInfo& prPif = presentityPresenceEvent->SubscribedPresence(); 
       
  1277         const MXIMPDataSubscriptionState& prDataStae =  presentityPresenceEvent->DataSubscriptionState();
       
  1278         }
       
  1279     else
       
  1280         {
       
  1281         iLastEvent = EInvalid;
       
  1282         }
       
  1283     }
       
  1284 
       
  1285 // ===========================================================================
       
  1286 // TEST CASE TABLE
       
  1287 // ===========================================================================
       
  1288 //
       
  1289 EUNIT_BEGIN_TEST_TABLE(
       
  1290         T_PresenceWatcherListManagement,
       
  1291         "XIMP presence watching tests",
       
  1292         "MODULE" )
       
  1293 
       
  1294 PRFW_DECORATED_TEST(
       
  1295         "Bind Unbind",
       
  1296         "",
       
  1297         "",
       
  1298         "FUNCTIONALITY",
       
  1299         Setup_L,
       
  1300         T_BindUnbind_L,
       
  1301         Teardown )
       
  1302 
       
  1303 PRFW_DECORATED_TEST(
       
  1304         "Single client watcher list subscription",
       
  1305         "",
       
  1306         "",
       
  1307         "FUNCTIONALITY",
       
  1308         Setup_L,
       
  1309         T_SubscribePresenceWatcherList_Single_L,
       
  1310         Teardown )
       
  1311 
       
  1312 PRFW_DECORATED_TEST(
       
  1313         "Multiple client watcher list subscription",
       
  1314         "",
       
  1315         "",
       
  1316         "FUNCTIONALITY",
       
  1317         SetupMultiple_L,
       
  1318         T_SubscribePresenceWatcherList_Multiple_L,
       
  1319         Teardown )
       
  1320 
       
  1321 PRFW_DECORATED_TEST(
       
  1322         "Handle Presence Watcher List",
       
  1323         "",
       
  1324         "",
       
  1325         "FUNCTIONALITY",
       
  1326         Setup_L,
       
  1327         T_HandlePresenceWatcherList_L,
       
  1328         Teardown )
       
  1329         
       
  1330  PRFW_DECORATED_TEST(
       
  1331         "Test India Case",
       
  1332         "",
       
  1333         "",
       
  1334         "FUNCTIONALITY",
       
  1335         Setup_L,
       
  1336         T_IndiaCase_L,
       
  1337         Teardown )
       
  1338 
       
  1339 
       
  1340 EUNIT_END_TEST_TABLE
       
  1341 
       
  1342 
       
  1343 // ===========================================================================
       
  1344 // TEST SUITE CONSTRUCTION
       
  1345 // ===========================================================================
       
  1346 //
       
  1347 EXPORT_C MEUnitTest* CreateTestSuiteL()
       
  1348     {
       
  1349     return T_PresenceWatcherListManagement::NewL();
       
  1350     }
       
  1351 
       
  1352 
       
  1353 // end of file