persistentstorage/dbms/tdbms/t_dbclient.cpp
changeset 0 08ec8eefde2f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/persistentstorage/dbms/tdbms/t_dbclient.cpp	Fri Jan 22 11:06:30 2010 +0200
@@ -0,0 +1,324 @@
+// Copyright (c) 1998-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 <d32dbms.h>
+#include <e32test.h>
+
+LOCAL_D CTrapCleanup* TheTrapCleanup;
+
+LOCAL_D RTest test(_L("t_dbclient"));
+
+LOCAL_D const TPtrC KColName(_S("A_column_name"));
+LOCAL_D TDbColName VarName(_S("Column_A"));
+
+const TInt KTestCleanupStack=0x20;
+const TInt KLeaveError=-4000;
+const TInt KColCount=26;
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0586
+@SYMTestCaseDesc        Tests for TDbCol class
+@SYMTestPriority        Medium
+@SYMTestActions        	Tests for column name and type after creating them.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestTDbCol()
+	{
+	test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0586 Testing TDbCol "));
+	TDbCol c1(KColName,EDbColText8);
+	test(c1.iName==KColName);
+	test(c1.iType==EDbColText8);
+	test(c1.iMaxLength==KDbDefaultTextColLength);
+	test(c1.iAttributes==0);
+	TDbCol c2(KColName,EDbColText8,1234);
+	test(c2.iName==KColName);
+	test(c2.iType==EDbColText8);
+	test(c2.iMaxLength==1234);
+	test(c2.iAttributes==0);
+	TDbCol c3(KColName,EDbColBit);
+	test(c3.iName==KColName);
+	test(c3.iType==EDbColBit);
+	test(c3.iMaxLength==KDbUndefinedLength);
+	test(c3.iAttributes==0);
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0587
+@SYMTestCaseDesc        CDbColSet class test
+@SYMTestPriority        Medium
+@SYMTestActions        	Tests for creation of a CDbColSet column set object
+                        Tests for adding and removing columns to the column set
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestCDbColSetL()
+	{
+	TInt r;
+	test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0587 ctor and dtor "));
+	CDbColSet* c=CDbColSet::NewL();		// assume it will succeed
+	test(c!=NULL);
+	test (c->Count()==0);
+	delete c;
+	__UHEAP_CHECK(0);
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);
+	TRAP(r,c=CDbColSet::NewL());
+	test(r!=KErrNone);
+	__UHEAP_CHECK(0);
+#endif
+	c=CDbColSet::NewLC();
+	test(c!=NULL);
+	CleanupStack::PopAndDestroy();
+	__UHEAP_CHECK(0);
+	c=CDbColSet::NewL();
+	TDbCol col(KColName,EDbColText,20);
+	c->AddL(col);
+	delete c;
+	__UHEAP_CHECK(0);
+	TRAP(r,c=CDbColSet::NewLC();c->AddL(col);User::Leave(KLeaveError););
+	test(r==KLeaveError);
+	__UHEAP_CHECK(0);
+//
+	test.Next(_L("Add columns"));
+	c=CDbColSet::NewLC();
+	TInt ii;
+	for (ii=1;ii<=KColCount;ii++)
+		{
+		VarName[7]=(TUint8)('A'-1+ii);
+		test(c->Col(VarName)==NULL);
+		TDbCol column(VarName,EDbColInt32);
+		c->AddL(column);
+		test(c->Count()==ii);
+		test(c->ColNo(VarName)!=KDbNullColNo);
+		test(c->Col(VarName)!=NULL);
+		}
+	test.Next(_L("Check columns: operator[] and ColNo()"));
+	for (ii=1;ii<=KColCount;ii++)
+		{
+		const TDbCol& col=(*c)[ii];
+		test(c->ColNo(col.iName)==ii);
+		}
+	test.Next(_L("Remove columns"));
+	for (ii=1;ii<=KColCount;ii+=2)
+		{
+		VarName[7]=(TUint8)('A'-1+ii);
+		c->Remove(VarName);
+		}
+	test(c->Count()==13);
+	test.Next(_L("Clear"));
+	c->Clear();
+	test(c->Count()==0);
+	CleanupStack::PopAndDestroy();
+	__UHEAP_CHECK(0);
+	test.End();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0588
+@SYMTestCaseDesc        Tests for TDbColSetIter class
+@SYMTestPriority        Medium
+@SYMTestActions        	Tests for iterate over the contents of a column set
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestTDbColSetIterL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0588 Testing TDbColSetIter "));
+	CDbColSet* c=CDbColSet::NewLC();
+	TInt ii;
+	for (ii=0;ii<KColCount;++ii)
+		{
+		VarName[7]=(TUint8)('A'-1+ii);
+		c->AddL(TDbCol(VarName,EDbColInt32));
+		}
+	TDbColSetIter iter1(*c);
+	TDbColSetIter iter2(iter1);
+	ii=0;
+	for (;;)
+		{
+		test(iter1.Col()==++ii);
+		test(iter1.operator->()==&iter1.operator*());
+		test(&*iter1++==&*iter2);
+		if (!iter1)
+			break;
+		test(&*iter1==&*++iter2);
+		}
+	test(!++iter2);
+	test(ii==KColCount);
+	CleanupStack::PopAndDestroy();
+	__UHEAP_CHECK(0);
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0589
+@SYMTestCaseDesc        Tests for TDbCol,CDbColSet,TDbColSetIter classes
+@SYMTestPriority        Medium
+@SYMTestActions        	Executes the tests of TDbCol,CDbColSet,TDbColSetIter
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestColSetL()
+	{
+	test.Next(_L("@SYMTestCaseID:SYSLIB-DBMS-CT-0589 "));
+	TestTDbCol();
+	test.Next(_L("Testing CDbColSet"));
+	TestCDbColSetL();
+	TestTDbColSetIterL();
+	test.End();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0590
+@SYMTestCaseDesc        Tests for TDbKeyCol class
+@SYMTestPriority        Medium
+@SYMTestActions         Attempts to test for attributes of the key column together.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestTDbKeyCol()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0590 Testing TDbKeyCol "));
+	TDbKeyCol c1(KColName);
+	test(c1.iName==KColName);
+	test(c1.iOrder==TDbKeyCol::EAsc);
+	TDbKeyCol c2(KColName,TDbKeyCol::EDesc);
+	test(c2.iName==KColName);
+	test(c2.iOrder==TDbKeyCol::EDesc);
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0591
+@SYMTestCaseDesc        Tests the CDbKey class
+@SYMTestPriority        Medium
+@SYMTestActions         Tests for the new CDbKey creation using NewL and NewLC functions
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestCDbKeyL()
+	{
+	TInt r;
+	test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0591 ctor and dtor "));
+	CDbKey* k=CDbKey::NewL();		// assume it will succeed
+	test(k!=NULL);
+	delete k;
+	__UHEAP_CHECK(0);
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);
+	TRAP(r,k=CDbKey::NewL());
+	test(r!=KErrNone);
+	__UHEAP_CHECK(0);
+#endif
+	k=CDbKey::NewLC();
+	test(k!=NULL);
+	CleanupStack::PopAndDestroy();
+	__UHEAP_CHECK(0);
+	k=CDbKey::NewL();
+	k->AddL(VarName);
+	delete k;
+	__UHEAP_CHECK(0);
+	TRAP(r,k=CDbKey::NewLC();k->AddL(KColName);User::Leave(KLeaveError););
+	test(r==KLeaveError);
+	__UHEAP_CHECK(0);
+//
+	test.Next(_L("Add key columns"));
+	k=CDbKey::NewLC();
+	TInt ii;
+	for (ii=1;ii<=KColCount;++ii)
+		{
+		VarName[7]=(TUint8)('A'-1+ii);
+		k->AddL(VarName);
+		test(k->Count()==ii);
+		test((*k)[ii-1].iName==VarName);
+		}
+	test.Next(_L("Remove key columns"));
+	for (ii=1;ii<=KColCount;ii+=2)
+		{
+		VarName[7]=TUint8('A'-1+ii);
+		k->Remove(VarName);
+		}
+	test(k->Count()==KColCount/2);
+	test.Next(_L("Clear"));
+	k->Clear();
+	test(k->Count()==0);
+	test.Next(_L("Unique flag"));
+	test(!k->IsUnique());
+	k->MakeUnique();
+	test(k->IsUnique());
+	k->MakeUnique();
+	test(k->IsUnique());
+	CleanupStack::PopAndDestroy();
+	__UHEAP_CHECK(0);
+	test.End();
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-DBMS-CT-0592
+@SYMTestCaseDesc        Tests the TDbKeyCol,CDbKey classes
+@SYMTestPriority        Medium
+@SYMTestActions         Executes the TDbKeyCol,CDbKey tests
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_C void TestKeyL()
+	{
+	test.Start(_L(" @SYMTestCaseID:SYSLIB-DBMS-CT-0592 "));
+	TestTDbKeyCol();
+	test.Next(_L("Testing CDbKey"));
+	TestCDbKeyL();
+	test.End();
+	}
+
+
+LOCAL_C void setupCleanup()
+//
+// Initialise the cleanup stack.
+//
+    {
+	TheTrapCleanup=CTrapCleanup::New();
+	test(TheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	test(r==KErrNone);
+	}
+
+GLDEF_C TInt E32Main()
+//
+// Test Client-side objects
+//
+    {
+	test.Title();
+	setupCleanup();
+	__UHEAP_MARK;
+//
+	test.Start(_L("Test the Column Set"));
+	TRAPD(r,TestColSetL();)
+	test(r==KErrNone);
+	__UHEAP_CHECK(0);
+	test.Next(_L("Test the Key"));
+	TRAP(r,TestKeyL();)
+	test(r==KErrNone);
+	test.End();
+//
+	__UHEAP_MARKEND;
+	delete TheTrapCleanup;
+	test.Close();
+	return 0;
+    }