kerneltest/f32test/server/t_nmbs.cpp
changeset 0 a41df078684a
child 109 b3a1d9898418
child 256 c1f20ce4abcf
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/server/t_nmbs.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,1061 @@
+// 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"
+#include "t_chlffs.h"
+
+GLDEF_D RTest test(_L("T_NMBS"));
+
+LOCAL_C void testMkDirRmDir()
+//
+// Test the MkDir functions.
+//
+	{
+
+	test.Next(_L("Test MkDir"));
+
+	TInt r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+	r=TheFs.MkDir(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrPathNotFound);
+	r=TheFs.MkDir(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+	r=TheFs.MkDir(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test RmDir 1.0"));
+	r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test MkDirAll 1.0"));
+	r=TheFs.MkDirAll(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test RmDir 2.0"));
+	r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test MkDirAll 2.0"));
+	r=TheFs.MkDirAll(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+	r=TheFs.MkDirAll(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test RmDir 3.0"));
+	r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\TEST\\"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test mkdir and rmdir on root"));
+	r=TheFs.RmDir(_L("\\File.TXT"));
+	test(r==KErrInUse);
+	r=TheFs.MkDir(_L("\\asdf.ere"));
+	test(r==KErrAlreadyExists);
+	r=TheFs.MkDirAll(_L("\\asdf.ere"));
+	test(r==KErrAlreadyExists);
+
+	test.Next(_L("Test error code return values"));
+	r=TheFs.MkDir(_L("\\F32-TST\\\\ABCDEF\\"));
+
+	test(r==KErrBadName);
+
+	test.Next(_L("Test MkDir with trailing spaces"));
+	r=TheFs.MkDir(_L("\\F32-TST\\TESTMKDIR    \\"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\TESTMKDIR\\"));
+	test(r==KErrNone);
+	r=TheFs.MkDirAll(_L("\\F32-TST\\TESTMKDIR    \\NOTCREATED\\NORTHIS   \\"));
+	test(r==KErrPathNotFound);
+	r=TheFs.RmDir(_L("\\F32-TST\\TESTMKDIR\\NOTCREATED\\"));
+	test(r==KErrNotFound);
+	r=TheFs.RmDir(_L("\\F32-TST\\TESTMKDIR\\"));
+	test(r==KErrNone);
+
+	r=TheFs.MkDirAll(_L("\\F32-TST\\TNMBS\\"));
+	test(r==KErrNone);
+	}
+
+LOCAL_C void testRename()
+//
+// Test the rename function.
+//
+	{
+
+	test.Next(_L("Test rename directories"));
+	TInt r=TheFs.MkDirAll(_L("\\F32-TST\\ABCDEF\\GPQ\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\"),_L("\\F32-TST\\ABCDEF\\LMED"));
+	test(r==KErrInUse);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\GPQ"),_L("\\F32-TST\\LMED"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\LMED\\"));
+	test(r==KErrNone);
+
+	MakeDir(_L("\\F32-TST\\ABC\\"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\GPQ\\asdf.txt"));
+	MakeFile(_L("\\F32-TST\\asdf.txt"));
+	
+	test.Next(_L("Test rename directory while subfile is open"));
+	RFile f;
+	r=f.Open(TheFs,_L("\\F32-TST\\ABCDEF\\GPQ\\asdf.txt"),EFileRead);
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF"),_L("\\F32-TST\\xxxyyy"));
+	test(r==KErrInUse);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF"),_L("\\F32-TST\\xxxyyy"));
+	test(r==KErrInUse);
+	r=TheFs.Rename(_L("\\F32-TST\\ABC"),_L("\\F32-TST\\XXX"));
+	test(r==KErrNone);
+	f.Close();
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF"),_L("\\F32-TST\\xxxyyy"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\XXX"),_L("\\F32-TST\\ABC"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\"),_L("\\BLARG"));
+	test(r==KErrBadName);
+
+	r=f.Open(TheFs,_L("\\F32-TST\\asdf.txt"),EFileRead);
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\xxxyyy"),_L("\\F32-TST\\ABCDEF"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\"),_L("\\ABCDEF"));
+	test(r==KErrInUse);
+	f.Close();
+
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\GPQ\\asdf.txt"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\asdf.txt"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\ABCDEF\\GPQ\\"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\ABC\\"));
+	test(r==KErrNone);
+
+	r=TheFs.Rename(_L("\\TST-E32\\123456"),_L("\\F32-TST\\ABCDEF"));
+	test(r==KErrPathNotFound);
+	r=TheFs.Rename(_L("\\F32-TST\\123456"),_L("\\F32-TST\\ABCDEF"));
+	test(r==KErrNotFound);
+	r=TheFs.Rename(_L("\\TST-E32\\123456"),_L("\\F32-TST\\FEDCBA"));
+	test(r==KErrPathNotFound);
+	r=TheFs.Rename(_L("\\F32-TST\\FEDCBA"),_L("\\TST-E32\\123456"));
+	test(r==KErrNotFound);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF"),_L("\\F32-TST\\123456"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\123456"),_L("\\F32-TST\\XYZABC"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test rename files"));
+	r=f.Create(TheFs,_L("\\F32-TST\\XYZABC\\OLDNAME.TXT"),EFileRead|EFileWrite);
+	test(r==KErrNone);
+	f.Close();
+	r=TheFs.Rename(_L("\\F32-TST\\XYZABC\\OLDNAME.TXT"),_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"));
+	test(r==KErrNone);
+
+	test.Next(_L("Test rename checks for duplicate entries"));
+	r=TheFs.MkDirAll(_L("\\F32-TST\\ABCDEF\\"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF"),_L("\\F32-TST\\XYZABC"));
+	test(r==KErrAlreadyExists);
+	r=f.Create(TheFs,_L("\\F32-TST\\XYZABC\\OLDNAME.TXT"),EFileRead|EFileWrite);
+	test(r==KErrNone);
+	f.Close();
+	r=f.Create(TheFs,_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"),EFileRead|EFileWrite);
+	test(r==KErrNone);
+	f.Close();
+	r=TheFs.Rename(_L("\\F32-TST\\XYZABC\\OLDNAME.TXT"),_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"));
+	test(r==KErrAlreadyExists);
+
+	test.Next(_L("Test rename across directories"));
+	r=TheFs.Rename(_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"),_L("\\F32-TST\\ABCDEF\\OLDNAME.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"),_L("\\F32-TST\\ABCDEF\\OLDNAME.TXT"));
+	test(r==KErrNotFound);
+	r=TheFs.Rename(_L("\\F32-TST\\XYZABC\\NEWNAME.TXT"),_L("\\F32-TST\\ABCDEF\\DIFNAME.TXT"));
+	test(r==KErrNotFound);
+	r=TheFs.Rename(_L("\\F32-TST\\XYZABC"),_L("\\F32-TST\\ABCDEF\\XYZABC"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"),_L("\\F32-TST\\ABCDEF\\NEWNAME.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\NewNAME.TXT"),_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"));
+	test(r==KErrNone);
+	test.Next(_L("Test rename across drive error code"));
+	r=TheFs.Rename(_L("Z:\\BLEG"),_L("C:\\FRUM"));
+	test(r==KErrArgument);	
+	test.Next(_L("Test rename to identical names"));
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"),_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"),KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"),_L("\\F32-TST\\ABCDEF\\XYZABC\\OLdnAME.TXT"));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"),KErrNone,EFalse);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLdnAME.TXT"),KErrNone,ETrue);
+
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\XYZABC\\OLDNAME.TXT"),_L("\\F32-TST\\ABCDEF\\NEWNAME.TXT"));
+	test(r==KErrNone);
+	test.Next(_L("Test RmDir"));
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\NEWNAME.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\OLDNAME.TXT"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\ABCDEF\\XYZABC\\"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\ABCDEF\\"));
+	test(r==KErrNone);
+	}
+LOCAL_C void TestLongFileName()
+	{
+	#ifndef __EPOC32__ //emulator
+	if (gDriveToTest.GetLowerCase()=='c')
+		return;//don't perform this test for c: in emulator as emulator uses windows system calls
+		//windows doesn't create a directory with length more than 244 characters
+	#endif 
+	
+	 test.Next(_L("Test renaming 257 characters directories"));
+	_LIT(KLongFileName256, "256dir_IncludingBackslash_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
+	_LIT(KLongFileName257, "257dir_IncludingBackslash_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
+	TBuf<260> Path;
+	TBuf<10> baseDir;
+			
+	baseDir.Format(_L("%c:\\"),(TUint)(gDriveToTest));
+	Path.Copy(baseDir);
+	Path.Append(KLongFileName256);
+	Path.Append(_L("\\"));
+	
+	TInt 	result = KErrNone;
+	//-- 1. create directory in Root which total path length is 256 symbols.	result = TheFs.MkDirAll(Path);
+	result=TheFs.MkDirAll(Path);
+	test((result==KErrNone)||(result==KErrAlreadyExists));
+	
+	test.Next(_L("Renaming a 265 char directory to a 257 char directory"));
+	result=TheFs.SetSessionPath(baseDir);
+	test(result==KErrNone);	
+	TheFs.SessionPath(baseDir);
+	test.Printf(_L("Session path was set to: %S"), &baseDir);
+
+	//-- 2. try to rename this directory to one with 257 character total path length
+	test.Printf(_L("Renaming 256-char directory to 257"));
+	result = KErrNone;
+	Path.Copy(KLongFileName257);
+	result = TheFs.Rename(KLongFileName256, Path);
+	test(result==KErrBadName);
+	//-- 3. try to rename this directory to one with 258 character total path length
+
+	Path.Append(_L("z"));
+	result = TheFs.Rename(KLongFileName256, Path);
+	test(result==KErrBadName);
+
+	}
+LOCAL_C void testRenameCase()
+//
+// Test renaming "AGENDA" to "agenda"
+//
+	{
+
+	test.Next(_L("Test rename case"));
+	MakeDir(_L("\\F32-TST\\RENAMECASE\\"));
+	TInt r=TheFs.SetSessionPath(_L("\\F32-TST\\RENAMECASE\\"));
+	test(r==KErrNone);
+
+	MakeFile(_L("file1.txt"));
+	MakeFile(_L("FILE2.TXT"));
+	MakeFile(_L("AGENDA"));
+	MakeFile(_L("agenda.one"));
+
+	TEntry entry;
+	r=TheFs.Rename(_L("FILE1.TXT"),_L("FILE1.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("File1.txt"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("FILE1.TXT"));
+
+	r=TheFs.Rename(_L("file2.txt"),_L("file2.txt"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("File2.txt"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("file2.txt"));
+
+	r=TheFs.Rename(_L("agenda."),_L("agenda.two"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("Agenda.two"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("agenda.two"));
+
+	r=TheFs.Rename(_L("AGENDA.ONE"),_L("AGENDA.ONE"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("Agenda.one"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("AGENDA.ONE"));
+
+	r=TheFs.Rename(_L("FILE1.TXT"),_L("file1.txt"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("File1.txt"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("file1.txt"));
+
+	r=TheFs.Rename(_L("file2.txt"),_L("FILE2.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("File2.txt"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("FILE2.TXT"));
+
+	r=TheFs.Rename(_L("agenda.two"),_L("AGENDA"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("Agenda"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("AGENDA"));
+
+	r=TheFs.Rename(_L("AGENDA.ONE"),_L("agenda.one"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("Agenda.one"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("agenda.one"));
+
+	r=TheFs.Rename(_L("FILE1.TXT"),_L("FILe1.txt"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("File1.txt"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("FILe1.txt"));
+
+	r=TheFs.Rename(_L("file2.txt"),_L("FILE3.TXT"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("File3.txt"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("FILE3.TXT"));
+
+	r=TheFs.Rename(_L("agenda."),_L("AGENDA1"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("Agenda1"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("AGENDA1"));
+
+	r=TheFs.Rename(_L("AGENDA.ONE"),_L("Agenda.One"));
+	test(r==KErrNone);
+	r=TheFs.Entry(_L("Agenda.one"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("Agenda.One"));
+
+	r=TheFs.Delete(_L("file1.txt"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("file3.txt"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("Agenda1"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("AGENDA.ONE"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\RENAMECASE\\"));
+	test(r==KErrNone);
+	r=TheFs.SetSessionPath(gSessionPath);
+	test(r==KErrNone);
+	}
+
+LOCAL_C void testReplace()
+//
+// Test the replace function
+//
+	{
+
+	test.Next(_L("Test Replace"));
+	TInt r=TheFs.MkDirAll(_L("\\F32-TST\\ABCDEF\\"));
+	test(r==KErrNone);
+	r=TheFs.Replace(_L("\\TST-E32\\123456"),_L("\\F32-TST\\ABCDEF"));
+	test(r==KErrAccessDenied); // Do not replace directories
+	r=TheFs.Replace(_L("\\F32-TST\\123456"),_L("\\F32-TST\\ABCDEF"));
+	test(r==KErrAccessDenied);
+	r=TheFs.Replace(_L("\\TST-E32\\123456"),_L("\\F32-TST\\FEDCBA"));
+	test(r==KErrPathNotFound);
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF"),_L("\\F32-TST\\123456"));
+	test(r==KErrAccessDenied);
+
+	test.Next(_L("Replace a file with itself (8.3 filename)"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\TEST1.SPR"));
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\TEST1.SPR"),_L("\\F32-TST\\ABCDEF\\TEST1.SPR"));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\TEST1.SPR"),KErrNone);
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\TEST1.SPR"),_L("\\F32-TST\\ABCDEF\\test1.spr"));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\TEST1.SPR"),KErrNone,ETrue); // Replace does not rename existing file
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\test1.spr"),KErrNone,EFalse);
+
+	test.Next(_L("Replace a file with itself (vfat filename)"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"));
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"),_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"),KErrNone);
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"),_L("\\F32-TST\\ABCDEF\\test_sheet(01).spr"));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"),KErrNone,ETrue); // Replace does not rename existing file
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\test_sheet(01).spr"),KErrNone,EFalse);
+
+	test.Next(_L("Replace preserves file contents (8.3 filename)"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"),_L8("Original Data"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\TEMP0001.SPR"),_L8("NewData"));
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\TEMP0001.SPR"),_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"));
+	test(r==KErrNone);
+	CheckFileContents(_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"),_L8("NewData"));
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\TEMP0001.SPR"),KErrNotFound);
+
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"),_L("\\F32-TST\\ABCDEF\\TEMP0001.SPR"));
+	test(r==KErrNone);
+    r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\TEMP0001.SPR"),_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"));
+	test(r==KErrNone);
+	CheckFileContents(_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"),_L8("NewData"));
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\TEMP0001.SPR"),KErrNotFound);
+
+	test.Next(_L("Replace preserves file contents (vfat fileName)"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"),_L8("Original Data"));
+	MakeFile(_L("\\F32-TST\\ABCDEF\\NEW_TEMP0001.SPR"),_L8("NewData"));
+	r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\NEW_TEMP0001.SPR"),_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"));
+	test(r==KErrNone);
+	CheckFileContents(_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"),_L8("NewData"));
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\NEW_TEMP0001.SPR"),KErrNotFound);
+
+	r=TheFs.Rename(_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"),_L("\\F32-TST\\ABCDEF\\NEW_TEMP0001.SPR"));
+	test(r==KErrNone);
+    r=TheFs.Replace(_L("\\F32-TST\\ABCDEF\\NEW_TEMP0001.SPR"),_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"));
+	test(r==KErrNone);
+	CheckFileContents(_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"),_L8("NewData"));
+	CheckFileExists(_L("\\F32-TST\\ABCDEF\\NEW_TEMP0001.SPR"),KErrNotFound);
+
+	r=TheFs.RmDir(_L("\\F32-TST\\ABCDEF\\"));
+	test(r==KErrInUse);
+	r=TheFs.RmDir(_L("\\F32-TST\\ABCDEF\\SHEET1.SPR\\"));
+	test(r==KErrPathNotFound);
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\SHEET1.SPR"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\SHEET_TEST1.SPR"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\TEST1.SPR"));
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\ABCDEF\\TEST_SHEET(01).SPR"));
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\F32-TST\\ABCDEF\\"));
+	test(r==KErrNone);
+
+	test.Next(_L("Check file date is retained"));
+	MakeFile(_L("OldFile.Old"));
+	MakeFile(_L("NewFile.new"));
+
+	TDateTime newDate(1998,(TMonth)2,3,11,12,0,0);
+	TTime newTime(newDate);
+	
+	r=TheFs.SetEntry(_L("NewFile.new"),newTime,0,0);
+	test(r==KErrNone);
+	
+	TEntry entry;
+	r=TheFs.Entry(_L("NewFile.new"),entry);
+	test(r==KErrNone);
+	
+	TTime checkReturnedTime=entry.iModified;
+	TDateTime dateTime=checkReturnedTime.DateTime();
+	
+	test(entry.iModified==newTime);
+
+	TDateTime oldDate(1996,(TMonth)2,3,23,0,0,0);
+	TTime oldTime(oldDate);
+	r=TheFs.SetEntry(_L("OldFile.old"),oldTime,0,0);
+	test(r==KErrNone);
+
+	TheFs.Replace(_L("NewFile.new"),_L("OldFile.old"));
+	test(r==KErrNone);
+	TTime check;
+	r=TheFs.Modified(_L("OldFile.old"),check);
+	test(r==KErrNone);
+	TDateTime checkDateTime=check.DateTime();
+	
+	test(checkDateTime.Year()==dateTime.Year());
+	test(checkDateTime.Month()==dateTime.Month());
+	test(checkDateTime.Day()==dateTime.Day());
+	test(checkDateTime.Hour()==dateTime.Hour());
+	test(checkDateTime.Minute()==dateTime.Minute());
+	test(checkDateTime.Second()==dateTime.Second());
+
+	test.Next(_L("Replace 'Agenda' with 'Agenda.'"));
+	MakeFile(_L("Agenda"));
+	r=TheFs.Replace(_L("Agenda"),_L("Agenda."));
+	test(r==KErrNone);
+	CheckFileExists(_L("Agenda"),KErrNone,ETrue);
+	CheckFileExists(_L("Agenda."),KErrNone,ETrue);
+	CheckFileExists(_L("AGENDA"),KErrNone,EFalse);
+	CheckFileExists(_L("AGENDA."),KErrNone,EFalse);
+
+	r=TheFs.Replace(_L("Agenda"),_L("Agenda."));
+	test(r==KErrNone);
+	CheckFileExists(_L("Agenda"),KErrNone,ETrue);
+	CheckFileExists(_L("Agenda."),KErrNone,ETrue);
+	CheckFileExists(_L("AGENDA"),KErrNone,EFalse);
+	CheckFileExists(_L("AGENDA."),KErrNone,EFalse);
+
+	r=TheFs.Replace(_L("Agenda."),_L("AGENDA"));
+	test(r==KErrNone);
+	CheckFileExists(_L("Agenda"),KErrNone,ETrue);  // Replace does not rename existing file
+	CheckFileExists(_L("Agenda."),KErrNone,ETrue);
+	CheckFileExists(_L("AGENDA"),KErrNone,EFalse);
+	CheckFileExists(_L("AGENDA."),KErrNone,EFalse);
+
+	r=TheFs.Replace(_L("AGENDA."),_L("AGENDA.")); // Unchanged, ie still 'Agenda'
+	test(r==KErrNone);
+	CheckFileExists(_L("Agenda"),KErrNone,ETrue);
+	CheckFileExists(_L("Agenda."),KErrNone,ETrue);
+	CheckFileExists(_L("AGENDA"),KErrNone,EFalse);
+	CheckFileExists(_L("AGENDA."),KErrNone,EFalse);
+	}
+
+LOCAL_C void testEntry()
+//
+// Test RFs::Entry(..) function
+//
+	{
+
+	test.Next(_L("Get directory entry"));
+	TEntry entry;
+	TInt r=TheFs.Entry(_L("\\BLEERRG\\"),entry);
+	test(r==KErrNotFound); // BLEERRG does not exist
+	r=TheFs.Entry(_L("\\F32-TST"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("F32-TST")||entry.iName==_L("F32-TST."));
+	if (IsTestingLFFS())
+		{
+		r=TheFs.Rename(_L("\\F32-TST.\\"),_L("\\F32-TST\\"));
+		test(r==KErrBadName);
+		r=TheFs.Entry(_L("\\F32-TST"),entry);
+		test(r==KErrNone);
+		}
+	test(entry.iName==_L("F32-TST"));
+	test(entry.IsDir());
+
+	test.Next(_L("Get file entry"));
+	RFile f;
+	r=f.Replace(TheFs,_L("ENTRY.TXT"),EFileStream);
+	test(r==KErrNone);
+	r=f.Write(_L8("Entry data"));
+	test(r==KErrNone);
+	f.Close();
+	r=TheFs.Entry(_L("\\F32-TST\\TNMBS\\ENTRY.TXT"),entry);
+	test(r==KErrNone);
+	test(entry.iName==_L("ENTRY.TXT"));
+	test(!entry.IsDir());
+
+	test.Next(_L("Get the root directory"));
+	r=TheFs.Entry(_L("\\"),entry);
+	test(r==KErrBadName);
+	}
+
+LOCAL_C void testRenameRegression()
+//
+// Regression tests for rename
+//
+	{
+
+	test.Next(_L("More rename tests"));
+	MakeFile(_L("\\F32-TST\\asdf"));
+	TInt r=TheFs.Rename(_L("\\F32-TST\\asdf"),_L("*"));
+	test(r==KErrBadName);
+	r=TheFs.Rename(_L("\\F32-TST\\"),_L("*"));
+	test(r==KErrBadName);
+	r=TheFs.Rename(_L("\\F32-TST\\"),_L("\\F32-TST.\\"));
+	test(r==KErrBadName);
+	CheckFileExists(_L("\\F32-TST\\asdf"),KErrNone);
+	r=TheFs.Rename(_L("\\F32-TST\\asdf"),_L("\\F32-TST\\Asdf."));
+	test(r==KErrNone);
+	CheckFileExists(_L("\\F32-TST\\asdf"),KErrNone,EFalse);
+	CheckFileExists(_L("\\F32-TST\\Asdf"),KErrNone,ETrue);
+
+	TBuf<4> shortName;
+	shortName.SetLength(1);
+	shortName[0]=0xff;
+	r=TheFs.Rename(_L("\\F32-TST\\asdf"),shortName);
+	test(r==KErrNone);
+	r=TheFs.Delete(_L("\\F32-TST\\Asdf"));
+	test(r==KErrNotFound);
+	r=TheFs.Delete(shortName);
+	test(r==KErrNone);
+	}
+
+LOCAL_C void testMaxNameLength()
+//
+// Create files and directories with the maximum name length
+//
+	{
+
+	test.Next(_L("Test max name length"));
+	TBuf<128> longNameBase=_L("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
+	TFullName longName=_L("\\F32-TST\\MAXNAMELEN\\");
+
+	longName.Append(longNameBase);
+	longName.Append(_L("\\"));
+	longName.Append(longNameBase);
+	longName.Append(_L("\\"));
+
+	TInt r=TheFs.MkDirAll(longName);
+	test(r==KErrNone);
+
+	TInt i=0;
+	FOREVER
+		{
+		longName.Append(_L("X"));
+		longName.Append(_L("\\"));
+		r=TheFs.MkDirAll(longName);
+		if (r!=KErrNone)
+			break;
+		i++;
+		}
+	
+	longName.SetLength(longName.Length()-2);
+	r=TheFs.RmDir(longName);
+	test(r==KErrNone); // Make room for file
+	longName.SetLength(longName.Length()-2);
+
+	TFullName oldSessionPath;
+	r=TheFs.SessionPath(oldSessionPath);
+	test(r==KErrNone);
+	r=TheFs.SetSessionPath(longName);
+	test(r==KErrNone);
+	r=TheFs.SessionPath(longName);
+	test(r==KErrNone);
+
+	test.Printf(_L("MaxPathLength achieved = %d chars\n"),longName.Length());
+	TBuf<32> fileName=_L("012345678901234567890");
+	RFile f;
+	while (fileName.Length())
+		{
+		r=f.Replace(TheFs,fileName,EFileWrite);
+		if (r==KErrNone)
+			break;
+		fileName.SetLength(fileName.Length()-1);
+		}
+	
+	f.Close();
+	test.Printf(_L("Added filename %S\n"),&fileName);
+	r=f.Open(TheFs,fileName,EFileRead);
+	test(r==KErrNone);
+	f.Close();
+
+	CFileMan* fMan=CFileMan::NewL(TheFs);
+	r=fMan->RmDir(_L("\\F32-TST\\MAXNAMELEN\\"));
+	test(r==KErrNone);
+	delete fMan;
+
+	r=f.Open(TheFs,fileName,EFileRead);
+	test(r==KErrPathNotFound);
+	r=TheFs.SetSessionPath(oldSessionPath);
+	test(r==KErrNone);
+	}
+
+LOCAL_C void testErrorReturnValues()
+//
+// Test error return values
+//
+	{
+
+    TInt r;
+	test.Next(_L("Create folder with the name of an existing file"));
+	MakeFile(_L("\\BLUE"));
+    if (!IsTestingLFFS())
+        { //FIXME: Bad error codes from LFFS
+	    r=TheFs.MkDir(_L("\\BLUE\\"));
+        test(r==KErrAccessDenied);
+        MakeFile(_L("\\RED\\BLUE"));
+        r=TheFs.MkDir(_L("\\RED\\BLUE\\"));
+        test(r==KErrAccessDenied);
+        r=TheFs.MkDirAll(_L("\\BLUE\\GREEN\\ORANGE\\"));
+        test(r==KErrAccessDenied);
+        }
+
+	test.Next(_L("Create folder with the name of an existing folder"));
+	MakeDir(_L("\\VOLVO\\"));
+	r=TheFs.MkDir(_L("\\VOLVO\\"));
+	test(r==KErrAlreadyExists);
+	MakeDir(_L("\\FORD\\VOLKSWAGEN\\"));
+	r=TheFs.MkDirAll(_L("\\ford\\volkswagen\\"));
+	test(r==KErrAlreadyExists);
+
+	RFile f;
+    if (!IsTestingLFFS())
+        { //FIXME Bad error codes from LFFS
+	    test.Next(_L("Create a file with the name of an existing folder"));
+	    r=f.Create(TheFs,_L("\\VOLVO"),EFileRead|EFileWrite);
+	    test(r==KErrAccessDenied);
+	    r=f.Replace(TheFs,_L("\\VOLVO"),EFileRead|EFileWrite);
+	    test(r==KErrAccessDenied);
+	    r=f.Open(TheFs,_L("\\VOLVO"),EFileRead|EFileWrite);
+	    test(r==KErrAccessDenied);
+	    r=f.Create(TheFs,_L("\\FORD\\VOLKSWAGEN"),EFileRead|EFileWrite);
+	    test(r==KErrAccessDenied);
+	    r=f.Replace(TheFs,_L("\\FORD\\VOLKSWAGEN"),EFileRead|EFileWrite);
+	    test(r==KErrAccessDenied);
+	    r=f.Open(TheFs,_L("\\FORD\\VOLKSWAGEN"),EFileRead|EFileWrite);
+	    test(r==KErrAccessDenied);
+        }
+
+	test.Next(_L("Create a file with the name of an existing file"));
+	r=f.Create(TheFs,_L("\\BLUE"),EFileRead|EFileWrite);
+	test(r==KErrAlreadyExists);
+	}
+
+LOCAL_C void testSetEntry()
+//
+// Test set entry
+//
+	{
+
+	test.Next(_L("Test SetEntry"));
+//	TDateTime dateTime(1968,ENovember,19,12,59,0,0); Year must be > 1980
+	TDateTime dateTime(1981,ENovember,19,12,59,0,0);
+	TTime time(dateTime);
+	MakeFile(_L("DUMENTRY."));
+	
+	RFile f;
+	TInt r=f.Open(TheFs,_L("dumentry"),EFileRead);
+	test(r==KErrNone);
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttReadOnly,KEntryAttArchive);
+	test(r==KErrInUse);
+	f.Close();
+	
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttReadOnly,KEntryAttArchive);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),KEntryAttReadOnly,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttReadOnly);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttDir,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttVolume,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttRemote,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttDir|KEntryAttVolume,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttDir|KEntryAttRemote,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttVolume|KEntryAttRemote,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttDir|KEntryAttVolume|KEntryAttRemote,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttVolume);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttRemote);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttDir|KEntryAttVolume);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttDir|KEntryAttRemote);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttVolume|KEntryAttRemote);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,0,KEntryAttDir|KEntryAttVolume|KEntryAttRemote);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttDir,KEntryAttVolume);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttDir,KEntryAttRemote);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));	
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttVolume,KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttVolume,KEntryAttRemote);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttRemote,KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=TheFs.SetEntry(_L("dumentry."),time,KEntryAttRemote,KEntryAttVolume);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+
+	r=f.Open(TheFs,_L("dumentry"),EFileWrite);
+	test(r==KErrNone);	
+
+	r=f.SetAtt(KEntryAttDir,0);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	r=f.SetAtt(KEntryAttVolume,KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("DUMEntry"),0,TTime(dateTime));
+	f.Close();
+	r=TheFs.Delete(_L("dumEntry."));
+	test(r==KErrNone);
+
+	MakeDir(_L("\\DumEntry\\"));
+	r=TheFs.SetEntry(_L("\\dumentry\\"),time,KEntryAttReadOnly,KEntryAttArchive);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttReadOnly|KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry."),time,0,KEntryAttReadOnly);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,KEntryAttDir,0);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,KEntryAttVolume,0);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,KEntryAttVolume|KEntryAttDir,0);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,0,KEntryAttVolume|KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,0,KEntryAttVolume);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,0,KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,KEntryAttVolume,KEntryAttDir);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.SetEntry(_L("\\dumentry"),time,KEntryAttDir,KEntryAttVolume);
+	test(r==KErrNone);
+	CheckEntry(_L("\\DUMEntry"),KEntryAttDir,TTime(dateTime));
+	r=TheFs.RmDir(_L("\\dumEntry\\"));
+	test(r==KErrNone);
+	}
+
+	
+LOCAL_C void testSetFileAttributes()
+//
+// Test RFile::SetAtt() and RFile::Set()
+//
+	{
+//	First test RFile::SetAtt() function
+	
+	test.Next(_L("Test RFile::SetAtt()"));
+
+//	Create a file "TEMPFILE.TMP" and set attributes to hidden	
+	RFile file;
+	TInt r=file.Replace(TheFs,_L("TEMPFILE.TMP"),0);
+	test(r==KErrNone || r==KErrPathNotFound);	
+	r=file.SetAtt(KEntryAttHidden,0);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check attributes are as set
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	TUint atts;
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test(atts&KEntryAttHidden);
+
+//	Change attributes from hidden to system	
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.SetAtt(KEntryAttSystem,KEntryAttHidden);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check attributes have been changed
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test(atts&KEntryAttSystem);
+
+//	Change attributes to normal
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.SetAtt(KEntryAttNormal,KEntryAttSystem|KEntryAttArchive);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check attributes have been changed
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test(atts==KEntryAttNormal);
+
+//	Attempt to change attributes from normal file to directory	
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.SetAtt(KEntryAttDir,KEntryAttNormal);
+	test(r==KErrNone);	//	Returns KErrNone but DOESN'T change the file to a directory
+	file.Close();
+
+//	Check the file has not been changed to a directory
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test((TInt)(atts&KEntryAttDir)==KErrNone);
+
+//	Change the attributes from normal file to hidden file
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.SetAtt(KEntryAttHidden,KEntryAttNormal);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check the attributes have been changed
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test(atts&KEntryAttHidden);
+
+//	Try to change the attributes from hidden file to volume	
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.SetAtt(KEntryAttVolume,KEntryAttHidden);
+	test(r==KErrNone);	//	Returns KErrNone but DOESN'T change the file to a volume
+	file.Close();
+
+//	Check that the hidden file has not been changed to a volume
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test((TInt)(atts&KEntryAttVolume)==KErrNone);
+
+//	Test RFile::Set() function	
+	
+	test.Next(_L("Test RFile::Set()"));	
+
+//	Check attributes 
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	file.Close();
+	test(atts==KEntryAttNormal);
+
+//	Change attributes from hidden to system	- and change modification time
+	TDateTime dateTime(1998,EMay,25,18,23,0,0);
+	TTime modTime1(dateTime);
+	TTime retTime;
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Set(modTime1,KEntryAttSystem,KEntryAttNormal);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check attributes have been changed
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	r=file.Modified(retTime);
+	test(r==KErrNone);
+	file.Close();
+	test(atts&KEntryAttSystem);
+	test(retTime==modTime1);
+
+//	Change attributes to normal - and change modification time
+	dateTime.Set(1997,EMay,24,17,25,0,0);
+	TTime modTime2(dateTime);
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Set(modTime2,KEntryAttNormal,KEntryAttSystem|KEntryAttArchive);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check attributes have been changed
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	r=file.Modified(retTime);
+	test(r==KErrNone);
+	file.Close();
+	test(atts==KEntryAttNormal);
+	test(retTime==modTime2);
+
+//	Attempt to change attributes from normal file to directory	
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Set(modTime1,KEntryAttDir,KEntryAttNormal);
+	test(r==KErrNone);	//	Returns KErrNone but DOESN'T change the file to a directory
+	file.Close();
+
+//	Check the file has not been changed to a directory
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	r=file.Modified(retTime);
+	test(r==KErrNone);
+	file.Close();
+	test((TInt)(atts&KEntryAttDir)==KErrNone);
+	test(retTime==modTime1);//	Modification time should have been set successfully
+
+//	Change the attributes from normal file to hidden file - and change modification time
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Set(modTime1,KEntryAttHidden,KEntryAttNormal);
+	test(r==KErrNone);
+	file.Close();
+
+//	Check the attributes have been changed
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	r=file.Modified(retTime);
+	file.Close();
+	test(atts&KEntryAttHidden);
+	test(retTime==modTime1);
+
+//	Try to change the attributes from hidden file to volume	
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Set(modTime2,KEntryAttVolume,KEntryAttHidden);
+	test(r==KErrNone);	//	Returns KErrNone but DOESN'T change the file to a volume
+	file.Close();
+
+//	Check that the hidden file has not been changed to a volume
+	file.Open(TheFs,_L("TEMPFILE.TMP"),EFileWrite);
+	r=file.Att(atts);
+	test(r==KErrNone);
+	r=file.Modified(retTime);
+	test(r==KErrNone);
+	file.Close();
+	test((TInt)(atts&KEntryAttVolume)==KErrNone);
+	test(retTime==modTime2);	//	Modification time should have been set successfully
+	
+	r=TheFs.Delete(_L("TEMPFILE.TMP"));
+	
+	}	
+
+
+GLDEF_C void CallTestsL()
+//
+// Do tests relative to session path
+//
+	{
+
+	TurnAllocFailureOff();
+	CreateTestDirectory(_L("\\F32-TST\\TNMBS\\"));
+	testMkDirRmDir(); // Must come first
+	testSetEntry();
+	testSetFileAttributes();
+	testRename();
+	TestLongFileName();
+	testRenameRegression();
+	testRenameCase();
+	testMaxNameLength();
+	testEntry();
+	testReplace();
+	testErrorReturnValues();
+	DeleteTestDirectory();
+	}
+