Fix for bug 2283 (RVCT 4.0 support is missing from PDK 3.0.h)
Have multiple extension sections in the bld.inf, one for each version
of the compiler. The RVCT version building the tools will build the
runtime libraries for its version, but make sure we extract all the other
versions from zip archives. Also add the archive for RVCT4.
// 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:
//
#include <f32file.h>
#include <e32test.h>
#include "t_server.h"
GLDEF_D RTest test(_L("T_GDIR"));
LOCAL_D const TInt KFilesMax=9;
LOCAL_D const TInt KUidFilesMax=7;
LOCAL_D const TInt KDirsMax=4;
LOCAL_D TBool gFirstRun=ETrue;
LOCAL_D TPtrC test_dir(_L("\\F32-TST\\GDIR\\"));
LOCAL_D TPtrC test_dir_1(_L("\\F32-TST\\GDIR\\*"));
class TUidFile
{
public:
TUidFile(const TText* aFileName,TUidType aUidType,const TText8* aContents);
public:
const TText* iFileName;
TUidType iUidType;
const TText8* iContents;
};
TUidFile::TUidFile(const TText* aFileName,TUidType aUidType,const TText8* aContents)
: iFileName(aFileName), iUidType(aUidType), iContents(aContents)
{}
LOCAL_D TUidFile uidFiles[] =
{
TUidFile(_S("File1.TXT"), TUidType(TUid::Uid(1),TUid::Uid(2),TUid::Uid(731)),_S8("blarg blarg blarg")),
TUidFile(_S("asdf.asdf"), TUidType(TUid::Uid(55),TUid::Uid(2),TUid::Uid(731)),_S8("blarg")),
TUidFile(_S("another fiel"), TUidType(TUid::Uid(104),TUid::Uid(22),TUid::Uid(731)),_S8("blarg2")),
TUidFile(_S("another fiel1"), TUidType(TUid::Uid(7),TUid::Uid(23),TUid::Uid(131)),_S8("")),
TUidFile(_S("another fiel2"), TUidType(TUid::Uid(8),TUid::Uid(2),TUid::Uid(531)),_S8("asdf")),
TUidFile(_S("another fiel3"), TUidType(TUid::Uid(9),TUid::Uid(22),TUid::Uid(531)),_S8("blar")),
TUidFile(_S("another fiel4"), TUidType(TUid::Uid(10),TUid::Uid(23),TUid::Uid(231)),_S8("blarg blarg blarg asdlfjasdfasdfasdfasdfasdfadfafa"))
};
LOCAL_D const TText* fileNames[] =
{
_S("B1.B3"),_S("B2.B2"),_S("B3.B1"),
_S("A1.A3"),_S("A2.A2"),_S("A3.A1"),
_S("Z1.Z3"),_S("Z2.Z2"),_S("Z3.Z1")
};
LOCAL_D const TText* dirNames[] =
{
_S("DB1"),
_S("DA1"),
_S("DZ1"),
_S("DD1")
};
inline TName files(TInt anIndex)
{return(TName(fileNames[anIndex]));}
inline TName dirs(TInt anIndex)
{return(TName(dirNames[anIndex]));}
LOCAL_C void displayDir(const CDir& aDir,TInt& aDirCount,TInt& aFileCount)
//
// Display the contents of a directory list.
//
{
TInt count=aDir.Count();
TInt i=0;
TInt fCount=0;
TInt dCount=0;
while (i<count)
{
const TEntry& e=aDir[i++];
if (e.IsDir())
{
dCount++;
test.Printf(_L("%- 16S <DIR>\n"),&e.iName);
}
else
{
fCount++;
test.Printf(_L("%- 16S %+ 8d\n"),&e.iName,e.iSize);
}
}
test.Printf(_L("Dirs = %d Files = %d\n"),dCount,fCount);
aFileCount=fCount;
aDirCount=dCount;
}
LOCAL_C void createFile(const TUidFile& aFileName)
//
// Create a file in the test directory.
//
{
TCheckedUid checkedUid(aFileName.iUidType);
TPtrC fileName(aFileName.iFileName);
TAutoClose<RFile> file;
TInt r=file.iObj.Replace(TheFs,fileName,EFileWrite);
test(r==KErrNone);
TPtrC8 uidBuf((TUint8*)&checkedUid,sizeof(TCheckedUid));
r=file.iObj.Write(uidBuf);
test(r==KErrNone);
TPtrC8 contents(aFileName.iContents);
r=file.iObj.Write(contents);
test(r==KErrNone);
}
LOCAL_C void createFile(TInt anIndex)
//
// Create a file in the test directory.
//
{
TFileName fName;
TName name=files(anIndex);
fName.Format(_L("%S%S"),&test_dir,&name);
TBuf<0x80> mes;
mes.Format(_L("Create file %S"),&fName);
test.Next(mes);
//
TAutoClose<RFile> file;
TInt r=file.iObj.Replace(TheFs,fName,EFileWrite);
test(r==KErrNone);
TBuf8<36> b((TUint8*)"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
b.SetLength(anIndex+1);
r=file.iObj.Write(b);
test(r==KErrNone);
}
LOCAL_C void createDir(TInt anIndex)
//
// Create a dir in the test directory.
//
{
TFileName dName;
TName name=dirs(anIndex);
dName.Format(_L("%S%S\\"),&test_dir,&name);
TBuf<0x80> mes;
mes.Format(_L("Create dir %S"),&dName);
test.Next(mes);
//
TInt r=TheFs.MkDir(dName);
test(r==KErrNone);
}
LOCAL_C void testSetup()
//
// Setup the test environment.
//
{
test.Next(_L("Remove test directory"));
CDir* pD;
TInt r=TheFs.GetDir(test_dir_1,KEntryAttMaskSupported,EDirsLast,pD);
test(r==KErrNone || r==KErrNotFound || r==KErrPathNotFound);
if (r==KErrNone)
{
TInt count=pD->Count();
TInt i=0;
while (i<count)
{
const TEntry& e=(*pD)[i++];
if (e.IsDir())
{
TFileName name;
name.Format(_L("%S%S\\"),&test_dir,&e.iName);
r=TheFs.RmDir(name);
test(r==KErrNone);
}
else
{
TFileName name;
name.Format(_L("%S%S"),&test_dir,&e.iName);
r=TheFs.Delete(name);
test(r==KErrNone);
}
}
}
//
delete pD;
//
test.Next(_L("Create test files"));
TInt i=0;
while (i<KFilesMax)
createFile(i++);
//
test.Next(_L("Create test directories"));
i=0;
while (i<KDirsMax)
createDir(i++);
}
LOCAL_C void testDir()
//
// Setup the test environment.
//
{
TInt dCount;
TInt fCount;
test.Next(_L("Test directory handling"));
CDir* pD;
TInt r=TheFs.GetDir(test_dir_1,KEntryAttMaskSupported,EDirsLast,pD);
test(r==KErrNone);
displayDir(*pD,dCount,fCount);
test(dCount==4 && fCount==9);
delete pD;
//
test.Next(_L("Attributes: NULL"));
r=TheFs.GetDir(test_dir_1,NULL,EDirsLast,pD);
test(r==KErrNone);
displayDir(*pD,dCount,fCount);
test(dCount==0 && fCount==9);
delete pD;
//
test.Next(_L("Attributes: KEntryAttDir & EDescending sort"));
r=TheFs.GetDir(test_dir_1,KEntryAttDir,ESortByName|EDescending,pD);
test(r==KErrNone);
displayDir(*pD,dCount,fCount);
test(dCount==4 && fCount==9);
delete pD;
//
test.Next(_L("Attributes: Excl,Dir"));
r=TheFs.GetDir(test_dir_1,KEntryAttMatchExclusive|KEntryAttDir,ESortByName|EDescending,pD);
test(r==KErrNone);
displayDir(*pD,dCount,fCount);
test(dCount==4 && fCount==0);
delete pD;
//
CDir* pD2;
//
test.Next(_L("Test split directories and files"));
r=TheFs.GetDir(test_dir_1,KEntryAttMaskSupported,ESortByName,pD,pD2);
test(r==KErrNone);
test.Printf(_L("FileList:\n"));
displayDir(*pD,dCount,fCount);
test(dCount==4 && fCount==9);
test.Printf(_L("DirList:\n"));
displayDir(*pD2,dCount,fCount);
test(dCount==4 && fCount==0);
delete pD;
delete pD2;
//
test.Next(_L("Attributes: NULL"));
r=TheFs.GetDir(test_dir_1,NULL,ESortByName,pD,pD2);
test(r==KErrNone);
test.Printf(_L("FileList:\n"));
displayDir(*pD,dCount,fCount);
test(dCount==0 && fCount==9);
test.Printf(_L("DirList:\n"));
displayDir(*pD2,dCount,fCount);
test(dCount==4 && fCount==0);
delete pD;
delete pD2;
//
test.Next(_L("Attributes: KEntryAttDir"));
r=TheFs.GetDir(test_dir_1,KEntryAttDir,ESortByName,pD,pD2);
test(r==KErrNone);
test.Printf(_L("FileList:\n"));
displayDir(*pD,dCount,fCount);
test(dCount==4 && fCount==9);
test.Printf(_L("DirList:\n"));
displayDir(*pD2,dCount,fCount);
test(dCount==4 && fCount==0);
delete pD;
delete pD2;
//
test.Next(_L("Attributes: Excl,Dir"));
r=TheFs.GetDir(test_dir_1,KEntryAttMatchExclusive|KEntryAttDir,ESortByName,pD,pD2);
test(r==KErrNone);
test.Printf(_L("FileList:\n"));
displayDir(*pD,dCount,fCount);
test(dCount==4 && fCount==0);
test.Printf(_L("DirList:\n"));
displayDir(*pD2,dCount,fCount);
test(dCount==4 && fCount==0);
delete pD;
delete pD2;
}
LOCAL_C void testZDirectory()
//
// Display Z directory
//
{
test.Next(_L("Test Z:"));
TInt dCount,fCount;
CDir* pD;
TInt r=TheFs.GetDir(_L("Z:\\*"),KEntryAttMaskSupported,EDirsFirst,pD);
test(r==KErrNone);
displayDir(*pD,dCount,fCount);
delete pD;
}
LOCAL_C void testDisplayFiles()
//
// Display some files
//
{
test.Next(_L("Display contents of current directory"));
CDir* pD;
TInt r=TheFs.GetDir(gSessionPath,KEntryAttMaskSupported,EDirsFirst,pD);
test(r==KErrNone);
TInt dCount,fCount;
displayDir(*pD,dCount,fCount);
delete pD;
TParsePtrC session(gSessionPath);
TParse parser;
TBuf<16> noName=_L("asdf.idd");
parser.Set(session.Drive(),&noName,NULL);
r=TheFs.GetDir(parser.FullName(),KEntryAttMaskSupported,EDirsFirst,pD);
test(r==KErrNone);
test(pD->Count()==0);
delete pD;
}
LOCAL_C void MatchUidFile(TInt aUidFile,TInt anEntryNum,const CDir* aFileList)
//
// Check aUidFile matches anEntryNum
//
{
test(aUidFile<KUidFilesMax);
TInt count=aFileList->Count();
test(anEntryNum<count);
TEntry entry=(*aFileList)[anEntryNum];
TPtrC uidFileName(uidFiles[aUidFile].iFileName);
test(entry.iName==uidFileName);
test(entry.iType==uidFiles[aUidFile].iUidType);
RFile f;
TInt r=f.Open(TheFs,entry.iName,EFileRead);
test(r==KErrNone);
TBuf8<256> contents;
r=f.Read(sizeof(TCheckedUid),contents);
test(r==KErrNone);
TPtrC8 uidFileContents(uidFiles[aUidFile].iContents);
test(contents==uidFileContents);
r=f.Read(contents);
test(r==KErrNone);
test(contents.Length()==0);
f.Close();
}
LOCAL_C TInt PrintUid(TInt anEntryNum,const CDir* aFileList)
//
// Check aUidFile matches anEntryNum
//
{
TInt count=aFileList->Count();
test(anEntryNum<count);
TEntry entry=(*aFileList)[anEntryNum];
test.Printf(_L("Entry name = %S UID=%d\n"),&entry.iName,entry.iType[2]);
return(entry.iType[2].iUid);
}
LOCAL_C void testGetDirByUid()
//
// Get directory contents by matching UIDs
//
{
test.Next(_L("Get directory contents by matching UIDs"));
TInt i=KUidFilesMax;
while(i--)
createFile(uidFiles[i]);
TBuf<16> matchName=_L("*.txt");
TUidType matchUid(TUid::Null(),TUid::Uid(2),TUid::Null());
CDir* fileList;
TInt r=TheFs.GetDir(matchName,matchUid,EAscending,fileList);
test(r==KErrNone);
TInt count=fileList->Count();
test(count==1);
MatchUidFile(0,0,fileList);
delete fileList;
matchName=_L("*.*");
matchUid=TUidType(TUid::Uid(1),TUid::Uid(2),TUid::Uid(731));
r=TheFs.GetDir(matchName,matchUid,EAscending,fileList);
test(r==KErrNone);
count=fileList->Count();
test(count==1);
MatchUidFile(0,0,fileList);
delete fileList;
matchName=_L("*.*");
matchUid=TUidType(TUid::Null(),TUid::Uid(2),TUid::Null());
r=TheFs.GetDir(matchName,matchUid,ESortByName|EAscending,fileList);
test(r==KErrNone);
count=fileList->Count();
test(count==3);
MatchUidFile(0,2,fileList);
MatchUidFile(1,1,fileList);
MatchUidFile(4,0,fileList);
delete fileList;
matchName=_L("*.*");
matchUid=TUidType(TUid::Null(),TUid::Null(),TUid::Uid(731));
r=TheFs.GetDir(matchName,matchUid,ESortByName|EAscending,fileList);
test(r==KErrNone);
count=fileList->Count();
test(count==3);
MatchUidFile(2,0,fileList);
MatchUidFile(1,1,fileList);
MatchUidFile(0,2,fileList);
delete fileList;
matchName=_L("*.*");
r=TheFs.GetDir(matchName,KEntryAttNormal,ESortByUid|EAscending,fileList);
test(r==KErrNone);
count=fileList->Count();
MatchUidFile(4,0,fileList);
MatchUidFile(1,1,fileList);
MatchUidFile(0,2,fileList);
MatchUidFile(5,3,fileList);
MatchUidFile(2,4,fileList);
MatchUidFile(3,5,fileList);
MatchUidFile(6,6,fileList);
for (i=7;i<count;i++)
{
TEntry entry;
entry=(*fileList)[i];
test(entry.iType[2].iUid==0);
PrintUid(i,fileList);
}
test(i==count);
delete fileList;
}
LOCAL_C void testZGetDirByUid()
//
// Get directory contents by matching UIDs from Z:
//
{
TUidType matchUid(TUid::Null(),TUid::Uid(0x1000008c),TUid::Null());
CDir* fileList;
TInt r=TheFs.GetDir(PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("Z:\\SYS\\BIN\\"):_L("Z:\\SYSTEM\\BIN\\"),matchUid,EAscending,fileList);
test(r==KErrNone);
TInt count=fileList->Count();
#if defined(__WINS__)
test(count==0);
#else
test.Printf(_L("Count=%d\n"),count);
while(count--)
PrintUid(count,fileList);
// test(count==1);
// TEntry entry;
// entry=(*fileList)[0];
// test(entry.iName.MatchF(_L("EFILE.EXE"))!=KErrNotFound);
#endif
delete fileList;
}
LOCAL_C void testGetFilesExcept()
//
// Get all files except read only ...
//
{
MakeFile(_L("\\F32-TST\\GDIR\\RONLY1.CCC"),KEntryAttReadOnly);
MakeFile(_L("\\F32-TST\\GDIR\\RONLY2.CCC"),KEntryAttReadOnly);
MakeFile(_L("\\F32-TST\\GDIR\\RW1.CCC"));
MakeFile(_L("\\F32-TST\\GDIR\\RW2.CCC"));
MakeFile(_L("\\F32-TST\\GDIR\\SYSTEM1.CCC"),KEntryAttSystem);
MakeFile(_L("\\F32-TST\\GDIR\\SYSTEM2.CCC"),KEntryAttSystem);
test.Next(_L("Can match only read only files"));
TUint onlyRO=KEntryAttReadOnly|KEntryAttMatchExclusive;
CDir* fileList;
TInt r=TheFs.GetDir(_L("\\F32-TST\\GDIR\\*.CCC"),onlyRO,EAscending,fileList);
test(r==KErrNone);
TInt count=fileList->Count();
test(count==2);
TEntry entry;
entry=(*fileList)[0];
test(entry.iName.MatchF(_L("RONLY1.CCC"))!=KErrNotFound);
entry=(*fileList)[1];
test(entry.iName.MatchF(_L("RONLY2.CCC"))!=KErrNotFound);
delete fileList;
test.Next(_L("Can match everything except read only files"));
TUint excludeRO=KEntryAttReadOnly|KEntryAttMatchExclude;
r=TheFs.GetDir(_L("\\F32-TST\\GDIR\\*.CCC"),excludeRO,EAscending,fileList);
test(r==KErrNone);
count=fileList->Count();
test(count==4);
entry=(*fileList)[0];
test(entry.iName.MatchF(_L("RW1.CCC"))!=KErrNotFound);
entry=(*fileList)[1];
test(entry.iName.MatchF(_L("RW2.CCC"))!=KErrNotFound);
entry=(*fileList)[2];
test(entry.iName.MatchF(_L("SYSTEM1.CCC"))!=KErrNotFound);
entry=(*fileList)[3];
test(entry.iName.MatchF(_L("SYSTEM2.CCC"))!=KErrNotFound);
delete fileList;
test.Next(_L("Can match everything except system and readonly files"));
TUint excludeSystemAndRO=KEntryAttReadOnly|KEntryAttSystem|KEntryAttMatchExclude;
r=TheFs.GetDir(_L("\\F32-TST\\GDIR\\*.CCC"),excludeSystemAndRO,EAscending,fileList);
test(r==KErrNone);
count=fileList->Count();
test(count==2);
entry=(*fileList)[0];
test(entry.iName.MatchF(_L("RW1.CCC"))!=KErrNotFound);
entry=(*fileList)[1];
test(entry.iName.MatchF(_L("RW2.CCC"))!=KErrNotFound);
delete fileList;
r=TheFs.SetAtt(_L("\\F32-TST\\GDIR\\RONLY1.CCC"),0,KEntryAttReadOnly);
test(r==KErrNone);
r=TheFs.SetAtt(_L("\\F32-TST\\GDIR\\RONLY2.CCC"),0,KEntryAttReadOnly);
test(r==KErrNone);
}
LOCAL_C void testGetHidden()
//
// Match hidden files and directories
//
{
test.Next(_L("Match hidden files and directories"));
MakeFile(_L("File.qqq"));
MakeFile(_L("FileHidden.qqq"));
MakeFile(_L("FileSystem.qqq"));
MakeFile(_L("FileHiddenSystem.qqq"));
MakeDir(_L("\\F32-TST\\GDIR\\Dir.qqq\\"));
MakeDir(_L("\\F32-TST\\GDIR\\Dirhidden.qqq\\"));
MakeDir(_L("\\F32-TST\\GDIR\\Dirsystem.qqq\\"));
MakeDir(_L("\\F32-TST\\GDIR\\Dirhiddensystem.qqq\\"));
TInt r=TheFs.SetAtt(_L("FileHidden.qqq"),KEntryAttHidden,0);
test(r==KErrNone);
r=TheFs.SetAtt(_L("Filesystem.qqq"),KEntryAttSystem,0);
test(r==KErrNone);
r=TheFs.SetAtt(_L("FilehiddenSystem.qqq"),KEntryAttSystem|KEntryAttHidden,0);
test(r==KErrNone);
r=TheFs.SetAtt(_L("dirhidden.qqq"),KEntryAttHidden,0);
test(r==KErrNone);
r=TheFs.SetAtt(_L("dirsystem.qqq"),KEntryAttSystem,0);
test(r==KErrNone);
r=TheFs.SetAtt(_L("dirhiddensystem.qqq"),KEntryAttSystem|KEntryAttHidden,0);
test(r==KErrNone);
// Files and directories not hidden or system
CDir* dir;
r=TheFs.GetDir(_L("*.qqq"),KEntryAttDir,ESortByName,dir);
test(r==KErrNone);
TInt count=dir->Count();
test(count==2);
TEntry entry;
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
delete dir;
// Files only
r=TheFs.GetDir(_L("*.qqq"),KEntryAttNormal,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==1);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
delete dir;
// Directories only
r=TheFs.GetDir(_L("*.qqq"),KEntryAttDir|KEntryAttMatchExclusive,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==1);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
delete dir;
// Files + hidden
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==2);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("filehidden.qqq"))!=KErrNotFound);
delete dir;
// Files + system
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==2);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("filehidden.qqq"))!=KErrNotFound);
delete dir;
// Files + hidden + system
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden|KEntryAttSystem,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==4);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("filehidden.qqq"))!=KErrNotFound);
entry=(*dir)[2];
test(entry.iName.MatchF(_L("filehiddensystem.qqq"))!=KErrNotFound);
entry=(*dir)[3];
test(entry.iName.MatchF(_L("filesystem.qqq"))!=KErrNotFound);
delete dir;
// Dirs + hidden
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden|KEntryAttDir|KEntryAttMatchExclusive,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==2);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("dirhidden.qqq"))!=KErrNotFound);
delete dir;
// Dirs + system
r=TheFs.GetDir(_L("*.qqq"),KEntryAttSystem|KEntryAttDir|KEntryAttMatchExclusive,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==2);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("dirsystem.qqq"))!=KErrNotFound);
delete dir;
// Dirs + hidden + system
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden|KEntryAttSystem|KEntryAttDir|KEntryAttMatchExclusive,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==4);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("dirhidden.qqq"))!=KErrNotFound);
entry=(*dir)[2];
test(entry.iName.MatchF(_L("dirhiddensystem.qqq"))!=KErrNotFound);
entry=(*dir)[3];
test(entry.iName.MatchF(_L("dirsystem.qqq"))!=KErrNotFound);
delete dir;
// Files + Dirs + hidden
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden|KEntryAttDir,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==4);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("dirhidden.qqq"))!=KErrNotFound);
entry=(*dir)[2];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
entry=(*dir)[3];
test(entry.iName.MatchF(_L("filehidden.qqq"))!=KErrNotFound);
delete dir;
// Files + Dirs + system
r=TheFs.GetDir(_L("*.qqq"),KEntryAttSystem|KEntryAttDir,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==4);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("dirsystem.qqq"))!=KErrNotFound);
entry=(*dir)[2];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
entry=(*dir)[3];
test(entry.iName.MatchF(_L("filesystem.qqq"))!=KErrNotFound);
delete dir;
// Files + Dirs + hidden + system
r=TheFs.GetDir(_L("*.qqq"),KEntryAttHidden|KEntryAttSystem|KEntryAttDir,ESortByName,dir);
test(r==KErrNone);
count=dir->Count();
test(count==8);
entry=(*dir)[0];
test(entry.iName.MatchF(_L("dir.qqq"))!=KErrNotFound);
entry=(*dir)[1];
test(entry.iName.MatchF(_L("dirhidden.qqq"))!=KErrNotFound);
entry=(*dir)[2];
test(entry.iName.MatchF(_L("dirhiddensystem.qqq"))!=KErrNotFound);
entry=(*dir)[3];
test(entry.iName.MatchF(_L("dirsystem.qqq"))!=KErrNotFound);
entry=(*dir)[4];
test(entry.iName.MatchF(_L("file.qqq"))!=KErrNotFound);
entry=(*dir)[5];
test(entry.iName.MatchF(_L("filehidden.qqq"))!=KErrNotFound);
entry=(*dir)[6];
test(entry.iName.MatchF(_L("filehiddensystem.qqq"))!=KErrNotFound);
entry=(*dir)[7];
test(entry.iName.MatchF(_L("filesystem.qqq"))!=KErrNotFound);
delete dir;
}
LOCAL_D TFileName gDirDescendingBaseName=_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\");
LOCAL_D TFileName gDirDescendingEntryName[6]=
{
_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\aaaa"),
_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\ssss"),
_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\ZZZZ"),
_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\aaaa.directory\\"),
_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\SSSS.dir\\"),
_L("\\F32-TST\\GDIR\\TDIRDESCENDING\\ZZZZDirectory\\")
};
LOCAL_C void TestDirDescendingOrder(const TDesC& aResult,const CDir& aDirList)
//
// Test aDirList against aResult
//
{
TLex lex(aResult);
TInt count=0;
while (!lex.Eos())
{
lex.Mark();
while(lex.Get().IsDigit()) {};
TLex temp(lex.MarkedToken());
TInt result;
temp.Val(result);
TFileName base=gDirDescendingBaseName;
TEntry entry=aDirList[count];
base+=entry.iName;
if (entry.IsDir())
base+=_L("\\");
test(base==gDirDescendingEntryName[result]);
count++;
}
}
LOCAL_C void testDirDescending()
//
// Test EDirDescending
//
{
test.Next(_L("Test EDirDescending"));
MakeDir(gDirDescendingBaseName);
MakeFile(gDirDescendingEntryName[0]);
MakeFile(gDirDescendingEntryName[1]);
MakeFile(gDirDescendingEntryName[2]);
MakeDir(gDirDescendingEntryName[3]);
MakeDir(gDirDescendingEntryName[4]);
MakeDir(gDirDescendingEntryName[5]);
// Test DirFirst - EDescending
CDir* dir;
TUint sortOrder=ESortByName|EDirsFirst|EDescending;
TInt r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
// TBuf8<16> result=_L("2,1,0,3,4,5");
TBuf<16> result=_L("2,1,0,3,4,5");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirFirst - EAscending
sortOrder=ESortByName|EDirsFirst;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("3,4,5,0,1,2");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirLast - EDescending
sortOrder=ESortByName|EDirsLast|EDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("3,4,5,2,1,0");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirLast - EAscending
sortOrder=ESortByName|EDirsLast;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("0,1,2,3,4,5");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirFirst - EDirDescending
sortOrder=ESortByName|EDirsFirst|EDirDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("5,4,3,0,1,2");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirLast - EDirDescending
sortOrder=ESortByName|EDirsLast|EDirDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("0,1,2,5,4,3");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirFirst - EDescending|EDirDescending
sortOrder=ESortByName|EDirsFirst|EDescending|EDirDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("2,1,0,5,4,3");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirLast - EDescending|EDirDescending
sortOrder=ESortByName|EDirsLast|EDirDescending|EDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("5,4,3,2,1,0");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirNoOrder - EDescending|EDirDescending
sortOrder=ESortByName|EDescending|EDirDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("5,2,4,1,3,0");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirNoOrder - EDescending
sortOrder=ESortByName|EDescending;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("5,2,4,1,3,0");
TestDirDescendingOrder(result,*dir);
delete dir;
// Test DirNoOrder - EAscending
sortOrder=ESortByName;
r=TheFs.GetDir(gDirDescendingBaseName,KEntryAttMaskSupported,sortOrder,dir);
test(r==KErrNone);
result=_L("0,3,1,4,2,5");
TestDirDescendingOrder(result,*dir);
delete dir;
}
//---------------------------------------------
//! @SYMTestCaseID PBASE-T_GDIR-0815
//! @SYMTestType UT
//! @SYMREQ DEF122894
//! @SYMTestCaseDesc This testcase tests the boundary condition of file name collation (8 characters).
//! @SYMTestActions Creates file "xxxxxxxx2.dat" and "Xxxxxxxx1.dat" under same directory,
//! retrieves dir list via GetDir(), sort list by name, check order of the file listed.
//! @SYMTestExpectedResults File "Xxxxxxxx1.dat" should be listed before "xxxxxxxx2.dat".
//! @SYMTestPriority High
//! @SYMTestStatus Implemented
//---------------------------------------------
void TestDEF122894()
{
test.Next(_L("Test \"DEF122894: Defect in RFs GetDir() API\""));
MakeFile(_L("\\F32-TST\\GDIR\\DEF122894\\xxxxxxxx2.dat"));
MakeFile(_L("\\F32-TST\\GDIR\\DEF122894\\Xxxxxxxx1.dat"));
CDir* dir;
TInt r=TheFs.GetDir(_L("\\F32-TST\\GDIR\\DEF122894\\"),KEntryAttMaskSupported,ESortByName|EAscending,dir);
test(r==KErrNone);
test(dir->Count() == 2);
TEntry entry1, entry2;
entry1 = (*dir)[0];
entry2 = (*dir)[1];
test(entry1.iName.Compare(_L("Xxxxxxxx1.dat")) == 0);
test(entry2.iName.Compare(_L("xxxxxxxx2.dat")) == 0);
delete dir;
}
GLDEF_C void CallTestsL()
//
// Test directory handling.
//
{
CreateTestDirectory(_L("\\F32-TST\\GDIR\\"));
if (gFirstRun)
{
gFirstRun=EFalse;
testZDirectory();
testZGetDirByUid();
}
testSetup();
testDir();
testDisplayFiles();
testGetDirByUid();
testGetFilesExcept();
testGetHidden();
testDirDescending();
TestDEF122894();
DeleteTestDirectory();
}