ximpfw/tsrc/tsrcutils/testcaseutils/prfwtestcontextwrapper.cpp
changeset 51 61fad867f68e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ximpfw/tsrc/tsrcutils/testcaseutils/prfwtestcontextwrapper.cpp	Wed Nov 03 09:32:20 2010 +0530
@@ -0,0 +1,453 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Testing context wrapper
+ *
+*/
+
+
+
+#include <e32std.h>
+
+#include <eunitmacros.h>
+
+#include "prfwtestcontextwrapper.h"
+#include <ximpclient.h>
+#include <ximpcontext.h>
+#include <ximpcontextstateevent.h>
+#include <ximprequestcompleteevent.h>
+#include <ximpstatus.h>
+#include <presencefeatures.h>
+
+
+#include "prfwteststatuseventlistener.h"
+#include "prfwtestmessenger.h"
+#include "prfwtestmessaging.h"
+#include "prfwtestfiletool.h"
+#include "prfwtestprotocols.h"
+
+_LIT( KInstanceAsNumber, "%d" );
+// ======== LOCAL FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Length of number in characters (e.g. 501 --> 3)
+// ---------------------------------------------------------------------------
+//
+TInt NumLenInChars( TInt aNum )
+    {
+    TInt len = 0;
+    TInt tmp = aNum;
+    do
+        {
+        tmp /= 10;  // number is base-10
+        len++;
+        }
+    while ( tmp > 0 );
+    return len;
+    }
+
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// Instance id
+// ---------------------------------------------------------------------------
+//
+EXPORT_C const TDesC16& CXIMPTestContextWrapper::InstanceId() const
+    {
+    return *iInstance;
+    }
+
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CXIMPTestContextWrapper::CXIMPTestContextWrapper( TInt aIndex,
+        MXIMPClient* aClient ) :
+    iIndex( aIndex ),
+    iClient( aClient )
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+void CXIMPTestContextWrapper::ConstructL()
+    {
+    iContext = iClient->NewPresenceContextLC();
+    CleanupStack::Pop(); // iContext
+    iListener = CXIMPTestStatusEventListener::NewL( 20, iContext );
+    iMessenger = CXIMPTestMessenger::NewForClientSideL( iIndex );
+    iPresFeatures = MPresenceFeatures::NewL(iContext); 
+    TInt instanceLength = NumLenInChars( iIndex );
+    iInstance = HBufC::NewL( instanceLength );
+    iInstance->Des().AppendFormat( KInstanceAsNumber, iIndex );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CXIMPTestContextWrapper* CXIMPTestContextWrapper::NewL(
+        TInt aIndex, MXIMPClient* aClient )
+    {
+    CXIMPTestContextWrapper* self = new( ELeave ) CXIMPTestContextWrapper( aIndex, aClient );
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+CXIMPTestContextWrapper::~CXIMPTestContextWrapper()
+    {
+    iStatusEventTraits.Close();
+
+    delete iMessenger;
+    delete iListener;
+    delete iContext;
+    delete iFileTool;
+    delete iInstance;
+    delete iPresFeatures;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C MXIMPContext* CXIMPTestContextWrapper::GetContext()
+    {
+    return iContext;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C MPresenceFeatures* CXIMPTestContextWrapper::GetPresenceFeatures()
+    {
+    return iPresFeatures;
+    }
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CXIMPTestStatusEventListener* CXIMPTestContextWrapper::GetEventListener()
+    {
+    return iListener;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CXIMPTestMessenger* CXIMPTestContextWrapper::GetMessenger()
+    {
+    return iMessenger;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C MXIMPClient* CXIMPTestContextWrapper::GetClient()
+    {
+    return iClient;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::DeletePresenceContext()
+    {
+    // used to test abrupt handle closings
+    iListener->SetEventSourceL( NULL );
+    delete iContext;
+    iContext = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::SetupEmptyListener()
+    {
+    iListener->ResetEventStack();
+    iStatusEventTraits.Reset();
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C RArray<TXIMPTestStatusEventSnapshot>* CXIMPTestContextWrapper::GetStatusTraits()
+    {
+    return &iStatusEventTraits;
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::SetupListenerL( TXIMPTestStatusEventTemplate aEventType )
+    {
+    ResetListener();
+    iListener->GetEventTemplateL( iStatusEventTraits, aEventType );
+    iMessenger->SetPluginIndex( iIndex );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::AppendToTraitsL( TXIMPTestStatusEventTemplate aEventType )
+    {
+    iListener->GetEventTemplateL( iStatusEventTraits, aEventType );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::SetupListenerReqCompleteL(
+        TXIMPTestStatusEventTemplate aEventType,
+        RArray< TInt32 >* aAdditionalEvents )
+    {
+    iListener->ResetEventStack();
+    iListener->AcceptedEventTypes().Reset();
+    iListener->AcceptedEventTypes().AppendL( MXIMPRequestCompleteEvent::KInterfaceId );
+
+    if ( aAdditionalEvents )
+        {
+        for ( TInt i = 0; i < aAdditionalEvents->Count(); i++ )
+            {
+            iListener->AcceptedEventTypes().AppendL( (*aAdditionalEvents)[ i ] );
+            }
+        }
+
+    iListener->ReRegisterEventFilterL();
+    iStatusEventTraits.Reset();
+    iListener->GetEventTemplateL( iStatusEventTraits, aEventType );
+
+    iMessenger->SetPluginIndex( iIndex );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::ClearListener()
+    {
+    iListener->ResetEventStack();
+    iListener->SetEventSourceL( NULL );
+
+    iStatusEventTraits.Reset();
+    }
+
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::ResetListener()
+    {
+    iListener->ResetEventStack();
+    iListener->ResetEventTypeStack();
+    iStatusEventTraits.Reset();
+    iListener->ReRegisterEventFilterL();
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::WaitRequestAndStackEvents( TXIMPRequestId aReqId )
+    {
+    iListener->WaitRequestAndStackEvents( aReqId );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::VerifyEventStackL( const TPtrC8& aDesc )
+    {
+    iListener->VerifyEventStackL( iStatusEventTraits.Array(), aDesc );
+    }
+
+// ---------------------------------------------------------------------------
+// CXIMPTestContextWrapper::WaitAnyEvent
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::WaitAnyEvent()
+    {
+    iListener->WaitAnyEvent();
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::BindL(
+        TUid aUid,
+        const TDesC& aServer,
+        const TDesC& aUser,
+        const TDesC& aPassword )
+    {
+    SetupListenerL( EXIMPTestStatusEvents_BindingOk );
+    iMessenger->SetNoError();
+    iMessenger->SetPluginIndex( iIndex );
+
+    delete iFileTool;
+    iFileTool = NULL;
+    iFileTool = CXIMPTestFileTool::NewL( aUid.iUid, iIndex );
+
+    TXIMPRequestId reqId = iContext->BindToL(
+            aUid,
+            aServer,
+            aUser,
+            aPassword,
+            *iInstance,
+            iIndex );
+
+    WaitRequestAndStackEvents( reqId );
+    VerifyEventStackL( _L8("Binding (wrapper BindL): ") );
+
+    EUNIT_ASSERT_DESC( iMessenger->GetBoolean( EXIMPPlgTestOpenSessionCalled ) ||
+                       iMessenger->GetBoolean( EXIMPPlgTestShareSessionCalled ), "OpenSessionL was not called" );
+    }
+
+// ---------------------------------------------------------------------------
+// Bind alternative
+// ---------------------------------------------------------------------------
+//
+const TUid KTestProtocolUid = { K_PRFW_TST_PROTOCOL_1_IMPLEMENTATION_UID };  // hardcoded...
+
+_LIT( KTestFakeServer,      "www.imps%d.no/wv" );
+_LIT( KTestFakeUser,        "user%d" );
+_LIT( KTestFakePassword,    "password%d" );
+
+EXPORT_C void CXIMPTestContextWrapper::BindL( TInt aId )
+    {
+    SetupListenerL( EXIMPTestStatusEvents_BindingOk );
+    iMessenger->SetNoError();
+    iMessenger->SetPluginIndex( aId );
+
+    // create fake info
+    TInt extraLength = 8; // bad style... but length is enough
+
+    HBufC* fakeSrv = HBufC::NewLC( KTestFakeServer().Length() + extraLength );
+    fakeSrv->Des().AppendFormat( KTestFakeServer, aId );
+
+    HBufC* fakeUser = HBufC::NewLC( KTestFakeUser().Length() + extraLength );
+    fakeUser->Des().AppendFormat( KTestFakeUser, aId );
+
+    HBufC* fakePass = HBufC::NewLC( KTestFakePassword().Length() + extraLength );
+    fakePass->Des().AppendFormat( KTestFakePassword, aId );
+
+    delete iFileTool;
+    iFileTool = NULL;
+    iFileTool = CXIMPTestFileTool::NewL( KTestProtocolUid.iUid, iIndex );
+
+    TXIMPRequestId reqId = iContext->BindToL(
+            KTestProtocolUid,
+            *fakeSrv,
+            *fakeUser,
+            *fakePass,
+            *iInstance,
+            aId );
+
+    CleanupStack::PopAndDestroy( 3, fakeSrv );
+
+    WaitRequestAndStackEvents( reqId );
+    VerifyEventStackL( _L8("Binding (wrapper BindL): ") );
+
+    EUNIT_ASSERT_DESC( iMessenger->GetBoolean( EXIMPPlgTestOpenSessionCalled ) ||
+                       iMessenger->GetBoolean( EXIMPPlgTestShareSessionCalled ), "OpenSessionL was not called" );
+    }
+
+  
+    
+ ///NEW BIND   
+ EXPORT_C void CXIMPTestContextWrapper::BindWithSettingsL( TInt aId )
+    {
+    SetupListenerL( EXIMPTestStatusEvents_BindingOk );
+    iMessenger->SetNoError();
+    iMessenger->SetPluginIndex( 0/*aId*/ );
+
+    // create fake info
+    TInt extraLength = 8; // bad style... but length is enough
+
+    HBufC* fakeSrv = HBufC::NewLC( KTestFakeServer().Length() + extraLength );
+    fakeSrv->Des().AppendFormat( KTestFakeServer, aId );
+
+    HBufC* fakeUser = HBufC::NewLC( KTestFakeUser().Length() + extraLength );
+    fakeUser->Des().AppendFormat( KTestFakeUser, aId );
+
+    HBufC* fakePass = HBufC::NewLC( KTestFakePassword().Length() + extraLength );
+    fakePass->Des().AppendFormat( KTestFakePassword, aId );
+
+    delete iFileTool;
+    iFileTool = NULL;
+    iFileTool = CXIMPTestFileTool::NewL( KTestProtocolUid.iUid, iIndex );
+
+    TXIMPRequestId reqId = iContext->BindToL(
+            KTestProtocolUid, aId );
+
+    CleanupStack::PopAndDestroy( 3, fakeSrv );
+
+    WaitRequestAndStackEvents( reqId );
+    VerifyEventStackL( _L8("Binding (wrapper BindWithSettingsL): ") );
+
+    EUNIT_ASSERT_DESC( iMessenger->GetBoolean( EXIMPPlgTestOpenSessionCalled ) ||
+                       iMessenger->GetBoolean( EXIMPPlgTestShareSessionCalled ), "OpenSessionL was not called" );
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CXIMPTestContextWrapper::UnbindL()
+    {
+    SetupListenerL( EXIMPTestStatusEvents_UnbindingOk );
+    iMessenger->SetNoError();
+    TXIMPRequestId reqId = iContext->UnbindL();
+
+    WaitRequestAndStackEvents( reqId );
+    VerifyEventStackL( _L8("Unbinding (wrapper UnbindL): ") );
+
+    EUNIT_ASSERT_DESC( iMessenger->GetBoolean( EXIMPPlgTestCloseSessionCalled ) ||
+                       iMessenger->GetBoolean( EXIMPPlgTestUnshareSessionCalled ) , "CloseSession was not called" );
+    if( iMessenger->GetBoolean( EXIMPPlgTestCloseSessionCalled ) )
+        {
+        DeletePresenceContext();
+        //EUNIT_ASSERT_DESC( iMessenger->GetBoolean( EXIMPPlgTestDeath ), "Plugin did not die, destructor not called.");
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ?description_if_needed
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CXIMPTestFileTool& CXIMPTestContextWrapper::FileTool() const
+    {
+    return *iFileTool;
+    }
+
+// End of file