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) 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:
// f32test\server\b_osfil.cpp
//
//
#include <f32file.h>
#include <e32test.h>
#include "t_server.h"
const TInt KSizeExistsFile=26;
const TInt KSizeExistsFile2=25;
GLDEF_D RTest test(_L("B_OSFIL"));
/* these buffers get written to in order to change the file system */
//LOCAL_D TBuf<5> fileSystemName =_L("LOC::"); /* default file system name */
LOCAL_D TBuf<20> noDevice = _L("L:\\tmpfile.tmp");
LOCAL_D TBuf<15> noDevicePath = _L("L:\\");
LOCAL_D TBuf<28> noDirectory = _L("C:\\nodirect\\tmpfile.tmp");
LOCAL_D TBuf<30> noDirectoryPath = _L("C:\\nodirect\\");
LOCAL_D TBuf<20> noFile = _L("C:\\notafile.tmp");
LOCAL_D TBuf<19> fileName = _L("C:\\tmpfile.tmp");
LOCAL_D TBuf<20> existsFile = _L("C:\\tmpexst1.tmp");
LOCAL_D TBuf<20> existsFile2 = _L("C:\\tmpexst2.tmp");
LOCAL_D TBuf<21> renameFile1 = _L("C:\\tmpren1.tmp");
LOCAL_D TBuf<21> renameFile2 = _L("C:\\tmpren2.tmp");
LOCAL_D TBuf<34> directoryFile = _L("C:\\nodirect\\nodirect\\nodirect\\");
LOCAL_D TBuf<14> openUniqueDir = _L("C:\\nodir2\\");
/*************************************************************************/
LOCAL_C void TestInfo()
/*
Test the file info function
*/
{
TEntry entry;
TInt r=TheFs.Entry(noDevice,entry);
test((r==KErrNotReady)||(r==KErrPathNotFound));
r=TheFs.Entry(noDirectory,entry);
test(r==KErrPathNotFound);
r=TheFs.Entry(noFile,entry);
test(r==KErrNotFound);
r=TheFs.Entry(existsFile,entry);
test(r==KErrNone);
test(entry.iSize==KSizeExistsFile);
test(!entry.IsDir());
test(!(entry.iAtt&KEntryAttDir));
r=TheFs.Entry(existsFile2,entry);
test(r==KErrNone);
test(entry.iSize==KSizeExistsFile2);
test(!entry.IsDir());
test(!(entry.iAtt&KEntryAttDir));
}
LOCAL_C void TestDelete()
/*
Test the delete
*/
{
TInt r=TheFs.Delete(noDevice);
test((r==KErrNotReady)||(r==KErrPathNotFound));
r=TheFs.Delete(noDirectory);
test(r==KErrPathNotFound);
r=TheFs.Delete(noFile);
test(r==KErrNotFound);
r=TheFs.Delete(existsFile);
test(r==KErrNone);
r=TheFs.Delete(existsFile2);
test(r==KErrNone);
TEntry entry;
r=TheFs.Entry(existsFile,entry);
test(r==KErrNotFound);
r=TheFs.Entry(existsFile2,entry);
test(r==KErrNotFound);
}
LOCAL_C void TestRename()
/*
Test the rename
*/
{
TInt r=TheFs.Rename(noDevice,fileName);
test(r==KErrArgument);
r=TheFs.Rename(noDirectory,fileName);
test(r==KErrPathNotFound);
r=TheFs.Rename(noFile,fileName);
test(r==KErrNotFound);
r=TheFs.Rename(existsFile,existsFile2);
test(r==KErrAlreadyExists);
r=TheFs.Delete(existsFile);
test(r==KErrNone);
r=TheFs.Rename(existsFile,existsFile);
test(r==KErrNotFound);
r=TheFs.Rename(existsFile2,existsFile);
test(r==KErrNone);
TEntry entry;
r=TheFs.Entry(existsFile2,entry);
test(r==KErrNotFound);
r=TheFs.Entry(existsFile,entry);
test(r==KErrNone);
r=TheFs.Delete(existsFile);
test(r==KErrNone);
}
LOCAL_C void TestMkDir()
{
TParse fparse;
TInt r=TheFs.MkDirAll(directoryFile);
test(r==KErrNone);
TEntry entry;
r=TheFs.Entry(directoryFile.Left(directoryFile.Length()-1),entry);
test(r==KErrNone);
test(entry.IsDir());
test(entry.iAtt&KEntryAttDir);
r=TheFs.RmDir(directoryFile);
test(r==KErrNone);
r=fparse.Set(directoryFile,NULL,NULL);
test(r==KErrNone);
r=fparse.PopDir();
test(r==KErrNone);
r=TheFs.RmDir(fparse.DriveAndPath());
test(r==KErrNone);
r=fparse.PopDir();
test(r==KErrNone);
r=TheFs.RmDir(fparse.DriveAndPath());
test(r==KErrNone);
}
LOCAL_C void TestOpenUnique()
/*
Test unique file name generator
*/
{
RFile p1;
RFile p2;
TInt r=p1.Open(TheFs,noDevice,EFileStreamText);
test((r==KErrNotReady)||(r==KErrPathNotFound));
r=p1.Open(TheFs,noDirectory,EFileStreamText);
test(r==KErrPathNotFound);
TFileName generated1;
r=p1.Temp(TheFs,noDevicePath,generated1,EFileStreamText);
test((r==KErrNotReady)||(r==KErrPathNotFound));
r=p1.Temp(TheFs,noDirectoryPath,generated1,EFileStreamText);
test(r==KErrPathNotFound);
r=p1.Temp(TheFs,_L(""),generated1,EFileStreamText);
test(r==KErrNone);
TFileName generated2;
r=p2.Temp(TheFs,_L(""),generated2,EFileStreamText);
test(r==KErrNone);
test(generated1!=generated2);
p1.Close();
TFileName generated3;
r=p1.Temp(TheFs,_L(""),generated3,EFileStream);
test(r==KErrNone);
test(generated3!=generated2);
test(generated3!=generated1);
p2.Close();
p1.Close();
r=TheFs.Delete(generated1);
test(r==KErrNone);
r=TheFs.Delete(generated2);
test(r==KErrNone);
r=TheFs.Delete(generated3);
test(r==KErrNone);
r=p1.Temp(TheFs,_L(""),generated1,EFileStreamText);
test(r==KErrNone);
r=p2.Temp(TheFs,_L(""),generated2,EFileStreamText);
test(r==KErrNone);
test(generated1!=generated2);
p1.Close();
r=p1.Temp(TheFs,_L(""),generated3,EFileStream);
test(r==KErrNone);
test(generated3!=generated2);
test(generated3!=generated1);
p2.Close();
p1.Close();
r=TheFs.Delete(generated1);
test(r==KErrNone);
r=TheFs.Delete(generated2);
test(r==KErrNone);
r=TheFs.Delete(generated3);
test(r==KErrNone);
r=TheFs.MkDir(openUniqueDir);
test(r==KErrNone);
r=p1.Temp(TheFs,openUniqueDir,generated1,EFileStream);
test(r==KErrNone);
r=p2.Temp(TheFs,openUniqueDir,generated2,EFileStreamText|EFileWrite);
test(r==KErrNone);
r=p1.Write(_L8("junk"),4);
test(r==KErrNone);
TInt pos=0;
r=p1.Seek(ESeekCurrent,pos);//P_FSET
test(r==KErrNone);
p1.Close();
p2.Close();
r=TheFs.Delete(generated1);
test(r==KErrNone);
r=TheFs.Delete(generated2);
test(r==KErrNone);
r=p1.Temp(TheFs,openUniqueDir,generated1,EFileStream);
test(r==KErrNone);
r=p2.Temp(TheFs,openUniqueDir,generated2,EFileStreamText);
test(r==KErrNone);
p1.Close();
pos=0;
r=p2.Seek(ESeekStart,pos);
test(r==KErrNone);
p2.Close();
r=TheFs.Delete(generated1);
test(r==KErrNone);
r=TheFs.Delete(generated2);
test(r==KErrNone);
r=TheFs.RmDir(openUniqueDir);
test(r==KErrNone);
}
LOCAL_C void TestPaths()
{
TFileName path1;
TInt r=TheFs.SessionPath(path1);
test(r==KErrNone);
r=TheFs.SetSessionPath(path1);
test(r==KErrNone);
TFileName path2;
r=TheFs.SessionPath(path2);
test(r==KErrNone);
test(path1==path2);
RDir dir;
r=dir.Open(TheFs,path1,0);
test(r==KErrNone);
dir.Close();
}
LOCAL_C void TestFileStatus()
{
TEntry blk;
TInt r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
TEntry blk1=blk;
/* Toggle the write attribute */
TUint clear,set; /* were modifying write attrib */
if (blk1.IsReadOnly())
{
clear=KEntryAttReadOnly;
set=0;
}
else
{
clear=0;
set=KEntryAttReadOnly;
}
r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsReadOnly())
test(!blk.IsReadOnly());
else
test(blk.IsReadOnly());
/* set write attrib back */
r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsReadOnly())
test(blk.IsReadOnly());
else
test(!blk.IsReadOnly());
/* toggle the archive bit */
if (blk1.IsArchive())
{
clear=KEntryAttArchive;
set=0;
}
else
{
clear=0;
set=KEntryAttArchive;
}
r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsArchive())
test(!blk.IsArchive());
else
test(blk.IsArchive());
/* set archive attrib back */
r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsArchive())
test(blk.IsArchive());
else
test(!blk.IsArchive());
/* toggle the hidden bit */
if (blk1.IsHidden())
{
clear=KEntryAttHidden;
set=0;
}
else
{
clear=0;
set=KEntryAttHidden;
}
r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsHidden())
test(!blk.IsHidden());
else
test(blk.IsHidden());
/* set hidden attrib back */
r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsHidden())
test(blk.IsHidden());
else
test(!blk.IsHidden());
/* toggle the system bit */
if (blk1.IsSystem())
{
clear=KEntryAttSystem;
set=0;
}
else
{
clear=0;
set=KEntryAttSystem;
}
r=TheFs.SetEntry(existsFile,blk1.iModified,set,clear);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsSystem())
test(!blk.IsSystem());
else
test(blk.IsSystem());
/* set system attrib back */
r=TheFs.SetEntry(existsFile,blk1.iModified,clear,set);
test(r==KErrNone);
r=TheFs.Entry(existsFile,blk);
test(r==KErrNone);
if (blk1.IsSystem())
test(blk.IsSystem());
else
test(!blk.IsSystem());
r=TheFs.Delete(existsFile);
test(r==KErrNone);
r=TheFs.Delete(existsFile2);
test(r==KErrNone);
}
LOCAL_C void CreateTestFiles()
{
RFile fcb;
TInt r=fcb.Replace(TheFs,existsFile,EFileWrite);
test(r==KErrNone);
r=fcb.Write(_L8("ABCDEFGHIJKLMNOPQRSTUVWXYZ"),KSizeExistsFile);
test(r==KErrNone);
fcb.Close();
r=fcb.Replace(TheFs,existsFile2,EFileWrite);
test(r==KErrNone);
r=fcb.Write(_L8("bcdefghijklmnopqrstuvwxyz"),KSizeExistsFile2);
test(r==KErrNone);
fcb.Close();
}
GLDEF_C void CallTestsL(void)
//
// Do testing on aDrive
//
{
test.Title();
TVolumeInfo di;
TInt r=TheFs.Volume(di);
test(r==KErrNone);
test.Start(_L("Info()"));
CreateTestFiles();
TestInfo();
test.Next(_L("Delete()"));
CreateTestFiles();
TestDelete();
test.Next(_L("Rename()"));
CreateTestFiles();
TestRename();
test.Next(_L("MkDir()"));
TestMkDir();
test.Next(_L("Temp()"));
TestOpenUnique();
test.Next(_L("Paths"));
TestPaths();
test.Next(_L("File status"));
CreateTestFiles();
TestFileStatus();
test.End();
}