--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/server/t_scan.cpp Thu Dec 17 09:24:54 2009 +0200
@@ -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 <f32file.h>
+#include <e32test.h>
+#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<RFs> 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<KMaxFileName> 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<KMaxFileName> 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();
+ }