lbs/lbsclient/src/ctlbsclientpostp261.cpp
branchSymbian2
changeset 1 8758140453c0
child 6 c108117318cb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lbs/lbsclient/src/ctlbsclientpostp261.cpp	Thu Jan 21 12:53:44 2010 +0000
@@ -0,0 +1,256 @@
+// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Symbian Foundation License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+
+//  INCLUDES
+#include "ctlbsclientpostp261.h"
+#include <s32strm.h>
+#include <s32mem.h>
+
+// CONSTANTS
+
+// LOCAL FUNCTIONS
+void CleanOp(TAny* aAnArray)
+    {
+    // Cleanup function the requestor stack
+    RRequestorStack* theStack = reinterpret_cast <RRequestorStack*> (aAnArray);
+    theStack->ResetAndDestroy();
+    }
+
+// ================= MEMBER FUNCTIONS =======================
+
+
+// ---------------------------------------------------------
+// Constructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp261::CT_LbsClientPosTp261(CT_LbsServer& aParent): CT_LbsPortedStepBase(aParent)
+	{  
+	_LIT(KTestName,"Tp261 - RequestorStack Externalize/Internalize");
+	SetTestStepName(KTestName); 
+	}
+
+// ---------------------------------------------------------
+// Destructor.
+// ---------------------------------------------------------
+CT_LbsClientPosTp261::~CT_LbsClientPosTp261()
+	{
+	}
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp261::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp261::CloseTest()
+    {
+    ClosePositioner();
+    Disconnect();
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp261::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp261::StartL()
+    {
+    _LIT(KService1, "Service1");
+    _LIT(KService2, "Service2");
+    _LIT(KService3, "Service3");
+
+    _LIT(KContact1, "Contact1");
+    _LIT(KContact2, "Contact2");
+    _LIT(KContact3, "Contact3");
+
+    CRequestor* serviceId1 = 
+		CRequestor::NewL(CRequestor::ERequestorService, CRequestor::EFormatApplication, 
+                    KService1);
+
+    CRequestor* serviceId2 = 
+        CRequestor::NewL(CRequestor::ERequestorService, CRequestor::EFormatApplication, 
+                    KService2);
+
+    CRequestor* serviceId3 = 
+        CRequestor::NewL(CRequestor::ERequestorService, CRequestor::EFormatApplication, 
+                    KService3);
+
+    CRequestor* contactId1 = 
+        CRequestor::NewL(CRequestor::ERequestorContact, CRequestor::EFormatTelephone, 
+                    KContact1);
+
+    CRequestor* contactId2 = 
+        CRequestor::NewL(CRequestor::ERequestorContact, CRequestor::EFormatUrl, 
+                    KContact2);
+
+    CRequestor* contactId3 = 
+        CRequestor::NewL(CRequestor::ERequestorContact, CRequestor::EFormatMail, 
+                    KContact3);
+
+    RRequestorStack stack = RRequestorStack();
+    CleanupStack::PushL(TCleanupItem(CleanOp ,&stack));
+
+    CleanupStack::PushL(serviceId1);
+    CleanupStack::PushL(serviceId2);
+    CleanupStack::PushL(serviceId3);
+    CleanupStack::PushL(contactId1);
+    CleanupStack::PushL(contactId2);
+    CleanupStack::PushL(contactId3);
+    
+    ConnectL();
+    OpenPositioner();
+    
+    stack.Append(serviceId1);
+    stack.Append(contactId1);
+    stack.Append(contactId2);
+    stack.Append(serviceId2);
+    stack.Append(contactId3);
+    stack.Append(serviceId3);
+
+    CleanupStack::Pop(contactId3);
+    CleanupStack::Pop(contactId2);
+    CleanupStack::Pop(contactId1);
+    CleanupStack::Pop(serviceId3);
+    CleanupStack::Pop(serviceId2);
+    CleanupStack::Pop(serviceId1);
+
+    TInt err = iPositioner.SetRequestor(stack);
+    if (err != KErrNone)
+    	{
+    	_LIT(KErrorAndLeave, "Problems setting requestorstack");
+    	LogErrorAndLeaveL(KErrorAndLeave);
+    	}
+    	
+    const TInt KPosBufFlatExpandSize = 100;
+    
+    //ExternalizeL
+    CBufFlat* bufFlat = CBufFlat::NewL(KPosBufFlatExpandSize);
+    CleanupStack::PushL(bufFlat);
+    
+    RBufWriteStream stream(*bufFlat);
+    CleanupClosePushL(stream);        
+    stack.ExternalizeL(stream);
+    
+    TPtr8 dataPtr((TUint8*)NULL, 0);
+    dataPtr.Set(bufFlat->Ptr(0));    
+
+    CleanupStack::PopAndDestroy(&stream);                
+
+    HBufC8* tempBuf = HBufC8::NewLC(bufFlat->Size());
+    TPtr8 ptr = tempBuf->Des();
+    ptr = dataPtr;
+    
+    //Internalize
+    bufFlat->InsertL(0, ptr);
+    
+    RBufReadStream rstream(*bufFlat);
+    CleanupClosePushL(rstream);
+    
+    RRequestorStack stack2 = RRequestorStack();
+    CleanupStack::PushL(TCleanupItem(CleanOp ,&stack2));
+
+    stack2.InternalizeL(rstream);
+    
+    // Verify the requestor stack
+    VerifyRequestorStackL(stack2);
+    _LIT(KResult, "The RequestorStack is correct after Externalize/Internalize");
+    INFO_PRINTF1(KResult);
+
+    CleanupStack::PopAndDestroy(1); // CleanupOp stack2
+
+    CleanupStack::PopAndDestroy(&rstream);
+    CleanupStack::PopAndDestroy(tempBuf);
+    CleanupStack::PopAndDestroy(bufFlat);
+    CleanupStack::PopAndDestroy(1); // CleanupOp stack1
+
+    ClosePositioner();
+    Disconnect();
+    }
+
+// ---------------------------------------------------------
+// CT_LbsClientPosTp261::VerifyRequestorStackL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CT_LbsClientPosTp261::VerifyRequestorStackL(RRequestorStack& aStack)
+    {    
+    TInt count = aStack.Count();
+    
+    _LIT(KService1, "Service1");
+    _LIT(KService2, "Service2");
+    _LIT(KService3, "Service3");
+
+    _LIT(KContact1, "Contact1");
+    _LIT(KContact2, "Contact2");
+    _LIT(KContact3, "Contact3");
+
+    // Hardcoded number of requestors
+    if (count != 6)
+        {
+        _LIT(KErrorAndLeave, "Wrong number of requestors in the stack");
+        LogErrorAndLeaveL(KErrorAndLeave);
+        }
+
+    if (aStack[0]->RequestorType() != CRequestor::ERequestorService
+           || aStack[0]->RequestorFormat() != CRequestor::EFormatApplication
+           || aStack[0]->RequestorData() != KService1)
+            {
+            _LIT(KErrorAndLeave, "Wrong requestor(1) in stack");
+            LogErrorAndLeaveL(KErrorAndLeave);
+            }
+
+    if (aStack[1]->RequestorType() != CRequestor::ERequestorContact
+           || aStack[1]->RequestorFormat() != CRequestor::EFormatTelephone
+           || aStack[1]->RequestorData() != KContact1)
+            {
+            _LIT(KErrorAndLeave, "Wrong requestor(2) in stack");
+            LogErrorAndLeaveL(KErrorAndLeave);
+            }
+
+    if (aStack[2]->RequestorType() != CRequestor::ERequestorContact
+           || aStack[2]->RequestorFormat() != CRequestor::EFormatUrl
+           || aStack[2]->RequestorData() != KContact2)
+            {
+            _LIT(KErrorAndLeave, "Wrong requestor(3) in stack");
+            LogErrorAndLeaveL(KErrorAndLeave);
+            }
+
+    if (aStack[3]->RequestorType() != CRequestor::ERequestorService
+           || aStack[3]->RequestorFormat() != CRequestor::EFormatApplication
+           || aStack[3]->RequestorData() != KService2)
+            {
+            _LIT(KErrorAndLeave, "Wrong requestor(4) in stack");
+            LogErrorAndLeaveL(KErrorAndLeave);
+            }
+
+    if (aStack[4]->RequestorType() != CRequestor::ERequestorContact
+           || aStack[4]->RequestorFormat() != CRequestor::EFormatMail
+           || aStack[4]->RequestorData() != KContact3)
+            {
+            _LIT(KErrorAndLeave, "Wrong requestor(5) in stack");
+            LogErrorAndLeaveL(KErrorAndLeave);
+            }
+
+    if (aStack[5]->RequestorType() != CRequestor::ERequestorService
+           || aStack[5]->RequestorFormat() != CRequestor::EFormatApplication
+           || aStack[5]->RequestorData() != KService3)
+            {
+            _LIT(KErrorAndLeave, "Wrong requestor(6) in stack");
+            LogErrorAndLeaveL(KErrorAndLeave);
+            }    
+    }