contacts_plat/predictivesearch_client_api/tsrc/PsClientTestSuite/src/pstestqueryhandler.cpp
branchRCL_3
changeset 63 f4a778e096c2
child 64 c1e8ba0c2b16
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contacts_plat/predictivesearch_client_api/tsrc/PsClientTestSuite/src/pstestqueryhandler.cpp	Wed Sep 01 12:29:52 2010 +0100
@@ -0,0 +1,533 @@
+/*
+* Copyright (c) 2006-2007 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:  
+*
+*/
+
+
+//SYSTEM INCLUDES
+#include <vpbkeng.rsg>
+#include <collate.h>
+
+//USER INCLUDES
+#include "pstestqueryhandler.h"
+#include "CPsQuery.h"
+#include "CPsQueryItem.h"
+#include "CPsSettings.h"
+
+// ---------------------------------------------------------------------------------
+// 1st phase constructor
+// ---------------------------------------------------------------------------------
+CPsTestQueryHandler* CPsTestQueryHandler::NewL()
+{
+	CPsTestQueryHandler* self = new ( ELeave ) CPsTestQueryHandler();
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	
+	return self;
+}
+
+// ---------------------------------------------------------------------------------
+// Constructor
+// ---------------------------------------------------------------------------------
+//
+CPsTestQueryHandler::CPsTestQueryHandler() 
+{
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::ConstructL() 
+// 2nd phase constructor
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler::ConstructL()
+{
+  	iAsyncHandler = CPSRequestHandler::NewL();
+    iAsyncHandler->AddObserverL(this); 
+  	iSettings = CPsSettings::NewL();   
+  	iPsQuery = CPsQuery::NewL();
+  	iCurrentTestCase = EDefaultCase;
+  	iCurrentErrorCode = KErrNone;
+}
+
+// ---------------------------------------------------------------------------------
+// Destructor
+// ---------------------------------------------------------------------------------
+CPsTestQueryHandler::~CPsTestQueryHandler() 
+{
+	if(iAsyncHandler)
+	{
+		delete iAsyncHandler;
+		iAsyncHandler = NULL;
+	}
+	if(iSettings)
+	{
+		delete iSettings;
+		iSettings = NULL;
+	}
+	if(iPsQuery)
+	{
+		delete iPsQuery;
+		iPsQuery = NULL;
+	} 
+	iContactsList.Reset();
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::SetCurrentTestCase() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: SetCurrentTestCase(TTestCase aCurrentTestCase)
+{
+	iCurrentTestCase = aCurrentTestCase;
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::SetCurrentErrorCode() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: SetCurrentErrorCode(TInt aCurrentErrorCode)
+{
+	iCurrentErrorCode = aCurrentErrorCode;
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::CurrentErrorCode() 
+// 
+// ---------------------------------------------------------------------------------
+TInt CPsTestQueryHandler :: CurrentErrorCode()
+{
+	return(iCurrentErrorCode);
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::GetAllContentsL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler::GetAllContentsL()
+{	
+	iAsyncHandler->GetAllContentsL();
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::StartSearchL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: StartSearchL(const CPsQuery& aSearchQuery)
+{
+    // Send a search request
+	iAsyncHandler->SearchL(aSearchQuery);
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::TestSearchL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: TestSearchL(const TDesC& aBuf, TKeyboardModes aMode)
+{
+	FormTestSearchQueryL(aBuf, aMode);
+
+    // Send a search request
+	iAsyncHandler->SearchL(*iPsQuery);
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::InputSearchL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: InputSearchL(const CPsQuery& aSearchQuery, const TDesC& aInput, RPointerArray<TDesC>& aResultSet)
+{
+	SetCurrentErrorCode(KErrNotFound);
+	
+	//to obtain the result;
+	RPointerArray<TDesC> matchSet;
+	RArray<TPsMatchLocation> matchLocation;
+	
+	// send a search request
+	iAsyncHandler->SearchL(aSearchQuery, aInput, matchSet, matchLocation);
+	
+	// compare the obtained result with desired result set
+	if(matchSet.Count() == aResultSet.Count())
+	{
+		TInt count = matchSet.Count();
+		if(count == 0)
+		{
+			SetCurrentErrorCode(KErrNone);
+		}
+		for(TInt i = 0; i < count; i++)	
+		{
+			TBufC<20> buf1(*(aResultSet[i]));
+			for(TInt j = 0; j < count; j++)
+			{
+				TBufC<20> buf2(*(matchSet[j]));
+				if(buf1.Compare(buf2) == 0)
+				{
+					SetCurrentErrorCode(KErrNone);
+					break;
+				}
+			}
+		}
+	}
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::SetSearchSettingsL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: SetSearchSettingsL(RPointerArray<TDesC>& aSearchUri, RArray<TInt>& aDisplayFields, TInt aMaxResults)
+{
+    iSettings->SetSearchUrisL(aSearchUri);
+    iSettings->SetDisplayFieldsL(aDisplayFields);
+    iSettings->SetMaxResults(aMaxResults);
+
+    iAsyncHandler->SetSearchSettingsL(*iSettings);
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::FormTestSearchQueryL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: FormTestSearchQueryL(const TDesC& aBuf, TKeyboardModes aMode)
+{
+	for ( int i = 0; i < aBuf.Length(); i++ )
+	{
+	    CPsQueryItem* item = CPsQueryItem::NewL();
+	    item->SetCharacter(aBuf[i]);
+	 	if(aMode != EModeUndefined)
+	 	{
+	 		item->SetMode(aMode);	 		
+	 	}
+		iPsQuery->AppendL(*item);			
+	}
+	
+	CPsQueryItem* item1 = CPsQueryItem::NewL();
+	item1->SetCharacter(aBuf[0]);
+	item1->SetMode(EItut);
+	
+	iPsQuery->InsertL(*item1,0);
+	
+	iPsQuery->Remove(0);
+	
+	iPsQuery->InsertL(*item1,aBuf.Length()+2);
+	
+	iPsQuery->Remove(-1);
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::HandlePsResultsUpdate() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: HandlePsResultsUpdate(RPointerArray<CPsClientData>& searchResults, RPointerArray<TDesC>& /*searchSeqs*/)
+{
+	// search results should always be a subset of iContactslist
+	TInt itemstoshow = searchResults.Count();	
+    switch(iCurrentTestCase)
+    {
+    	case EAddContact:
+    	{
+			VerifyResult(searchResults, ETrue);
+    		break;
+    	}
+    	case EDeleteContact:
+    	case EAddContactNeg:
+    	case EFilter:
+    	{
+    		VerifyResult(searchResults, EFalse);
+    		break;
+    	}
+    	/*
+    	case EPsData:
+    	{
+    		SwitchEPsData(searchResults);
+    		break;
+    	}
+    	*/
+    	case ETruncateResult:
+    	{
+    		SetCurrentErrorCode(KErrGeneral);
+    		if(itemstoshow == (iContactsList.Count() - 2))
+    		{
+    		//	SetCurrentErrorCode(KErrNone);
+    			VerifyResult(searchResults, ETrue);
+    		}
+    		break;
+    	}
+    	case ESort:
+    	{
+    		SetCurrentErrorCode(KErrNotFound);
+
+    		// first verify if the contact items created are present in result set
+    		VerifyResult(searchResults, ETrue);
+    		
+    		if(CurrentErrorCode() == KErrNone)
+    		{
+    			// then verify if the result is sorted or not
+	    		if( !VerifySortResult(searchResults) )
+	    		{
+	    			SetCurrentErrorCode(KErrGeneral);
+	    		}
+    		}
+    		
+    		break;
+    	}
+    	default:
+    	{
+    		SetCurrentErrorCode(KErrNone);
+    		break;
+    	}
+    }
+	CActiveScheduler::Stop();
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::ShutDownL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: ShutDownL()
+{
+	iAsyncHandler->ShutdownServerL();
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::Cancel() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: Cancel()
+{
+	iAsyncHandler->CancelSearch();
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::Version() 
+// 
+// ---------------------------------------------------------------------------------
+TVersion CPsTestQueryHandler :: Version()
+{
+	return (iAsyncHandler->Version());
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::IsLanguageSupportedL() 
+// 
+// ---------------------------------------------------------------------------------
+TBool CPsTestQueryHandler::IsLanguageSupportedL(TLanguage aLang)
+{
+	return(iAsyncHandler->IsLanguageSupportedL(aLang));
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::HandlePsErrorL() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: HandlePsError(TInt /*aErrorCode*/)
+{
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::SetContactsDetails() 
+// 
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: SetContactsDetails(RPointerArray<CPsClientData>& aContactsList)
+{
+	for(TInt i =0 ; i < aContactsList.Count();i++)
+	{
+		iContactsList.Append(aContactsList[i]);
+	}
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::VerifyResult() 
+// 
+// This function verifies 
+// 	for positive test case: if the contacts/ groups created are present in result set 
+//  for negative test case: contacts/ groups created are not be present in result set
+// ---------------------------------------------------------------------------------
+void CPsTestQueryHandler :: VerifyResult(RPointerArray<CPsClientData>& aSearchResults, TBool aResultType)
+{
+	SetCurrentErrorCode(KErrGeneral);
+	if(aSearchResults.Count() == 0 && !aResultType)
+	{
+		// result match is 0 AND is negative test case 
+		SetCurrentErrorCode(KErrNone);
+		return;
+	}
+	
+	for(TInt i = 0; i < aSearchResults.Count(); i++)
+	{
+		for(TInt j = 0; j < iContactsList.Count(); j++)
+		{
+			if(CompareByData(*(aSearchResults[i]), *(iContactsList[j])) == 0)
+			{
+				iContactsList[j]->SetId(aSearchResults[i]->Id());
+				if(aResultType)
+				{
+					SetCurrentErrorCode(KErrNone);
+					break;
+				}
+				else
+				{
+					SetCurrentErrorCode(KErrGeneral);
+					break;
+				}
+			}
+			else
+			{
+				if(aResultType)
+				{
+					SetCurrentErrorCode(KErrGeneral);
+				}
+				else
+				{
+					SetCurrentErrorCode(KErrNone);
+				}
+			}
+		}
+	}
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::IndexForGroupDataL() 
+// 
+// 
+// ---------------------------------------------------------------------------------
+TInt CPsTestQueryHandler::IndexForGroupDataL()
+{
+	TInt grpIndex;
+	RArray<TInt> dataOrder;
+	TBufC<30> groupUri(KGroupUri);
+	iAsyncHandler->GetDataOrderL(groupUri, dataOrder);
+	
+	for(TInt i=0; i < dataOrder.Count(); i++)
+	{
+		if(dataOrder[i] == R_VPBK_FIELD_TYPE_LASTNAME)
+		{
+			grpIndex = i;
+		}
+	}
+	
+	return grpIndex;
+}
+
+// ---------------------------------------------------------------------------------
+// CPsTestQueryHandler::VerifySortResult() 
+// 
+// This function verifies if the result set is sorted or not
+// ---------------------------------------------------------------------------------
+TBool CPsTestQueryHandler::VerifySortResult(RPointerArray<CPsClientData>& aSearchResults)
+{
+	TBool isSorted = EFalse;
+	TInt i = 0;
+	
+	for(i = 0; i < aSearchResults.Count() - 1 ; i++)
+	{
+		if(CompareByData(*(aSearchResults[i]), *(aSearchResults[i+1])) > 0)	
+		{
+			break;
+		}
+	}
+	
+	if( i == aSearchResults.Count() - 1)
+	{
+		isSorted = ETrue;
+	}
+	return isSorted;
+}
+
+void CPsTestQueryHandler::SwitchEPsData(RPointerArray<CPsClientData>& searchResults)
+{
+	TInt itemstoshow = searchResults.Count();		
+	SetCurrentErrorCode(KErrNotFound);
+	for(TInt i = 0; i < itemstoshow; i++)
+	{
+        /*
+        InsertContactId(searchResults[i]->Id(),i);
+        if((iFirstName.Compare(searchResults[i]->Data(0)->Des()) == 0) && (iLastName.Compare(searchResults[i]->Data(1)->Des())==0) && (iCompanyName.Compare(searchResults[i]->Data(2)->Des())==0))
+        {
+            if(searchResults[i]->IsDataMatch(0) == EFalse && searchResults[i]->IsDataMatch(1) == EFalse && searchResults[i]->IsDataMatch(2))
+            {
+                SetCurrentErrorCode(KErrNone);
+            }
+
+            TBool fl = searchResults[i]->IsWordMatch(2,0);
+        }
+        */
+		for(TInt j = 0; j < iContactsList.Count(); j++)
+		{
+			// compare searchResult[i] with iContactsList[j]
+            /*
+		 	if((CompareByData(*(searchResults[i]), *(iContactsList[j])) == 0) &&
+			(searchResults[i]->IsDataMatch(0) == EFalse && searchResults[i]->IsDataMatch(1) == EFalse && searchResults[i]->IsDataMatch(2)))
+			{
+				SetCurrentErrorCode(KErrNone);
+				iContactsList[j]->SetId(searchResults[i]->Id());
+				break;
+			}
+			else
+			{
+				SetCurrentErrorCode(KErrNotFound);
+			}
+            */
+		}
+	}
+}
+
+void CPsTestQueryHandler::CachingStatus(TCachingStatus& /*aStatus*/, TInt& /*aError*/)
+{
+	// implement later
+}
+
+TInt CPsTestQueryHandler::CompareByData ( const CPsClientData& aObject1, const CPsClientData& aObject2 )
+{
+	TBuf<KBufferMaxLen> data1;
+     TBuf<255> data2;
+     
+     _LIT(KSpace, " ");
+     
+     data1 = KNullDesC;
+     for ( int i = 0; i < aObject1.DataElementCount(); i++ )
+     {
+     	 if ( aObject1.Data(i) )
+	     {
+	     	data1 += aObject1.Data(i)->Des();
+	     	data1 += KSpace;
+	     }	     
+     }
+     
+     // Trim the unnecessary white spaces before we compare
+     data1.TrimAll();
+     
+     data2 = KNullDesC;
+     for ( int i = 0; i < aObject2.DataElementCount(); i++ )
+     {
+     	 if ( aObject2.Data(i) )
+	     {
+	     	data2 += aObject2.Data(i)->Des();
+	     	data2 += KSpace;
+	     }	     
+     }   
+     
+     // Trim the unnecessary white spaces before we compare 
+     data2.TrimAll();   
+     
+	 // Get the standard method
+	 TCollationMethod meth = *Mem::CollationMethodByIndex( 0 );
+  	 meth.iFlags |= TCollationMethod::EIgnoreNone;
+  	 meth.iFlags |= TCollationMethod::EFoldCase;
+
+	 // Magic: Collation level 3 is used
+	 TInt comparison(data1.CompareC( data2, 3, &meth ));
+	 return comparison;
+}
+
+// End of file