phonebookengines_old/contactsmodel/tsrc/t_updateforsync.cpp
changeset 40 b46a585f6909
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/t_updateforsync.cpp	Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,335 @@
+// Copyright (c) 2003-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:
+// UpdateForSync Test module
+// 
+//
+
+
+//#include <e32def.h>
+#include <e32test.h>
+#include <cntdef.hrh>
+#include <cntdef.h>
+#include <cntitem.h>
+#include <cntfield.h>
+#include <cntfldst.h>
+#include <e32svr.h>
+#include <f32file.h>
+#include "t_utils2.h"
+#include "T_UTILS.H"
+
+_LIT(KTestName, "T_UPDATEFORSYNC");
+_LIT(KLogFileName, "UpdateForSyncProfile.log");
+
+LOCAL_D RTest test(KTestName);
+
+
+class CProfiler : public CBase
+	{
+public:
+	static CProfiler* NewLC(RTest& aTest);
+	~CProfiler();
+
+	void StartProfile();
+	void EndProfile();
+private:
+	RFs iFs;
+	CLog* iLog;
+	};
+
+CProfiler* CProfiler::NewLC(RTest& aTest)
+	{
+	CProfiler* self=new(ELeave) CProfiler();
+	CleanupStack::PushL(self);
+	User::LeaveIfError(self->iFs.Connect());
+	self->iLog=CLog::NewL(aTest,KLogFileName);
+	return self;
+	}
+
+CProfiler::~CProfiler()
+	{
+	delete iLog;
+	iFs.Close();
+	}
+	
+void CProfiler::StartProfile()
+	{
+	CCntTest::ProfileReset(0,1);
+	CCntTest::ProfileStart(0);
+	}
+
+void CProfiler::EndProfile()
+	{
+	CCntTest::ProfileEnd(0);
+	TCntProfile profile[1];
+	CCntTest::ProfileResult(profile,0,1);
+	_LIT(KProfileFormat,"Total %d.%03d sec (%d hits)\n");
+	RDebug::Print(KProfileFormat,profile[0].iTime/1000000, profile[0].iTime%1000000, profile[0].iCount);
+	iLog->LogLine(KProfileFormat,profile[0].iTime/1000000, profile[0].iTime%1000000, profile[0].iCount);
+	}
+
+
+
+
+LOCAL_C void DoTestEmailKeepDefaultPropertyL()
+	{
+	_LIT(KFieldValue,"email@dummy.com");
+	_LIT(KNewFieldValue,"newemail@dummy.com");
+
+
+	CContactItemFieldSet* fieldSet=CContactItemFieldSet::NewLC();
+
+	CContactItemField* field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapEMAILINTERNET);
+	field->AddFieldTypeL(KUidContactFieldEMail);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+	
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KNewFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapEMAILINTERNET);
+	field->AddFieldTypeL(KUidContactFieldEMail);
+
+	
+	fieldSet->UpdateFieldSyncL(*field,1);
+
+	//Check that default property was not dropped
+	__ASSERT_ALWAYS((*fieldSet)[0].ContentType().ContainsFieldType(KUidContactFieldVCardMapPREF),User::Leave(KErrGeneral));
+	//Check that field was updated properly
+	__ASSERT_ALWAYS((*fieldSet)[0].TextStorage()->Text()==KNewFieldValue(),User::Leave(KErrGeneral));
+
+	
+	CleanupStack::PopAndDestroy(2,fieldSet); //field
+	}
+
+
+LOCAL_C void DoTestPhoneKeepDefaultPropertyL()
+	{
+	_LIT(KFieldValue,"+447700900000");
+	_LIT(KNewFieldValue,"+447700900001");
+
+	CContactItemFieldSet* fieldSet=CContactItemFieldSet::NewLC();
+
+	CContactItemField* field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+	
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KNewFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+
+	fieldSet->UpdateFieldSyncL(*field,1);
+
+	//Check that default property was not dropped
+	__ASSERT_ALWAYS((*fieldSet)[0].ContentType().ContainsFieldType(KUidContactFieldVCardMapPREF),User::Leave(KErrGeneral));
+	//Check that field was updated properly
+	__ASSERT_ALWAYS((*fieldSet)[0].TextStorage()->Text()==KNewFieldValue(),User::Leave(KErrGeneral));
+	
+	CleanupStack::PopAndDestroy(2,fieldSet); //field
+	}
+
+LOCAL_C void DoTestPhoneKeepSpeedDialPropertyL()
+	{
+	_LIT(KFieldValue,"+447700900002");
+	_LIT(KNewFieldValue,"+447700900003");
+
+	CContactItemFieldSet* fieldSet=CContactItemFieldSet::NewLC();
+
+	CContactItemField* field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	field->AddFieldTypeL(KUidSpeedDialFive);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+	
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KNewFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+
+	fieldSet->UpdateFieldSyncL(*field,1);
+
+	//Check that default property was not dropped
+	__ASSERT_ALWAYS((*fieldSet)[0].ContentType().ContainsFieldType(KUidContactFieldVCardMapPREF),User::Leave(KErrGeneral));
+	//Check that speed dial property was not dropped
+	__ASSERT_ALWAYS((*fieldSet)[0].ContentType().ContainsFieldType(KUidSpeedDialFive),User::Leave(KErrGeneral));
+	//Check that field was updated properly
+	__ASSERT_ALWAYS((*fieldSet)[0].TextStorage()->Text()==KNewFieldValue(),User::Leave(KErrGeneral));
+	
+	CleanupStack::PopAndDestroy(2,fieldSet); //field
+	}
+
+void DoTestPhoneKeepVoiceDialPropertyL()
+	{
+	_LIT(KFieldValue,"+447700900004");
+	_LIT(KNewFieldValue,"+447700900005");
+
+	CContactItemFieldSet* fieldSet=CContactItemFieldSet::NewLC();
+
+	CContactItemField* field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	//field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	field->AddFieldTypeL(KUidContactsVoiceDialField);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+	
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KNewFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+
+	fieldSet->UpdateFieldSyncL(*field,1);
+
+	//Check that default property was not dropped
+	//__ASSERT_ALWAYS((*fieldSet)[0].ContentType().ContainsFieldType(KUidContactFieldVCardMapPREF),User::Leave(KErrGeneral));
+	//Check that speed dial property was not dropped
+	__ASSERT_ALWAYS((*fieldSet)[0].ContentType().ContainsFieldType(KUidContactsVoiceDialField),User::Leave(KErrGeneral));
+	//Check that field was updated properly
+	__ASSERT_ALWAYS((*fieldSet)[0].TextStorage()->Text()==KNewFieldValue(),User::Leave(KErrGeneral));
+	
+	CleanupStack::PopAndDestroy(2,fieldSet); //field
+
+	}
+
+
+void DoProfilingL()
+	{
+	_LIT(KFieldValue,"+447700900006");
+	_LIT(KNewFieldValue,"+447700900007");
+
+	CProfiler* profiler=CProfiler::NewLC(test);
+	
+	CContactItemFieldSet* fieldSet=CContactItemFieldSet::NewLC();
+
+	CContactItemField* field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapCELL);
+	field->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+	field->AddFieldTypeL(KUidContactFieldVCardMapPREF);
+	fieldSet->AddL(*field); //take ownership
+	CleanupStack::Pop(field);
+
+	
+	field=CContactItemField::NewLC(KStorageTypeText);
+	field->TextStorage()->SetTextL(KNewFieldValue());
+	field->SetMapping(KUidContactFieldVCardMapTEL);
+	field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+	//field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+	field->AddFieldTypeL(KUidContactFieldVCardMapWORK);
+
+	
+
+	profiler->StartProfile();
+	for (TInt i=0;i<1000;i++)
+		{
+		fieldSet->UpdateFieldSyncL(*field,1);
+		}
+	profiler->EndProfile();
+	CleanupStack::PopAndDestroy(3,profiler); //fieldset, field
+	}
+
+/**
+
+@SYMTestCaseID     PIM-T-UPDATEFORSYNC-0001
+
+*/
+
+LOCAL_C void DoTestsL()
+    {
+	test.Start(_L("@SYMTESTCaseID:PIM-T-UPDATEFORSYNC-0001 T_UPDATEFORSYNC"));
+
+	
+	DoProfilingL();
+	
+	DoTestEmailKeepDefaultPropertyL();
+	DoTestPhoneKeepDefaultPropertyL();
+	DoTestPhoneKeepSpeedDialPropertyL();
+	DoTestPhoneKeepVoiceDialPropertyL();
+
+
+	test.End();
+    }
+
+GLDEF_C TInt E32Main()
+	{
+    // Init
+    CTrapCleanup* cleanupStack = CTrapCleanup::New();
+    if (!cleanupStack)
+        {
+        return KErrNoMemory;
+        }
+    
+	// Run the tests
+	__UHEAP_MARK;
+    TRAPD(err, DoTestsL());
+	test.Close(); //avoid memory leak
+	__UHEAP_MARKEND;
+    // Cleanup
+
+	if (err)
+		{
+		User::Panic(_L("T_UpdateForSync Failed !"),err);
+		}
+
+    delete cleanupStack;
+	return err;
+    }