diff -r 000000000000 -r a41df078684a kerneltest/f32test/server/t_nmbs.cpp --- /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 +#include +#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(); + } +