kerneltest/e32test/hcr/t_hcr.cpp
changeset 0 a41df078684a
child 4 56f325a607ea
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/e32test/hcr/t_hcr.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,1074 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// Hardware Configuration Respoitory Test Application
+//
+
+#define __E32TEST_EXTENSION__
+#include <e32test.h>
+#include "d_hcrsim.h"
+#include "d_hcrsim_testdata.h"
+
+RTest test(_L("T_HCR"));
+RHcrSimTestChannel HcrSimTest;
+
+void HcrSimGetSettings(SSettingC* aRepository, TUint aNumberOfSettings)
+	{
+	test.Next(_L("GetSettings"));
+	TInt r;
+	SSettingC* setting;
+	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+		{
+		TSettingId id(setting->iName.iId.iCat, setting->iName.iId.iKey);
+		test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+		switch (setting->iName.iType)
+			{
+			case ETypeInt32:
+				{
+				TInt32 val;
+				r = HcrSimTest.GetInt(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iInt32, val);
+				break;
+				}
+			case ETypeInt16:
+				{
+				TInt16 val;
+				r = HcrSimTest.GetInt(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iInt16, val);
+				break;
+				}
+			case ETypeInt8:
+				{
+				TInt8 val;
+				r = HcrSimTest.GetInt(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iInt8, val);
+				break;
+				}
+			case ETypeBool:
+				{
+				TBool val;
+				r = HcrSimTest.GetBool(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iBool, val);
+				break;
+				}
+			case ETypeUInt32:
+				{
+				TUint32 val;
+				r = HcrSimTest.GetUInt(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iUInt32, val);
+				break;
+				}
+			case ETypeUInt16:
+				{
+				TUint16 val;
+				r = HcrSimTest.GetUInt(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iUInt16, val);
+				break;
+				}
+			case ETypeUInt8:
+				{
+				TUint8 val;
+				r = HcrSimTest.GetUInt(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iUInt8, val);
+				break;
+				}
+			case ETypeLinAddr:
+				{
+				TLinAddr val;
+				r = HcrSimTest.GetLinAddr(id, val);
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iAddress, val);
+				break;
+				}
+			case ETypeBinData:
+				{
+				TBuf8<KMaxSettingLength> dval;
+				TUint8* pval;
+				pval = (TUint8*) User::Alloc(setting->iName.iLen);
+				test_NotNull(pval);
+				//
+				r = HcrSimTest.GetData(id, dval);
+				test_KErrNone(r);
+				//
+				TUint16 actuallength;
+				r = HcrSimTest.GetData(id, setting->iName.iLen, pval, actuallength);
+				test_KErrNone(r);
+				//
+				test_Equal(0, Mem::Compare(
+						setting->iValue.iPtr.iData, setting->iName.iLen,
+						pval, actuallength));
+				test_Equal(0, Mem::Compare(
+						setting->iValue.iPtr.iData, setting->iName.iLen,
+						dval.Ptr(), dval.Length()));
+				User::Free(pval);
+				break;
+				}
+			case ETypeText8:
+				{
+				TBuf8<KMaxSettingLength> dval;
+				TText8* pval;
+				pval = (TText8*) User::Alloc(setting->iName.iLen);
+				test_NotNull(pval);
+				//
+				r = HcrSimTest.GetString(id, dval);
+				test_KErrNone(r);
+				//
+				TUint16 actuallength;
+				r = HcrSimTest.GetString(id, setting->iName.iLen, pval, actuallength);
+				test_KErrNone(r);
+				//
+				test_Equal(0, Mem::Compare(
+						setting->iValue.iPtr.iString8, setting->iName.iLen,
+						pval, actuallength));
+				test_Equal(0, Mem::Compare(
+						setting->iValue.iPtr.iString8, setting->iName.iLen,
+						dval.Ptr(), dval.Length()));
+				User::Free(pval);
+				break;
+				}
+			case ETypeArrayInt32:
+				{
+				TInt32* pval;
+				pval = (TInt32*) User::Alloc(setting->iName.iLen);
+				test_NotNull(pval);
+				//
+				TUint16 actuallength;
+				r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+				test_KErrNone(r);
+				//
+				test_Equal(setting->iName.iLen, actuallength);
+				TInt32* pexpected = setting->iValue.iPtr.iArrayInt32;
+				TUint i;
+				for (i = 0; i < setting->iName.iLen / sizeof(TInt32); i++)
+					{
+					test_Equal(*(pexpected + i), *(pval + i));
+					}
+				User::Free(pval);
+				break;
+				}
+			case ETypeArrayUInt32:
+				{
+				TUint32* pval;
+				pval = (TUint32*) User::Alloc(setting->iName.iLen);
+				test_NotNull(pval);
+				//
+				TUint16 actuallength;
+				r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+				test_KErrNone(r);
+				//
+				test_Equal(setting->iName.iLen, actuallength);
+				TUint32* pexpected = setting->iValue.iPtr.iArrayUInt32;
+				TUint i;
+				for (i = 0; i < setting->iName.iLen / sizeof(TUint32); i++)
+					{
+					test_Equal(*(pexpected + i), *(pval + i));
+					}
+				User::Free(pval);
+				break;
+				}
+			case ETypeInt64:
+				{
+				TInt64 val;
+				r = HcrSimTest.GetInt(id, val);
+				test_KErrNone(r);
+				test_Equal(*setting->iValue.iPtr.iInt64, val);
+				break;
+				}
+			case ETypeUInt64:
+				{
+				TUint64 val;
+				r = HcrSimTest.GetUInt(id, val);
+				test_KErrNone(r);
+				test_Equal(*setting->iValue.iPtr.iUInt64, val);
+				break;
+				}
+			default:
+				test(EFalse);
+			}
+		}
+	}
+
+void HcrSimGetSettingsNegative(SSettingC* aRepository, TUint aNumberOfSettings)
+	{
+	test.Next(_L("GetSettingsNegative"));
+	TInt r;
+	SSettingC* setting;
+	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+		{
+		TSettingId id(setting->iName.iId.iCat, setting->iName.iId.iKey);
+		test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+		if (setting->iName.iType != ETypeInt32)
+			{
+			TInt32 val;
+			r = HcrSimTest.GetInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeInt16)
+			{
+			TInt16 val;
+			r = HcrSimTest.GetInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeInt8)
+			{
+			TInt8 val;
+			r = HcrSimTest.GetInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeBool)
+			{
+			TBool val;
+			r = HcrSimTest.GetBool(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeUInt32)
+			{
+			TUint32 val;
+			r = HcrSimTest.GetUInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeUInt16)
+			{
+			TUint16 val;
+			r = HcrSimTest.GetUInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeUInt8)
+			{
+			TUint8 val;
+			r = HcrSimTest.GetUInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeLinAddr)
+			{
+			TLinAddr val;
+			r = HcrSimTest.GetLinAddr(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeBinData)
+			{
+			TBuf8<KMaxSettingLength> dval;
+			TUint8* pval;
+			pval = (TUint8*) User::Alloc(setting->iName.iLen);
+			test_NotNull(pval);
+			//
+			r = HcrSimTest.GetData(id, dval);
+			test_Equal(KErrArgument, r);
+			//
+			TUint16 actuallength;
+			r = HcrSimTest.GetData(id, setting->iName.iLen, pval, actuallength);
+			test_Equal(KErrArgument, r);
+			//
+			User::Free(pval);
+			}
+		if (setting->iName.iType != ETypeText8)
+			{
+			TBuf8<KMaxSettingLength> dval;
+			TText8* pval;
+			pval = (TText8*) User::Alloc(setting->iName.iLen);
+			test_NotNull(pval);
+			//
+			r = HcrSimTest.GetString(id, dval);
+			test_Equal(KErrArgument, r);
+			//
+			TUint16 actuallength;
+			r = HcrSimTest.GetString(id, setting->iName.iLen, pval, actuallength);
+			test_Equal(KErrArgument, r);
+			//
+			User::Free(pval);
+			}
+		if (setting->iName.iType != ETypeArrayInt32)
+			{
+			TInt32* pval;
+			pval = (TInt32*) User::Alloc(setting->iName.iLen);
+			test_NotNull(pval);
+			//
+			TUint16 actuallength;
+			r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+			test_Equal(KErrArgument, r);
+			//
+			User::Free(pval);
+			}
+		if (setting->iName.iType != ETypeArrayUInt32)
+			{
+			TUint32* pval;
+			pval = (TUint32*) User::Alloc(setting->iName.iLen);
+			test_NotNull(pval);
+			//
+			TUint16 actuallength;
+			r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
+			test_Equal(KErrArgument, r);
+			//
+			User::Free(pval);
+			}
+		if (setting->iName.iType != ETypeInt64)
+			{
+			TInt64 val;
+			r = HcrSimTest.GetInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		if (setting->iName.iType != ETypeUInt64)
+			{
+			TUint64 val;
+			r = HcrSimTest.GetUInt(id, val);
+			test_Equal(KErrArgument, r);
+			}
+		}
+	}
+
+void HcrSimGetSettingsNotFound(const TUint32 aInvalidCategory, const TUint32 aInvalidSettingId)
+	{
+	test.Next(_L("GetSettingsNotFound"));
+	TSettingId id(aInvalidCategory, aInvalidSettingId);
+	TInt r;
+		{
+		TInt32 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TInt16 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TInt8 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TBool val;
+		r = HcrSimTest.GetBool(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TUint32 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TUint16 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TUint8 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TLinAddr val;
+		r = HcrSimTest.GetLinAddr(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TBuf8<KMaxSettingLength> dval;
+		TUint8* pval;
+		pval = (TUint8*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		r = HcrSimTest.GetData(id, dval);
+		test_Equal(KErrNotFound, r);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetData(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotFound, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TBuf8<KMaxSettingLength> dval;
+		TText8* pval;
+		pval = (TText8*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		r = HcrSimTest.GetString(id, dval);
+		test_Equal(KErrNotFound, r);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetString(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotFound, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TInt32* pval;
+		pval = (TInt32*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotFound, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TUint32* pval;
+		pval = (TUint32*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotFound, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TInt64 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+		{
+		TUint64 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotFound, r);
+		}
+	}
+
+void HcrSimGetSettingsNotReady()
+	{
+	test.Next(_L("GetSettingsNotReady"));
+	TSettingId id(1, 1);
+	TInt r;
+		{
+		TInt32 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TInt16 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TInt8 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TBool val;
+		r = HcrSimTest.GetBool(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TUint32 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TUint16 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TUint8 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TLinAddr val;
+		r = HcrSimTest.GetLinAddr(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TBuf8<KMaxSettingLength> dval;
+		TUint8* pval;
+		pval = (TUint8*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		r = HcrSimTest.GetData(id, dval);
+		test_Equal(KErrNotReady, r);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetData(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotReady, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TBuf8<KMaxSettingLength> dval;
+		TText8* pval;
+		pval = (TText8*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		r = HcrSimTest.GetString(id, dval);
+		test_Equal(KErrNotReady, r);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetString(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotReady, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TInt32* pval;
+		pval = (TInt32*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotReady, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TUint32* pval;
+		pval = (TUint32*) User::Alloc(KMaxSettingLength);
+		test_NotNull(pval);
+		//
+		TUint16 actuallength;
+		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
+		test_Equal(KErrNotReady, r);
+		//
+		User::Free(pval);
+		}
+		{
+		TInt64 val;
+		r = HcrSimTest.GetInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+		{
+		TUint64 val;
+		r = HcrSimTest.GetUInt(id, val);
+		test_Equal(KErrNotReady, r);
+		}
+	}
+
+void HcrSimSettingProperties(SSettingC* aRepository, TUint aNumberOfSettings)
+	{
+	test.Next(_L("SettingProperties"));
+	TInt r;
+	SSettingC* setting;
+	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+		{
+		TSettingId id(setting->iName.iId.iCat, setting->iName.iId.iKey);
+		test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+		TSettingType type = ETypeUndefined;
+		TUint16 size = KMaxSettingLength + 1;
+		r = HcrSimTest.GetTypeAndSize(id, type, size);
+		test_KErrNone(r);
+		switch (setting->iName.iType)
+			{
+			case ETypeInt32:
+			case ETypeInt16:
+			case ETypeInt8:
+			case ETypeBool:
+			case ETypeUInt32:
+			case ETypeUInt16:
+			case ETypeUInt8:
+			case ETypeLinAddr:
+				test_Equal(setting->iName.iType, type);
+				test_Equal(0, size);
+				break;
+				// Fall-through
+			case ETypeBinData:
+			case ETypeText8:
+			case ETypeArrayInt32:
+			case ETypeArrayUInt32:
+			case ETypeInt64:
+			case ETypeUInt64:
+				test_Equal(setting->iName.iType, type);
+				test_Equal(setting->iName.iLen, size);
+				break;
+			default:
+				test(EFalse);
+			}
+		test.Printf(_L("."));
+		}
+	test.Printf(_L("\n"));
+	}
+
+void HcrSimMultipleGet(SSettingC* aRepository, TUint aNumberOfSettings)
+	{
+	test.Next(_L("MultipleGet"));
+	TInt r;
+
+	test.Start(_L("Multiple Get on individual settings"));
+	SSettingC* setting;
+	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+		{
+		if (setting->iName.iType < 0x00010000)
+			{
+			SSettingId id;
+			id.iCat = setting->iName.iId.iCat;
+			id.iKey = setting->iName.iId.iKey;
+			test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
+			TInt i;
+			// Try all permutations of optional values
+			for (i = 0; i < (2 ^ 2); i++)
+				{
+				test.Printf(_L("-Permutation %02x\n"), i);
+				TInt32 val;
+				TSettingType type;
+				TInt err;
+				r = HcrSimTest.GetWordSettings(1, &id, &val,
+					// Optional values
+					(i & 0x1  ? &type : NULL),
+					(i & 0x10 ? &err  : NULL));
+				test_KErrNone(r);
+				test_Equal(setting->iValue.iLit.iInt32, val);
+				if (i & 0x1)
+					{
+					test_Equal(setting->iName.iType, type);
+					}
+				if (i & 0x10)
+					{
+					test_KErrNone(err);
+					}
+				}
+			}
+		}
+
+	test.Start(_L("Multiple Get on all settings"));
+	TUint nosettings = 0;
+	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+		{
+		if (setting->iName.iType < 0x00010000)
+			{
+			nosettings++;
+			}
+		test_Compare(0, <, nosettings);
+		}
+	SSettingId* ids;
+	TInt32* vals;
+	TSettingType* types;
+	TInt* errs;
+	ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
+	test_NotNull(ids);
+	vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
+	test_NotNull(vals);
+	types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
+	test_NotNull(types);
+	errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
+	test_NotNull(errs);
+	TUint n = 0;
+	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+		{
+		if (setting->iName.iType < 0x00010000)
+			{
+			ids[n].iCat = setting->iName.iId.iCat;
+			ids[n].iKey = setting->iName.iId.iKey;
+			n++;
+			}
+		}
+	test_Equal(nosettings, n);
+	// Try all permutations of optional values
+	TInt i;
+	for (i = 0; i < (2 ^ 2); i++)
+		{
+		r = HcrSimTest.GetWordSettings(nosettings, ids, vals,
+			// Optional values
+			(i & 0x1  ? types : NULL),
+			(i & 0x10 ? errs  : NULL));
+		test_KErrNone(r);
+		
+		// Check values
+		n = 0;
+		for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
+			{
+			if (setting->iName.iType < 0x00010000)
+				{
+				test_Equal(setting->iValue.iLit.iInt32, vals[n]);
+				if (i & 0x1)
+					{
+					test_Equal(setting->iName.iType, types[n]);
+					}
+				if (i & 0x10)
+					{
+					test_KErrNone(errs[n]);
+					}
+				n++;
+				}
+			}
+		test_Equal(nosettings, n);
+		}
+	User::Free(ids);
+	User::Free(vals);
+	User::Free(types);
+	User::Free(errs);
+	test.End();
+	}
+
+void HcrSimTests()
+	{
+	test.Next(_L("HCR Simulator tests"));
+	test.Start(_L("Load Device Driver"));
+	TInt r;
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	if (r == KErrAlreadyExists)
+		{
+		test.Printf(_L("Unload Device Driver and load it again\n"));
+		r = User::FreeLogicalDevice(KTestHcrSim);
+		test_KErrNone(r);
+		r = User::LoadLogicalDevice(KTestHcrSim);
+		test_KErrNone(r);
+		}
+	else
+		{
+		test_KErrNone(r);
+		}
+
+	test.Next(_L("Open test channel"));
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	HcrSimGetSettingsNotReady();
+
+	test.Next(_L("Initialise HCR"));
+	r = HcrSimTest.InitExtension();
+	test_KErrNone(r);
+	
+	test.Next(_L("Compiled"));
+	test.Start(_L("Initialisation"));
+#ifndef __WINS__
+	_LIT8(KTestFileRepos,	"filerepos.dat");
+	_LIT8(KTestNandRepos,	"nandrepos.dat");
+	_LIT8(KTestCorrupt1,	"corrupt1.dat");
+	_LIT8(KTestCorrupt2,	"corrupt2.dat");
+	_LIT8(KTestEmpty,		"empty.dat");
+	_LIT8(KTestClearRepos,	"");
+
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+#endif // __WINS__
+	HcrSimGetSettings(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	//HcrSimSettingProperties(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
+	//HcrSimMultipleGet(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
+	test.End();
+
+#ifndef __WINS__
+	test.Next(_L("Compiled+File"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList2, sizeof(SettingsList2) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList2, sizeof(SettingsList2) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("Compiled+File+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList3, sizeof(SettingsList3) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList3, sizeof(SettingsList3) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("Compiled+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("Compiled+Empty+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+#endif // __WINS__
+
+	// Reload device driver without a compiled repository this time
+	test.Next(_L("Reload Device Driver"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	r = HcrSimTest.InitExtension(ETestNullRepository); // *** The NULL Repository ***
+#ifdef __WINS__
+	test_Equal(KErrArgument, r);
+#else
+	test_KErrNone(r);
+
+	test.Next(_L("NULL+File"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("NULL+File+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("NULL+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+#endif // __WINS__
+
+	test.Next(_L("Reload Device Driver"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	r = HcrSimTest.InitExtension(ETestEmptyRepository); // *** The Empty Repository ***
+	test_KErrNone(r);
+
+#ifndef __WINS__
+	test.Next(_L("Empty+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("Empty+File+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("Empty+File"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("No Repository (Empty)"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+
+	test.Next(_L("All Repositories Empty"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+#endif // __WINS__
+
+	test.Next(_L("Reload Device Driver"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	r = HcrSimTest.InitExtension(ETestIgnoreCoreImgRepository); // *** Ignore Core Image Repository ***
+	test_KErrNone(r);
+
+#ifndef __WINS__
+	test.Next(_L("Compiled+File(Ignored)+Nand")); // Should be same as Compiled+Nand
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_KErrNone(r);
+	HcrSimGetSettings(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+	HcrSimGetSettingsNegative(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
+	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
+	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
+	test.End();
+#endif // __WINS__
+
+	test.Next(_L("Reload Device Driver (Corrupt1)"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	r = HcrSimTest.InitExtension(ETestCorruptRepository1); // *** Repository not ordered ***
+#ifdef _DEBUG
+	test_Equal(KErrCorrupt, r);
+#else
+	test_KErrNone(r);
+#endif // _DEBUG
+
+	test.Next(_L("Reload Device Driver (Corrupt2)"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	r = HcrSimTest.InitExtension(ETestCorruptRepository2); // *** Repository with duplicates ***
+#ifdef _DEBUG
+	test_Equal(KErrAlreadyExists, r);
+#else
+	test_KErrNone(r);
+#endif // _DEBUG
+
+#ifndef __WINS__
+	test.Next(_L("Reload Device Driver (Default)"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = User::LoadLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	r = HcrSimTest.Open();
+	test_KErrNone(r);
+	r = HcrSimTest.InitExtension(); // *** Default Repository ***
+	test_KErrNone(r);
+
+	test.Next(_L("Compiled+Corrupt1+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestCorrupt1, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_Equal(KErrCorrupt, r);
+	test.End();
+
+	test.Next(_L("Compiled+Corrupt2+Nand"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestCorrupt2, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_Equal(KErrAlreadyExists, r);
+	test.End();
+
+	test.Next(_L("Compiled+File+Corrupt1"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.SwitchRepository(KTestCorrupt1, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_Equal(KErrCorrupt, r);
+	test.End();
+
+	test.Next(_L("Compiled+File+Corrupt2"));
+	test.Start(_L("Initialisation"));
+	r = HcrSimTest.SwitchRepository(KTestCorrupt2, HCRInternal::EOverrideRepos);
+	test_KErrNone(r);
+	r = HcrSimTest.CheckIntegrity();
+	test_Equal(KErrAlreadyExists, r);
+	test.End();
+#endif // __WINS__
+
+	test.Next(_L("Close test channel and unload device driver"));
+	HcrSimTest.Close();
+	r = User::FreeLogicalDevice(KTestHcrSim);
+	test_KErrNone(r);
+	test.End();
+	}
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+
+	test.Title();
+	test.Start(_L("HCR Test Suite"));
+	HcrSimTests();
+	test.End();
+	test.Close();
+
+	__UHEAP_MARKEND;
+	return KErrNone;
+	}