kerneltest/e32test/hcr/t_hcr.cpp
changeset 4 56f325a607ea
parent 0 a41df078684a
child 14 5d2844f35677
equal deleted inserted replaced
2:4122176ea935 4:56f325a607ea
    14 // Hardware Configuration Respoitory Test Application
    14 // Hardware Configuration Respoitory Test Application
    15 //
    15 //
    16 
    16 
    17 #define __E32TEST_EXTENSION__
    17 #define __E32TEST_EXTENSION__
    18 #include <e32test.h>
    18 #include <e32test.h>
       
    19 #include <e32rom.h>
       
    20 #include <e32svr.h>
       
    21 #include <e32hashtab.h>
       
    22 #include <e32base.h>
    19 #include "d_hcrsim.h"
    23 #include "d_hcrsim.h"
    20 #include "d_hcrsim_testdata.h"
    24 #include "d_hcrsim_testdata.h"
       
    25 #include "hcr_uids.h"
       
    26 
       
    27 _LIT8(KTestFileRepos,	"filerepos.dat");
       
    28 _LIT8(KTestNandRepos,	"nandrepos.dat");
       
    29 _LIT8(KTestCorrupt1,	"corrupt1.dat");
       
    30 _LIT8(KTestCorrupt2,	"corrupt2.dat");
       
    31 _LIT8(KTestEmpty,		"empty.dat");
       
    32 _LIT8(KTestMegaLarge1,	"megalarge1.dat");
       
    33 _LIT8(KTestMegaLarge2,	"megalarge2.dat");
       
    34 _LIT8(KTestClearRepos,	"");
       
    35 
       
    36 
    21 
    37 
    22 RTest test(_L("T_HCR"));
    38 RTest test(_L("T_HCR"));
    23 RHcrSimTestChannel HcrSimTest;
    39 RHcrSimTestChannel HcrSimTest;
       
    40 
       
    41 //Helper function to compare two SSettingId parameters. It's used in 
       
    42 //GetMultipleWord settings array
       
    43 TInt CompareEntries (const SSettingC& a1, const SSettingC& a2)
       
    44 	{
       
    45 	if (a1.iName.iId.iCat > a2.iName.iId.iCat)
       
    46 		return (1); 
       
    47 
       
    48 	if (a1.iName.iId.iCat < a2.iName.iId.iCat)
       
    49 		return (-1);
       
    50 
       
    51 	// Categories are the same at this point, check keys.
       
    52 	if (a1.iName.iId.iKey > a2.iName.iId.iKey)
       
    53 		return (1); 
       
    54 
       
    55 	if (a1.iName.iId.iKey < a2.iName.iId.iKey)
       
    56 		return (-1);
       
    57 
       
    58 	// Both Categories and jeys are the same here.
       
    59 	return (0); 
       
    60 	}
       
    61 
       
    62 
    24 
    63 
    25 void HcrSimGetSettings(SSettingC* aRepository, TUint aNumberOfSettings)
    64 void HcrSimGetSettings(SSettingC* aRepository, TUint aNumberOfSettings)
    26 	{
    65 	{
    27 	test.Next(_L("GetSettings"));
    66 	test.Next(_L("GetSettings"));
    28 	TInt r;
    67 	TInt r;
   276 			r = HcrSimTest.GetData(id, setting->iName.iLen, pval, actuallength);
   315 			r = HcrSimTest.GetData(id, setting->iName.iLen, pval, actuallength);
   277 			test_Equal(KErrArgument, r);
   316 			test_Equal(KErrArgument, r);
   278 			//
   317 			//
   279 			User::Free(pval);
   318 			User::Free(pval);
   280 			}
   319 			}
       
   320 		else if (setting->iName.iLen > 1)
       
   321 			{
       
   322 			RBuf8 dval;
       
   323 			r = dval.Create(setting->iName.iLen - 1);
       
   324 			test_KErrNone(r);
       
   325 			r = HcrSimTest.GetData(id, dval);
       
   326 			test_Equal(KErrTooBig, r);
       
   327 			dval.Close();
       
   328 			}
   281 		if (setting->iName.iType != ETypeText8)
   329 		if (setting->iName.iType != ETypeText8)
   282 			{
   330 			{
   283 			TBuf8<KMaxSettingLength> dval;
   331 			TBuf8<KMaxSettingLength> dval;
   284 			TText8* pval;
   332 			TText8* pval;
   285 			pval = (TText8*) User::Alloc(setting->iName.iLen);
   333 			pval = (TText8*) User::Alloc(setting->iName.iLen);
   292 			r = HcrSimTest.GetString(id, setting->iName.iLen, pval, actuallength);
   340 			r = HcrSimTest.GetString(id, setting->iName.iLen, pval, actuallength);
   293 			test_Equal(KErrArgument, r);
   341 			test_Equal(KErrArgument, r);
   294 			//
   342 			//
   295 			User::Free(pval);
   343 			User::Free(pval);
   296 			}
   344 			}
       
   345 		else if (setting->iName.iLen > 1)
       
   346 			{
       
   347 			RBuf8 dval;
       
   348 			r = dval.Create(setting->iName.iLen - 1);
       
   349 			test_KErrNone(r);
       
   350 			r = HcrSimTest.GetString(id, dval);
       
   351 			test_Equal(KErrTooBig, r);
       
   352 			dval.Close();
       
   353 			}
   297 		if (setting->iName.iType != ETypeArrayInt32)
   354 		if (setting->iName.iType != ETypeArrayInt32)
   298 			{
   355 			{
   299 			TInt32* pval;
   356 			TInt32* pval;
   300 			pval = (TInt32*) User::Alloc(setting->iName.iLen);
   357 			pval = (TInt32*) User::Alloc(setting->iName.iLen);
   301 			test_NotNull(pval);
   358 			test_NotNull(pval);
   304 			r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
   361 			r = HcrSimTest.GetArray(id, setting->iName.iLen, pval, actuallength);
   305 			test_Equal(KErrArgument, r);
   362 			test_Equal(KErrArgument, r);
   306 			//
   363 			//
   307 			User::Free(pval);
   364 			User::Free(pval);
   308 			}
   365 			}
       
   366 		else
       
   367 			{
       
   368 			TInt32* pval;
       
   369 			pval = (TInt32*) User::Alloc(setting->iName.iLen);
       
   370 			test_NotNull(pval);
       
   371 			//
       
   372 			TUint16 actuallength;
       
   373 			r = HcrSimTest.GetArray(id, (TUint16) (setting->iName.iLen / 2), pval, actuallength);
       
   374 			test_Equal(KErrTooBig, r);
       
   375 			//
       
   376 			User::Free(pval);
       
   377 			}
   309 		if (setting->iName.iType != ETypeArrayUInt32)
   378 		if (setting->iName.iType != ETypeArrayUInt32)
   310 			{
   379 			{
   311 			TUint32* pval;
   380 			TUint32* pval;
   312 			pval = (TUint32*) User::Alloc(setting->iName.iLen);
   381 			pval = (TUint32*) User::Alloc(setting->iName.iLen);
   313 			test_NotNull(pval);
   382 			test_NotNull(pval);
   328 			{
   397 			{
   329 			TUint64 val;
   398 			TUint64 val;
   330 			r = HcrSimTest.GetUInt(id, val);
   399 			r = HcrSimTest.GetUInt(id, val);
   331 			test_Equal(KErrArgument, r);
   400 			test_Equal(KErrArgument, r);
   332 			}
   401 			}
   333 		}
       
   334 	}
       
   335 
       
   336 void HcrSimGetSettingsNotFound(const TUint32 aInvalidCategory, const TUint32 aInvalidSettingId)
       
   337 	{
       
   338 	test.Next(_L("GetSettingsNotFound"));
       
   339 	TSettingId id(aInvalidCategory, aInvalidSettingId);
       
   340 	TInt r;
       
   341 		{
       
   342 		TInt32 val;
       
   343 		r = HcrSimTest.GetInt(id, val);
       
   344 		test_Equal(KErrNotFound, r);
       
   345 		}
       
   346 		{
       
   347 		TInt16 val;
       
   348 		r = HcrSimTest.GetInt(id, val);
       
   349 		test_Equal(KErrNotFound, r);
       
   350 		}
       
   351 		{
       
   352 		TInt8 val;
       
   353 		r = HcrSimTest.GetInt(id, val);
       
   354 		test_Equal(KErrNotFound, r);
       
   355 		}
       
   356 		{
       
   357 		TBool val;
       
   358 		r = HcrSimTest.GetBool(id, val);
       
   359 		test_Equal(KErrNotFound, r);
       
   360 		}
       
   361 		{
       
   362 		TUint32 val;
       
   363 		r = HcrSimTest.GetUInt(id, val);
       
   364 		test_Equal(KErrNotFound, r);
       
   365 		}
       
   366 		{
       
   367 		TUint16 val;
       
   368 		r = HcrSimTest.GetUInt(id, val);
       
   369 		test_Equal(KErrNotFound, r);
       
   370 		}
       
   371 		{
       
   372 		TUint8 val;
       
   373 		r = HcrSimTest.GetUInt(id, val);
       
   374 		test_Equal(KErrNotFound, r);
       
   375 		}
       
   376 		{
       
   377 		TLinAddr val;
       
   378 		r = HcrSimTest.GetLinAddr(id, val);
       
   379 		test_Equal(KErrNotFound, r);
       
   380 		}
       
   381 		{
       
   382 		TBuf8<KMaxSettingLength> dval;
       
   383 		TUint8* pval;
       
   384 		pval = (TUint8*) User::Alloc(KMaxSettingLength);
       
   385 		test_NotNull(pval);
       
   386 		//
       
   387 		r = HcrSimTest.GetData(id, dval);
       
   388 		test_Equal(KErrNotFound, r);
       
   389 		//
       
   390 		TUint16 actuallength;
       
   391 		r = HcrSimTest.GetData(id, KMaxSettingLength, pval, actuallength);
       
   392 		test_Equal(KErrNotFound, r);
       
   393 		//
       
   394 		User::Free(pval);
       
   395 		}
       
   396 		{
       
   397 		TBuf8<KMaxSettingLength> dval;
       
   398 		TText8* pval;
       
   399 		pval = (TText8*) User::Alloc(KMaxSettingLength);
       
   400 		test_NotNull(pval);
       
   401 		//
       
   402 		r = HcrSimTest.GetString(id, dval);
       
   403 		test_Equal(KErrNotFound, r);
       
   404 		//
       
   405 		TUint16 actuallength;
       
   406 		r = HcrSimTest.GetString(id, KMaxSettingLength, pval, actuallength);
       
   407 		test_Equal(KErrNotFound, r);
       
   408 		//
       
   409 		User::Free(pval);
       
   410 		}
       
   411 		{
       
   412 		TInt32* pval;
       
   413 		pval = (TInt32*) User::Alloc(KMaxSettingLength);
       
   414 		test_NotNull(pval);
       
   415 		//
       
   416 		TUint16 actuallength;
       
   417 		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
       
   418 		test_Equal(KErrNotFound, r);
       
   419 		//
       
   420 		User::Free(pval);
       
   421 		}
       
   422 		{
       
   423 		TUint32* pval;
       
   424 		pval = (TUint32*) User::Alloc(KMaxSettingLength);
       
   425 		test_NotNull(pval);
       
   426 		//
       
   427 		TUint16 actuallength;
       
   428 		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
       
   429 		test_Equal(KErrNotFound, r);
       
   430 		//
       
   431 		User::Free(pval);
       
   432 		}
       
   433 		{
       
   434 		TInt64 val;
       
   435 		r = HcrSimTest.GetInt(id, val);
       
   436 		test_Equal(KErrNotFound, r);
       
   437 		}
       
   438 		{
       
   439 		TUint64 val;
       
   440 		r = HcrSimTest.GetUInt(id, val);
       
   441 		test_Equal(KErrNotFound, r);
       
   442 		}
       
   443 	}
       
   444 
       
   445 void HcrSimGetSettingsNotReady()
       
   446 	{
       
   447 	test.Next(_L("GetSettingsNotReady"));
       
   448 	TSettingId id(1, 1);
       
   449 	TInt r;
       
   450 		{
       
   451 		TInt32 val;
       
   452 		r = HcrSimTest.GetInt(id, val);
       
   453 		test_Equal(KErrNotReady, r);
       
   454 		}
       
   455 		{
       
   456 		TInt16 val;
       
   457 		r = HcrSimTest.GetInt(id, val);
       
   458 		test_Equal(KErrNotReady, r);
       
   459 		}
       
   460 		{
       
   461 		TInt8 val;
       
   462 		r = HcrSimTest.GetInt(id, val);
       
   463 		test_Equal(KErrNotReady, r);
       
   464 		}
       
   465 		{
       
   466 		TBool val;
       
   467 		r = HcrSimTest.GetBool(id, val);
       
   468 		test_Equal(KErrNotReady, r);
       
   469 		}
       
   470 		{
       
   471 		TUint32 val;
       
   472 		r = HcrSimTest.GetUInt(id, val);
       
   473 		test_Equal(KErrNotReady, r);
       
   474 		}
       
   475 		{
       
   476 		TUint16 val;
       
   477 		r = HcrSimTest.GetUInt(id, val);
       
   478 		test_Equal(KErrNotReady, r);
       
   479 		}
       
   480 		{
       
   481 		TUint8 val;
       
   482 		r = HcrSimTest.GetUInt(id, val);
       
   483 		test_Equal(KErrNotReady, r);
       
   484 		}
       
   485 		{
       
   486 		TLinAddr val;
       
   487 		r = HcrSimTest.GetLinAddr(id, val);
       
   488 		test_Equal(KErrNotReady, r);
       
   489 		}
       
   490 		{
       
   491 		TBuf8<KMaxSettingLength> dval;
       
   492 		TUint8* pval;
       
   493 		pval = (TUint8*) User::Alloc(KMaxSettingLength);
       
   494 		test_NotNull(pval);
       
   495 		//
       
   496 		r = HcrSimTest.GetData(id, dval);
       
   497 		test_Equal(KErrNotReady, r);
       
   498 		//
       
   499 		TUint16 actuallength;
       
   500 		r = HcrSimTest.GetData(id, KMaxSettingLength, pval, actuallength);
       
   501 		test_Equal(KErrNotReady, r);
       
   502 		//
       
   503 		User::Free(pval);
       
   504 		}
       
   505 		{
       
   506 		TBuf8<KMaxSettingLength> dval;
       
   507 		TText8* pval;
       
   508 		pval = (TText8*) User::Alloc(KMaxSettingLength);
       
   509 		test_NotNull(pval);
       
   510 		//
       
   511 		r = HcrSimTest.GetString(id, dval);
       
   512 		test_Equal(KErrNotReady, r);
       
   513 		//
       
   514 		TUint16 actuallength;
       
   515 		r = HcrSimTest.GetString(id, KMaxSettingLength, pval, actuallength);
       
   516 		test_Equal(KErrNotReady, r);
       
   517 		//
       
   518 		User::Free(pval);
       
   519 		}
       
   520 		{
       
   521 		TInt32* pval;
       
   522 		pval = (TInt32*) User::Alloc(KMaxSettingLength);
       
   523 		test_NotNull(pval);
       
   524 		//
       
   525 		TUint16 actuallength;
       
   526 		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
       
   527 		test_Equal(KErrNotReady, r);
       
   528 		//
       
   529 		User::Free(pval);
       
   530 		}
       
   531 		{
       
   532 		TUint32* pval;
       
   533 		pval = (TUint32*) User::Alloc(KMaxSettingLength);
       
   534 		test_NotNull(pval);
       
   535 		//
       
   536 		TUint16 actuallength;
       
   537 		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
       
   538 		test_Equal(KErrNotReady, r);
       
   539 		//
       
   540 		User::Free(pval);
       
   541 		}
       
   542 		{
       
   543 		TInt64 val;
       
   544 		r = HcrSimTest.GetInt(id, val);
       
   545 		test_Equal(KErrNotReady, r);
       
   546 		}
       
   547 		{
       
   548 		TUint64 val;
       
   549 		r = HcrSimTest.GetUInt(id, val);
       
   550 		test_Equal(KErrNotReady, r);
       
   551 		}
   402 		}
   552 	}
   403 	}
   553 
   404 
   554 void HcrSimSettingProperties(SSettingC* aRepository, TUint aNumberOfSettings)
   405 void HcrSimSettingProperties(SSettingC* aRepository, TUint aNumberOfSettings)
   555 	{
   406 	{
   597 
   448 
   598 void HcrSimMultipleGet(SSettingC* aRepository, TUint aNumberOfSettings)
   449 void HcrSimMultipleGet(SSettingC* aRepository, TUint aNumberOfSettings)
   599 	{
   450 	{
   600 	test.Next(_L("MultipleGet"));
   451 	test.Next(_L("MultipleGet"));
   601 	TInt r;
   452 	TInt r;
       
   453 	SSettingId largesetting;
       
   454 	largesetting.iCat = 0;
       
   455 	largesetting.iKey = 0;
       
   456 	
       
   457 	SSettingC* setting;
       
   458 	SSettingId id;
       
   459 	id.iCat = 0;
       
   460 	id.iKey = 0;
       
   461 	
       
   462 	
   602 
   463 
   603 	test.Start(_L("Multiple Get on individual settings"));
   464 	test.Start(_L("Multiple Get on individual settings"));
   604 	SSettingC* setting;
   465 	
   605 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   466 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   606 		{
   467 		{
   607 		if (setting->iName.iType < 0x00010000)
   468 		if (setting->iName.iType < 0x00010000)
   608 			{
   469 			{
   609 			SSettingId id;
       
   610 			id.iCat = setting->iName.iId.iCat;
       
   611 			id.iKey = setting->iName.iId.iKey;
       
   612 			test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
   470 			test.Printf(_L("(0x%08x, 0x%08x)\n"), id.iCat, id.iKey);
   613 			TInt i;
   471 			TInt i;
       
   472 
       
   473 			TInt32 val;
       
   474 			TSettingType type;
       
   475 			TInt err;
       
   476 
       
   477 
       
   478 		    test.Next(_L("Multiple Get, with non-existing category or element id"));
       
   479 		    
   614 			// Try all permutations of optional values
   480 			// Try all permutations of optional values
   615 			for (i = 0; i < (2 ^ 2); i++)
   481 		    // i == 0 || i == 1     Just a single setting from the repostitory
       
   482 		    // i == 2 || i == 3     Valid category and invalid element id
       
   483 		    // i == 4 || i == 5     Invalid category and valid element id 
       
   484 		    // i == 6 || i == 7     Invalid category and element id 
       
   485 			for (i = 0; i < 8; i++)
   616 				{
   486 				{
   617 				test.Printf(_L("-Permutation %02x\n"), i);
   487 				//Just a single setting from the repository
   618 				TInt32 val;
   488 				if(i == 0 || i == 1)
   619 				TSettingType type;
       
   620 				TInt err;
       
   621 				r = HcrSimTest.GetWordSettings(1, &id, &val,
       
   622 					// Optional values
       
   623 					(i & 0x1  ? &type : NULL),
       
   624 					(i & 0x10 ? &err  : NULL));
       
   625 				test_KErrNone(r);
       
   626 				test_Equal(setting->iValue.iLit.iInt32, val);
       
   627 				if (i & 0x1)
       
   628 					{
   489 					{
   629 					test_Equal(setting->iName.iType, type);
   490 					//test.Printf(_L("Single setting, valid element && valid category\n"));
   630 					}
   491 					id.iCat = setting->iName.iId.iCat;
   631 				if (i & 0x10)
   492 					id.iKey = setting->iName.iId.iKey;
   632 					{
   493 
       
   494 					//test.Printf(_L("-Permutation %02x\n"), i);
       
   495 					r = HcrSimTest.GetWordSettings(1, &id, &val,
       
   496 							(i & 0x1  ? &type : NULL), &err);
       
   497 					//HCR should return 1
       
   498 					test_Equal(1, r);
       
   499 					test_Equal(setting->iValue.iLit.iInt32, val);
       
   500 					if (i & 0x1)
       
   501 						{
       
   502 						test_Equal(setting->iName.iType, type);
       
   503 						}
       
   504 
   633 					test_KErrNone(err);
   505 					test_KErrNone(err);
   634 					}
   506 					}
       
   507 
       
   508 				//Valid category and invalid element id
       
   509 				if(i == 2 || i == 3)
       
   510 					{
       
   511 					//test.Printf(_L("Single setting, invalid element && valid category\n"));
       
   512 					id.iCat = setting->iName.iId.iCat;
       
   513 					id.iKey = KTestInvalidSettingId;
       
   514 
       
   515 
       
   516 					r = HcrSimTest.GetWordSettings(1, &id, &val,
       
   517 							(i & 0x1  ? &type : NULL), &err);
       
   518 
       
   519 					//HCR should return 0
       
   520 					test_Equal(0, r);
       
   521 					test_Equal(0, val);
       
   522 					if (i & 0x1)
       
   523 						{
       
   524 						//HCR returns ETypeUndefined
       
   525 						test_Equal(0, type);
       
   526 						}
       
   527 
       
   528 					test_Equal(KErrNotFound,err);
       
   529 					}
       
   530 
       
   531 				//Invalid category and valid element id
       
   532 				if(i == 4 || i == 5)
       
   533 					{
       
   534 					id.iCat = KTestInvalidCategory;
       
   535 					id.iKey = setting->iName.iId.iKey;
       
   536 
       
   537 					//test.Printf(_L("Single setting, invalid element && valid category\n"));
       
   538 					r = HcrSimTest.GetWordSettings(1, &id, &val,
       
   539 							(i & 0x1  ? &type : NULL), &err);
       
   540 					//HCR should return 1
       
   541 					test_Equal(0, r);
       
   542 					test_Equal(0, val);
       
   543 					if (i & 0x1)
       
   544 						{
       
   545 						//HCR returns ETypeUndefined
       
   546 						test_Equal(0, type);
       
   547 						}
       
   548 
       
   549 					test_Equal(KErrNotFound, err);
       
   550 					}
       
   551 				
       
   552 				//Invalid category and element id 
       
   553 				if(i == 6 || i == 7)
       
   554 					{
       
   555 					id.iCat = KTestInvalidCategory;
       
   556 					id.iKey = KTestInvalidSettingId;
       
   557 
       
   558 					//test.Printf(_L("Single setting, invalid element && valid category\n"));
       
   559 					r = HcrSimTest.GetWordSettings(1, &id, &val,
       
   560 							(i & 0x1  ? &type : NULL), &err);
       
   561 					//HCR should return 1
       
   562 					test_Equal(0, r);
       
   563 					test_Equal(0, val);
       
   564 					if (i & 0x1)
       
   565 						{
       
   566 						//HCR returns ETypeUndefined
       
   567 						test_Equal(0, type);
       
   568 						}
       
   569 					test_Equal(KErrNotFound, err);
       
   570 					}
   635 				}
   571 				}
   636 			}
   572 			}
   637 		}
   573 		else if (largesetting.iKey == 0)
   638 
   574 			{
   639 	test.Start(_L("Multiple Get on all settings"));
   575 			// save for later
   640 	TUint nosettings = 0;
   576 			largesetting.iCat = setting->iName.iId.iCat;
       
   577 			largesetting.iKey = setting->iName.iId.iKey;
       
   578 			}
       
   579 		}
       
   580 
       
   581 	
       
   582 	
       
   583 	test.Next(_L("Multiple Get, some user input parameters are wrong"));
       
   584 	
       
   585 
       
   586 	TInt nosettings = 0;
   641 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   587 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   642 		{
   588 		{
   643 		if (setting->iName.iType < 0x00010000)
   589 		if (setting->iName.iType < 0x00010000)
   644 			{
   590 			{
   645 			nosettings++;
   591 			nosettings++;
   646 			}
   592 			}
   647 		test_Compare(0, <, nosettings);
   593 		test_Compare(0, <, nosettings);
   648 		}
   594 		}
       
   595 	
       
   596 
   649 	SSettingId* ids;
   597 	SSettingId* ids;
   650 	TInt32* vals;
   598 	TInt32* vals;
   651 	TSettingType* types;
   599 	TSettingType* types;
   652 	TInt* errs;
   600 	TInt* errs;
       
   601 
       
   602 	
   653 	ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
   603 	ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
   654 	test_NotNull(ids);
   604 	test_NotNull(ids);
   655 	vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
   605 	vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
   656 	test_NotNull(vals);
   606 	test_NotNull(vals);
   657 	types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
   607 	types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
   658 	test_NotNull(types);
   608 	test_NotNull(types);
   659 	errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
   609 	errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
   660 	test_NotNull(errs);
   610 	test_NotNull(errs);
       
   611 	
   661 	TUint n = 0;
   612 	TUint n = 0;
       
   613 
   662 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   614 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   663 		{
   615 		{
   664 		if (setting->iName.iType < 0x00010000)
   616 		if (setting->iName.iType < 0x00010000)
   665 			{
   617 			{
   666 			ids[n].iCat = setting->iName.iId.iCat;
   618 			ids[n].iCat = setting->iName.iId.iCat;
   667 			ids[n].iKey = setting->iName.iId.iKey;
   619 			ids[n].iKey = setting->iName.iId.iKey;
   668 			n++;
   620 			n++;
   669 			}
   621 			}
   670 		}
   622 		}
   671 	test_Equal(nosettings, n);
   623 	test_Equal(nosettings, n);
       
   624 	
       
   625 
       
   626 
       
   627     test.Next(_L("Number of settings is negative \n"));
       
   628     r = HcrSimTest.GetWordSettings(-1 * nosettings, ids, vals, types, errs);
       
   629 
       
   630     //HCR returns KErrArgument
       
   631     test_Equal(KErrArgument, r);
       
   632     
       
   633 
       
   634     test.Printf(_L("Pointer to errors array is NULL \n"));
       
   635     r = HcrSimTest.GetWordSettings(nosettings, ids, vals, types, NULL);
       
   636 
       
   637     //HCR returns KErrArgument
       
   638     test_Equal(KErrArgument, r);
       
   639 
       
   640 
       
   641     test.Printf(_L("Pointer to ids is NULL \n"));
       
   642     r = HcrSimTest.GetWordSettings(nosettings, NULL, vals, types, errs);
       
   643 
       
   644     //HCR returns KErrArgument
       
   645     test_Equal(KErrArgument, r);
       
   646 
       
   647 	User::Free(ids);
       
   648 	User::Free(vals);
       
   649 	User::Free(types);
       
   650 	User::Free(errs);
       
   651 
       
   652 	
       
   653 	
       
   654 	test.Next(_L("Multiple Get on all settings"));
       
   655 	nosettings = 0;
       
   656 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   657 		{
       
   658 		if (setting->iName.iType < 0x00010000)
       
   659 			{
       
   660 			nosettings++;
       
   661 			}
       
   662 		test_Compare(0, <, nosettings);
       
   663 		}
       
   664 	
       
   665 	ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
       
   666 	test_NotNull(ids);
       
   667 	vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
       
   668 	test_NotNull(vals);
       
   669 	types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
       
   670 	test_NotNull(types);
       
   671 	errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
       
   672 	test_NotNull(errs);
       
   673 	
       
   674 	n = 0;
       
   675 
       
   676 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   677 		{
       
   678 		if (setting->iName.iType < 0x00010000)
       
   679 			{
       
   680 			ids[n].iCat = setting->iName.iId.iCat;
       
   681 			ids[n].iKey = setting->iName.iId.iKey;
       
   682 			n++;
       
   683 			}
       
   684 		}
       
   685 	test_Equal(nosettings, n);
       
   686     
       
   687 	
   672 	// Try all permutations of optional values
   688 	// Try all permutations of optional values
   673 	TInt i;
   689 	TInt i;
   674 	for (i = 0; i < (2 ^ 2); i++)
   690 	for (i = 0; i < 2; i++)
   675 		{
   691 		{
   676 		r = HcrSimTest.GetWordSettings(nosettings, ids, vals,
   692 		r = HcrSimTest.GetWordSettings(nosettings, ids, vals,
   677 			// Optional values
   693 				(i & 0x1  ? types : NULL), errs);
   678 			(i & 0x1  ? types : NULL),
   694 		//HCR returns number of found elements
   679 			(i & 0x10 ? errs  : NULL));
   695 		test_Equal(nosettings, r);
   680 		test_KErrNone(r);
       
   681 		
   696 		
   682 		// Check values
   697 		// Check values
   683 		n = 0;
   698 		n = 0;
       
   699 		for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   700 			{
       
   701 			if (setting->iName.iType < 0x00010000)
       
   702 				{
       
   703 				test_Equal(setting->iValue.iLit.iInt32, vals[n]);
       
   704 				if (i & 0x1)
       
   705 					{
       
   706 					test_Equal(setting->iName.iType,types[n]);
       
   707 					}
       
   708 				test_KErrNone(errs[n]);
       
   709 				n++;
       
   710 				}
       
   711 			}
       
   712 		test_Equal(nosettings, n);
       
   713 		}
       
   714 	User::Free(ids);
       
   715 	User::Free(vals);
       
   716 	User::Free(types);
       
   717 	User::Free(errs);
       
   718 	
       
   719 	test.Next(_L("Multiple Get on all settings + inexistent"));
       
   720 	nosettings = 1;
       
   721 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   722 		{
       
   723 		if (setting->iName.iType < 0x00010000)
       
   724 			{
       
   725 			nosettings++;
       
   726 			}
       
   727 		test_Compare(0, <, nosettings);
       
   728 		}
       
   729 	ids = (SSettingId*) User::Alloc(sizeof(SSettingId) * nosettings);
       
   730 	test_NotNull(ids);
       
   731 	vals = (TInt32*) User::Alloc(sizeof(TInt32) * nosettings);
       
   732 	test_NotNull(vals);
       
   733 	types = (TSettingType*) User::Alloc(sizeof(TSettingType) * nosettings);
       
   734 	test_NotNull(types);
       
   735 	errs = (TInt*) User::Alloc(sizeof(TInt) * nosettings);
       
   736 	test_NotNull(errs);
       
   737 	ids[0].iCat = KTestInvalidCategory;
       
   738 	ids[0].iKey = KTestInvalidSettingId;
       
   739 	
       
   740 
       
   741 	n = 1;
       
   742 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   743 		{
       
   744 		if (setting->iName.iType < 0x00010000)
       
   745 			{
       
   746 			ids[n].iCat = setting->iName.iId.iCat;
       
   747 			ids[n].iKey = setting->iName.iId.iKey;
       
   748 			n++;
       
   749 			}
       
   750 		}
       
   751 	
       
   752 	test_Equal(nosettings, n);
       
   753 
       
   754 	// Try all permutations of optional values
       
   755 	for (i = 0; i < 2; i++)
       
   756 		{
       
   757 		r = HcrSimTest.GetWordSettings(nosettings, ids, vals,
       
   758 				(i & 0x1  ? types : NULL), errs);
       
   759 		test_Equal(nosettings - 1, r);
       
   760 		
       
   761 		// Check values
       
   762 		if (i & 0x1)
       
   763 			{
       
   764 			test_Equal(ETypeUndefined, types[0]);
       
   765 			}
       
   766 			test_Equal(KErrNotFound, errs[0]);
       
   767 
       
   768 		n = 1;
   684 		for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   769 		for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
   685 			{
   770 			{
   686 			if (setting->iName.iType < 0x00010000)
   771 			if (setting->iName.iType < 0x00010000)
   687 				{
   772 				{
   688 				test_Equal(setting->iValue.iLit.iInt32, vals[n]);
   773 				test_Equal(setting->iValue.iLit.iInt32, vals[n]);
   689 				if (i & 0x1)
   774 				if (i & 0x1)
   690 					{
   775 					{
   691 					test_Equal(setting->iName.iType, types[n]);
   776 					test_Equal(setting->iName.iType, types[n]);
   692 					}
   777 					}
   693 				if (i & 0x10)
   778 
   694 					{
   779 				test_KErrNone(errs[n]);
   695 					test_KErrNone(errs[n]);
   780 
   696 					}
       
   697 				n++;
   781 				n++;
   698 				}
   782 				}
   699 			}
   783 			}
   700 		test_Equal(nosettings, n);
   784 		test_Equal(nosettings, n);
   701 		}
   785 		}
   702 	User::Free(ids);
   786 	User::Free(ids);
   703 	User::Free(vals);
   787 	User::Free(vals);
   704 	User::Free(types);
   788 	User::Free(types);
   705 	User::Free(errs);
   789 	User::Free(errs);
       
   790 
       
   791 	test.Next(_L("Multiple Get on a large setting"));
       
   792 	if (largesetting.iKey)
       
   793 		{
       
   794 		TInt32 value;
       
   795 		TSettingType type;
       
   796 		TInt theerror = 1;
       
   797 		r = HcrSimTest.GetWordSettings(1, &largesetting, &value, &type, &theerror);
       
   798 		test_Equal(0, r);
       
   799 		test_Equal(KErrArgument, theerror);
       
   800 		}
       
   801 	else
       
   802 		{
       
   803 		test.Printf(_L("No large setting found in repositories!\n"));
       
   804 		}
   706 	test.End();
   805 	test.End();
   707 	}
   806 	}
   708 
   807 
   709 void HcrSimTests()
   808 void HcrSimNumSettingsInCategory(SSettingC* aRepository, TUint aNumberOfSettings)
       
   809 	{
       
   810 	test.Next(_L("NumSettingsInCategory"));
       
   811 	TInt r;
       
   812 	// Build a hash table with number of settings for each category
       
   813 	RHashMap<TUint32, TInt> numsettings;
       
   814 	SSettingC* setting;
       
   815 	TInt* pV = NULL;
       
   816 	TInt value = 0;
       
   817 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   818 		{
       
   819 		pV = numsettings.Find(setting->iName.iId.iCat);
       
   820 		if(pV)
       
   821 		    value = *pV;
       
   822 		if (!pV)
       
   823 			{
       
   824 			r = numsettings.Insert(setting->iName.iId.iCat, 1);
       
   825 			test_KErrNone(r);
       
   826 			}
       
   827 		else
       
   828 			{
       
   829 			r = numsettings.Remove(setting->iName.iId.iCat);
       
   830 			test_KErrNone(r);
       
   831 			r = numsettings.Insert(setting->iName.iId.iCat, value + 1);
       
   832 			test_KErrNone(r);
       
   833 			}
       
   834 		}
       
   835 
       
   836 	// Now compare hash table with values returned by FindNumSettingsInCategory
       
   837 	RHashMap<TUint32, TInt>::TIter catiter(numsettings);
       
   838 	for (;;)
       
   839 		{
       
   840 		const TUint32* nextcat = catiter.NextKey();
       
   841 		if (!nextcat)
       
   842 			{
       
   843 			break;
       
   844 			}
       
   845 		test.Printf(_L("Category %08x\n"), *nextcat);
       
   846 		const TInt* v = numsettings.Find(*nextcat);
       
   847 		test_NotNull(v);
       
   848 		r = HcrSimTest.FindNumSettingsInCategory(*nextcat);
       
   849 		test_Equal(*v, r);
       
   850 		}
       
   851 	numsettings.Close();
       
   852 	}
       
   853 
       
   854 void HcrSimFindSettingsCategory(SSettingC* aRepository, TUint aNumberOfSettings)
       
   855 	{
       
   856 	test.Next(_L("FindSettingsCategory"));
       
   857 	TInt r;
       
   858 	// Build a hash table with number of settings for each category
       
   859 	RHashMap<TUint32, TInt> numsettings;
       
   860 	SSettingC* setting;
       
   861 	TInt* pV = NULL;
       
   862 	TInt value = 0;
       
   863 	for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   864 		{
       
   865 		pV = numsettings.Find(setting->iName.iId.iCat);
       
   866 		if(pV)
       
   867 		    value = *pV;
       
   868 		if (!pV)
       
   869 			{
       
   870 			r = numsettings.Insert(setting->iName.iId.iCat, 1);
       
   871 			test_KErrNone(r);
       
   872 			}
       
   873 		else
       
   874 			{
       
   875 			r = numsettings.Remove(setting->iName.iId.iCat);
       
   876 			test_KErrNone(r);
       
   877 			r = numsettings.Insert(setting->iName.iId.iCat, value + 1);
       
   878 			test_KErrNone(r);
       
   879 			}
       
   880 		}
       
   881 
       
   882 	// 
       
   883 	RHashMap<TUint32, TInt>::TIter catiter(numsettings);
       
   884 	for (;;)
       
   885 		{
       
   886 		const TUint32* nextcat = catiter.NextKey();
       
   887 		if (!nextcat)
       
   888 			{
       
   889 			break;
       
   890 			}
       
   891 		test.Printf(_L("Category %08x"), *nextcat);
       
   892 		const TInt* v = numsettings.Find(*nextcat);
       
   893 		test_NotNull(v);
       
   894 
       
   895 		// Allocate memory for holding array of settings
       
   896 		TElementId* elids;
       
   897 		TSettingType* types;
       
   898 		TUint16* lens;
       
   899 		elids = (TElementId*) User::Alloc(*v * sizeof(TElementId));
       
   900 		test_NotNull(elids);
       
   901 		types = (TSettingType*) User::Alloc(*v * sizeof(TSettingType));
       
   902 		test_NotNull(types);
       
   903 		lens = (TUint16*) User::Alloc(*v * sizeof(TUint16));
       
   904 		test_NotNull(lens);
       
   905 		
       
   906 		// Try all permutations of optional values
       
   907 		TInt i;
       
   908 		for (i = 0; i < 3; i++)
       
   909 			{
       
   910 			test.Printf(_L("."));
       
   911 			Mem::Fill(elids, *v * sizeof(TElementId), 0xcc);
       
   912 			Mem::Fill(types, *v * sizeof(TSettingType), 0xcc);
       
   913 			Mem::Fill(lens, *v * sizeof(TUint16), 0xcc);
       
   914 			TUint32 numfound;
       
   915 			r = HcrSimTest.FindSettings(*nextcat,
       
   916 				*v, numfound,
       
   917 				elids,
       
   918 				i & 0x1 ? types : NULL,
       
   919 				i & 0x2 ? lens : NULL);
       
   920 			numfound = r;
       
   921 			test_Compare(0, <=, r);
       
   922 			test_Equal(*v, r);
       
   923 			
       
   924 
       
   925 			// Check returned list of element ids
       
   926 			TUint j;
       
   927 			for (j = 0; j < numfound; j++)
       
   928 				{
       
   929 				// Find current element in the test array
       
   930 				for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   931 					{
       
   932 					if ((setting->iName.iId.iCat == *nextcat) && (setting->iName.iId.iKey == elids[j]))
       
   933 						{
       
   934 						break;
       
   935 						}
       
   936 					}
       
   937 				test_Compare(setting,<,aRepository+aNumberOfSettings); // Fail if element not found
       
   938 				switch (setting->iName.iType)
       
   939 					{
       
   940 					case ETypeInt32:
       
   941 					case ETypeInt16:
       
   942 					case ETypeInt8:
       
   943 					case ETypeBool:
       
   944 					case ETypeUInt32:
       
   945 					case ETypeUInt16:
       
   946 					case ETypeUInt8:
       
   947 					case ETypeLinAddr:
       
   948 						if (i & 0x1)
       
   949 							{
       
   950 							test_Equal(setting->iName.iType, types[j]);
       
   951 							}
       
   952 						if (i & 0x2)
       
   953 							{
       
   954 							test_Equal(0, lens[j]);
       
   955 							}
       
   956 						break;
       
   957 						// Fall-through
       
   958 					case ETypeBinData:
       
   959 					case ETypeText8:
       
   960 					case ETypeArrayInt32:
       
   961 					case ETypeArrayUInt32:
       
   962 					case ETypeInt64:
       
   963 					case ETypeUInt64:
       
   964 						if (i & 0x1)
       
   965 							{
       
   966 							test_Equal(setting->iName.iType, types[j]);
       
   967 							}
       
   968 						if (i & 0x2)
       
   969 							{
       
   970 							test_Equal(setting->iName.iLen, lens[j]);
       
   971 							}
       
   972 						break;
       
   973 					default:
       
   974 						test(EFalse);
       
   975 					}
       
   976 				}
       
   977 			// Check all expected elements are in the returned list of element ids
       
   978 			for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
   979 				{
       
   980 				if ((setting->iName.iId.iCat == *nextcat))
       
   981 					{
       
   982 					for (j = 0; j < numfound; j++)
       
   983 						{
       
   984 						if (elids[j] == setting->iName.iId.iKey)
       
   985 							{
       
   986 							break;
       
   987 							}
       
   988 						}
       
   989 					test_Compare(j, <=, numfound);
       
   990 					}
       
   991 				}
       
   992 			}
       
   993 		User::Free(elids);
       
   994 		User::Free(types);
       
   995 		User::Free(lens);
       
   996 		test.Printf(_L("\n"));
       
   997 		}
       
   998 	numsettings.Close();
       
   999 	}
       
  1000 
       
  1001 struct TTestFindSettingsPatternArgs
       
  1002 	{
       
  1003 	TUint32 iMask;
       
  1004 	TUint32 iPattern;
       
  1005 	};
       
  1006 
       
  1007 const TTestFindSettingsPatternArgs KTestFindSettingsPatternArgs[] = {
       
  1008 //	 iMask	   iPattern
       
  1009 	{0x00000000, 0x00000000},
       
  1010 /*  {0xfffffff0, 0x00000000},
       
  1011 	{0xffffffff, 0x00000001},*/
       
  1012 };
       
  1013 
       
  1014 void HcrSimFindSettingsPattern(SSettingC* aRepository, TUint aNumberOfSettings)
       
  1015 	{
       
  1016 	test.Next(_L("FindSettingsPattern"));
       
  1017 	TInt r;
       
  1018 	TUint i;
       
  1019 
       
  1020 	// Allocate memory for holding array of settings
       
  1021 	TElementId* elids;
       
  1022 	TSettingType* types;
       
  1023 	TUint16* lens;
       
  1024 	elids = (TElementId*) User::Alloc(aNumberOfSettings * sizeof(TElementId));
       
  1025 	test_NotNull(elids);
       
  1026 	types = (TSettingType*) User::Alloc(aNumberOfSettings * sizeof(TSettingType));
       
  1027 	test_NotNull(types);
       
  1028 	lens = (TUint16*) User::Alloc(aNumberOfSettings * sizeof(TUint16));
       
  1029 	test_NotNull(lens);
       
  1030 
       
  1031 	for (i = 0; i < sizeof(KTestFindSettingsPatternArgs) / sizeof(TTestFindSettingsPatternArgs); i++)
       
  1032 		{
       
  1033 		test.Printf(_L("iMask=0x%08x iPattern=0x%08x\n"),
       
  1034 			KTestFindSettingsPatternArgs[i].iMask,
       
  1035 			KTestFindSettingsPatternArgs[i].iPattern);
       
  1036 
       
  1037 		// Test each category
       
  1038 		TUint j;
       
  1039 		for (j = 0; j < sizeof(KTestCategories) / sizeof(TCategoryUid); j++)
       
  1040 			{
       
  1041 			test.Printf(_L("Category 0x%08x: "), KTestCategories[j]);
       
  1042 
       
  1043 			// Test all possible permutations of optional arguments
       
  1044 			TUint k;
       
  1045 			for (k = 0; k < 3; k++)
       
  1046 				{
       
  1047 				TUint32 numfound;
       
  1048 				// Actual API call
       
  1049 				r = HcrSimTest.FindSettings(
       
  1050 					KTestCategories[j],
       
  1051 					aNumberOfSettings,
       
  1052 					KTestFindSettingsPatternArgs[i].iMask,
       
  1053 					KTestFindSettingsPatternArgs[i].iPattern,
       
  1054 					numfound,
       
  1055 					elids,
       
  1056 					(k & 0x1 ? types : NULL),
       
  1057 					(k & 0x2 ? lens : NULL));
       
  1058 				test_Compare(0, <=, r);
       
  1059 				
       
  1060 				numfound = r;
       
  1061 			
       
  1062 				test.Printf(_L("%d match(es)\n"), r);
       
  1063 
       
  1064 				// Check that all returned element ids satisfy the conditions
       
  1065 				TUint l;
       
  1066 				for (l = 0; l < numfound; l++)
       
  1067 					{
       
  1068 					test_Assert(
       
  1069 						(KTestFindSettingsPatternArgs[i].iMask & KTestFindSettingsPatternArgs[i].iPattern) ==
       
  1070 						(KTestFindSettingsPatternArgs[i].iMask & elids[l]), test.Printf(_L("!!%08x!!\n"), elids[l])
       
  1071 						);
       
  1072 					//Somehow the macro test_Compare consider TInt32 instead TUint32
       
  1073 					//as a result comparasion is done by this way:
       
  1074 					//RTEST: (0x0 (0) < 0x80000000 (-2147483648)) == EFalse at line 1038
       
  1075 					//althought 0x80000000 > 0, with the signed form this number will be
       
  1076 					//-2147483648.
       
  1077 					//test_Compare(KTestFindSettingsPatternArgs[i].iAtId, <=, elids[l]);
       
  1078 					}
       
  1079 
       
  1080 				// Check that all elements that satisfy the conditions have been returned
       
  1081 				SSettingC* setting;
       
  1082 				TUint32 numsettings = 0;
       
  1083 				for (setting = aRepository; setting < aRepository + aNumberOfSettings; setting++)
       
  1084 					{
       
  1085 					if ((setting->iName.iId.iCat == KTestCategories[j])
       
  1086 						&& ((KTestFindSettingsPatternArgs[i].iMask & KTestFindSettingsPatternArgs[i].iPattern) ==
       
  1087 							(KTestFindSettingsPatternArgs[i].iMask & setting->iName.iId.iKey)))
       
  1088 						{
       
  1089 						for (l = 0; l < numfound; l++)
       
  1090 							{
       
  1091 							if (setting->iName.iId.iKey == elids[l])
       
  1092 								{
       
  1093 								break;
       
  1094 								}
       
  1095 							}
       
  1096 						test_Assert(l < numfound, test.Printf(_L("!!%08x!!\n"), elids[l]));
       
  1097 
       
  1098 						// Check type and size returned
       
  1099 						switch (setting->iName.iType)
       
  1100 							{
       
  1101 							case ETypeInt32:
       
  1102 							case ETypeInt16:
       
  1103 							case ETypeInt8:
       
  1104 							case ETypeBool:
       
  1105 							case ETypeUInt32:
       
  1106 							case ETypeUInt16:
       
  1107 							case ETypeUInt8:
       
  1108 							case ETypeLinAddr:
       
  1109 								if (k & 0x1)
       
  1110 									{
       
  1111 									test_Equal(setting->iName.iType, types[l]);
       
  1112 									}
       
  1113 								if (k & 0x2)
       
  1114 									{
       
  1115 									test_Equal(0, lens[l]);
       
  1116 									}
       
  1117 								break;
       
  1118 								// Fall-through
       
  1119 							case ETypeBinData:
       
  1120 							case ETypeText8:
       
  1121 							case ETypeArrayInt32:
       
  1122 							case ETypeArrayUInt32:
       
  1123 							case ETypeInt64:
       
  1124 							case ETypeUInt64:
       
  1125 								if (k & 0x1)
       
  1126 									{
       
  1127 									test_Equal(setting->iName.iType, types[l]);
       
  1128 									}
       
  1129 								if (k & 0x2)
       
  1130 									{
       
  1131 									test_Equal(setting->iName.iLen, lens[l]);
       
  1132 									}
       
  1133 								break;
       
  1134 							default:
       
  1135 								test(EFalse);
       
  1136 							}
       
  1137 						numsettings++;
       
  1138 						}
       
  1139 					}
       
  1140 				test_Equal(numsettings, numfound);
       
  1141 				}
       
  1142 			}
       
  1143 		}
       
  1144 		
       
  1145 	// Free memory
       
  1146 	User::Free(elids);
       
  1147 	User::Free(types);
       
  1148 	User::Free(lens);
       
  1149 	}
       
  1150 
       
  1151 void HcrSimApiNegative(const TInt aExpectedErrorCode, const TUint32 aCategory, const TUint32 aSettingId)
       
  1152 	{
       
  1153 	test.Next(_L("ApiNegative"));
       
  1154 	test.Printf(_L("Expected error: %d\nSetting (%08x, %08x)\n"), aExpectedErrorCode, aCategory, aSettingId);
       
  1155 	TSettingId id(aCategory, aSettingId);
       
  1156 	TInt r;
       
  1157 		{
       
  1158 		TInt32 val;
       
  1159 		r = HcrSimTest.GetInt(id, val);
       
  1160 		test_Equal(aExpectedErrorCode, r);
       
  1161 		}
       
  1162 		{
       
  1163 		TInt16 val;
       
  1164 		r = HcrSimTest.GetInt(id, val);
       
  1165 		test_Equal(aExpectedErrorCode, r);
       
  1166 		}
       
  1167 		{
       
  1168 		TInt8 val;
       
  1169 		r = HcrSimTest.GetInt(id, val);
       
  1170 		test_Equal(aExpectedErrorCode, r);
       
  1171 		}
       
  1172 		{
       
  1173 		TBool val;
       
  1174 		r = HcrSimTest.GetBool(id, val);
       
  1175 		test_Equal(aExpectedErrorCode, r);
       
  1176 		}
       
  1177 		{
       
  1178 		TUint32 val;
       
  1179 		r = HcrSimTest.GetUInt(id, val);
       
  1180 		test_Equal(aExpectedErrorCode, r);
       
  1181 		}
       
  1182 		{
       
  1183 		TUint16 val;
       
  1184 		r = HcrSimTest.GetUInt(id, val);
       
  1185 		test_Equal(aExpectedErrorCode, r);
       
  1186 		}
       
  1187 		{
       
  1188 		TUint8 val;
       
  1189 		r = HcrSimTest.GetUInt(id, val);
       
  1190 		test_Equal(aExpectedErrorCode, r);
       
  1191 		}
       
  1192 		{
       
  1193 		TLinAddr val;
       
  1194 		r = HcrSimTest.GetLinAddr(id, val);
       
  1195 		test_Equal(aExpectedErrorCode, r);
       
  1196 		}
       
  1197 		{
       
  1198 		TBuf8<KMaxSettingLength> dval;
       
  1199 		TUint8* pval;
       
  1200 		pval = (TUint8*) User::Alloc(KMaxSettingLength);
       
  1201 		test_NotNull(pval);
       
  1202 		//
       
  1203 		r = HcrSimTest.GetData(id, dval);
       
  1204 		test_Equal(aExpectedErrorCode, r);
       
  1205 		//
       
  1206 		TUint16 actuallength;
       
  1207 		r = HcrSimTest.GetData(id, KMaxSettingLength, pval, actuallength);
       
  1208 		test_Equal(aExpectedErrorCode, r);
       
  1209 		//
       
  1210 		User::Free(pval);
       
  1211 		}
       
  1212 		{
       
  1213 		TBuf8<KMaxSettingLength> dval;
       
  1214 		TText8* pval;
       
  1215 		pval = (TText8*) User::Alloc(KMaxSettingLength);
       
  1216 		test_NotNull(pval);
       
  1217 		//
       
  1218 		r = HcrSimTest.GetString(id, dval);
       
  1219 		test_Equal(aExpectedErrorCode, r);
       
  1220 		//
       
  1221 		TUint16 actuallength;
       
  1222 		r = HcrSimTest.GetString(id, KMaxSettingLength, pval, actuallength);
       
  1223 		test_Equal(aExpectedErrorCode, r);
       
  1224 		//
       
  1225 		User::Free(pval);
       
  1226 		}
       
  1227 		{
       
  1228 		TInt32* pval;
       
  1229 		pval = (TInt32*) User::Alloc(KMaxSettingLength);
       
  1230 		test_NotNull(pval);
       
  1231 		//
       
  1232 		TUint16 actuallength;
       
  1233 		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
       
  1234 		test_Equal(aExpectedErrorCode, r);
       
  1235 		//
       
  1236 		User::Free(pval);
       
  1237 		}
       
  1238 		{
       
  1239 		TUint32* pval;
       
  1240 		pval = (TUint32*) User::Alloc(KMaxSettingLength);
       
  1241 		test_NotNull(pval);
       
  1242 		//
       
  1243 		TUint16 actuallength;
       
  1244 		r = HcrSimTest.GetArray(id, KMaxSettingLength, pval, actuallength);
       
  1245 		test_Equal(aExpectedErrorCode, r);
       
  1246 		//
       
  1247 		User::Free(pval);
       
  1248 		}
       
  1249 		{
       
  1250 		TInt64 val;
       
  1251 		r = HcrSimTest.GetInt(id, val);
       
  1252 		test_Equal(aExpectedErrorCode, r);
       
  1253 		}
       
  1254 		{
       
  1255 		TUint64 val;
       
  1256 		r = HcrSimTest.GetUInt(id, val);
       
  1257 		test_Equal(aExpectedErrorCode, r);
       
  1258 		}
       
  1259 
       
  1260 		{
       
  1261 		TSettingType type = ETypeUndefined;
       
  1262 		TUint16 len = 0;
       
  1263 		TUint32 numfound = 0;
       
  1264 		TElementId elid = 0;
       
  1265 		
       
  1266 
       
  1267 		//
       
  1268 		r = HcrSimTest.GetTypeAndSize(id, type, len);
       
  1269 		test_Equal(aExpectedErrorCode, r);
       
  1270 
       
  1271 		//
       
  1272 		r = HcrSimTest.FindNumSettingsInCategory(id.iCat);
       
  1273 		if (aExpectedErrorCode == KErrNotFound)
       
  1274 			{
       
  1275 			test_Equal(0, r);
       
  1276 			}
       
  1277 		
       
  1278 		//
       
  1279 		r = HcrSimTest.FindSettings(id.iCat, 1, numfound, &elid, &type, &len);
       
  1280 		if (aExpectedErrorCode == KErrNotFound)
       
  1281 			{
       
  1282 			test_Equal(0, r);
       
  1283 			}
       
  1284 
       
  1285 		//
       
  1286 		r = HcrSimTest.FindSettings(id.iCat, 1, 0, 0, numfound, &elid, &type, &len);
       
  1287 		if (aExpectedErrorCode == KErrNotFound)
       
  1288 			{
       
  1289 			test_Equal(0, r);
       
  1290 			}
       
  1291 		
       
  1292 		}
       
  1293 		{
       
  1294 		SSettingId settingid;
       
  1295 		settingid.iCat = id.iCat;
       
  1296 		settingid.iKey = id.iKey;	
       
  1297 	
       
  1298 		TInt32 val;
       
  1299 		TInt err;
       
  1300 		TSettingType type;
       
  1301 		TInt i;
       
  1302 
       
  1303 		for(i = 0; i < 4; ++i)
       
  1304 			{
       
  1305 			// test parameter combinations where aIds[], aValues[], aErrors[] are NULL
       
  1306 			r = HcrSimTest.GetWordSettings(i, (i==1)?NULL:&settingid, (i==2)?NULL:&val, &type, (i==3)?NULL:&err);
       
  1307 			if(r != KErrArgument)
       
  1308 				{
       
  1309 				test_Equal(aExpectedErrorCode, r);
       
  1310 				}
       
  1311 			}	
       
  1312 		}
       
  1313 
       
  1314 	}
       
  1315 
       
  1316 void HcrSimTestApiTests(SSettingC* aRepository, TUint aNumberOfSettings)
       
  1317 	{
       
  1318 	if (aRepository && aNumberOfSettings > 0)
       
  1319 		{
       
  1320 		HcrSimGetSettings(aRepository, aNumberOfSettings);
       
  1321 		HcrSimGetSettingsNegative(aRepository, aNumberOfSettings);
       
  1322 		HcrSimSettingProperties(aRepository, aNumberOfSettings);
       
  1323 		HcrSimMultipleGet(aRepository, aNumberOfSettings);
       
  1324 		HcrSimNumSettingsInCategory(aRepository, aNumberOfSettings);
       
  1325 		HcrSimFindSettingsCategory(aRepository, aNumberOfSettings);
       
  1326 		HcrSimFindSettingsPattern(aRepository, aNumberOfSettings);
       
  1327 		}
       
  1328 
       
  1329 	HcrSimApiNegative(KErrNotFound, KTestInvalidCategory, KTestInvalidSettingId);
       
  1330 	HcrSimApiNegative(KErrNotFound, KTestInvalidCategory, 1);
       
  1331 	}
       
  1332 
       
  1333 void HcrPslTests(const TDesC& aDriver)
       
  1334 	{
       
  1335 	test.Next(_L("PSL tests"));
       
  1336 	test.Start(_L("Load Device Driver"));
       
  1337 	test.Printf(_L("%S\n"), &aDriver);
       
  1338 	TInt r;
       
  1339 	r = User::LoadLogicalDevice(aDriver);
       
  1340 	if (r == KErrAlreadyExists)
       
  1341 		{
       
  1342 		test.Printf(_L("Unload Device Driver and load it again\n"));
       
  1343 		r = User::FreeLogicalDevice(aDriver);
       
  1344 		test_KErrNone(r);
       
  1345 		r = User::LoadLogicalDevice(aDriver);
       
  1346 		test_KErrNone(r);
       
  1347 		}
       
  1348 	else
       
  1349 		{
       
  1350 		test_KErrNone(r);
       
  1351 		}
       
  1352 
       
  1353 	test.Next(_L("Open test channel"));
       
  1354 	r = HcrSimTest.Open(aDriver);
       
  1355 	test_KErrNone(r);
       
  1356 
       
  1357 	test.Next(_L("Fail PSL object creation"));
       
  1358 	r = HcrSimTest.InitExtension(ETestVariantObjectCreateFail);
       
  1359 	test_Equal(KErrNoMemory, r);
       
  1360 	HcrSimApiNegative(KErrNotReady, 1, 1);
       
  1361 
       
  1362 	test.Next(_L("Fail PSL initialisation"));
       
  1363 	r = HcrSimTest.InitExtension(ETestInitialisationFail);
       
  1364 	test_Equal(KErrBadPower, r); // the random error code used in the test PSL
       
  1365 	HcrSimApiNegative(KErrNotReady, 1, 1);
       
  1366 
       
  1367 	test.Next(_L("PSL's GetCompiledRepositoryAddress negative tests"));
       
  1368 	r = HcrSimTest.InitExtension(ETestNullRepositoryKErrNone); // *** Null Repository but returns KErrNone
       
  1369 	test_Equal(KErrArgument, r);
       
  1370 
       
  1371 	test.Next(_L("PSL's GetCompiledRepositoryAddress return wrong error code"));
       
  1372 	r = HcrSimTest.InitExtension(ETestBadErrorCode); // *** Null Repository but returns KErrNone
       
  1373 	test_Equal(KErrCommsParity, r);
       
  1374 
       
  1375 	test.Next(_L("Close test channel and unload device driver"));
       
  1376 	HcrSimTest.Close();
       
  1377 	r = User::FreeLogicalDevice(aDriver);
       
  1378 	test_KErrNone(r);
       
  1379 	test.End();
       
  1380 	}
       
  1381 
       
  1382 void HcrSimTests(const TDesC& aDriver)
   710 	{
  1383 	{
   711 	test.Next(_L("HCR Simulator tests"));
  1384 	test.Next(_L("HCR Simulator tests"));
   712 	test.Start(_L("Load Device Driver"));
  1385 	test.Start(_L("Load Device Driver"));
       
  1386 	test.Printf(_L("%S\n"), &aDriver);
   713 	TInt r;
  1387 	TInt r;
   714 	r = User::LoadLogicalDevice(KTestHcrSim);
  1388 	r = User::LoadLogicalDevice(aDriver);
   715 	if (r == KErrAlreadyExists)
  1389 	if (r == KErrAlreadyExists)
   716 		{
  1390 		{
   717 		test.Printf(_L("Unload Device Driver and load it again\n"));
  1391 		test.Printf(_L("Unload Device Driver and load it again\n"));
   718 		r = User::FreeLogicalDevice(KTestHcrSim);
  1392 		r = User::FreeLogicalDevice(aDriver);
   719 		test_KErrNone(r);
  1393 		test_KErrNone(r);
   720 		r = User::LoadLogicalDevice(KTestHcrSim);
  1394 		r = User::LoadLogicalDevice(aDriver);
   721 		test_KErrNone(r);
  1395 		test_KErrNone(r);
   722 		}
  1396 		}
   723 	else
  1397 	else
   724 		{
  1398 		{
   725 		test_KErrNone(r);
  1399 		test_KErrNone(r);
   726 		}
  1400 		}
   727 
  1401 
   728 	test.Next(_L("Open test channel"));
  1402 	test.Next(_L("Open test channel"));
   729 	r = HcrSimTest.Open();
  1403 	r = HcrSimTest.Open(aDriver);
   730 	test_KErrNone(r);
  1404 	test_KErrNone(r);
   731 	HcrSimGetSettingsNotReady();
  1405 	HcrSimApiNegative(KErrNotReady, 1, 1);
   732 
  1406 	
   733 	test.Next(_L("Initialise HCR"));
  1407 	test.Next(_L("Initialise HCR"));
   734 	r = HcrSimTest.InitExtension();
  1408 	r = HcrSimTest.InitExtension();
   735 	test_KErrNone(r);
  1409 	test_KErrNone(r);
   736 	
  1410 	
   737 	test.Next(_L("Compiled"));
  1411 	test.Next(_L("Compiled"));
   738 	test.Start(_L("Initialisation"));
  1412 	test.Start(_L("Initialisation"));
   739 #ifndef __WINS__
       
   740 	_LIT8(KTestFileRepos,	"filerepos.dat");
       
   741 	_LIT8(KTestNandRepos,	"nandrepos.dat");
       
   742 	_LIT8(KTestCorrupt1,	"corrupt1.dat");
       
   743 	_LIT8(KTestCorrupt2,	"corrupt2.dat");
       
   744 	_LIT8(KTestEmpty,		"empty.dat");
       
   745 	_LIT8(KTestClearRepos,	"");
       
   746 
       
   747 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
  1413 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
   748 	test_KErrNone(r);
  1414 	test_KErrNone(r);
   749 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
  1415 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
   750 	test_KErrNone(r);
  1416 	test_KErrNone(r);
   751 #endif // __WINS__
  1417 	HcrSimTestApiTests(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
   752 	HcrSimGetSettings(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
  1418 	test.End();
   753 	HcrSimGetSettingsNegative(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
  1419 
   754 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   755 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   756 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   757 	//HcrSimSettingProperties(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
       
   758 	//HcrSimMultipleGet(SettingsList, sizeof(SettingsList) / sizeof(SSettingC));
       
   759 	test.End();
       
   760 
       
   761 #ifndef __WINS__
       
   762 	test.Next(_L("Compiled+File"));
  1420 	test.Next(_L("Compiled+File"));
   763 	test.Start(_L("Initialisation"));
  1421 	test.Start(_L("Initialisation"));
   764 	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
  1422 	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
   765 	test_KErrNone(r);
  1423 	test_KErrNone(r);
   766 	r = HcrSimTest.CheckIntegrity();
  1424 	r = HcrSimTest.CheckIntegrity();
   767 	test_KErrNone(r);
  1425 	test_KErrNone(r);
   768 	HcrSimGetSettings(SettingsList2, sizeof(SettingsList2) / sizeof(SSettingC));
  1426 	HcrSimTestApiTests(SettingsList2, sizeof(SettingsList2) / sizeof(SSettingC));
   769 	HcrSimGetSettingsNegative(SettingsList2, sizeof(SettingsList2) / sizeof(SSettingC));
  1427 	test.End();
   770 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
  1428 	
   771 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   772 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   773 	test.End();
       
   774 
       
   775 	test.Next(_L("Compiled+File+Nand"));
  1429 	test.Next(_L("Compiled+File+Nand"));
   776 	test.Start(_L("Initialisation"));
  1430 	test.Start(_L("Initialisation"));
   777 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
  1431 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
   778 	test_KErrNone(r);
  1432 	test_KErrNone(r);
   779 	r = HcrSimTest.CheckIntegrity();
  1433 	r = HcrSimTest.CheckIntegrity();
   780 	test_KErrNone(r);
  1434 	test_KErrNone(r);
   781 	HcrSimGetSettings(SettingsList3, sizeof(SettingsList3) / sizeof(SSettingC));
  1435 	HcrSimTestApiTests(SettingsList3, sizeof(SettingsList3) / sizeof(SSettingC));
   782 	HcrSimGetSettingsNegative(SettingsList3, sizeof(SettingsList3) / sizeof(SSettingC));
       
   783 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   784 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   785 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   786 	test.End();
  1436 	test.End();
   787 
  1437 
   788 	test.Next(_L("Compiled+Nand"));
  1438 	test.Next(_L("Compiled+Nand"));
   789 	test.Start(_L("Initialisation"));
  1439 	test.Start(_L("Initialisation"));
   790 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
  1440 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
   791 	test_KErrNone(r);
  1441 	test_KErrNone(r);
   792 	r = HcrSimTest.CheckIntegrity();
  1442 	r = HcrSimTest.CheckIntegrity();
   793 	test_KErrNone(r);
  1443 	test_KErrNone(r);
   794 	HcrSimGetSettings(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
  1444 	HcrSimTestApiTests(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
   795 	HcrSimGetSettingsNegative(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
       
   796 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   797 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   798 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   799 	test.End();
  1445 	test.End();
   800 
  1446 
   801 	test.Next(_L("Compiled+Empty+Nand"));
  1447 	test.Next(_L("Compiled+Empty+Nand"));
   802 	test.Start(_L("Initialisation"));
  1448 	test.Start(_L("Initialisation"));
   803 	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
  1449 	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
   804 	test_KErrNone(r);
  1450 	test_KErrNone(r);
   805 	r = HcrSimTest.CheckIntegrity();
  1451 	r = HcrSimTest.CheckIntegrity();
   806 	test_KErrNone(r);
  1452 	test_KErrNone(r);
   807 	HcrSimGetSettings(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
  1453 	HcrSimTestApiTests(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
   808 	HcrSimGetSettingsNegative(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
  1454 	test.End();
   809 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   810 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   811 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   812 	test.End();
       
   813 #endif // __WINS__
       
   814 
  1455 
   815 	// Reload device driver without a compiled repository this time
  1456 	// Reload device driver without a compiled repository this time
   816 	test.Next(_L("Reload Device Driver"));
  1457 	test.Next(_L("Reload Device Driver"));
   817 	HcrSimTest.Close();
  1458 	HcrSimTest.Close();
   818 	r = User::FreeLogicalDevice(KTestHcrSim);
  1459 	r = User::FreeLogicalDevice(aDriver);
   819 	test_KErrNone(r);
  1460 	test_KErrNone(r);
   820 	r = User::LoadLogicalDevice(KTestHcrSim);
  1461 	r = User::LoadLogicalDevice(aDriver);
   821 	test_KErrNone(r);
  1462 	test_KErrNone(r);
   822 	r = HcrSimTest.Open();
  1463 	r = HcrSimTest.Open(aDriver);
   823 	test_KErrNone(r);
  1464 	test_KErrNone(r);
   824 	r = HcrSimTest.InitExtension(ETestNullRepository); // *** The NULL Repository ***
  1465 	r = HcrSimTest.InitExtension(ETestNullRepository); // *** The NULL Repository ***
   825 #ifdef __WINS__
  1466 	test_KErrNone(r);
   826 	test_Equal(KErrArgument, r);
  1467 	
   827 #else
       
   828 	test_KErrNone(r);
       
   829 
       
   830 	test.Next(_L("NULL+File"));
  1468 	test.Next(_L("NULL+File"));
   831 	test.Start(_L("Initialisation"));
  1469 	test.Start(_L("Initialisation"));
   832 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
  1470 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
   833 	test_KErrNone(r);
  1471 	test_KErrNone(r);
   834 	r = HcrSimTest.CheckIntegrity();
  1472 	r = HcrSimTest.CheckIntegrity();
   835 	test_KErrNone(r);
  1473 	test_KErrNone(r);
   836 	HcrSimGetSettings(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
  1474 	HcrSimTestApiTests(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
   837 	HcrSimGetSettingsNegative(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
  1475 	test.End();
   838 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
  1476 	
   839 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   840 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   841 	test.End();
       
   842 
       
   843 	test.Next(_L("NULL+File+Nand"));
  1477 	test.Next(_L("NULL+File+Nand"));
   844 	test.Start(_L("Initialisation"));
  1478 	test.Start(_L("Initialisation"));
   845 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
  1479 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
   846 	test_KErrNone(r);
  1480 	test_KErrNone(r);
   847 	r = HcrSimTest.CheckIntegrity();
  1481 	r = HcrSimTest.CheckIntegrity();
   848 	test_KErrNone(r);
  1482 	test_KErrNone(r);
   849 	HcrSimGetSettings(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
  1483 	HcrSimTestApiTests(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
   850 	HcrSimGetSettingsNegative(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
       
   851 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   852 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   853 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   854 	test.End();
  1484 	test.End();
   855 
  1485 
   856 	test.Next(_L("NULL+Nand"));
  1486 	test.Next(_L("NULL+Nand"));
   857 	test.Start(_L("Initialisation"));
  1487 	test.Start(_L("Initialisation"));
   858 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
  1488 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
   859 	test_KErrNone(r);
  1489 	test_KErrNone(r);
   860 	r = HcrSimTest.CheckIntegrity();
  1490 	r = HcrSimTest.CheckIntegrity();
   861 	test_KErrNone(r);
  1491 	test_KErrNone(r);
   862 	HcrSimGetSettings(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
  1492 	HcrSimTestApiTests(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
   863 	HcrSimGetSettingsNegative(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
  1493 	test.End();
   864 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   865 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   866 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   867 	test.End();
       
   868 #endif // __WINS__
       
   869 
  1494 
   870 	test.Next(_L("Reload Device Driver"));
  1495 	test.Next(_L("Reload Device Driver"));
   871 	HcrSimTest.Close();
  1496 	HcrSimTest.Close();
   872 	r = User::FreeLogicalDevice(KTestHcrSim);
  1497 	r = User::FreeLogicalDevice(aDriver);
   873 	test_KErrNone(r);
  1498 	test_KErrNone(r);
   874 	r = User::LoadLogicalDevice(KTestHcrSim);
  1499 	r = User::LoadLogicalDevice(aDriver);
   875 	test_KErrNone(r);
  1500 	test_KErrNone(r);
   876 	r = HcrSimTest.Open();
  1501 	r = HcrSimTest.Open(aDriver);
   877 	test_KErrNone(r);
  1502 	test_KErrNone(r);
   878 	r = HcrSimTest.InitExtension(ETestEmptyRepository); // *** The Empty Repository ***
  1503 	r = HcrSimTest.InitExtension(ETestEmptyRepository); // *** The Empty Repository ***
   879 	test_KErrNone(r);
  1504 	test_KErrNone(r);
   880 
  1505 
   881 #ifndef __WINS__
       
   882 	test.Next(_L("Empty+Nand"));
  1506 	test.Next(_L("Empty+Nand"));
   883 	test.Start(_L("Initialisation"));
  1507 	test.Start(_L("Initialisation"));
   884 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
  1508 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
   885 	test_KErrNone(r);
  1509 	test_KErrNone(r);
   886 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
  1510 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
   887 	test_KErrNone(r);
  1511 	test_KErrNone(r);
   888 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
  1512 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
   889 	test_KErrNone(r);
  1513 	test_KErrNone(r);
   890 	r = HcrSimTest.CheckIntegrity();
  1514 	r = HcrSimTest.CheckIntegrity();
   891 	test_KErrNone(r);
  1515 	test_KErrNone(r);
   892 	HcrSimGetSettings(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
  1516 	HcrSimTestApiTests(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
   893 	HcrSimGetSettingsNegative(SettingsList5, sizeof(SettingsList5) / sizeof(SSettingC));
       
   894 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   895 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   896 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   897 	test.End();
  1517 	test.End();
   898 
  1518 
   899 	test.Next(_L("Empty+File+Nand"));
  1519 	test.Next(_L("Empty+File+Nand"));
   900 	test.Start(_L("Initialisation"));
  1520 	test.Start(_L("Initialisation"));
   901 	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
  1521 	r = HcrSimTest.SwitchRepository(KTestFileRepos, HCRInternal::ECoreRepos);
   902 	test_KErrNone(r);
  1522 	test_KErrNone(r);
   903 	r = HcrSimTest.CheckIntegrity();
  1523 	r = HcrSimTest.CheckIntegrity();
   904 	test_KErrNone(r);
  1524 	test_KErrNone(r);
   905 	HcrSimGetSettings(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
  1525 	HcrSimTestApiTests(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
   906 	HcrSimGetSettingsNegative(SettingsList6, sizeof(SettingsList6) / sizeof(SSettingC));
       
   907 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   908 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   909 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   910 	test.End();
  1526 	test.End();
   911 
  1527 
   912 	test.Next(_L("Empty+File"));
  1528 	test.Next(_L("Empty+File"));
   913 	test.Start(_L("Initialisation"));
  1529 	test.Start(_L("Initialisation"));
   914 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
  1530 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
   915 	test_KErrNone(r);
  1531 	test_KErrNone(r);
   916 	r = HcrSimTest.CheckIntegrity();
  1532 	r = HcrSimTest.CheckIntegrity();
   917 	test_KErrNone(r);
  1533 	test_KErrNone(r);
   918 	HcrSimGetSettings(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
  1534 	HcrSimTestApiTests(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
   919 	HcrSimGetSettingsNegative(SettingsList7, sizeof(SettingsList7) / sizeof(SSettingC));
       
   920 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   921 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   922 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   923 	test.End();
  1535 	test.End();
   924 
  1536 
   925 	test.Next(_L("No Repository (Empty)"));
  1537 	test.Next(_L("No Repository (Empty)"));
   926 	test.Start(_L("Initialisation"));
  1538 	test.Start(_L("Initialisation"));
   927 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
  1539 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
   928 	test_KErrNone(r);
  1540 	test_KErrNone(r);
   929 	r = HcrSimTest.CheckIntegrity();
  1541 	r = HcrSimTest.CheckIntegrity();
   930 	test_KErrNone(r);
  1542 	test_KErrNone(r);
   931 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
  1543 	HcrSimTestApiTests(NULL, 0);
   932 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   933 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   934 	test.End();
  1544 	test.End();
   935 
  1545 
   936 	test.Next(_L("All Repositories Empty"));
  1546 	test.Next(_L("All Repositories Empty"));
   937 	test.Start(_L("Initialisation"));
  1547 	test.Start(_L("Initialisation"));
   938 	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
  1548 	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::ECoreRepos);
   939 	test_KErrNone(r);
  1549 	test_KErrNone(r);
   940 	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::EOverrideRepos);
  1550 	r = HcrSimTest.SwitchRepository(KTestEmpty, HCRInternal::EOverrideRepos);
   941 	test_KErrNone(r);
  1551 	test_KErrNone(r);
   942 	r = HcrSimTest.CheckIntegrity();
  1552 	r = HcrSimTest.CheckIntegrity();
   943 	test_KErrNone(r);
  1553 	test_KErrNone(r);
   944 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
  1554 	HcrSimTestApiTests(NULL, 0);
   945 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
  1555 	test.End();
   946 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   947 	test.End();
       
   948 #endif // __WINS__
       
   949 
  1556 
   950 	test.Next(_L("Reload Device Driver"));
  1557 	test.Next(_L("Reload Device Driver"));
   951 	HcrSimTest.Close();
  1558 	HcrSimTest.Close();
   952 	r = User::FreeLogicalDevice(KTestHcrSim);
  1559 	r = User::FreeLogicalDevice(aDriver);
   953 	test_KErrNone(r);
  1560 	test_KErrNone(r);
   954 	r = User::LoadLogicalDevice(KTestHcrSim);
  1561 	r = User::LoadLogicalDevice(aDriver);
   955 	test_KErrNone(r);
  1562 	test_KErrNone(r);
   956 	r = HcrSimTest.Open();
  1563 	r = HcrSimTest.Open(aDriver);
   957 	test_KErrNone(r);
  1564 	test_KErrNone(r);
   958 	r = HcrSimTest.InitExtension(ETestIgnoreCoreImgRepository); // *** Ignore Core Image Repository ***
  1565 	r = HcrSimTest.InitExtension(ETestIgnoreCoreImgRepository); // *** Ignore Core Image Repository ***
   959 	test_KErrNone(r);
  1566 	test_KErrNone(r);
   960 
  1567 
   961 #ifndef __WINS__
       
   962 	test.Next(_L("Compiled+File(Ignored)+Nand")); // Should be same as Compiled+Nand
  1568 	test.Next(_L("Compiled+File(Ignored)+Nand")); // Should be same as Compiled+Nand
   963 	test.Start(_L("Initialisation"));
  1569 	test.Start(_L("Initialisation"));
   964 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
  1570 	r = HcrSimTest.SwitchRepository(KTestNandRepos, HCRInternal::EOverrideRepos);
   965 	test_KErrNone(r);
  1571 	test_KErrNone(r);
   966 	r = HcrSimTest.CheckIntegrity();
  1572 	r = HcrSimTest.CheckIntegrity();
   967 	test_KErrNone(r);
  1573 	test_KErrNone(r);
   968 	HcrSimGetSettings(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
  1574 	HcrSimTestApiTests(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
   969 	HcrSimGetSettingsNegative(SettingsList4, sizeof(SettingsList4) / sizeof(SSettingC));
  1575 	test.End();
   970 	HcrSimGetSettingsNotFound(KTestInvalidCategory, KTestInvalidSettingId);
       
   971 	HcrSimGetSettingsNotFound(KTestInvalidCategory, 1);
       
   972 	HcrSimGetSettingsNotFound(1, KTestInvalidSettingId);
       
   973 	test.End();
       
   974 #endif // __WINS__
       
   975 
  1576 
   976 	test.Next(_L("Reload Device Driver (Corrupt1)"));
  1577 	test.Next(_L("Reload Device Driver (Corrupt1)"));
   977 	HcrSimTest.Close();
  1578 	HcrSimTest.Close();
   978 	r = User::FreeLogicalDevice(KTestHcrSim);
  1579 	r = User::FreeLogicalDevice(aDriver);
   979 	test_KErrNone(r);
  1580 	test_KErrNone(r);
   980 	r = User::LoadLogicalDevice(KTestHcrSim);
  1581 	r = User::LoadLogicalDevice(aDriver);
   981 	test_KErrNone(r);
  1582 	test_KErrNone(r);
   982 	r = HcrSimTest.Open();
  1583 	r = HcrSimTest.Open(aDriver);
   983 	test_KErrNone(r);
  1584 	test_KErrNone(r);
   984 	r = HcrSimTest.InitExtension(ETestCorruptRepository1); // *** Repository not ordered ***
  1585 	r = HcrSimTest.InitExtension(ETestCorruptRepository1); // *** Repository not ordered ***
   985 #ifdef _DEBUG
  1586 #ifdef _DEBUG
   986 	test_Equal(KErrCorrupt, r);
  1587 	test_Equal(KErrCorrupt, r);
   987 #else
  1588 #else
   988 	test_KErrNone(r);
  1589 	test_KErrNone(r);
   989 #endif // _DEBUG
  1590 #endif // _DEBUG
   990 
  1591 
   991 	test.Next(_L("Reload Device Driver (Corrupt2)"));
  1592 	test.Next(_L("Reload Device Driver (Corrupt2)"));
   992 	HcrSimTest.Close();
  1593 	HcrSimTest.Close();
   993 	r = User::FreeLogicalDevice(KTestHcrSim);
  1594 	r = User::FreeLogicalDevice(aDriver);
   994 	test_KErrNone(r);
  1595 	test_KErrNone(r);
   995 	r = User::LoadLogicalDevice(KTestHcrSim);
  1596 	r = User::LoadLogicalDevice(aDriver);
   996 	test_KErrNone(r);
  1597 	test_KErrNone(r);
   997 	r = HcrSimTest.Open();
  1598 	r = HcrSimTest.Open(aDriver);
   998 	test_KErrNone(r);
  1599 	test_KErrNone(r);
   999 	r = HcrSimTest.InitExtension(ETestCorruptRepository2); // *** Repository with duplicates ***
  1600 	r = HcrSimTest.InitExtension(ETestCorruptRepository2); // *** Repository with duplicates ***
  1000 #ifdef _DEBUG
  1601 #ifdef _DEBUG
  1001 	test_Equal(KErrAlreadyExists, r);
  1602 	test_Equal(KErrAlreadyExists, r);
  1002 #else
  1603 #else
  1003 	test_KErrNone(r);
  1604 	test_KErrNone(r);
  1004 #endif // _DEBUG
  1605 #endif // _DEBUG
  1005 
  1606 
  1006 #ifndef __WINS__
  1607 	test.Next(_L("Reload Device Driver (NULL ordered list)"));
       
  1608 	HcrSimTest.Close();
       
  1609 	r = User::FreeLogicalDevice(aDriver);
       
  1610 	test_KErrNone(r);
       
  1611 	r = User::LoadLogicalDevice(aDriver);
       
  1612 	test_KErrNone(r);
       
  1613 	r = HcrSimTest.Open(aDriver);
       
  1614 	test_KErrNone(r);
       
  1615 	r = HcrSimTest.InitExtension(ETestNullOrderedList); // *** Repository where iOrderedSettingList==NULL ***
       
  1616 #ifdef _DEBUG
       
  1617 	test_Equal(KErrNotFound, r);
       
  1618 #else
       
  1619 	test_KErrNone(r);
       
  1620 #endif // _DEBUG
       
  1621 
  1007 	test.Next(_L("Reload Device Driver (Default)"));
  1622 	test.Next(_L("Reload Device Driver (Default)"));
  1008 	HcrSimTest.Close();
  1623 	HcrSimTest.Close();
  1009 	r = User::FreeLogicalDevice(KTestHcrSim);
  1624 	r = User::FreeLogicalDevice(aDriver);
  1010 	test_KErrNone(r);
  1625 	test_KErrNone(r);
  1011 	r = User::LoadLogicalDevice(KTestHcrSim);
  1626 	r = User::LoadLogicalDevice(aDriver);
  1012 	test_KErrNone(r);
  1627 	test_KErrNone(r);
  1013 	r = HcrSimTest.Open();
  1628 	r = HcrSimTest.Open(aDriver);
  1014 	test_KErrNone(r);
  1629 	test_KErrNone(r);
  1015 	r = HcrSimTest.InitExtension(); // *** Default Repository ***
  1630 	r = HcrSimTest.InitExtension(); // *** Default Repository ***
  1016 	test_KErrNone(r);
  1631 	test_KErrNone(r);
  1017 
  1632 
  1018 	test.Next(_L("Compiled+Corrupt1+Nand"));
  1633 	test.Next(_L("Compiled+Corrupt1+Nand"));
  1048 	r = HcrSimTest.SwitchRepository(KTestCorrupt2, HCRInternal::EOverrideRepos);
  1663 	r = HcrSimTest.SwitchRepository(KTestCorrupt2, HCRInternal::EOverrideRepos);
  1049 	test_KErrNone(r);
  1664 	test_KErrNone(r);
  1050 	r = HcrSimTest.CheckIntegrity();
  1665 	r = HcrSimTest.CheckIntegrity();
  1051 	test_Equal(KErrAlreadyExists, r);
  1666 	test_Equal(KErrAlreadyExists, r);
  1052 	test.End();
  1667 	test.End();
  1053 #endif // __WINS__
       
  1054 
  1668 
  1055 	test.Next(_L("Close test channel and unload device driver"));
  1669 	test.Next(_L("Close test channel and unload device driver"));
  1056 	HcrSimTest.Close();
  1670 	HcrSimTest.Close();
  1057 	r = User::FreeLogicalDevice(KTestHcrSim);
  1671 	r = User::FreeLogicalDevice(aDriver);
  1058 	test_KErrNone(r);
  1672 	test_KErrNone(r);
       
  1673 	test.End();
       
  1674 	}
       
  1675 
       
  1676 void RomHeaderTests()
       
  1677 	{
       
  1678 	test.Next(_L("Rom Header"));
       
  1679 #ifdef __WINS__
       
  1680 	test.Printf(_L("Not available on the emulator.\n"));
       
  1681 #else
       
  1682 	const TRomHeader* romheader = (TRomHeader*) UserSvr::RomHeaderAddress();
       
  1683 	test.Printf(_L("HCR File Address: %08x\n"), romheader->iHcrFileAddress);
       
  1684 	test(romheader->iHcrFileAddress);
       
  1685 	if (romheader->iPageableRomStart)
       
  1686 		{
       
  1687 		// If this is a paged ROM, HCR file must be in the unpaged area
       
  1688 		test_Compare(romheader->iRomBase + romheader->iPageableRomStart, >, romheader->iHcrFileAddress);
       
  1689 		}
       
  1690 #endif // __WINS__
       
  1691 	}
       
  1692 
       
  1693 void HcrRealSettingDiscovery()
       
  1694 	{
       
  1695 	test.Next(_L("Setting Discovery"));
       
  1696 	TInt r;
       
  1697 	TCategoryUid cat;
       
  1698 	test.Printf(_L("Category Element  Type     Len  Value\n"));
       
  1699 	test.Printf(_L("--------------------------------------------------\n"));
       
  1700 	for (cat = KHCRUID_ALLOCATED_MIN; cat <= KHCRUID_ALLOCATED_MAX; cat++)
       
  1701 		{
       
  1702 		TInt nosettings;
       
  1703 		nosettings = HcrSimTest.FindNumSettingsInCategory(cat);
       
  1704 		test_Compare(0, <=, nosettings);
       
  1705 		if (nosettings > 0)
       
  1706 			{
       
  1707 			TUint32 numfound;
       
  1708 			TElementId* elids;
       
  1709 			TSettingType* types;
       
  1710 			TUint16* lens;
       
  1711 			elids = (TElementId*) User::Alloc(nosettings * sizeof(TElementId));
       
  1712 			test_NotNull(elids);
       
  1713 			types = (TSettingType*) User::Alloc(nosettings * sizeof(TSettingType));
       
  1714 			test_NotNull(types);
       
  1715 			lens = (TUint16*) User::Alloc(nosettings * sizeof(TUint16));
       
  1716 			test_NotNull(lens);
       
  1717 			r = HcrSimTest.FindSettings(cat, nosettings, numfound, elids, types, lens);
       
  1718 			test_Equal(nosettings, r);
       
  1719 			test_Equal(nosettings, numfound);
       
  1720 			TInt i;
       
  1721 			for (i = 0; i < nosettings; i++)
       
  1722 				{
       
  1723 				TSettingId id(cat, *(elids + i));
       
  1724 				test.Printf(_L("%08x %08x %08x %04x "), cat, *(elids + i), *(types + i), *(lens + i));
       
  1725 				switch (*(types + i))
       
  1726 					{
       
  1727 					case ETypeInt32:
       
  1728 						{
       
  1729 						TInt32 val;
       
  1730 						r = HcrSimTest.GetInt(id, val);
       
  1731 						test_KErrNone(r);
       
  1732 						test.Printf(_L("%08x"), val);
       
  1733 						break;
       
  1734 						}
       
  1735 					case ETypeInt16:
       
  1736 						{
       
  1737 						TInt16 val;
       
  1738 						r = HcrSimTest.GetInt(id, val);
       
  1739 						test_KErrNone(r);
       
  1740 						test.Printf(_L("%04x"), val);
       
  1741 						break;
       
  1742 						}
       
  1743 					case ETypeInt8:
       
  1744 						{
       
  1745 						TInt8 val;
       
  1746 						r = HcrSimTest.GetInt(id, val);
       
  1747 						test_KErrNone(r);
       
  1748 						test.Printf(_L("%02x"), val);
       
  1749 						break;
       
  1750 						}
       
  1751 					case ETypeBool:
       
  1752 						{
       
  1753 						TBool val;
       
  1754 						r = HcrSimTest.GetBool(id, val);
       
  1755 						test_KErrNone(r);
       
  1756 						test.Printf(_L("%b"), val ? 1 : 0);
       
  1757 						break;
       
  1758 						}
       
  1759 					case ETypeUInt32:
       
  1760 						{
       
  1761 						TUint32 val;
       
  1762 						r = HcrSimTest.GetUInt(id, val);
       
  1763 						test_KErrNone(r);
       
  1764 						test.Printf(_L("%08x"), val);
       
  1765 						break;
       
  1766 						}
       
  1767 					case ETypeUInt16:
       
  1768 						{
       
  1769 						TUint16 val;
       
  1770 						r = HcrSimTest.GetUInt(id, val);
       
  1771 						test_KErrNone(r);
       
  1772 						test.Printf(_L("%04x"), val);
       
  1773 						break;
       
  1774 						}
       
  1775 					case ETypeUInt8:
       
  1776 						{
       
  1777 						TUint8 val;
       
  1778 						r = HcrSimTest.GetUInt(id, val);
       
  1779 						test_KErrNone(r);
       
  1780 						test.Printf(_L("%02x"), val);
       
  1781 						break;
       
  1782 						}
       
  1783 					case ETypeLinAddr:
       
  1784 						{
       
  1785 						TLinAddr val;
       
  1786 						r = HcrSimTest.GetLinAddr(id, val);
       
  1787 						test_KErrNone(r);
       
  1788 						test.Printf(_L("%08x"), val);
       
  1789 						break;
       
  1790 						}
       
  1791 					case ETypeBinData:
       
  1792 						{
       
  1793 						TBuf8<KMaxSettingLength> dval;
       
  1794 						TUint8* pval;
       
  1795 						pval = (TUint8*) User::Alloc(*(lens + i));
       
  1796 						test_NotNull(pval);
       
  1797 						//
       
  1798 						r = HcrSimTest.GetData(id, dval);
       
  1799 						test_KErrNone(r);
       
  1800 						test_Equal(*(lens + i), dval.Length());
       
  1801 						//
       
  1802 						TUint16 actuallength;
       
  1803 						r = HcrSimTest.GetData(id, *(lens + i), pval, actuallength);
       
  1804 						test_KErrNone(r);
       
  1805 						test_Equal(*(lens + i), actuallength);
       
  1806 						//
       
  1807 						TInt j;
       
  1808 						for (j = 0; j < 6 && j < dval.Length(); j++)
       
  1809 							{
       
  1810 							test.Printf(_L("%02x "), dval[j]);
       
  1811 							}
       
  1812 							
       
  1813 						//
       
  1814 						User::Free(pval);
       
  1815 						break;
       
  1816 						}
       
  1817 					case ETypeText8:
       
  1818 						{
       
  1819 						TBuf8<KMaxSettingLength> dval;
       
  1820 						TText8* pval;
       
  1821 						pval = (TText8*) User::Alloc(*(lens + i));
       
  1822 						test_NotNull(pval);
       
  1823 						//
       
  1824 						r = HcrSimTest.GetString(id, dval);
       
  1825 						test_KErrNone(r);
       
  1826 						test_Equal(*(lens + i), dval.Length());
       
  1827 						//
       
  1828 						TUint16 actuallength;
       
  1829 						r = HcrSimTest.GetString(id, *(lens + i), pval, actuallength);
       
  1830 						test_KErrNone(r);
       
  1831 						test_Equal(*(lens + i), actuallength);
       
  1832 						//
       
  1833 						TInt j;
       
  1834 						for (j = 0; j < 15 && j < dval.Length(); j++)
       
  1835 							{
       
  1836 							test.Printf(_L("%c "), dval[j]);
       
  1837 							}
       
  1838 						//
       
  1839 						User::Free(pval);
       
  1840 						break;
       
  1841 						}
       
  1842 					case ETypeArrayInt32:
       
  1843 						{
       
  1844 						TInt32* pval;
       
  1845 						pval = (TInt32*) User::Alloc(*(lens + i));
       
  1846 						test_NotNull(pval);
       
  1847 						//
       
  1848 						TUint16 actuallength;
       
  1849 						r = HcrSimTest.GetArray(id, *(lens + i), pval, actuallength);
       
  1850 						test_KErrNone(r);
       
  1851 						//
       
  1852 						test_Equal(*(lens + i), actuallength);
       
  1853 						//
       
  1854 						TUint j;
       
  1855 						for (j = 0; j < 2 && j < actuallength / sizeof(TInt32); j++)
       
  1856 							{
       
  1857 							test.Printf(_L("%08x "), pval[0]);
       
  1858 							}
       
  1859 						//
       
  1860 						User::Free(pval);
       
  1861 						break;
       
  1862 						}
       
  1863 					case ETypeArrayUInt32:
       
  1864 						{
       
  1865 						TUint32* pval;
       
  1866 						pval = (TUint32*) User::Alloc(*(lens + i));
       
  1867 						test_NotNull(pval);
       
  1868 						//
       
  1869 						TUint16 actuallength;
       
  1870 						r = HcrSimTest.GetArray(id, *(lens + i), pval, actuallength);
       
  1871 						test_KErrNone(r);
       
  1872 						//
       
  1873 						TUint j;
       
  1874 						for (j = 0; j < 2 && j < actuallength / sizeof(TUint32); j++)
       
  1875 							{
       
  1876 							test.Printf(_L("%08x "), pval[0]);
       
  1877 							}
       
  1878 						//
       
  1879 						test_Equal(*(lens + i), actuallength);
       
  1880 						User::Free(pval);
       
  1881 						break;
       
  1882 						}
       
  1883 					case ETypeInt64:
       
  1884 						{
       
  1885 						TInt64 val;
       
  1886 						r = HcrSimTest.GetInt(id, val);
       
  1887 						test_KErrNone(r);
       
  1888 						test.Printf(_L("%016lx"), val);
       
  1889 						
       
  1890 						break;
       
  1891 						}
       
  1892 					case ETypeUInt64:
       
  1893 						{
       
  1894 						TUint64 val;
       
  1895 						r = HcrSimTest.GetUInt(id, val);
       
  1896 						test_KErrNone(r);
       
  1897 						test.Printf(_L("%016lx"), val);
       
  1898 						break;
       
  1899 						}
       
  1900 					default:
       
  1901 						test(EFalse);
       
  1902 					}
       
  1903 				test.Printf(_L("\n"));
       
  1904 				}
       
  1905 			User::Free(elids);
       
  1906 			User::Free(types);
       
  1907 			User::Free(lens);
       
  1908 			}
       
  1909 		}
       
  1910 	}
       
  1911 void HcrRealRetrieveKernelExtensionTestResults()
       
  1912 	{
       
  1913 	test.Next(_L("Retrieve kernel extension test results"));
       
  1914 	TInt r;
       
  1915 	TInt kextline;
       
  1916 	TInt kexterror;
       
  1917 	r = HcrSimTest.GetInitExtensionTestResults(kextline, kexterror);
       
  1918 	test_KErrNone(r);
       
  1919 	if (kextline == -1)
       
  1920 		{
       
  1921 		test.Printf(_L("Test not run\n"));
       
  1922 		}
       
  1923 	else if (kextline == 0)
       
  1924 		{
       
  1925 		test.Printf(_L("Test passed\n"));
       
  1926 		}
       
  1927 	else
       
  1928 		{
       
  1929 		test.Printf(_L("Test kernel extension error at line %d (error %d)\n"), kextline, kexterror);
       
  1930 		test(EFalse);
       
  1931 		}
       
  1932 	}
       
  1933 
       
  1934 void HcrRealTests(const TDesC& aDriver)
       
  1935 	{
       
  1936 	test.Next(_L("HCR real tests"));
       
  1937 	test.Start(_L("Load LDD"));
       
  1938 	test.Printf(_L("%S\n"), &aDriver);
       
  1939 	TInt r;
       
  1940 	r = User::LoadLogicalDevice(aDriver);
       
  1941 	if (r == KErrNotFound)
       
  1942 		{
       
  1943 		test.Printf(_L("%S not found. Skipping tests.\n"), &aDriver);
       
  1944 		}
       
  1945 	else
       
  1946 		{
       
  1947 		if (r == KErrAlreadyExists)
       
  1948 			{
       
  1949 			test.Printf(_L("Unload Device Driver and load it again\n"));
       
  1950 			r = User::FreeLogicalDevice(aDriver);
       
  1951 			test_KErrNone(r);
       
  1952 			r = User::LoadLogicalDevice(aDriver);
       
  1953 			}
       
  1954 		test_KErrNone(r);
       
  1955 		r = HcrSimTest.Open(aDriver);
       
  1956 		test_KErrNone(r);
       
  1957 		//
       
  1958 		HcrRealRetrieveKernelExtensionTestResults();
       
  1959 		HcrRealSettingDiscovery();
       
  1960 		//
       
  1961 		test.Next(_L("Close LDD"));
       
  1962 		HcrSimTest.Close();
       
  1963 		r = User::FreeLogicalDevice(aDriver);
       
  1964 		test_KErrNone(r);
       
  1965 		}
       
  1966 	test.End();
       
  1967 	}
       
  1968 
       
  1969 void HcrSimBenchmarkTests(const TDesC& aDriver)
       
  1970 	{
       
  1971 	test.Next(_L("Simulated HCR Benchmark"));
       
  1972 	test.Start(_L("Initialisation"));
       
  1973 	test.Printf(_L("%S\n"), &aDriver);
       
  1974 	TInt r;
       
  1975 	r = User::LoadLogicalDevice(aDriver);
       
  1976 	if (r == KErrAlreadyExists)
       
  1977 		{
       
  1978 		test.Printf(_L("Unload Device Driver and load it again\n"));
       
  1979 		r = User::FreeLogicalDevice(aDriver);
       
  1980 		test_KErrNone(r);
       
  1981 		r = User::LoadLogicalDevice(aDriver);
       
  1982 		test_KErrNone(r);
       
  1983 		}
       
  1984 	else
       
  1985 		{
       
  1986 		test_KErrNone(r);
       
  1987 		}
       
  1988 	r = HcrSimTest.Open(aDriver);
       
  1989 	test_KErrNone(r);
       
  1990 	r = HcrSimTest.InitExtension();
       
  1991 	test_KErrNone(r);
       
  1992 	r = HcrSimTest.CheckIntegrity();
       
  1993 	test_KErrNone(r);
       
  1994 
       
  1995 	test.Next(_L("Get Setting"));
       
  1996 	// Timings in ms
       
  1997 	TUint32 int1 = 0;
       
  1998 	TUint32 int1000 = 0;
       
  1999 	TUint32 array1 = 0;
       
  2000 	TUint32 array1000 = 0;
       
  2001 	TUint32 des1 = 0;
       
  2002 	TUint32 des1000 = 0;
       
  2003 	TUint32 fns = 0;
       
  2004 	TUint32 fs = 0;
       
  2005 	TUint32 gts = 0;
       
  2006 	TUint32 gws = 0;
       
  2007 	_LIT(KTestBenchLine, "%-6d   %-6d   %-6d   %-6d   %-6d   %-6d   %-6d   %-6d   %-6d   %-6d\n");
       
  2008 	test.Printf(_L("HCR  Int1     Int1000  Arr1     Arr1000  Des1     Des1000  FNS      FS       GTS      GWS\n"));
       
  2009 	// Default configuration
       
  2010 	TSettingId idint1(1, 1);
       
  2011 	TSettingId idstring1(KTestCategories[2], 0x6000);
       
  2012 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
       
  2013 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
       
  2014 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
       
  2015 	test.Printf(_L("C??  "));
       
  2016 	test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
       
  2017 	
       
  2018 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::ECoreRepos);
       
  2019 	test_KErrNone(r);
       
  2020 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
       
  2021 	test_KErrNone(r);
       
  2022 	r = HcrSimTest.CheckIntegrity();
       
  2023 	test_KErrNone(r);
       
  2024 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
       
  2025 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
       
  2026 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
       
  2027 	test.Printf(_L("C__  "));
       
  2028 	test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
       
  2029 	//
       
  2030 	TSettingId idint1000(KTestBenchmarkCategoryId, 1000);
       
  2031 	TSettingId idstring1000(KTestBenchmarkCategoryId, 1001);
       
  2032 	r = HcrSimTest.SwitchRepository(KTestMegaLarge1, HCRInternal::ECoreRepos);
       
  2033 	test_KErrNone(r);
       
  2034 	r = HcrSimTest.CheckIntegrity();
       
  2035 	test_KErrNone(r);
       
  2036 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
       
  2037 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1000, int1000));
       
  2038 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
       
  2039 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1000, array1000));
       
  2040 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
       
  2041 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1000, des1000));
       
  2042 
       
  2043 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindNumSettingsInCategory(KTestBenchmarkCategoryId, fns));
       
  2044 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindSettings(KTestBenchmarkCategoryId, fs));
       
  2045 	test_KErrNone(HcrSimTest.BenchmarkGetTypeAndSize(idstring1000, gts));
       
  2046 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory - 1, HcrSimTest.BenchmarkGetWordSettings(KTestBenchmarkCategoryId, gws));
       
  2047 
       
  2048 	test.Printf(_L("CF_  "));
       
  2049 	test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
       
  2050 	//
       
  2051 	r = HcrSimTest.SwitchRepository(KTestMegaLarge2, HCRInternal::EOverrideRepos);
       
  2052 	test_KErrNone(r);
       
  2053 	r = HcrSimTest.CheckIntegrity();
       
  2054 	test_KErrNone(r);
       
  2055 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
       
  2056 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1000, int1000));
       
  2057 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
       
  2058 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1000, array1000));
       
  2059 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
       
  2060 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1000, des1000));
       
  2061 
       
  2062 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindNumSettingsInCategory(KTestBenchmarkCategoryId, fns));
       
  2063 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindSettings(KTestBenchmarkCategoryId, fs));
       
  2064 	test_KErrNone(HcrSimTest.BenchmarkGetTypeAndSize(idstring1000, gts));
       
  2065 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory - 1, HcrSimTest.BenchmarkGetWordSettings(KTestBenchmarkCategoryId, gws));
       
  2066 
       
  2067 	test.Printf(_L("CFN  "));
       
  2068 	test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
       
  2069 	//
       
  2070 	r = HcrSimTest.SwitchRepository(KTestClearRepos, HCRInternal::EOverrideRepos);
       
  2071 	test_KErrNone(r);
       
  2072 	r = HcrSimTest.CheckIntegrity();
       
  2073 	test_KErrNone(r);
       
  2074 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1, int1));
       
  2075 	test_KErrNone(HcrSimTest.BenchmarkGetSettingInt(idint1000, int1000));
       
  2076 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1, array1));
       
  2077 	test_KErrNone(HcrSimTest.BenchmarkGetSettingArray(idstring1000, array1000));
       
  2078 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1, des1));
       
  2079 	test_KErrNone(HcrSimTest.BenchmarkGetSettingDes(idstring1000, des1000));
       
  2080 
       
  2081 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindNumSettingsInCategory(KTestBenchmarkCategoryId, fns));
       
  2082 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory, HcrSimTest.BenchmarkFindSettings(KTestBenchmarkCategoryId, fs));
       
  2083 	test_KErrNone(HcrSimTest.BenchmarkGetTypeAndSize(idstring1000, gts));
       
  2084 	test_Equal(KTestBenchmarkNumberOfSettingsInCategory - 1, HcrSimTest.BenchmarkGetWordSettings(KTestBenchmarkCategoryId, gws));
       
  2085 
       
  2086 	test.Printf(_L("C_N  "));
       
  2087 	test.Printf(KTestBenchLine, int1, int1000, array1, array1000, des1, des1000, fns, fs, gts, gws);
       
  2088 
       
  2089 	test.Next(_L("Unload LDD"));
       
  2090 	HcrSimTest.Close();
       
  2091 	r = User::FreeLogicalDevice(aDriver);
       
  2092 	test_KErrNone(r);
       
  2093 	test.End();
       
  2094 	}
       
  2095 
       
  2096 void HcrRealBenchmarkTests(const TDesC& aDriver)
       
  2097 	{
       
  2098 	TInt r;
       
  2099 	test.Next(_L("Real HCR Benchmark"));
       
  2100 	test.Start(_L("Initialisation"));
       
  2101 	test.Printf(_L("%S\n"), &aDriver);
       
  2102 	r = User::LoadLogicalDevice(aDriver);
       
  2103 	if (r == KErrNotFound)
       
  2104 		{
       
  2105 		test.Printf(_L("%S not found. Skipping tests.\n"), &aDriver);
       
  2106 		}
       
  2107 	else
       
  2108 		{
       
  2109 		if (r == KErrAlreadyExists)
       
  2110 			{
       
  2111 			test.Printf(_L("Unload Device Driver and load it again\n"));
       
  2112 			r = User::FreeLogicalDevice(aDriver);
       
  2113 			test_KErrNone(r);
       
  2114 			r = User::LoadLogicalDevice(aDriver);
       
  2115 			}
       
  2116 		test_KErrNone(r);
       
  2117 		r = HcrSimTest.Open(aDriver);
       
  2118 		test_KErrNone(r);
       
  2119 		//
       
  2120 		test.Next(_L("Close LDD"));
       
  2121 		HcrSimTest.Close();
       
  2122 		r = User::FreeLogicalDevice(aDriver);
       
  2123 		test_KErrNone(r);
       
  2124 		}
  1059 	test.End();
  2125 	test.End();
  1060 	}
  2126 	}
  1061 
  2127 
  1062 GLDEF_C TInt E32Main()
  2128 GLDEF_C TInt E32Main()
  1063 	{
  2129 	{
  1064 	__UHEAP_MARK;
  2130 	__UHEAP_MARK;
  1065 
  2131 
  1066 	test.Title();
  2132 	test.Title();
  1067 	test.Start(_L("HCR Test Suite"));
  2133 	test.Start(_L("HCR Test Suite"));
  1068 	HcrSimTests();
  2134 	
       
  2135 	
       
  2136 	
       
  2137 	//Order the the test lists in descend(the setting with the smallest
       
  2138 	//setting Id is first)
       
  2139 	TLinearOrder<SSettingC> order(CompareEntries);
       
  2140 	//Build the ordered ids arrays
       
  2141 	RArray<SSettingC> rSettingsList(sizeof(SSettingC), SettingsList,
       
  2142 			sizeof(SettingsList)/sizeof(SettingsList[0]));
       
  2143 	
       
  2144 	rSettingsList.Sort(order);
       
  2145 	
       
  2146 	RArray<SSettingC> rSettingsList2(sizeof(SSettingC), SettingsList2,
       
  2147 			sizeof(SettingsList2)/sizeof(SettingsList2[0]));
       
  2148 	rSettingsList2.Sort(order);
       
  2149 
       
  2150 	RArray<SSettingC> rSettingsList3(sizeof(SSettingC), SettingsList3,
       
  2151 			sizeof(SettingsList3)/sizeof(SettingsList3[0]));
       
  2152 	rSettingsList3.Sort(order);
       
  2153 
       
  2154 	RArray<SSettingC> rSettingsList4(sizeof(SSettingC), SettingsList4,
       
  2155 			sizeof(SettingsList4)/sizeof(SettingsList4[0]));
       
  2156 	rSettingsList4.Sort(order);
       
  2157 
       
  2158 	RArray<SSettingC> rSettingsList5(sizeof(SSettingC), SettingsList5,
       
  2159 			sizeof(SettingsList5)/sizeof(SettingsList5[0]));
       
  2160 	rSettingsList5.Sort(order);
       
  2161 
       
  2162 	RArray<SSettingC> rSettingsList6(sizeof(SSettingC), SettingsList6,
       
  2163 			sizeof(SettingsList6)/sizeof(SettingsList6[0]));
       
  2164 	rSettingsList6.Sort(order);
       
  2165 
       
  2166 	RArray<SSettingC> rSettingsList7(sizeof(SSettingC), SettingsList7,
       
  2167 			sizeof(SettingsList7)/sizeof(SettingsList7[0]));
       
  2168 	rSettingsList7.Sort(order);
       
  2169 
       
  2170 
       
  2171     //Functional API tests
       
  2172 	RomHeaderTests();
       
  2173 	HcrRealTests(KTestHcrRealOwn);
       
  2174 	HcrRealTests(KTestHcrRealClient);
       
  2175 	HcrPslTests(KTestHcrSimOwn);
       
  2176 	HcrPslTests(KTestHcrSimClient);
       
  2177 	HcrSimTests(KTestHcrSimOwn);
       
  2178 	HcrSimTests(KTestHcrSimClient);
       
  2179 
       
  2180 
       
  2181 	//Benchmark tests
       
  2182 	HcrSimBenchmarkTests(KTestHcrSimOwn);
       
  2183 	HcrSimBenchmarkTests(KTestHcrSimClient);
       
  2184 	HcrRealBenchmarkTests(KTestHcrRealOwn);
       
  2185 	HcrRealBenchmarkTests(KTestHcrRealClient);
       
  2186 
  1069 	test.End();
  2187 	test.End();
  1070 	test.Close();
  2188 	test.Close();
  1071 
  2189 
  1072 	__UHEAP_MARKEND;
  2190 	__UHEAP_MARKEND;
  1073 	return KErrNone;
  2191 	return KErrNone;