diff -r 2d65c2f76d7b -r 947f0dc9f7a8 kerneltest/f32test/server/t_locate.cpp --- a/kerneltest/f32test/server/t_locate.cpp Tue Feb 02 01:24:03 2010 +0200 +++ b/kerneltest/f32test/server/t_locate.cpp Fri Apr 16 16:24:37 2010 +0300 @@ -162,7 +162,7 @@ err = TheFs.Drive(info, i); test( err == KErrNone ); - if( info.iDriveAtt & KDriveAttRemovable ) + if(( info.iDriveAtt & KDriveAttRemovable ) && !( info.iDriveAtt & KDriveAttLogicallyRemovable )) { if ( ( info.iType != EMediaNotPresent) && (info.iType != EMediaUnknown) && (info.iType != EMediaCdRom) ) @@ -541,24 +541,29 @@ entry=(*dir)[0]; test(entry.iName.MatchF(_L("FILE.AAA"))!=KErrNotFound); delete dir; + r=finder.FindWildByPath(_L("*FILE.AAA"), &gPath1, dir); test(r==KErrNone); test(dir->Count()==1); entry=(*dir)[0]; test(entry.iName.MatchF(_L("FILE.AAA"))!=KErrNotFound); delete dir; + r=finder.FindWildByPath(_L("FILE.AAA*"), &gPath1, dir); test(r==KErrNone); test(dir->Count()==1); entry=(*dir)[0]; test(entry.iName.MatchF(_L("FILE.AAA"))!=KErrNotFound); delete dir; + + r=finder.FindWildByPath(_L("CONFUSED.DOG"), &gPath1, dir); test(r==KErrNone); test(dir->Count()==1); entry=(*dir)[0]; test(entry.iName.MatchF(_L("CONFUSED.DOG"))!=KErrNotFound); delete dir; + r=finder.FindWildByPath(_L("*CONFUSED.DOG"), &gPath1, dir); test(r==KErrNone); test(dir->Count()==1); @@ -993,10 +998,119 @@ } +//--------------------------------------------------------------------------------------- +/** + Test that callinng TFindFile methods that allocate CDir objects doesn't lead to memory leaks if some error occurs. +*/ +void TestFailures() + { + + test.Next(_L("Test TFindFile failures\n")); + +#ifndef _DEBUG + test.Printf(_L("This test can't be performed in UREL mode, skipping\n")); + return; +#else + + TFindFile finder(TheFs); + CDir* pDir; + TInt nRes; + TInt cnt=0; + + _LIT(KPath, "\\F32-TST\\LOCTEST\\"); + + const TInt KMyError = -756; //-- specific error code we will simulate + + //------------------------------------ + test.Printf(_L("Test FindWildByPath failures\n")); + + __UHEAP_MARK; + nRes = finder.FindWildByPath(_L("*"), &gPath1, pDir); + test(nRes == KErrNone); + test(pDir && pDir->Count() > 1); + delete pDir; + + + for(cnt = 0; ;cnt++) + { + nRes =TheFs.SetErrorCondition(KMyError, cnt); + test(nRes == KErrNone); + + pDir = (CDir*)0xaabbccdd; + nRes = finder.FindWildByPath(_L("*"), &gPath1, pDir); + + //-- on error the memory allocated internally for CDir shall be freed and the pointer CDir* shall be set to NULL + if(nRes == KErrNone) + { + test.Printf(_L("Test FindWildByPath->FindWild() failures\n")); + test(pDir && pDir->Count() > 1); + delete pDir; + pDir = (CDir*)0xaabbccdd; + + TheFs.SetErrorCondition(KMyError); + nRes = finder.FindWild(pDir); + test(nRes != KErrNone); + test(pDir == NULL); + + break; + } + else + { + test(pDir == NULL); + } + + } + + __UHEAP_MARKEND; + TheFs.SetErrorCondition(KErrNone); + //------------------------------------ + test.Printf(_L("Test FindWildByDir failures\n")); + + __UHEAP_MARK; + nRes = finder.FindWildByDir(_L("*"), KPath, pDir); + test(nRes == KErrNone); + test(pDir && pDir->Count() > 1); + delete pDir; + + for(cnt = 0; ;cnt++) + { + nRes =TheFs.SetErrorCondition(KMyError, cnt); + test(nRes == KErrNone); -GLDEF_C void CallTestsL() + pDir = (CDir*)0xaabbccdd; + nRes = finder.FindWildByDir(_L("*"), KPath, pDir); + + //-- on error the memory allocated internally for CDir shall be freed and the pointer CDir* shall be set to NULL + if(nRes == KErrNone) + { + test.Printf(_L("Test FindWildByDir->FindWild() failures\n")); + test(pDir && pDir->Count() > 1); + delete pDir; + pDir = (CDir*)0xaabbccdd; + + TheFs.SetErrorCondition(KMyError); + nRes = finder.FindWild(pDir); + test(nRes != KErrNone); + test(pDir == NULL); + + break; + } + else + { + test(pDir == NULL); + } + + } + + __UHEAP_MARKEND; + TheFs.SetErrorCondition(KErrNone); +#endif +} + +//--------------------------------------------------------------------------------------- +void CallTestsL() // // Do all tests // @@ -1026,6 +1140,8 @@ CreateTestDirectory(_L("\\F32-TST\\LOCTEST\\")); MakeLocateTestDirectoryStructure(); + + TestFailures(); Test1(); Test2(); Test3();