phonebookengines/contactsmodel/tsrc/t_HintExtension.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/t_HintExtension.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,273 @@
+// 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:
+//
+
+#include <e32std.h>
+#include <e32test.h>
+#include <cntdb.h>
+
+#include <f32file.h>
+#include "t_HintExtension.h"
+#include <coreappstest/testserver.h>
+
+
+
+_LIT(KTestName, "T_HintExtension");
+
+_LIT(KSrcDatabaseFileName, "Z:\\t_HintExtension_original.cdb");
+
+_LIT(KDatabaseSecureName, "C:t_HintExtension_in_use.cdb");
+_LIT(KDatabaseSecurePhysicalName, "C:\\private\\10003A73\\t_HintExtension_in_use.cdb");
+
+_LIT(KDatabaseFileName, "C:\\t_HintExtension_in_use.cdb");
+
+_LIT(KCntDbSecureFormat,"secure[100065FF]");
+
+_LIT(KViewName,"RemoteView");
+
+//from cntstd.h
+_LIT(KIdentityTableName, "IDENTITYTABLE");
+_LIT(KContactExtHintField, "CM_ExtHintField");
+
+
+
+// Logging macros //
+GLDEF_C RTest test(KTestName);
+int __ttp_err;
+
+_LIT(KTestSmile, "\n{°±°}");
+_LIT(KTestNoErrMask, "%s(%d) : runtime error: Function '%s' returned %d\n");
+_LIT(KTestTrapMask,  "%s(%d) : runtime error: Function '%s' left with code %d\n");
+_LIT(KTestTrueMask,  "%s(%d) : runtime error: Statement '%s' equals %d\n");
+
+
+
+#define __ttr(x, c, l, f)  \
+	if (x == EFalse) \
+	_TestNoErrL(KTestTrueMask, x, _S(c), l,_S(f))
+
+#define TestTrue(x) __ttr(x, #x, __LINE__,__FILE__)
+
+
+#define __ttt(x, c, l, f)  \
+	{ const TInt res = x; if (res != KErrNone)   \
+	  _TestNoErrL(KTestNoErrMask, res, _S(c), l,_S(f));  }
+
+#define TestNoErrL(x) __ttt(x, #x, __LINE__,__FILE__)
+
+
+
+#define __ttp(x, c, l, f)		\
+	TRAP(__ttp_err, x);		\
+	if (__ttp_err != KErrNone)	\
+	  _TestNoErrL(KTestTrapMask, __ttp_err, _S(c), l,_S(f))
+
+#define TestTrap(x) __ttp(x, #x, __LINE__,__FILE__)
+
+
+void _TestNoErrL(const TDesC& aMask, TInt aResult, const TText* aCommand, TInt aLineNum,const TText* aFileName)
+	{
+	TBuf<0x400> str;
+	str.Format(aMask, aFileName, aLineNum, aCommand, aResult);
+	test.Printf(KTestSmile);
+	test.Printf(str);
+	User::Leave(aResult < 0 ? aResult : KErrUnknown);
+	}
+//
+
+RPIMTestServer serv;
+
+
+CViewTester* CViewTester::NewLC()
+	{
+	CViewTester* self=new(ELeave) CViewTester();
+	CleanupStack::PushL(self);
+	//self->ConstructL();
+	return self;
+	}
+
+CViewTester::~CViewTester()
+	{
+	iRingToneView->Close(*this);
+	iVoiceDialView->Close(*this);
+	iCNRView->Close(*this);
+
+	delete iDatabase;
+	}
+
+
+/**
+
+@SYMTestCaseID     PIM-T-HINTEXTENSION-0001
+
+*/
+
+void CViewTester::CreateFilterViewsL()
+	{
+	test.Start(_L("@SYMTESTCaseID:PIM-T-HINTEXTENSION-0001 Checking that ERingTone and EVoiceDial views work and empty"));
+
+	//Creating Database
+	TestTrap(iDatabase = CContactDatabase::OpenL(KDatabaseSecureName));
+
+	//Creating Sort Order
+	TAutoClose<RContactViewSortOrder> theSortOrder;
+	theSortOrder.iObj.AppendL(KUidContactFieldGivenName);
+
+	//Creating Views
+	TestTrap(iCNRView=CContactNamedRemoteView::NewL(*this,KViewName,*iDatabase,theSortOrder.iObj,EContactsOnly));
+	TestTrap(iRingToneView = CContactFilteredView::NewL( *this, *iDatabase, *iCNRView, CContactDatabase::ERingTone));
+	TestTrap(iVoiceDialView = CContactFilteredView::NewL( *this, *iDatabase, *iCNRView, CContactDatabase::EVoiceDial));
+
+	CActiveScheduler::Start();
+	test.End();
+	}
+
+
+
+void CViewTester::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)
+	{
+
+	if (aEvent.iEventType == TContactViewEvent::EReady)
+		{
+		TInt err(KErrNone);
+		++iEventsReceived;
+		if (&aView == iCNRView)
+			{//Ignore main view
+			test.Printf(_L("Main view ready\n"));
+			}
+		else if (&aView == iRingToneView)
+			{
+			test.Printf(_L("RingTone view ready"));
+			TRAP(err, TestNoErrL(aView.CountL() ) );
+			test(err == KErrNone);
+			test.Printf(_L(" and empty!\n"));
+			}
+		else if (&aView == iVoiceDialView)
+			{
+			test.Printf(_L("VoiceDial view ready"));
+			TRAP(err, TestNoErrL(aView.CountL() ) );
+			test(err == KErrNone);
+			test.Printf(_L(" and empty!\n"));
+			}
+		else
+			{
+			test.Printf(_L("Unknown view in CViewTester::HandleContactViewEvent"));
+			test(EFalse);
+			}
+
+		if (iEventsReceived == 3) //events from, iCNRView, iRingToneView and iVoiceDialView
+			CActiveScheduler::Stop();
+		}
+	}
+
+
+
+
+TBool ExtHintFieldExistsL(RFs& theFS)
+	{
+	TBool theResult;
+	RDbNamedDatabase theDatabase;
+	
+	TestNoErrL(theDatabase.Open(theFS, KDatabaseFileName,KCntDbSecureFormat));
+
+	CDbColSet* theIdentitiTable = theDatabase.ColSetL(KIdentityTableName);
+	CleanupStack::PushL(theIdentitiTable);
+	const TDbCol* theExtHint = theIdentitiTable->Col(KContactExtHintField);
+	theResult = (theExtHint != NULL); //The field shouldn't exits
+
+	CleanupStack::PopAndDestroy(); //theIdentitiTable
+	theDatabase.Close();
+
+	return theResult;
+	}
+
+void TestExtHintFieldCreationL(RFs& theFS)
+	{
+	test.Start(_L("Ext Hint field creation"));
+
+
+    serv.CopyFileL(KSrcDatabaseFileName, KDatabaseFileName);
+	serv.CopyFileL(KSrcDatabaseFileName, KDatabaseSecurePhysicalName);
+		
+	test.Printf(_L("Checking ExtHintField before loading cntmodel\n"));
+	TestTrue(!ExtHintFieldExistsL(theFS)); //The field shouldn't exist in original table
+
+	//Contact model must open and upgrade database
+	test.Printf(_L("Loading cntmodel\n"));
+	CContactDatabase* theDatabase = NULL; 
+	
+	TestTrap(theDatabase = CContactDatabase::OpenL(KDatabaseSecureName));
+	delete theDatabase;
+	theDatabase = NULL;
+
+	//Copy the file to the C drive, where it can be checked by the test code through DBMS
+	serv.CopyFileL(KDatabaseSecurePhysicalName, KDatabaseFileName);
+
+	test.Printf(_L("Checking ExtHintField after opening with cntmodel\n"));
+	TestTrue(ExtHintFieldExistsL(theFS)); //Contacts model must have created the ExtHintField
+	test.End();
+	}
+
+
+
+void DoTestL()
+	{
+	TAutoClose<RFs> theFS;
+	TestNoErrL(theFS.iObj.Connect());
+
+    User::LeaveIfError(serv.Connect());
+	CleanupClosePushL(serv);
+
+	TestExtHintFieldCreationL(theFS.iObj);
+
+	CViewTester* viewTester = CViewTester::NewLC();
+	viewTester->CreateFilterViewsL();
+	CleanupStack::PopAndDestroy(viewTester);
+
+    serv.DeleteFileL(KDatabaseFileName);
+	serv.DeleteFileL(KDatabaseSecurePhysicalName);
+
+	CleanupStack::PopAndDestroy(&serv);
+	}
+
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	CActiveScheduler* scheduler=new CActiveScheduler;
+	if (scheduler)
+		{
+		CActiveScheduler::Install(scheduler);
+		CTrapCleanup* cleanup=CTrapCleanup::New();
+		if (cleanup)
+			{
+			test.Title();
+			test.Start(_L("T_HintExtension"));
+
+			TRAPD(err, DoTestL()); 
+			test(err == KErrNone);
+			test.End();
+
+			//test.Printf(_L("Exiting in one second...\n"));
+			User::After(1000000);
+			test.Close();
+			delete cleanup;
+			}
+		delete scheduler;
+		}
+	__UHEAP_MARKEND;
+	return KErrNone;
+    }
+
+