sl@0: // Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #ifdef CENREP_PC_TEST sl@0: #include sl@0: #else sl@0: #include sl@0: #endif sl@0: sl@0: #include sl@0: #include sl@0: sl@0: enum TestMode{ sl@0: ETxt, sl@0: ECre, sl@0: EAutoCre, sl@0: EAutoTxt sl@0: }; sl@0: sl@0: //DEFINED IN THE TEST MAIN CPP sl@0: extern void SetupEnv(const TDesC& aInFilePath,const TDesC& aOutFilePath,TUint aTestMode); sl@0: extern RFs TheFs; sl@0: extern RTest TheTest; sl@0: sl@0: using namespace NCentralRepositoryConstants; sl@0: sl@0: _LIT(KLongBuf16,"sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss\ sl@0: ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss"); sl@0: sl@0: sl@0: //////////////////////////////////////////////////////////////////////////////// sl@0: // Test macro and function. sl@0: sl@0: LOCAL_C void Check(TInt aValue, TInt aLine) sl@0: { sl@0: if(!aValue) sl@0: { sl@0: TheTest(EFalse, aLine); sl@0: } sl@0: } sl@0: sl@0: LOCAL_C void Check(TInt aValue, TInt aExpected, TInt aLine) sl@0: { sl@0: if(aValue != aExpected) sl@0: { sl@0: RDebug::Print(_L("*** Expected error: %d, got: %d\r\n"), aExpected, aValue); sl@0: TheTest(EFalse, aLine); sl@0: } sl@0: } sl@0: sl@0: #define TEST(arg) ::Check((arg), __LINE__) sl@0: #define TEST2(aValue, aExpected) ::Check(aValue, aExpected, __LINE__) sl@0: sl@0: //////////////////////////////////////////////////////////////////////////////// sl@0: sl@0: /** sl@0: NEWL Negative Testing sl@0: */ sl@0: void NewL(TUint aTestMode) sl@0: { sl@0: CRepository* repos=NULL; sl@0: //Negative testing to do with initialising the repository sl@0: sl@0: //-repository file not found sl@0: TUid nonexistentRepository={0x88888888}; sl@0: TRAPD(err,repos=CRepository::NewL(nonexistentRepository)); sl@0: TEST2(err, KErrNotFound); sl@0: sl@0: //-repository file corrupt sl@0: TUid corruptRepositoryUid; sl@0: if (aTestMode==EAutoCre) sl@0: corruptRepositoryUid=TUid::Uid(0x88888881); sl@0: else sl@0: corruptRepositoryUid=TUid::Uid(0x88888880); sl@0: TRAP(err,repos=CRepository::NewL(corruptRepositoryUid)); sl@0: TEST2(err, KErrCorrupt); sl@0: sl@0: delete repos; sl@0: } sl@0: sl@0: sl@0: void GetFunction(CRepository* aRepository) sl@0: { sl@0: TInt error; sl@0: TInt intVal; sl@0: TReal realVal; sl@0: TBuf<50> longStr; sl@0: sl@0: //GENERAL sl@0: //-Setting does not exist sl@0: error = aRepository->Get(100, intVal); sl@0: TEST2(error, KErrNotFound); sl@0: error = aRepository->Get(100, realVal); sl@0: TEST2(error, KErrNotFound); sl@0: error = aRepository->Get(100, longStr); sl@0: TEST2(error, KErrNotFound); sl@0: sl@0: //-Setting exist but not requested type(mismatch) sl@0: //INT sl@0: error = aRepository->Get(1, realVal); sl@0: TEST2(error, KErrArgument); sl@0: error = aRepository->Get(1, longStr); sl@0: TEST2(error, KErrArgument); sl@0: sl@0: //REAL sl@0: error = aRepository->Get(2, intVal); sl@0: TEST2(error, KErrArgument); sl@0: error = aRepository->Get(2, longStr); sl@0: TEST2(error, KErrArgument); sl@0: sl@0: //DESC8,DESC16 sl@0: error = aRepository->Get(0x300, intVal); sl@0: TEST2(error, KErrArgument); sl@0: error = aRepository->Get(0x300, realVal); sl@0: TEST2(error, KErrArgument); sl@0: sl@0: //-The buffer allocated too small sl@0: TBuf8<4> short8BitStr; sl@0: error = aRepository->Get(11, short8BitStr); sl@0: TEST2(error, KErrOverflow); sl@0: //-The bufer allocated is ok sl@0: TBuf8<12> good8BitStr; sl@0: error = aRepository->Get(11, good8BitStr); sl@0: TEST2(error, KErrNone); sl@0: //-The buffer allocated is too big(not a problem) sl@0: TBuf8<50> long8BitStr; sl@0: error = aRepository->Get(11, long8BitStr); sl@0: TEST2(error, KErrNone); sl@0: //DESC8,DESC16(with actual length) sl@0: //-The buffer allocated too small sl@0: TBuf<4> shortStr; sl@0: error = aRepository->Get(0x300, shortStr); sl@0: TEST2(error, KErrOverflow); sl@0: //-The bufer allocated is ok sl@0: TBuf<11> goodStr; sl@0: error = aRepository->Get(0x300, goodStr); sl@0: TEST2(error, KErrNone); sl@0: //-The buffer allocated is too big(not a problem) sl@0: error = aRepository->Get(0x300, longStr); sl@0: TEST2(error, KErrNone); sl@0: } sl@0: sl@0: void GetMeta(CRepository* aRepository) sl@0: { sl@0: //-Setting does not exist sl@0: TUint32 meta; sl@0: TInt error; sl@0: error = aRepository->GetMeta(100, meta); sl@0: TEST2(error, KErrNotFound); sl@0: } sl@0: sl@0: void FindFunctionL(CRepository* aRepository) sl@0: { sl@0: RArray keyList; sl@0: RArray shortKeyList(1); sl@0: CleanupClosePushL(keyList); sl@0: CleanupClosePushL(shortKeyList); sl@0: sl@0: TInt error; sl@0: sl@0: //FindL sl@0: //-Partial setting list requested not found(based on partialid and mask) sl@0: error = aRepository->FindL(0x0000FFFF, 0x0000F000, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: sl@0: //-purposely initially allocated a array with small size(force it to grow) sl@0: error = aRepository->FindL(0xFFFFFFFF, 0x0, shortKeyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(shortKeyList.Count(), 33); sl@0: sl@0: //FindEqL/FindNeqL sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0xFFFFFFFF, 0, 199, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: sl@0: //GENERAL sl@0: //-Partial setting list requested not found(based on partialid and mask) sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0x0000FFFF, 0x0000F000, 100, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0x0000FFFF, 0x0000F000, 100, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: sl@0: //-Partial setting list found but some setting not the TYPE as requested(ensure not returned) sl@0: //INT sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, 88, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 2); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, 88, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 3); sl@0: sl@0: //REAL sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, 88.0, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 2); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, 88.0, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 3); sl@0: sl@0: _LIT(KString16, "88"); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, KString16, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 1); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, KString16, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 4); sl@0: sl@0: _LIT(KString8, "88"); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0x00100000, 0xFFFFF0FF, KString8, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 1); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0x00100000, 0xFFFFF0FF, KString8, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(keyList.Count(), 4); sl@0: sl@0: //-A value specified greater than the max limit allowed KMaxBinaryLength(8 bit) and KMaxUnicodeStringLength(16 bit) sl@0: TBuf8 KLongBuf8; sl@0: KLongBuf8.Copy(KLongBuf16); sl@0: KLongBuf8.Append(KLongBuf16); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0xFFFFFFFF, 0, KLongBuf8, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0xFFFFFFFF, 0, KLongBuf8, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(shortKeyList.Count(), 33); sl@0: sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0xFFFFFFFF, 0, KLongBuf16, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0xFFFFFFFF, 0, KLongBuf16, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(shortKeyList.Count(), 33); sl@0: sl@0: //-A value specified empty sl@0: _LIT8(KEmptyStr8, ""); sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0xFFFFFFFF, 0, KEmptyStr8, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0xFFFFFFFF, 0, KEmptyStr8, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(shortKeyList.Count(), 33); sl@0: sl@0: _LIT16(KEmptyStr16, ""); sl@0: keyList.Reset(); sl@0: error = aRepository->FindEqL(0xFFFFFFFF, 0, KEmptyStr16, keyList); sl@0: TEST2(error, KErrNotFound); sl@0: keyList.Reset(); sl@0: error = aRepository->FindNeqL(0xFFFFFFFF, 0, KEmptyStr16, keyList); sl@0: TEST2(error, KErrNone); sl@0: TEST2(shortKeyList.Count(), 33); sl@0: sl@0: CleanupStack::PopAndDestroy(2); sl@0: } sl@0: sl@0: void SetFunction(CRepository* aRepository) sl@0: { sl@0: //----------SET sl@0: //GENERAL: sl@0: //-Setting exist but not requested type(mismatch) sl@0: //-If setting does not exist, it creates one(also check the expected meta) sl@0: //INT sl@0: //REAL sl@0: //DESC8,DESC16 sl@0: //-Try to set a setting that is greater than KMaxBinaryLength(8 bit) and KMaxUnicodeStringLength(16 bit) sl@0: //-Try to set a setting with empty string content(is this a problem) sl@0: sl@0: TInt intVal=0; sl@0: TReal realVal=0; sl@0: TUint32 metaVal=0; sl@0: sl@0: //INT sl@0: TInt err=aRepository->Set(0x2,intVal); sl@0: TEST2(err, KErrArgument); sl@0: err=aRepository->Set(0x888,888); sl@0: TEST2(err, KErrNone); sl@0: err=aRepository->Get(0x888,intVal); sl@0: TEST2(intVal, 888); sl@0: //will use default one sl@0: err=aRepository->GetMeta(0x888,metaVal); sl@0: TEST2(metaVal, 0x10); sl@0: sl@0: //REAL sl@0: err=aRepository->Set(0x1,realVal); sl@0: TEST2(err, KErrArgument); sl@0: err=aRepository->Set(0x333,333.33); sl@0: TEST2(err, KErrNone); sl@0: err=aRepository->Get(0x333,realVal); sl@0: TEST(realVal == 333.33); sl@0: //will use range one sl@0: err=aRepository->GetMeta(0x333,metaVal); sl@0: TEST2(metaVal, 0x20); sl@0: sl@0: //DESC8,DESC16 sl@0: _LIT8(KBuf8,"full"); sl@0: err=aRepository->Set(0x1,KBuf8()); sl@0: TEST2(err, KErrArgument); sl@0: _LIT(KBuf16,"full"); sl@0: err=aRepository->Set(0x1,KBuf16()); sl@0: TEST2(err, KErrArgument); sl@0: err=aRepository->Set(0x111,KBuf16()); sl@0: TEST2(err, KErrNone); sl@0: TBuf16<255> buffer16; sl@0: err=aRepository->Get(0x111,buffer16); sl@0: TEST2(err, KErrNone); sl@0: TEST2(buffer16.Compare(KBuf16()), 0); sl@0: err=aRepository->GetMeta(0x111,metaVal); sl@0: //will use range one sl@0: err=aRepository->GetMeta(0x111,metaVal); sl@0: TEST2(metaVal, 0x20); sl@0: sl@0: //Set an existing string setting with string longer than limit(KMaxUnicodeStringLength) sl@0: TBuf8 KLongBuf8; sl@0: KLongBuf8.Copy(KLongBuf16()); sl@0: KLongBuf8.Append(KLongBuf16()); sl@0: sl@0: //try it on existing string setting sl@0: err=aRepository->Set(0x222,KLongBuf16()); sl@0: TEST2(err, KErrArgument); sl@0: err=aRepository->Set(0x222,KLongBuf8); sl@0: TEST2(err, KErrArgument); sl@0: sl@0: //set an empty string content sl@0: _LIT8(KEmptyString8,""); sl@0: err=aRepository->Set(0x444,KEmptyString8()); sl@0: TEST2(err, KErrNone); sl@0: _LIT16(KEmptyString16,""); sl@0: err=aRepository->Set(0x555,KEmptyString16()); sl@0: TEST2(err, KErrNone); sl@0: } sl@0: sl@0: void CreateFunction(CRepository* aRepository) sl@0: { sl@0: //----------CREATE sl@0: //GENERAL: sl@0: //-Setting already exist sl@0: //INT sl@0: //REAL sl@0: //DESC8,DESC16 sl@0: //-Try to create a setting that is greater than KMaxBinaryLength(8 bit) and KMaxUnicodeStringLength(16 bit) sl@0: //-Try to set a setting with empty string content(is this a problem) sl@0: TInt intVal = 0; sl@0: TReal realVal = 0.0; sl@0: sl@0: //INT sl@0: TInt err=aRepository->Create(1,intVal); sl@0: TEST2(err, KErrAlreadyExists); sl@0: //REAL sl@0: err=aRepository->Create(2,realVal); sl@0: TEST2(err, KErrAlreadyExists); sl@0: //DESC8,DESC16 sl@0: _LIT8(KString8,"string"); sl@0: _LIT16(KString16,"string"); sl@0: err=aRepository->Create(5,KString8); sl@0: TEST2(err, KErrAlreadyExists); sl@0: err=aRepository->Create(5,KString16); sl@0: TEST2(err, KErrAlreadyExists); sl@0: sl@0: //empty string sl@0: _LIT8(KEmptyString8,""); sl@0: _LIT8(KEmptyString16,""); sl@0: err=aRepository->Create(0x1111,KEmptyString8()); sl@0: TEST2(err, KErrNone); sl@0: err=aRepository->Create(0x2222,KEmptyString16()); sl@0: TEST2(err, KErrNone); sl@0: sl@0: //Create an existing string setting with string longer than limit(KMaxUnicodeStringLength) sl@0: TBuf8 KLongBuf8; sl@0: KLongBuf8.Copy(KLongBuf16()); sl@0: KLongBuf8.Append(KLongBuf16()); sl@0: sl@0: err=aRepository->Create(0x3333,KLongBuf16()); sl@0: TEST2(err, KErrArgument); sl@0: err=aRepository->Create(0x4444,KLongBuf8); sl@0: TEST2(err, KErrArgument); sl@0: } sl@0: sl@0: void DeleteFunction(CRepository* aRepository) sl@0: { sl@0: //----------DELETE SINGLE sl@0: //-Setting does not exist sl@0: //-Delete a setting and then recreate,see original meta data preserved(vary with default,range,single) sl@0: //-When deleted always verify setting does not exist sl@0: TInt err=aRepository->Delete(0x757); sl@0: TEST2(err, KErrNotFound); sl@0: sl@0: //delete and existing setting with single meta, then recreate it, expect same meta before deletion sl@0: TReal realVal; sl@0: TUint32 metaVal; sl@0: //this is the original setting meta sl@0: err=aRepository->GetMeta(2,metaVal); sl@0: TEST2(metaVal, 0xa); sl@0: err=aRepository->Delete(2); sl@0: TEST2(err, KErrNone); sl@0: err=aRepository->Get(2,realVal); sl@0: TEST2(err, KErrNotFound); sl@0: err=aRepository->Create(2,realVal); sl@0: TEST2(err, KErrNone); sl@0: TUint32 newMetaVal; sl@0: err=aRepository->GetMeta(2,newMetaVal); sl@0: TEST2(err, KErrNone); sl@0: TEST2(newMetaVal, metaVal); sl@0: sl@0: sl@0: //----------DELETE RANGE sl@0: //-Partial setting list requested not found(based on partialid and mask) sl@0: //-Check the aErrorKey returned with each of the negative testing. sl@0: TUint32 error; sl@0: err=aRepository->Delete(0x0F010000,0xFFFFF0FF,error); sl@0: TEST2(err, KErrNotFound); sl@0: //if not found, the error key here will be set to the partial ID sl@0: TEST2(error, 0x0F010000); sl@0: sl@0: } sl@0: sl@0: void MoveFunction(CRepository* aRepository) sl@0: { sl@0: //-Partial setting list requested not found(based on partialid and mask) sl@0: //-Intended target setting already exist(say 1 out of X) sl@0: TUint32 errorId; sl@0: TInt err=aRepository->Move(0x0F010000,0x0E010000,0xFFFFF0FF,errorId); sl@0: TEST2(err, KErrNotFound); sl@0: TEST2(errorId, 0x0F010000); sl@0: sl@0: sl@0: err=aRepository->Move(0x03010000,0x02010000,0xFFFFF0FF,errorId); sl@0: TEST2(err, KErrAlreadyExists); sl@0: //errorId will be set to the first id of the target when error is encountered sl@0: TEST2(errorId, 0x02010100); sl@0: } sl@0: sl@0: /** sl@0: */ sl@0: void NegativeTestingL(TUid aUid,const TDesC& aInFile,const TDesC& aOutFile,TUint aTestMode) sl@0: { sl@0: SetupEnv(aInFile,aOutFile,aTestMode); sl@0: sl@0: __UHEAP_MARK; sl@0: sl@0: //repository initialising negative testing sl@0: NewL(aTestMode); sl@0: sl@0: //ok repository but operation negative testing sl@0: CRepository* repository=CRepository::NewLC(aUid); sl@0: sl@0: //these are all negative testing specifically each of the error code sl@0: GetFunction(repository); sl@0: GetMeta(repository); sl@0: FindFunctionL(repository); sl@0: SetFunction(repository); sl@0: CreateFunction(repository); sl@0: DeleteFunction(repository); sl@0: MoveFunction(repository); sl@0: sl@0: CleanupStack::PopAndDestroy(); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: TInt CopyFile(const TDesC& aSource, const TDesC& aTarget) sl@0: { sl@0: RFile file; sl@0: TInt ret=file.Open(TheFs,aSource,EFileRead); sl@0: if (ret!=KErrNone) sl@0: return ret; sl@0: TInt fileSize; sl@0: file.Size(fileSize); sl@0: HBufC8* buf=HBufC8::New(fileSize); sl@0: if (!buf) sl@0: { sl@0: file.Close(); sl@0: return KErrNoMemory; sl@0: } sl@0: TPtr8 mod(buf->Des()); sl@0: file.Read(mod); sl@0: file.Close(); sl@0: ret=file.Replace(TheFs,aTarget,EFileWrite); sl@0: if (ret==KErrNone) sl@0: { sl@0: file.Write(*buf); sl@0: } sl@0: file.Close(); sl@0: delete buf; sl@0: return ret; sl@0: }