--- /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);
+ }
+ }