diff -r 000000000000 -r bde4ae8d615e os/kernelhwsrv/kerneltest/f32test/server/t_dirs.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/kernelhwsrv/kerneltest/f32test/server/t_dirs.cpp Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,957 @@ +// Copyright (c) 1995-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: +// f32test\server\t_dirs.cpp +// +// + +#include +#include +#include "t_server.h" + +#include "f32_test_utils.h" + +using namespace F32_Test_Utils; + + +RTest test(_L("T_DIRS")); + +TTime gTimeNow; +TBool gTestedZ = EFalse; +TInt gDriveNum = -1; + +static void Test1() +// +// Make a directory with lots of entries +// + { + + RFile f; + TInt maxEntry=56; + test.Next(_L("Create a directory with 55 entries")); + TFileName sessionPath; + TInt r=TheFs.SessionPath(sessionPath); + test(r==KErrNone); + r=TheFs.MkDir(_L("\\F32-TST\\")); + test((r==KErrNone)||(r==KErrAlreadyExists)); + r=TheFs.MkDir(_L("\\F32-TST\\TDIRS\\")); + test((r==KErrNone)||(r==KErrAlreadyExists)); + + for (TInt i=0;i data; + r=f.Read(data); + test(r==KErrNone); + test(data==_L8("Hello World")); + f.Close(); + } + } + +static void Test2() +// +// List all directory entries +// + { + + test.Printf(_L("List all entries in directory %S\n"),&gSessionPath); + RDir d; + + TInt r=d.Open(TheFs,gSessionPath,KEntryAttMaskSupported); + if (r==KErrNone) + { + TEntry e; + while ((r=d.Read(e))==KErrNone) + { + if (e.IsDir()) + test.Printf(_L("%- 20S \n"),&e.iName); + else + test.Printf(_L("%- 20S %+ 8d\n"),&e.iName,e.iSize); + } + d.Close(); + if (r!=KErrEof) + test.Printf(_L("Error %d\n"),r); + } + else + test.Printf(_L("Error %d\n"),r); + } + +static void TestZ() +// +// Check you cannot open a directory on a file +// + { + + test.Next(_L("Open files and directories on Z:")); + TEntry entry; + RDir d; + + TInt r=d.Open(TheFs,PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("\\Sys\\Bin\\ESHELL.EXE\\*"):_L("\\System\\Bin\\ESHELL.EXE\\*"),KEntryAttMaskSupported); + test(r==KErrPathNotFound); + + r=d.Open(TheFs,PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("\\Sys\\Bin\\ESHELL.EXE"):_L("\\System\\Bin\\ESHELL.EXE"),KEntryAttMaskSupported); + test(r==KErrNone); + + r=d.Read(entry); + if (r==KErrEof) + { + test.Printf(_L("Error: EShell.EXE not found\n")); + //test.Getch(); + } + else + { + test(r==KErrNone); + test(entry.iName.FindF(_L("ESHELL.EXE"))>=0); + r=d.Read(entry); + test(r==KErrEof); + } + d.Close(); + + r=d.Open(TheFs,_L("\\*.XQP"),KEntryAttMaskSupported); + test(r==KErrNone); + r=d.Read(entry); + test(r==KErrEof); + d.Close(); + + r=d.Open(TheFs,PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("\\Sys\\Bin\\"):_L("\\System\\Bin\\"),KEntryAttMaskSupported); + test(r==KErrNone); + r=d.Read(entry); + + if (r==KErrEof) + { + test.Printf(_L("No files found\n")); + d.Close(); + } + else + { + test(r==KErrNone); + test.Printf(_L("First Entry = %S\n"),&entry.iName); + r=d.Read(entry); + test(r==KErrNone); + test.Printf(_L("Second Entry = %S\n"),&entry.iName); + d.Close(); + } + + r=d.Open(TheFs,_L("\\*"),KEntryAttMaskSupported); + test(r==KErrNone); + d.Close(); + r=d.Open(TheFs,PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("\\Sys\\Bin\\*"):_L("\\System\\Bin\\*"),KEntryAttMaskSupported); + test(r==KErrNone); + d.Close(); + } + +static void Test3() +// +// Check you cannot open a directory on a file +// + { + + test.Next(_L("Open files and directories")); + TEntry entry; + RFile f; + TInt r=f.Replace(TheFs,_L("\\F32-TST\\TDIRS\\TESTFILEORISITA.DIR"),EFileWrite); + test(r==KErrNone); + r=f.Write(_L8("TESTDATATESTDATATESTDATATESTDATATESTDATATESTDATATESTDATATESTDATATESTDATATESTDATATESTDATATESTDATA")); + test(r==KErrNone); + r=TheFs.Delete(_L("\\F32-TST\\TDIRS\\TESTFILEORISITA.DIR")); + test(r==KErrInUse); + f.Close(); + RDir d; + r=d.Open(TheFs,_L("\\F32-TST\\TDIRS\\TESTFILEORISITA.DIR\\*"),KEntryAttMaskSupported); + test(r==KErrPathNotFound); + r=d.Open(TheFs,_L("\\F32-TST\\TDIRS\\*.XQP"),KEntryAttMaskSupported); + test(r==KErrNone); + r=d.Read(entry); + test(r==KErrEof); + d.Close(); + r=d.Open(TheFs,_L("\\F32-TST\\TDIRS\\TESTFILEORISITA.DIR"),KEntryAttMaskSupported); + test(r==KErrNone); + r=d.Read(entry); + test(r==KErrNone); + test(entry.iName.FindF(_L("TESTFILEORISITA.DIR"))>=0); + r=d.Read(entry); + test(r==KErrEof); + d.Close(); + r=d.Open(TheFs,_L("\\"),KEntryAttMaskSupported); + test(r==KErrNone); + d.Close(); + r=d.Open(TheFs,_L("\\F32-TST\\"),KEntryAttMaskSupported); + test(r==KErrNone); + d.Close(); + r=d.Open(TheFs,_L("\\*"),KEntryAttMaskSupported); + test(r==KErrNone); + d.Close(); + r=d.Open(TheFs,_L("\\F32-TST\\*"),KEntryAttMaskSupported); + test(r==KErrNone); + d.Close(); + + // create a small file on the root + test(f.Replace(TheFs, _L("\\TEST.FILE"), EFileWrite) == KErrNone); + test(f.Write(_L8("1234567890987654321234567890")) == KErrNone); + f.Close(); + // try some directory operations on the file + test(TheFs.RmDir(_L("\\TEST.FILE\\")) == KErrPathNotFound); + test(TheFs.RmDir(_L("\\TEST.FILE\\ZZZ\\")) == KErrPathNotFound); + test(TheFs.MkDir(_L("\\TEST.FILE\\ZZZ\\")) == KErrPathNotFound); + // cleanup + TheFs.Delete(_L("\\TEST.FILE")); + + + r=TheFs.MkDir(_L("\\F32-TST\\EMPTY\\")); + test(r==KErrNone || r==KErrAlreadyExists); + r=d.Open(TheFs,_L("\\F32-TST\\EMPTY\\*"),KEntryAttMaskSupported); + test(r==KErrNone); +// r=TheFs.RmDir(_L("\\F32-TST\\EMPTY\\")); + r=d.Read(entry); + test(r==KErrEof); +// r=TheFs.RmDir(_L("\\F32-TST\\EMPTY\\")); +// test(r==KErrInUse); + r=d.Read(entry); + r=d.Read(entry); + r=d.Read(entry); + d.Close(); + r=TheFs.RmDir(_L("\\F32-TST\\EMPTY\\")); + test(r==KErrNone); + } + + +static void CreateSortNoneTestDirectoryStructure() +// +// Create files +// + { +// Delete the directory to be tested if it already exists as a result of this +// test being run previously. It's necessary remove it and then recreate it +// because a later test relies on the time of file/directory creation to be +// the time this function was run... + + CFileMan* fMan=CFileMan::NewL(TheFs); + test(fMan!=NULL); + TInt r=fMan->RmDir(_L("\\F32-TST\\TDIRS\\SORT_NONE\\")); + test((r==KErrNone)||(r==KErrPathNotFound)); + delete fMan; + + gTimeNow.HomeTime(); // Set global TTime gTimeNow to time now - for later tests + r=TheFs.MkDirAll(_L("\\F32-TST\\TDIRS\\SORT_NONE\\")); + test(r==KErrNone || r==KErrAlreadyExists); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\file1.txt")); + r=TheFs.MkDir(_L("\\F32-TST\\TDIRS\\SORT_NONE\\FILE_DIR1.APP\\")); + test(r==KErrNone || r==KErrAlreadyExists); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\file1.app")); + r=TheFs.MkDir(_L("\\F32-TST\\TDIRS\\SORT_NONE\\FILE_DIR2.TXT\\")); + test(r==KErrNone || r==KErrAlreadyExists); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\file2.txt")); + r=TheFs.MkDir(_L("\\F32-TST\\TDIRS\\SORT_NONE\\FILE_DIR3.APP\\")); + test(r==KErrNone || r==KErrAlreadyExists); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\ZZZZ")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\AAAA")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\WWWW")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\file2.app")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\file3.txt")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\file3.app")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\NOEXT1")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\NOEXT2")); + MakeFile(_L("\\f32-tst\\tdirs\\sort_none\\EXTMISSING")); + } + +static void Test4() +// +// Test ESortNone +// + { + + test.Next(_L("Test ESortNone")); + CreateSortNoneTestDirectoryStructure(); + CDir* dir; + CDir* dirSorted; + +// +// GetDir OOM failure passes 'callback' test from client side but not server side +// + TheFs.SetAllocFailure(gAllocFailOff); + + TInt r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*"),KEntryAttMaskSupported,ESortNone,dir); + test(r==KErrNone); + TInt count=dir->Count(); + test(count==15); + r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*"),KEntryAttMaskSupported,ESortByName,dirSorted); + test(r==KErrNone); + test(dirSorted->Count()==15); + delete dirSorted; + delete dir; + + r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*.txt"),KEntryAttNormal,ESortNone,dir); + test(r==KErrNone); + test(dir->Count()==3); + delete dir; + r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*.app"),KEntryAttNormal,ESortNone,dir); + test(r==KErrNone); + test(dir->Count()==3); + delete dir; + r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*.app"),KEntryAttNormal|KEntryAttDir,ESortNone,dir); + test(r==KErrNone); + test(dir->Count()==5); + delete dir; + r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*.app"),KEntryAttNormal|KEntryAttDir,ESortNone|EDirsFirst,dir); + test(r==KErrNone); + test(dir->Count()==5); + delete dir; + r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*.app"),KEntryAttNormal|KEntryAttDir,ESortNone|EDirsLast,dir); + test(r==KErrNone); + test(dir->Count()==5); + delete dir; + + TheFs.SetAllocFailure(gAllocFailOn); + } + +static void Test5() +// +// Test return values +// + { + + test.Next(_L("Test return values")); + RDir dir; + TInt r=dir.Open(TheFs,_L("\\DoesNotExist\\*"),KEntryAttMaskSupported); + test(r==KErrPathNotFound); + r=dir.Open(TheFs,_L("\\"),KEntryAttMaskSupported); + test(r==KErrNone); + dir.Close(); + } + + +static void Test6() +// +// Test that "*.*" matches all files/directories +// + { + + test.Next(_L("Test *.* matches all files")); + CDir* dirList; + TInt r=TheFs.GetDir(_L("\\f32-tst\\tdirs\\sort_none\\*.*"),KEntryAttNormal|KEntryAttDir,ESortByName|EDirsLast,dirList); + test(r==KErrNone); + TInt count=dirList->Count(); + test(count==15); + TEntry entry=(*dirList)[0]; + test(entry.iName.FindF(_L("AAAA"))>=0); + entry=(*dirList)[1]; + test(entry.iName.FindF(_L("EXTMISSING"))>=0); + entry=(*dirList)[2]; + test(entry.iName.FindF(_L("FILE1.APP"))>=0); + entry=(*dirList)[3]; + test(entry.iName.FindF(_L("FILE1.TXT"))>=0); + entry=(*dirList)[4]; + test(entry.iName.FindF(_L("FILE2.APP"))>=0); + entry=(*dirList)[5]; + test(entry.iName.FindF(_L("FILE2.TXT"))>=0); + entry=(*dirList)[6]; + test(entry.iName.FindF(_L("FILE3.APP"))>=0); + entry=(*dirList)[7]; + test(entry.iName.FindF(_L("FILE3.TXT"))>=0); + entry=(*dirList)[8]; + test(entry.iName.FindF(_L("NOEXT1"))>=0); + entry=(*dirList)[9]; + test(entry.iName.FindF(_L("NOEXT2"))>=0); + entry=(*dirList)[10]; + test(entry.iName.FindF(_L("WWWW"))>=0); + entry=(*dirList)[11]; + test(entry.iName.FindF(_L("ZZZZ"))>=0); + entry=(*dirList)[12]; + test(entry.iName.FindF(_L("FILE_DIR1.APP"))>=0); + entry=(*dirList)[13]; + test(entry.iName.FindF(_L("FILE_DIR2.TXT"))>=0); + entry=(*dirList)[14]; + test(entry.iName.FindF(_L("FILE_DIR3.APP"))>=0); + delete dirList; + + RDir dir; + r=dir.Open(TheFs,_L("\\f32-tst\\tdirs\\sort_none\\*.*"),KEntryAttNormal|KEntryAttDir); + test(r==KErrNone); + + TTime time; + TInt64 difference; + TInt64 maxOK=1000000; + maxOK*=60; + maxOK*=3; + + for (TInt i=0; i<15; i++) + { + r=dir.Read(entry); + test(r==KErrNone); + time=entry.iModified; + difference=time.Int64()-gTimeNow.Int64(); + test(difference baseName=_L("\\RD"); + TBuf<32> id; + TBuf<32> fileName; + TInt count=0; + + RFile f; + TParsePtrC parser(gSessionPath); + FOREVER + { + id.Num(count+1); + fileName=parser.Drive(); + fileName+=baseName; + fileName+=id; + TInt r=f.Replace(TheFs,fileName,EFileWrite); + if(r==KErrDirFull) + { + break; + } + test(r==KErrNone); + f.Close(); + count++; + if(count >= 1000) + { + break; + } + test.Printf(_L("CreateFile : %d : %S\r"),count,&fileName); + } + test.Printf(_L("\n")); + + while (count) + { + id.Num(count); + fileName=parser.Drive(); + fileName+=baseName; + fileName+=id; + TInt r=TheFs.Delete(fileName); + test(r==KErrNone); + test.Printf(_L("DeleteFile : %d : %S\r"),count,&fileName); + --count; + } + test.Printf(_L("\n")); + + test.Next(_L("Long filenames in root")); + TFileName longFileName; + longFileName.SetLength(254); +// Mem::Fill((TUint8*)longFileName.Ptr(),254,'A'); + Mem::Fill((TUint8*)longFileName.Ptr(),254*sizeof(TText),'A'); + longFileName[0]='\\'; + longFileName[253]='\\'; + r=TheFs.MkDir(longFileName); + test(r==KErrNone); + CDir* dirList=NULL; + r=TheFs.GetDir(longFileName,KEntryAttMaskSupported,ESortByName,dirList); + test(r==KErrNone); + count=dirList->Count(); + test(count==0); + delete dirList; + TParse parse; + r=TheFs.Parse(longFileName,parse); + test(r==KErrNone); + TEntry entry; + r=TheFs.Entry(longFileName,entry); + test(r==KErrNone); + r=TheFs.SetSessionPath(longFileName); + test(r==KErrNone); + r=TheFs.GetDir(longFileName,KEntryAttMaskSupported,ESortByName,dirList); + test(r==KErrNone); + count=dirList->Count(); + test(count==0); + delete dirList; + r=TheFs.Parse(longFileName,_L("*"),parse); + test(r==KErrBadName); + r=f.Open(TheFs,_L("asdf.asdf"),0); + test(r==KErrBadName); + r=TheFs.Entry(longFileName,entry); + test(r==KErrNone); + r=TheFs.RmDir(longFileName); + test(r==KErrNone); + } + +static void Test8() +// +// Regression tests +// + { + + test.Next(_L("Open dir and change drives")); + MakeDir(_L("C:\\MOON\\")); + RDir dir; + TInt r=dir.Open(TheFs,_L("C:\\MOON\\"),0); + test(r==KErrNone); + TFileName driveName; + r=TheFs.GetDriveName(11,driveName); + test(r==KErrNone); + TEntryArray entryArray; + r=dir.Read(entryArray); + test(r==KErrEof); + test(entryArray.Count()==0); + dir.Close(); + r=TheFs.RmDir(_L("C:\\MOON\\")); + test(r==KErrNone); + + test.Next(_L("MkDir all on nonexistent drive")); + r=TheFs.MkDirAll(_L("L:\\MOON")); + test((r==KErrNotReady)||(r==KErrPathNotFound)); + } + +static void CleanupL() +// +// Clean up tests +// + { + + test.Next(_L("Delete test directory")); + CFileMan* fMan=CFileMan::NewL(TheFs); + TInt r=fMan->RmDir(gSessionPath); + test(r==KErrNone); + r=fMan->Delete(_L("\\Filluptherootdir*")); + test(r==KErrNone || r==KErrNotFound); + delete fMan; + } + +static void Test9() +// +// Test directories with trailing dots (ref. DEF047684) +// + { + + test.Next(_L("Testing directory names with trailing dots")); + TInt r; + r=TheFs.MkDir(_L("\\test9..\\")); + test(r==KErrBadName); + r=TheFs.MkDir(_L("\\test9\\")); + test((r==KErrNone)||(r==KErrAlreadyExists)); + r=TheFs.Rename(_L("\\test9\\"),_L("\\test9..\\")); + test(r==KErrBadName); + r= TheFs.RmDir(_L("\\test9\\")); + test((r==KErrNone)); + r=TheFs.MkDir(_L("\\t.\\")); + test(r==KErrBadName); + } + + +// +// Path and File names for sorting by name +// +// The correctly sorted directory listing should be: +// +// b.doc +// bb.doc +// bs.doc +// +_LIT(KSortByNamePath, "\\F32-TST\\TDIRS\\SORT_NAME\\"); +_LIT(KFileBS, "bs.doc"); +_LIT(KFileBB, "bb.doc"); +_LIT(KFileB, "b.doc"); +_LIT(KSortAll, "*.*"); +_LIT(KPrintFileName, "%S\n"); + + +static void DeleteTestDirectoryStructure(const TDesC& aPath) +// +// Delete the directory to be tested if it already exists as a result of this +// test being run previously. +// + { + + CFileMan* fMan=CFileMan::NewL(TheFs); + test(fMan!=NULL); + TInt r=fMan->RmDir(aPath); + test((r==KErrNone)||(r==KErrPathNotFound)); + delete fMan; + } + + +static void CreateTestDirectoryStructure(const TDesC& aPath, const TDesC** aFileArray, TInt aNumFiles) +// +// Create files +// + { + DeleteTestDirectoryStructure(aPath); + + gTimeNow.HomeTime(); // Set global TTime gTimeNow to time now - for later tests + TInt r=TheFs.MkDirAll(aPath); + test(r==KErrNone || r==KErrAlreadyExists); + + TBuf<128> fileName; + for (TInt i = 0; i < aNumFiles; i++) + { + fileName = aPath; + fileName.Append(*aFileArray[i]); + MakeFile(fileName); + } + } + + +static void TestSortByName() +// +// Test that sorting by name works for different length filenames. +// + { + const TDesC* theFiles[] = {&KFileBS, &KFileBB, &KFileB}; + TInt numFiles = sizeof(theFiles)/sizeof(theFiles[0]); + CreateTestDirectoryStructure(KSortByNamePath, theFiles, numFiles); + + test.Next(_L("Test ESortByName")); + CDir* dirList; + TBuf<128> sortSpec(KSortByNamePath); + sortSpec.Append(KSortAll); + TInt r=TheFs.GetDir(sortSpec, KEntryAttNormal | KEntryAttDir, ESortByName | EDirsLast, dirList); + test(r==KErrNone); + TInt count=dirList->Count(); + test(count==numFiles); + + + TInt i; + for (i = 0; i < count; i++) + { + test.Printf(KPrintFileName, &(*dirList)[i].iName); + } + + TEntry entry=(*dirList)[0]; + test(entry.iName.FindF(KFileB)>=0); + entry=(*dirList)[1]; + test(entry.iName.FindF(KFileBB)>=0); + entry=(*dirList)[2]; + test(entry.iName.FindF(KFileBS)>=0); + delete dirList; + dirList = 0; + + + test.Next(_L("Test ESortByName (descending)")); + + + r=TheFs.GetDir(sortSpec, KEntryAttNormal | KEntryAttDir, ESortByName | EDirsLast | EDescending, dirList); + test(r==KErrNone); + count=dirList->Count(); + test(count==numFiles); + + + for (i = 0; i < count; i++) + { + test.Printf(KPrintFileName, &(*dirList)[i].iName); + } + + + entry=(*dirList)[0]; + test(entry.iName.FindF(KFileBS)>=0); + entry=(*dirList)[1]; + test(entry.iName.FindF(KFileBB)>=0); + entry=(*dirList)[2]; + test(entry.iName.FindF(KFileB)>=0); + delete dirList; + dirList = 0; + + + DeleteTestDirectoryStructure(KSortByNamePath); + } + + + +// +// Path and File names for sorting by extension +// +// The correctly sorted directory listing should be: +// +// sortext.a +// sortext.bbb.a +// sortext1.ddd.a +// sortext.aaa.b +// sortext.b +// sortext.c +// sortext.ccc.c +// +// as we should sort by the substring after the last '.' +// +_LIT(KSortByExtPath, "\\F32-TST\\TDIRS\\SORT_EXT\\"); +_LIT(KFile1, "sortext.aaa.b"); +_LIT(KFile2, "sortext.bbb.a"); +_LIT(KFile3, "sortext.ccc.c"); +_LIT(KFile4, "sortext1.ddd.a"); +_LIT(KFile5, "sortext.a"); +_LIT(KFile6, "sortext.b"); +_LIT(KFile7, "sortext.c"); + + +static void TestSortByExt() +// +// Test that sorting by extension works. This includes filenames +// that contain multiple .'s +// + { + const TDesC* theFiles[] = {&KFile1, &KFile2, &KFile3, &KFile4, &KFile5, &KFile6, &KFile7}; + TInt numFiles = sizeof(theFiles)/sizeof(theFiles[0]); + CreateTestDirectoryStructure(KSortByExtPath, theFiles, numFiles); + + test.Next(_L("Test ESortByExt")); + + CDir* dirList; + TBuf<128> sortSpec(KSortByExtPath); + sortSpec.Append(KSortAll); + TInt r=TheFs.GetDir(sortSpec, KEntryAttNormal | KEntryAttDir, ESortByExt | EDirsLast, dirList); + test(r==KErrNone); + TInt count=dirList->Count(); + test(count==numFiles); + + + TInt i; + for (i = 0; i < count; i++) + { + test.Printf(KPrintFileName, &(*dirList)[i].iName); + } + + + // + // Verify that the files have been sorted correctly by extension + // + TEntry entry=(*dirList)[0]; + test(entry.iName.FindF(KFile5)>=0); + entry=(*dirList)[1]; + test(entry.iName.FindF(KFile2)>=0); + entry=(*dirList)[2]; + test(entry.iName.FindF(KFile4)>=0); + entry=(*dirList)[3]; + test(entry.iName.FindF(KFile1)>=0); + entry=(*dirList)[4]; + test(entry.iName.FindF(KFile6)>=0); + entry=(*dirList)[5]; + test(entry.iName.FindF(KFile7)>=0); + entry=(*dirList)[6]; + test(entry.iName.FindF(KFile3)>=0); + delete dirList; + dirList = 0; + + + test.Next(_L("Test ESortByExt (descending)")); + + r=TheFs.GetDir(sortSpec, KEntryAttNormal | KEntryAttDir, ESortByExt | EDirsLast | EDescending, dirList); + test(r==KErrNone); + count=dirList->Count(); + test(count==numFiles); + + + for (i = 0; i < count; i++) + { + test.Printf(KPrintFileName, &(*dirList)[i].iName); + } + + + // + // Verify that the files have been sorted correctly by extension + // Note that this listing should be the reverse of that above. + // + entry=(*dirList)[0]; + test(entry.iName.FindF(KFile3)>=0); + entry=(*dirList)[1]; + test(entry.iName.FindF(KFile7)>=0); + entry=(*dirList)[2]; + test(entry.iName.FindF(KFile6)>=0); + entry=(*dirList)[3]; + test(entry.iName.FindF(KFile1)>=0); + entry=(*dirList)[4]; + test(entry.iName.FindF(KFile4)>=0); + entry=(*dirList)[5]; + test(entry.iName.FindF(KFile2)>=0); + entry=(*dirList)[6]; + test(entry.iName.FindF(KFile5)>=0); + delete dirList; + dirList = 0; + + + DeleteTestDirectoryStructure(KSortByExtPath); + } + +//--------------------------------------------- +//! @SYMTestCaseID PBASE-T_DIRS-1310 +//! @SYMTestType CT +//! @SYMREQ DEF125143 +//! @SYMTestCaseDesc Test that directory name is handled by File Server interfaces properly. +//! @SYMTestActions Uses RFs::IsValidName(), RFs::MkDir(), RDir::Open(), RFs::RmDir() to test +//! various dir name handling. +//! @SYMTestExpectedResults Proper error code is returned. +//! @SYMTestPriority High +//! @SYMTestStatus Implemented +//--------------------------------------------- +void TestDirNameHandling() + { + test.Next(_L("Test Dir Name Handling Interfaces")); + TFileName dirTest1; + dirTest1 = _L("\\F32-TST\\TDIRS\\test1\\FILE.TXT"); + TFileName dirTest2; + dirTest2 = _L("\\F32-TST\\TDIRS\\test2.\\FILE.TXT"); + TFileName dirTest3; + dirTest3 = _L("\\F32-TST\\TDIRS\\test3. \\FILE.TXT"); + TFileName dirTest4; + dirTest4 = _L("\\F32-TST\\TDIRS\\test4. . \\FILE.TXT"); + TFileName dirTest5; + dirTest5 = _L("\\F32-TST\\TDIRS\\test5.\\FILE.TXT"); + TFileName dirTest6; + dirTest6 = _L("\\F32-TST\\TDIRS\\test6. .\\FILE.TXT"); + + TBool valid = TheFs.IsValidName( dirTest1 ); + test(valid); + valid = TheFs.IsValidName( dirTest2 ); + test(!valid); + valid = TheFs.IsValidName( dirTest3 ); + test(!valid); + valid = TheFs.IsValidName( dirTest4 ); + test(!valid); + valid = TheFs.IsValidName( dirTest5 ); + test(!valid); + valid = TheFs.IsValidName( dirTest6 ); + test(!valid); + + dirTest1 = _L("\\F32-TST\\TDIRS\\test1\\"); + dirTest2 = _L("\\F32-TST\\TDIRS\\test2.\\"); + dirTest3 = _L("\\F32-TST\\TDIRS\\test3. \\"); + dirTest4 = _L("\\F32-TST\\TDIRS\\test4. . \\"); + dirTest5 = _L("\\F32-TST\\TDIRS\\test5.\\"); + dirTest6 = _L("\\F32-TST\\TDIRS\\test6. .\\"); + + TInt err = TheFs.MkDir(dirTest1); + test(err == KErrNone); + err = TheFs.MkDir(dirTest2); + test(err == KErrBadName); + err = TheFs.MkDir(dirTest3); + test(err == KErrBadName); + err = TheFs.MkDir(dirTest4); + test(err == KErrBadName); + err = TheFs.MkDir(dirTest5); + test(err == KErrBadName); + err = TheFs.MkDir(dirTest6); + test(err == KErrBadName); + + RDir rdir; + err = rdir.Open(TheFs, dirTest1, 0); + rdir.Close(); + test(err == KErrNone); + + err = rdir.Open(TheFs, dirTest2, 0); + rdir.Close(); + test(err == KErrBadName); + + err = rdir.Open(TheFs, dirTest3, 0); + rdir.Close(); + test(err == KErrBadName); + + err = rdir.Open(TheFs, dirTest4, 0); + rdir.Close(); + test(err == KErrBadName); + + err = rdir.Open(TheFs, dirTest5, 0); + rdir.Close(); + test(err == KErrBadName); + + err = rdir.Open(TheFs, dirTest6, 0); + rdir.Close(); + test(err == KErrBadName); + + err = TheFs.RmDir(dirTest1); + test(err == KErrNone); + err = TheFs.RmDir(dirTest2); + test(err == KErrBadName); + err = TheFs.RmDir(dirTest3); + test(err == KErrBadName); + err = TheFs.RmDir(dirTest4); + test(err == KErrBadName); + err = TheFs.RmDir(dirTest5); + test(err == KErrBadName); + err = TheFs.RmDir(dirTest6); + test(err == KErrBadName); + } + +void CallTestsL() +// +// Do all tests +// + { + + //-- set up console output + F32_Test_Utils::SetConsole(test.Console()); + + TInt nRes=TheFs.CharToDrive(gDriveToTest, gDriveNum); + test(nRes==KErrNone); + + PrintDrvInfo(TheFs, gDriveNum); + + TurnAllocFailureOff(); + CreateTestDirectory(_L("\\F32-TST\\TDIRS\\")); + + if (!gTestedZ) + { + TInt r=TheFs.SetSessionPath(_L("Z:\\")); + test(r==KErrNone); + Test2(); + TestZ(); + r=TheFs.SetSessionPath(gSessionPath); + test(r==KErrNone); + test.Next(_L("Run all other tests from \\F32-TST\\TDIRS\\")); + gTestedZ=ETrue; + } + + Test8(); + + Test7(); + + Test1(); + Test2(); + Test3(); + Test4(); + Test5(); + Test6(); + Test9(); + + TestSortByName(); + TestSortByExt(); + TestDirNameHandling(); + + CleanupL(); + }