phonebookengines/contactsmodel/tsrc/Integration/TestStartUp/src/TestGetSetViewSettingStep.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/TestStartUp/src/TestGetSetViewSettingStep.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,670 @@
+// Copyright (c) 2005-2009 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:
+//
+
+#include "TestGetSetViewSettingStep.h"
+#include <cntviewstore.h>
+
+//For default actions
+_LIT8(KSortPluginName, "");
+_LIT(KTempViewName,"TempViewName");
+
+
+CTestGetSetViewSettingStep::~CTestGetSetViewSettingStep()
+/**
+ * Destructor
+ */
+	{
+	}
+
+
+CTestGetSetViewSettingStep::CTestGetSetViewSettingStep()
+/**
+ * Constructor
+ */
+	{
+	// Call base class method to set up the human readable name for logging
+	SetTestStepName(KTestGetSetViewSettingStep); 
+	}
+
+
+TVerdict CTestGetSetViewSettingStep::doTestStepPreambleL()
+/**Step
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+ 	{
+ 	GetStringFromConfig(ConfigSection(),KApiActionTag,iIniApiAction);
+ 	GetIntFromConfig(ConfigSection(),KNoOfViewsTag,iIniNumberOfViews);
+ 	return TestStepResult();
+ 	}
+ 	
+
+TVerdict CTestGetSetViewSettingStep::doTestStepL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual. Implements the main control function
+ * which calls a number of actions that this test step is responsible for
+ */
+	{
+	SetTestStepResult(EPass);
+	
+	if (iIniApiAction.Compare(KApiGet) == KErrNone)
+	    {
+	    RPointerArray<CContactDefaultViewDefinition> storedViewDefs;
+	    CleanupClosePushL(storedViewDefs);
+		TRAPD(err, TContactViewStore::GetDefaultViewsL(storedViewDefs));
+		if (err != KErrNone || storedViewDefs.Count() != iIniNumberOfViews)
+		    {
+			SetTestStepResult(EFail);
+			User::Leave(err);
+		    }		    
+		else
+	  	    {	    
+	        TBool res = TestStoredDefaultViewsL(storedViewDefs);	 
+	        if (!res)
+	            {
+	    	    SetTestStepResult(EFail);
+	            }	    
+	        }
+	    CleanupStack::PopAndDestroy();
+	    }
+	    
+	else if (iIniApiAction.Compare(KApiSet) == KErrNone)
+	    {
+	    TRAPD(err,SetNewDefaultViewsL())
+	    if (err != KErrNone)
+	        {
+	    	SetTestStepResult(EFail);
+	        }
+	    }
+	    
+	else if (iIniApiAction.Compare(KApiAppend) == KErrNone)
+	    {
+		TRAPD(err,AppendToDefaultViewListL());
+		if (err != KErrNone)
+		    {
+			SetTestStepResult(EFail);
+		    }
+	    }
+	    
+	else if (iIniApiAction.Compare(KApiDelete) == KErrNone)
+	    {
+		TRAPD(err,DeleteAViewDefinitionL());
+		if (err != KErrNone)
+		    {
+			SetTestStepResult(EFail);
+		    }
+	    }
+	    
+	else if (iIniApiAction.Compare(KApiOOMGet) == KErrNone)
+	    {
+		TRAPD(err,OOMTestGetDefaultViewsL());
+		if (err != KErrNone)
+		    {
+			SetTestStepResult(EFail);
+		    }
+	    }
+	    
+	else if (iIniApiAction.Compare(KApiOOMSet) == KErrNone)
+	    {
+		TRAPD(err,OOMTestSetDefaultViewsL());
+		if (err != KErrNone)
+		    {
+			SetTestStepResult(EFail);
+		    }
+	    }
+	else
+	    {
+		//illegal api action
+		SetTestStepResult(EFail);
+	    }    
+	   
+	return TestStepResult();    
+	}
+
+	
+TVerdict CTestGetSetViewSettingStep::doTestStepPostambleL()
+/**
+ * @return - TVerdict code
+ * Override of base class virtual
+ */
+	{
+	return TestStepResult();
+	}
+	
+
+/**
+ * return TBool
+ * @param aStoredViewDefs  an array of pointers to CContactDefaultViewDefinition objects
+ * Implements a method to test the view definitions retrieved from
+ * central repository against whats expected in the ini file
+ */	
+TBool CTestGetSetViewSettingStep::TestStoredDefaultViewsL(RPointerArray<CContactDefaultViewDefinition>& aStoredViewDefs)
+    {
+    RContactViewSortOrder viewSortOrder;
+	for (TInt n = 0; n < iIniNumberOfViews; n++)
+	    {
+		TBuf<KMaxTagLen>viewNameTag;
+		TBuf<KMaxTagLen>pluginNameTag;
+		TBuf<KMaxTagLen>viewPreferanceTag;
+		TBuf<KMaxTagLen>viewTypeTag;
+		TBuf<KMaxTagLen>sortOrderTag;
+		
+		TPtrC viewNameFromIni;
+		TPtrC pluginNameFromIni;
+		TInt  viewPreferanceFromIni;
+		TInt  viewTypeFromIni =0;
+		TInt  sortOrderFromIni =0;
+		
+		viewNameTag       = KViewNameTag;
+		pluginNameTag     = KPluginNameTag;
+		viewPreferanceTag = KViewPreferanceTag;
+		viewTypeTag       = KViewTypeTag;
+		
+		viewNameTag.AppendNum(n+1);
+		pluginNameTag.AppendNum(n+1);
+		viewPreferanceTag.AppendNum(n+1);
+		viewTypeTag.AppendNum(n+1);
+		
+		GetStringFromConfig(ConfigSection(),viewNameTag,viewNameFromIni);
+		GetStringFromConfig(ConfigSection(),pluginNameTag,pluginNameFromIni);
+		GetIntFromConfig(ConfigSection(),viewPreferanceTag,viewPreferanceFromIni);
+		GetIntFromConfig(ConfigSection(),viewTypeTag,viewTypeFromIni);
+		
+	    CContactDefaultViewDefinition* gotDefs = aStoredViewDefs[n];
+	    
+	    if ((gotDefs->ViewNameL().Compare(viewNameFromIni)) != KErrNone)
+		    {
+		    _LIT(KWrongName, "View Name does not match expected name in INI file");
+		    ERR_PRINTF1(KWrongName);
+		    return (EFalse);
+		    }
+		else
+		    {
+			_LIT(KNameOk,"View Name mataches expected name in the INI file");
+			INFO_PRINTF1(KNameOk);
+		    }
+		     
+		//Truncate plugin name
+		HBufC8 *buf = NULL;
+		TRAPD(err, buf = HBufC8::NewL(pluginNameFromIni.Size()));
+		CleanupStack::PushL(buf);
+		
+		if (err != KErrNone)
+		    {
+		    CleanupStack::PopAndDestroy(buf);
+			return (EFalse);
+	    	}
+	    	
+        TPtr8 tptr8pluginNameFromIni = buf->Des();
+        tptr8pluginNameFromIni.Copy(pluginNameFromIni);
+        		   
+	    if (gotDefs->SortPluginNameL().Length() == 0 && tptr8pluginNameFromIni.Length() != 0)
+	        {
+	        _LIT(KPlugLenthZero,"PluginLength = 0 But Ini expected a valid name");
+	        ERR_PRINTF1(KPlugLenthZero);
+	        CleanupStack::PopAndDestroy(buf);
+		    return (EFalse);
+	        }
+	    else if (gotDefs->SortPluginNameL().Length() != 0 && tptr8pluginNameFromIni.Length() == 0)
+	        {
+	   	    _LIT(KPlugIniZero,"Ini Plugin name missing, valid Plugin Name stored in CR");
+	   	    ERR_PRINTF1(KPlugIniZero);
+	   	    CleanupStack::PopAndDestroy(buf);
+		    return (EFalse);
+	        }
+	    else if ((gotDefs->SortPluginNameL().Compare(tptr8pluginNameFromIni)) == KErrNone)
+	        {
+		    _LIT(KMatch,"Expected Plugin name received");
+		    INFO_PRINTF1(KMatch);
+		    CleanupStack::PopAndDestroy(buf);
+		    }
+		else
+		    {
+			 _LIT(KWrongName, "PlugIn Name Does Not Match Name in INI File");
+		    ERR_PRINTF1(KWrongName);
+		    CleanupStack::PopAndDestroy(buf);
+		    return (EFalse);
+		    }
+		    
+		if (gotDefs->ViewPreferences() != viewPreferanceFromIni)
+		    {
+		    _LIT(KVprefNoMatch,"ViewPreferances do not match");
+		    ERR_PRINTF1(KVprefNoMatch);
+		    return (EFalse);
+		    }
+		else
+		    {
+		    _LIT(KVprefMatch,"ViewPreferances match ok");
+		    INFO_PRINTF1(KVprefMatch);	
+		    }
+		
+		CContactDefaultViewDefinition::TViewType viewType;
+	    if (viewTypeFromIni == 0)
+		    {			
+			viewType = CContactDefaultViewDefinition::ERemoteView;
+		    }
+		else if (viewTypeFromIni == 1)
+		    {
+			viewType = CContactDefaultViewDefinition::ENamedRemoteView;
+		    }
+		else
+		    {
+		    viewType = (CContactDefaultViewDefinition::TViewType)viewTypeFromIni;
+		    }
+		       
+		if (gotDefs->ViewType() != viewType)
+		    {
+			_LIT(KViewTypeNoMatch,"View Types do not match");
+		    ERR_PRINTF1(KViewTypeNoMatch);
+		    return (EFalse);
+		    }
+		else
+		    {
+			_LIT(KViewTypeMatch,"View Types match ok");
+		    INFO_PRINTF1(KViewTypeMatch);
+		    }
+		    
+		viewSortOrder = gotDefs->SortOrder();
+		TUid sortOrderUid = TUid::Null();
+								    
+		sortOrderTag = KFirstSortOrderTag;
+	    sortOrderTag.AppendNum(n+1);
+	    
+	    
+		if (GetIntFromConfig(ConfigSection(),sortOrderTag,sortOrderFromIni))						
+		    {
+			sortOrderUid = TUid::Uid(sortOrderFromIni);
+					
+		    if (viewSortOrder[0] != sortOrderUid)
+	            {
+			    _LIT(KFirstSOWrong,"Incorrect first sort order received = %d");
+			    ERR_PRINTF2(KFirstSOWrong,viewSortOrder[0]);
+			    return (EFalse);
+			    }
+		    }
+			
+		sortOrderTag = KSecondSortOrderTag;
+		sortOrderTag.AppendNum(n+1);
+	
+		if (GetIntFromConfig(ConfigSection(),sortOrderTag,sortOrderFromIni))
+		    {
+			sortOrderUid = TUid::Uid(sortOrderFromIni);
+			
+		    if (viewSortOrder[1] != sortOrderUid)
+	            {
+			    _LIT(KSecondSOWrong,"Incorrect second sort order received = %d");
+			    ERR_PRINTF2(KSecondSOWrong,viewSortOrder[1]);
+			    return (EFalse);
+			    }
+		    }
+				
+		sortOrderTag = KThirdSortOrderTag;
+		sortOrderTag.AppendNum(n+1);
+		
+		if (GetIntFromConfig(ConfigSection(),sortOrderTag,sortOrderFromIni))
+		    {
+			sortOrderUid = TUid::Uid(sortOrderFromIni);
+			
+		    if (viewSortOrder[2] != sortOrderUid)
+	            {
+		        _LIT(KThirdSOWrong,"Incorrect third sort order received = %d");
+			    ERR_PRINTF2(KThirdSOWrong,viewSortOrder[2]);
+			    return (EFalse);
+			    }
+		    }
+					    
+	    }
+	    viewSortOrder.Close();
+	    return (ETrue);
+    }	   
+		
+
+/**
+ * Implements a method to overwrite the view settings in central
+ * repository by calling the SetDefaultViewsL() API. View settings
+ * are read in from the ini file.
+*/
+void CTestGetSetViewSettingStep::SetNewDefaultViewsL()
+    {
+    RPointerArray<CContactDefaultViewDefinition> viewDefs;
+    CContactDefaultViewDefinition* createdViewDef;
+    CleanupClosePushL(viewDefs);
+    
+    RContactViewSortOrder viewSortOrder;
+    CleanupClosePushL(viewSortOrder);
+        
+	for (TInt n = 0; n < iIniNumberOfViews; n++)
+	    {		
+		TBuf<KMaxTagLen>viewNameTag;
+		TBuf<KMaxTagLen>pluginNameTag;
+		TBuf<KMaxTagLen>viewPreferanceTag;
+		TBuf<KMaxTagLen>viewTypeTag;
+		TBuf<KMaxTagLen>sortOrderTag;
+		
+		TPtrC viewNameFromIni;
+		TPtrC pluginNameFromIni;
+		TInt  viewPreferanceFromIni;
+		TInt  viewTypeFromIni;
+		TInt  sortOrderFromIni;
+		
+		viewNameTag       = KViewNameTag;
+		pluginNameTag     = KPluginNameTag;
+		viewPreferanceTag = KViewPreferanceTag;
+		viewTypeTag       = KViewTypeTag;
+		
+		viewNameTag.AppendNum(n+1);
+		pluginNameTag.AppendNum(n+1);
+		viewPreferanceTag.AppendNum(n+1);
+		viewTypeTag.AppendNum(n+1);
+				
+		GetStringFromConfig(ConfigSection(),viewNameTag,viewNameFromIni);
+		GetStringFromConfig(ConfigSection(),pluginNameTag,pluginNameFromIni);
+		GetIntFromConfig(ConfigSection(),viewPreferanceTag,viewPreferanceFromIni);
+		GetIntFromConfig(ConfigSection(),viewTypeTag,viewTypeFromIni);
+				
+		// change the view type
+		CContactDefaultViewDefinition::TViewType viewType;
+	    if (viewTypeFromIni == 0)
+		    {			
+		    viewType = CContactDefaultViewDefinition::ERemoteView;
+		    }
+		else if (viewTypeFromIni == 1)
+		    {
+	        viewType = CContactDefaultViewDefinition::ENamedRemoteView;
+		    }
+		else
+		    {
+			_LIT(WrongViewType,"Incorrect View Type now being used from ini file");
+			INFO_PRINTF1(WrongViewType);
+			viewType = ((CContactDefaultViewDefinition::TViewType)viewTypeFromIni);
+		    }
+				
+		TContactViewPreferences viewPref = static_cast<TContactViewPreferences> (viewPreferanceFromIni);
+		
+		viewSortOrder.Close();
+		viewSortOrder = RContactViewSortOrder();
+		
+		TUid sortOrderUid = TUid::Null();   
+	    sortOrderTag = KFirstSortOrderTag;
+	    sortOrderTag.AppendNum(n+1);
+	    if(GetIntFromConfig(ConfigSection(),sortOrderTag,sortOrderFromIni))
+	        {
+	    	sortOrderUid = TUid::Uid(sortOrderFromIni); 
+		    viewSortOrder.AppendL(sortOrderUid);
+	        }
+		   
+	    sortOrderTag = KSecondSortOrderTag;
+	    sortOrderTag.AppendNum(n+1);
+	    if(GetIntFromConfig(ConfigSection(),sortOrderTag,sortOrderFromIni))
+	        {
+	    	sortOrderUid = TUid::Uid(sortOrderFromIni); 
+		    viewSortOrder.AppendL(sortOrderUid);
+	        }
+		  
+	    sortOrderTag = KThirdSortOrderTag;
+	    sortOrderTag.AppendNum(n+1);
+	    if(GetIntFromConfig(ConfigSection(),sortOrderTag,sortOrderFromIni))
+	        {
+	    	sortOrderUid = TUid::Uid(sortOrderFromIni); 
+	    	viewSortOrder.AppendL(sortOrderUid);
+	        }
+		
+		//Read the plugin name from ini, truncate the name and set plugin
+		//name with the set method
+		HBufC8 *buf = NULL;
+		TRAPD(err1, buf = HBufC8::NewL(pluginNameFromIni.Size()));
+		CleanupStack::PushL(buf);
+		if (err1 != KErrNone)
+		    {
+			User::Leave(err1);
+	    	}		
+		TPtr8 tptr8pluginNameFromIni = buf->Des();
+        tptr8pluginNameFromIni.Copy(pluginNameFromIni);      
+		
+		//Create a CContactDefaultViewDefinition object with data from ini file
+	    createdViewDef = NULL;		
+		TRAPD(res,createdViewDef = CContactDefaultViewDefinition::NewLC(viewType,
+		                                                                viewNameFromIni,
+		                                                                viewSortOrder,
+		                                                                viewPref,
+		                                                                tptr8pluginNameFromIni);
+		CleanupStack::Pop(createdViewDef););
+		CleanupStack::PopAndDestroy(buf);
+		CleanupStack::PushL(createdViewDef);
+		if(res != KErrNone)
+		    {
+			User::Leave(res);
+		    }                                     		    
+		viewDefs.AppendL(createdViewDef);	
+	    }	
+	    	    
+	    TRAPD(err2,TContactViewStore::SetDefaultViewsL(viewDefs));
+	    if (err2 != KErrNone)
+	        {
+	    	_LIT(KSetFail,"SetDefaultViewsL(viewDefs) left with err2 = %d");
+	    	ERR_PRINTF2(KSetFail,err2);
+	    	User::Leave(err2);
+	        }
+	        
+	    for(TInt i = viewDefs.Count()-1; i >= 0; --i)
+		    {
+		    CleanupStack::PopAndDestroy(viewDefs[i]);	
+		    }
+	    
+	    CleanupStack::PopAndDestroy();
+	    CleanupStack::PopAndDestroy();
+    }
+    
+
+/**
+ * Implements a method to fetch the existing view settings
+ * from central repository, then creates a new view definition
+ * object and proceeds to set the new object as an appended item
+ * to the existing view definition.
+*/
+void CTestGetSetViewSettingStep::AppendToDefaultViewListL()
+    {
+    RPointerArray<CContactDefaultViewDefinition> viewDefs;
+    RContactViewSortOrder viewSortOrder;
+    CleanupClosePushL(viewSortOrder);
+    CContactDefaultViewDefinition* createdViewDef = NULL;
+    
+    viewSortOrder.AppendL(KUidContactFieldFamilyName);
+	viewSortOrder.AppendL(KUidContactFieldFamilyName);
+	viewSortOrder.AppendL(KUidContactFieldFamilyName);
+	
+    TRAPD(err, TContactViewStore::GetDefaultViewsL(viewDefs));
+    if (err != KErrNone)
+        {
+    	_LIT(KAppErr,"DefaultViewsL(viewDefs) left with err = %d");
+    	ERR_PRINTF2(KAppErr,err);
+    	User::Leave(err);
+        }
+			
+	TRAPD(res,createdViewDef = CContactDefaultViewDefinition::NewLC(CContactDefaultViewDefinition::ENamedRemoteView,
+		                                                            KTempViewName,
+		                                                            viewSortOrder,
+		                                                            EContactsOnly,
+		                                                            KSortPluginName);
+		                                                                
+		                                                                
+	CleanupStack::Pop(createdViewDef););
+	CleanupStack::PushL(createdViewDef);
+	
+	if(res != KErrNone)
+        {
+		User::Leave(res);
+		}
+	
+	viewDefs.AppendL(createdViewDef);
+	
+	TRAPD(err1,
+				TContactViewStore::SetDefaultViewsL(viewDefs);
+				viewDefs.Remove(viewDefs.Find(createdViewDef));
+			);
+	if (err1 != KErrNone)
+        {
+    	_LIT(KAppErr,"SetDefaultViewsL(viewDefs) left with err = %d");
+    	ERR_PRINTF2(KAppErr,err1);
+    	User::Leave(err1);
+        }
+        	        
+    CleanupStack::PopAndDestroy(createdViewDef);	    
+	CleanupStack::PopAndDestroy(&viewSortOrder);    
+	viewDefs.ResetAndDestroy();
+    }
+    
+    
+/**
+ * Implements a method to fetch the view settings from central
+ * repository, it then performs a search on the view name and if
+ * found deletes the view setting and restores with the
+ * SetDefaultViewsL() API. 
+ */
+void CTestGetSetViewSettingStep::DeleteAViewDefinitionL()
+    {
+	RPointerArray<CContactDefaultViewDefinition> viewDefs;
+    	
+	TRAPD(err, TContactViewStore::GetDefaultViewsL(viewDefs));
+    if (err != KErrNone)
+        {
+    	_LIT(KAppErr,"DefaultViewsL(viewDefs) left with err = %d");
+    	ERR_PRINTF2(KAppErr,err);
+    	User::Leave(err);
+        }
+    
+    TPtrC viewNameFromIni;
+    GetStringFromConfig(ConfigSection(),KViewNameTag,viewNameFromIni);
+    	
+    for (TInt n = 0; n < viewDefs.Count(); n++)
+        {
+    	CContactDefaultViewDefinition* gotDefs = viewDefs[n];
+    	if (gotDefs->ViewNameL() == viewNameFromIni)
+    	    {
+    		viewDefs.Remove(n);
+    	    }
+    	else
+    	    {
+    		_LIT(KViewNotFound,"%s was not found");
+    		ERR_PRINTF2(viewNameFromIni,KViewNotFound);
+    	    }    	
+        }
+    
+    if (viewDefs.Count() >= 0)
+        {
+    	TRAPD(err1,TContactViewStore::SetDefaultViewsL(viewDefs));
+	    if (err1 != KErrNone)
+            {
+    	    _LIT(KAppErr,"SetDefaultViewsL(viewDefs) left with err1 = %d");
+    	    ERR_PRINTF2(KAppErr,err1);
+    	    User::Leave(err1);
+            }
+        }
+       
+    viewDefs.ResetAndDestroy();    
+    }
+
+
+/**
+ * Implements a method to test the GetDefaultViewsL() API
+ * under out of memory conditions.
+ */
+void CTestGetSetViewSettingStep::OOMTestGetDefaultViewsL()
+    {
+	RPointerArray<CContactDefaultViewDefinition> storedViewDefs;    
+    for (TInt i=1 ;; i++)
+        {  
+    	__UHEAP_SETFAIL(RHeap::EFailNext,i);  
+    	__UHEAP_MARK;     	
+    	
+    	TRAPD(err, TContactViewStore::GetDefaultViewsL(storedViewDefs)); 
+    	storedViewDefs.ResetAndDestroy();
+    	
+    	__UHEAP_MARKEND;
+    		    	
+    	if (err != KErrNoMemory)
+		    {
+		    User::LeaveIfError(err);
+		    break;		   
+		    }
+        }
+        
+    storedViewDefs.ResetAndDestroy();
+    __UHEAP_RESET;    
+    }
+
+/**
+ * Implements a method to test the SetDefaultViewsL() API
+ * under out of memory conditions. A CContactDefaultViewDefinition
+ * object is created within a for loop, the number of iterations being
+ * controlled by a ini file parameter. The array of objects are passed to
+ * the SetDefaultViewsL() API which is under test.
+ */
+void CTestGetSetViewSettingStep::OOMTestSetDefaultViewsL()
+    {
+    RPointerArray<CContactDefaultViewDefinition> viewDefs;
+    CleanupClosePushL(viewDefs);    
+    RContactViewSortOrder viewSortOrder;
+    CleanupClosePushL(viewSortOrder);
+    CContactDefaultViewDefinition* createdViewDef;
+    
+    viewSortOrder.AppendL(KUidContactFieldFamilyName);
+	viewSortOrder.AppendL(KUidContactFieldFamilyName);
+	viewSortOrder.AppendL(KUidContactFieldFamilyName);
+    
+	for (TInt n = 0; n < iIniNumberOfViews; n++)
+	    {		
+	    createdViewDef = NULL;		
+		TRAPD(res,createdViewDef = CContactDefaultViewDefinition::NewLC(CContactDefaultViewDefinition::ENamedRemoteView,
+		                                                                KTempViewName,
+		                                                                viewSortOrder,
+		                                                                EContactsOnly,
+		                                                                KSortPluginName);
+		CleanupStack::Pop(createdViewDef););
+		CleanupStack::PushL(createdViewDef); 
+		if(res != KErrNone)
+		    {
+			User::Leave(res);
+		    }                                    		    
+		viewDefs.AppendL(createdViewDef);	
+	    }
+	
+	//Do the OOM test loop on the TContactViewStore::SetDefaultViewsL() API   	    	
+	for (TInt i=1 ;; i++)
+	    {
+	    __UHEAP_MARK;
+	    __UHEAP_SETFAIL(RHeap::EFailNext,i);	    
+		TRAPD(err,TContactViewStore::SetDefaultViewsL(viewDefs));
+		__UHEAP_MARKEND;
+		
+		if (err != KErrNoMemory)
+		    {
+			User::LeaveIfError(err);
+			break;
+		    }
+	    }
+	    
+	__UHEAP_RESET; 	
+	
+	for(TInt i = viewDefs.Count()-1; i >= 0; --i)
+        {
+		CleanupStack::PopAndDestroy(viewDefs[i]);	
+		}
+		
+    CleanupStack::PopAndDestroy();
+    CleanupStack::PopAndDestroy();
+    }
+