diff -r 000000000000 -r a41df078684a kerneltest/f32test/server/t_scan.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/server/t_scan.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,540 @@ +// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +#include +#include +#include "t_server.h" + +GLDEF_D RTest test(_L("T_SCAN")); + +LOCAL_C void BuildTestDir() +// +// Build up a test directory structure +// + +/* +// SCANTEST +// | +// File1 File2 Left File3 Right Empty(Directory) +// / \ / \ +// Dir2 Dir3 File4 File5 +// | | +// File6 Dir4----Hidden---HiddenFile +// | / \ +// File7 File8 System +// | +// File9 +*/ + { + + MakeDir(_L("\\F32-TST\\SCANTEST\\Empty\\")); + + MakeFile(_L("\\F32-TST\\SCANTEST\\File1")); + MakeFile(_L("\\F32-TST\\SCANTEST\\File2")); + MakeFile(_L("\\F32-TST\\SCANTEST\\File3")); + + MakeFile(_L("\\F32-TST\\SCANTEST\\Right\\File4")); + MakeFile(_L("\\F32-TST\\SCANTEST\\Right\\File5")); + + MakeFile(_L("\\F32-TST\\SCANTEST\\Left\\Dir2\\File6")); + MakeFile(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\File7")); + + MakeFile(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\Hidden\\File8")); + MakeFile(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\Hidden\\HiddenFile")); + MakeFile(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\Hidden\\System\\File9")); + + TInt r; + r=TheFs.SetAtt(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\Hidden"), KEntryAttHidden, 0); + test(r==KErrNone); + r=TheFs.SetAtt(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\Hidden\\HiddenFile"), KEntryAttHidden, 0); + test(r==KErrNone); + r=TheFs.SetAtt(_L("\\F32-TST\\SCANTEST\\Left\\Dir3\\Dir4\\Hidden\\System"), KEntryAttSystem, 0); + test(r==KErrNone); + } + +LOCAL_C void Test1() +// +// Test all methods +// + { + + test.Next(_L("Create scanner")); + CDirScan* scanner=CDirScan::NewL(TheFs); + TParse dirName; + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\"),dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttDir,ESortByName); + CDir* entryList; +// + test.Next(_L("Scan top level directory")); + scanner->NextL(entryList); + TInt count=entryList->Count(); + test(count==6); + TEntry entry=(*entryList)[0]; + test(entry.iName==_L("Empty")); + entry=(*entryList)[1]; + test(entry.iName==_L("File1")); + entry=(*entryList)[2]; + test(entry.iName==_L("File2")); + entry=(*entryList)[3]; + test(entry.iName==_L("File3")); + entry=(*entryList)[4]; + test(entry.iName==_L("Left")); + entry=(*entryList)[5]; + test(entry.iName==_L("Right")); + delete entryList; +// + test.Next(_L("Reset scanner")); + scanner->SetScanDataL(dirName.FullName(),KEntryAttDir,ESortByName); +// + test.Next(_L("Scan ascending: ScanTest directory")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==6); + entry=(*entryList)[0]; + test(entry.iName==_L("Empty")); + entry=(*entryList)[1]; + test(entry.iName==_L("File1")); + entry=(*entryList)[2]; + test(entry.iName==_L("File2")); + entry=(*entryList)[3]; + test(entry.iName==_L("File3")); + entry=(*entryList)[4]; + test(entry.iName==_L("Left")); + entry=(*entryList)[5]; + test(entry.iName==_L("Right")); + delete entryList; +// + test.Next(_L("Check next directory: Empty")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==0); + delete entryList; +// + test.Next(_L("Check next directory: Left")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==2); + entry=(*entryList)[0]; + test(entry.iName==_L("Dir2")); + entry=(*entryList)[1]; + test(entry.iName==_L("Dir3")); + delete entryList; +// + test.Next(_L("Check next directory: Left\\Dir2")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==1); + entry=(*entryList)[0]; + //test(entry.iName==_L("File6")); + delete entryList; +// + test.Next(_L("Check next directory: Left\\Dir3")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==1); + entry=(*entryList)[0]; + test(entry.iName==_L("Dir4")); + delete entryList; +// + test.Next(_L("Check next directory: Left\\Dir3\\Dir4")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==1); + entry=(*entryList)[0]; + test(entry.iName==_L("File7")); + delete entryList; +// + test.Next(_L("Check next directory: Right")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==2); + entry=(*entryList)[0]; + test(entry.iName==_L("File4")); + entry=(*entryList)[1]; + test(entry.iName==_L("File5")); + delete entryList; +// + test.Next(_L("End of scan")); + scanner->NextL(entryList); + test(entryList==NULL); + delete entryList; + delete scanner; + } + +LOCAL_C void Test2() +// +// Scan subset of test directory structure and test abs/rel paths +// + { + + test.Next(_L("Scan descending: ScanTest\\Left ")); + CDirScan* scanner=CDirScan::NewL(TheFs); + TParse dirName; + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\"),dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttNormal,ESortByName|EDescending); +// + test.Next(_L("Check next directory: Left")); + CDir* entryList; + scanner->NextL(entryList); + TInt count=entryList->Count(); + test(count==0); + test(scanner->AbbreviatedPath()==_L("\\")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\"),dirName); + test(scanner->FullPath()==dirName.FullName()); + delete entryList; +// + test.Next(_L("Check next directory: Left\\Dir3")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==0); + test(scanner->AbbreviatedPath()==_L("\\Dir3\\")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\Dir3\\"),dirName); + test(scanner->FullPath()==dirName.FullName()); + delete entryList; +// + test.Next(_L("Check next directory: Left\\Dir3\\Dir4")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==1); + test((*entryList)[0].iName==_L("File7")); + test(scanner->AbbreviatedPath()==_L("\\Dir3\\Dir4\\")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\Dir3\\Dir4\\"),dirName); + test(scanner->FullPath()==dirName.FullName()); + delete entryList; +// + test.Next(_L("Check next directory: Left\\Dir2")); + scanner->NextL(entryList); + count=entryList->Count(); + test(count==1); + test((*entryList)[0].iName==_L("File6")); + test(scanner->AbbreviatedPath()==_L("\\Dir2\\")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\Dir2\\"),dirName); + test(scanner->FullPath()==dirName.FullName()); + delete entryList; + delete scanner; + } + +LOCAL_C void Test3() +// +// Print directory structure +// + { + + test.Next(_L("List directory structure")); + TheFs.SetAllocFailure(gAllocFailOff); + TFileName sessionPath; + TInt r=TheFs.SessionPath(sessionPath); + test(r==KErrNone); + r=TheFs.SetSessionPath(_L("N:\\")); + test(r==KErrNone); + TAutoClose fs; + r=fs.iObj.Connect(); + test(r==KErrNone); + CDirScan* scanner=CDirScan::NewL(fs.iObj); + TParse dirName; + TheFs.Parse(sessionPath,dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttDir,ESortByName); + CDir* entryList; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + TInt count=entryList->Count(); + while (count--) + { + TEntry data=(*entryList)[count]; + TBuf path=scanner->AbbreviatedPath(); + test.Printf(_L("%S%S\n"),&path,&data.iName); + } + delete entryList; + entryList=NULL; + } + delete scanner; + r=TheFs.SetSessionPath(sessionPath); + test(r==KErrNone); + TheFs.SetAllocFailure(gAllocFailOn); + } + +LOCAL_C void Test4() +// +// Scan for a matching filename +// + { + + test.Start(_L("Scan for a matching filename")); + MakeFile(_L("\\F32-TST\\SCANTEST\\MaTCHteST.EXTENSION")); + MakeFile(_L("\\F32-TST\\SCANTEST\\MATCH.EXT")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\ANOTherteST.EXTENSION")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\APPDLL.DLL")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\TEST.EXTENSION")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\DIR4\\MaTCHteST.EXTENSION")); + + CDir* entryList; + CDirScan* scanner=CDirScan::NewL(TheFs); + TParse dirName; + + test.Next(_L("Scan for MAT??.EXT")); // can't test for MAT*.EXT because shortname of MaTCHteST.EXTENSION + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\MAT??.EXT"),dirName); // is MATCHT~1.EXT !!! + scanner->SetScanDataL(dirName.FullName(),KEntryAttNormal,ESortByName); + scanner->NextL(entryList); + test((TInt)entryList); + test(entryList->Count()==1); + test((*entryList)[0].iName.MatchF(_L("MATCH.EXT"))!=KErrNotFound); + test(scanner->AbbreviatedPath()==_L("\\")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\"),dirName); + test(scanner->FullPath()==dirName.FullName()); + delete entryList; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + test(entryList->Count()==0); + delete entryList; + } + + test.Next(_L("Scan for *.EXTENSION")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\*.EXTENSION"),dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttNormal,ESortByName); + scanner->NextL(entryList); + test((TInt)entryList); + test(entryList->Count()==1); + test((*entryList)[0].iName.MatchF(_L("MATCHTEST.EXTENSION"))!=KErrNotFound); + test(scanner->AbbreviatedPath()==_L("\\")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\"),dirName); + test(scanner->FullPath()==dirName.FullName()); + do { + delete entryList; + scanner->NextL(entryList); + test((TInt)entryList); + } while (entryList->Count()==0); + test(entryList->Count()==2); + test((*entryList)[0].iName.MatchF(_L("ANOTHERTEST.EXTENSION"))!=KErrNotFound); + test((*entryList)[1].iName.MatchF(_L("test.EXTENSION"))!=KErrNotFound); + test(scanner->AbbreviatedPath().MatchF(_L("\\LEFT\\DIR3\\"))!=KErrNotFound); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\"),dirName); + test(scanner->FullPath().MatchF(dirName.FullName())!=KErrNotFound); + do { + delete entryList; + scanner->NextL(entryList); + test((TInt)entryList); + } while (entryList->Count()==0); + test(entryList->Count()==1); + test((*entryList)[0].iName.MatchF(_L("MATCHTEST.EXTENSION"))!=KErrNotFound); + test(scanner->AbbreviatedPath().MatchF(_L("\\LEFT\\DIR3\\DIR4\\"))!=KErrNotFound); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\DIR4\\"),dirName); + test(scanner->FullPath().MatchF(dirName.FullName())!=KErrNotFound); + delete entryList; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + test(entryList->Count()==0); + delete entryList; + } + + test.Next(_L("Scan for APPDLL.DLL")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\APPDLL.DLL"),dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttNormal,ESortByName); + FOREVER + { + scanner->NextL(entryList); + if (entryList->Count()!=0) + break; + test((TInt)entryList); + delete entryList; + } + test(entryList->Count()==1); + test((*entryList)[0].iName==_L("APPDLL.DLL")); + test(scanner->AbbreviatedPath().MatchF(_L("\\LEFT\\DIR3\\"))!=KErrNotFound); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\"),dirName); + test(scanner->FullPath().MatchF(dirName.FullName())!=KErrNotFound); + delete entryList; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + test(entryList->Count()==0); + delete entryList; + } + delete scanner; + test.End(); + } + +LOCAL_C void Test5() +// +// Do a scan of Z: +// + { + + test.Next(_L("List Z: directory structure")); + CDirScan* scanner=CDirScan::NewLC(TheFs); + TPtrC romPath(_L("Z:\\")); + TParse dirName; + TInt r=TheFs.Parse(romPath,dirName); + test(r==KErrNone); + scanner->SetScanDataL(dirName.FullName(),KEntryAttDir,ESortByName); + CDir* entryList; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + TInt count=entryList->Count(); + while (count--) + { + TEntry data=(*entryList)[count]; + TBuf path=scanner->AbbreviatedPath(); + test.Printf(_L("%S%S\n"),&path,&data.iName); + } + delete entryList; + entryList=NULL; + } + CleanupStack::PopAndDestroy(); + } + +LOCAL_C void Test6() +// +// Scan up a directory tree +// + { + + test.Next(_L("Test ascending scan")); + MakeFile(_L("\\F32-TST\\SCANTEST\\MaTCHteST.EXTENSION")); + MakeFile(_L("\\F32-TST\\SCANTEST\\MATCH.EXT")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\ANOTherteST.EXTENSION")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\APPDLL.DLL")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\TEST.EXTENSION")); + MakeFile(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\DIR4\\MaTCHteST.EXTENSION")); + + CDir* entryList; + CDirScan* scanner=CDirScan::NewL(TheFs); + TParse dirName; + + test.Next(_L("Scan for MAT*.EXT")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\"),dirName); +// TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\DIR4\\MaTCHteST.EXTENSION"),dirName); +// scanner->SetScanDataL(dirName.FullName(),KEntryAttNormal,ESortByName,CDirScan::EScanUpTree); + scanner->SetScanDataL(dirName.FullName(),KEntryAttDir,ESortByName,CDirScan::EScanUpTree); + + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + TInt count=entryList->Count(); + while(count--) + { + TEntry entry=(*entryList)[count]; + test.Printf(_L("entry.iName = %S\n"),&entry.iName); + // test(entry.iName==_L("MATCH.EXT")); + } + delete entryList; + } + + delete scanner; + } + + +LOCAL_C void Test7() +// +// Test scanning hidden directories +// + { + + CDir* entryList; + CDirScan* scanner=CDirScan::NewL(TheFs); + TParse dirName; + + test.Next(_L("Scan in hidden directories for files")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\*"),dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttHidden,ESortByName,CDirScan::EScanDownTree); + + TInt hiddenCount=0; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + TInt count=entryList->Count(); + while(count--) + { + TEntry entry=(*entryList)[count]; + test.Printf(_L("entry.iName = %S\n"),&entry.iName); + if (entry.IsHidden()) + hiddenCount++; + if (entry.iName==_L("File8")) + hiddenCount++; + } + delete entryList; + } + test(hiddenCount==2); + + test.Next(_L("Scan for system and hidden directories and files")); + TheFs.Parse(_L("\\F32-TST\\SCANTEST\\LEFT\\DIR3\\*"),dirName); + scanner->SetScanDataL(dirName.FullName(),KEntryAttSystem|KEntryAttHidden|KEntryAttDir,ESortByName,CDirScan::EScanDownTree); + + hiddenCount=0; + FOREVER + { + scanner->NextL(entryList); + if (entryList==NULL) + break; + TInt count=entryList->Count(); + while(count--) + { + TEntry entry=(*entryList)[count]; + test.Printf(_L("entry.iName = %S\n"),&entry.iName); + if (entry.IsHidden()) + hiddenCount++; + if (entry.iName==_L("File8")) + hiddenCount++; + if (entry.IsSystem()) + hiddenCount++; + if (entry.iName==_L("File9")) + hiddenCount++; + } + delete entryList; + } + test(hiddenCount==5); + + delete scanner; + } + +GLDEF_C void CallTestsL() +// +// Call all tests +// + { + + CreateTestDirectory(_L("\\F32-TST\\SCANTEST\\")); + DeleteTestDirectory(); + BuildTestDir(); + Test1(); + Test2(); + Test3(); + Test4(); + Test5(); + DeleteTestDirectory(); + Test6(); + DeleteTestDirectory(); + + BuildTestDir(); + Test7(); + DeleteTestDirectory(); + }