kerneltest/f32test/server/t_misc.cpp
changeset 0 a41df078684a
child 42 a179b74831c9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/server/t_misc.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,1398 @@
+// 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\t_misc.cpp
+// 
+//
+
+#include <f32file.h>
+#include <e32test.h>
+#include "t_server.h"
+
+#ifdef __VC32__
+    // Solve compilation problem caused by non-English locale
+    #pragma setlocale("english")
+#endif
+
+GLDEF_D RTest test(_L("T_MISC"));
+
+LOCAL_C void Test1()
+//
+// Open, write to and read from a file
+//
+	{
+
+	test.Next(_L("Open, write to and read from a file"));
+	TInt r=TheFs.SetSessionPath(gSessionPath);
+	test(r==KErrNone);
+	RFile file;
+	r=file.Create(TheFs,_L("Hello.Wld"),EFileWrite);
+	test(r==KErrNone);
+	r=file.Write(_L8("Hello World"),11);
+	test(r==KErrNone);
+	file.Close();
+
+	r=file.Open(TheFs,_L("Hello.Wld"),EFileRead);
+	test(r==KErrNone);
+	TBuf8<256> buf;
+	r=file.Read(buf);
+	test(r==KErrNone);
+	test(buf==_L8("Hello World"));
+	file.Close();
+	}
+
+LOCAL_C void Test2()
+//
+// Open and read from a file
+//
+	{
+
+	test.Next(_L("Open and read from a file"));
+	TInt r=TheFs.SetSessionPath(gSessionPath);
+	test(r==KErrNone);
+	RFile file;
+	r=file.Open(TheFs,_L("Hello.Wld"),EFileRead);
+	test(r==KErrNone);
+	TBuf8<256> buf;
+	r=file.Read(buf);
+	test(r==KErrNone);
+	test(buf==_L8("Hello World"));
+	file.Close();
+	r=TheFs.Delete(_L("HELLO.WLD"));
+	test(r==KErrNone);
+	}
+
+LOCAL_C void Test3()
+//
+// Create nested directories
+//
+	{
+
+	test.Next(_L("Create nested directories"));
+	TInt r=TheFs.SetSessionPath(gSessionPath);
+	test(r==KErrNone);
+	TheFs.ResourceCountMarkStart();
+//
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\A.B"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\F32-TST\\RIGHT\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+//
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\ONE\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\TWO\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\THREE\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\TWO\\BOTTOM\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+//
+	r=TheFs.MkDirAll(_L("\\F32-TST\\RIGHT\\TOP\\MID\\BOT\\"));
+	test(r==KErrNone || r==KErrAlreadyExists);
+	}
+
+LOCAL_C void Test4()
+//
+// Test returned error values
+//
+	{
+
+	test.Next(_L("Test returned error values"));
+	TInt r=TheFs.SetSessionPath(gSessionPath);
+	test(r==KErrNone);
+	TheFs.ResourceCountMarkStart();
+//
+	r=TheFs.MkDir(_L("\\"));
+	test(r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\LEFT"));
+	test(r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\"));
+	test(r==KErrAlreadyExists);
+	r=TheFs.MkDir(_L("\\F32-TST\\LEFT\\..\\NEWDIR\\"));
+	test(r==KErrBadName);
+	r=TheFs.MkDir(_L("\\F32-TST\\NEWDIR\\SUBDIR\\"));
+	test(r==KErrPathNotFound);
+//
+	r=TheFs.RmDir(_L("\\"));
+	test(r==KErrInUse);
+	r=TheFs.RmDir(_L("\\PROG"));
+	test(r==KErrInUse);
+	r=TheFs.RmDir(_L("\\F32-TST\\"));
+	test(r==KErrInUse);
+
+
+	RDir dir;
+	r=dir.Open(TheFs,_L("V:\\asdf"),KEntryAttNormal);
+	test(r==KErrNone || r==KErrNotReady || r==KErrNotFound);
+	if (r==KErrNone)
+		dir.Close();
+	r=dir.Open(TheFs,_L("L:\\asdf"),KEntryAttNormal);
+	test(r==KErrNone || r==KErrNotReady || r==KErrNotFound);
+	dir.Close();
+//
+	TEntry entry;
+	r=TheFs.Entry(_L("z:\\NOTEXiSTS\\file.txt"),entry);
+	test(r==KErrPathNotFound);
+	r=TheFs.Entry(_L("z:\\NOTEXiSTS\\"),entry);
+	test(r==KErrNotFound);
+	r=TheFs.Entry(_L("z:\\SYSTEM\\"),entry);
+	test(r==KErrNone);
+	r=TheFs.Entry(PlatSec::ConfigSetting(PlatSec::EPlatSecEnforceSysBin)?_L("z:\\SYS\\BIN\\ESHELL.EXE"):_L("z:\\SYSTEM\\BIN\\ESHELL.EXE"),entry);
+	test(r==KErrNone);
+
+	r=dir.Open(TheFs,_L("\\*"),NULL);
+	test(r==KErrNone);
+	TEntry dirEntry;
+	r=dir.Read(dirEntry);
+	test(r==KErrNone || r==KErrEof);
+	if (r==KErrNone)
+		test.Printf(_L("%S\n"),&dirEntry.iName);
+	dir.Close();
+
+	r=dir.Open(TheFs,_L("A:\\*"),NULL);
+	test(r==KErrNotReady || r==KErrNone);
+	dir.Close();
+	}
+
+LOCAL_C void Test5()
+//
+// Read files directly from the rom
+//
+
+	{
+	test.Next(_L("Read Files directly from the rom"));
+
+	TInt pos=0;
+	TInt r;
+	_LIT(KTFileCpp, "Z:\\test\\T_FILE.CPP");
+	_LIT(KTFsrvCpp, "Z:\\test\\T_FSRV.CPP");
+
+	if ( TheFs.IsFileInRom(KTFileCpp) != NULL && TheFs.IsFileInRom(KTFsrvCpp) != NULL )
+		{
+		RFile f;
+		r=f.Open(TheFs,KTFileCpp,EFileRead);
+		test(r==KErrNone);
+		r=f.Seek(ESeekAddress,pos);
+		TText8* ptrPos=*(TText8**)&pos;
+		test(r==KErrNone);
+		TBuf8<1024> readBuf;
+		r=f.Read(readBuf);
+		test(r==KErrNone);
+		test(readBuf.Length()==readBuf.MaxLength());
+		TPtrC8 memBuf(ptrPos,readBuf.Length());
+		test(memBuf==readBuf);
+
+		ptrPos+=9913;
+		pos=9913;
+		r=f.Seek(ESeekStart,pos);
+		test(r==KErrNone);
+		readBuf.SetLength(0);
+		r=f.Read(readBuf);
+		test(r==KErrNone);
+		test(readBuf.Length()==readBuf.MaxLength());
+		memBuf.Set(ptrPos,readBuf.Length());
+		test(memBuf==readBuf);
+
+		RFile f2;
+		pos=10;
+		r=f2.Open(TheFs,KTFsrvCpp,EFileRead);
+
+		test(r==KErrNone);
+		r=f2.Seek(ESeekAddress,pos);
+		ptrPos=*(TText8**)&pos;
+		test(r==KErrNone);
+		readBuf.SetLength(0);
+		pos=10;
+		r=f2.Seek(ESeekStart,pos);
+		test(r==KErrNone);
+		r=f2.Read(readBuf);
+		test(r==KErrNone);
+		test(readBuf.Length()==readBuf.MaxLength());
+		memBuf.Set(ptrPos,readBuf.Length());
+		test(memBuf==readBuf);
+
+		ptrPos+=2445;
+		pos=10+2445;
+		r=f2.Seek(ESeekStart,pos);
+		test(r==KErrNone);
+		readBuf.SetLength(0);
+		r=f2.Read(readBuf);
+		test(r==KErrNone);
+		test(readBuf.Length()==readBuf.MaxLength());
+		memBuf.Set(ptrPos,readBuf.Length());
+		test(memBuf==readBuf);
+
+		pos=0;
+		r=f.Seek(ESeekAddress,pos);
+		ptrPos=*(TText8**)&pos;
+		test(r==KErrNone);
+		readBuf.SetLength(0);
+		pos=0;
+		r=f.Seek(ESeekStart,pos);
+		test(r==KErrNone);
+		r=f.Read(readBuf);
+		test(r==KErrNone);
+		test(readBuf.Length()==readBuf.MaxLength());
+		memBuf.Set(ptrPos,readBuf.Length());
+		test(memBuf==readBuf);
+
+		ptrPos+=5245;
+		pos=5245;
+		r=f.Seek(ESeekStart,pos);
+		test(r==KErrNone);
+		readBuf.SetLength(0);
+		r=f.Read(readBuf);
+		test(r==KErrNone);
+		test(readBuf.Length()==readBuf.MaxLength());
+		memBuf.Set(ptrPos,readBuf.Length());
+		test(memBuf==readBuf);
+
+		f.Close();
+		f2.Close();
+		}
+	}
+
+LOCAL_C void Test6()
+//
+// Test rom return values
+//
+	{
+	test.Next(_L("Test rom return values"));
+
+	RFile f;
+	TInt r=f.Replace(TheFs,_L("Z:\\Test\\T_Fsrv.Cpp"),EFileRead);
+	test(r==KErrAccessDenied);
+	r=f.Create(TheFs,_L("Z:\\Test\\newT_Fsrv.Cpp"),EFileRead);
+	test(r==KErrAccessDenied);
+	r=f.Open(TheFs,_L("Z:\\Test\\T_Fsrv.Cpp"),EFileRead);
+	test(r==KErrNone);
+	f.Close();
+	r=f.Open(TheFs,_L("Z:\\Test\\T_Fsrv.Cpp"),EFileRead|EFileWrite);
+	test(r==KErrAccessDenied);
+	}
+
+LOCAL_C void Test7()
+//
+// Test cache
+//
+	{
+
+	test.Next(_L("Test cache updated when writing to a file"));
+	TUidType uid1(TUid::Uid(1),TUid::Uid(2),TUid::Uid(3));
+	TBuf8<32> contents1=_L8("asdf asdf asdf");
+	TBuf<32> file1=_L("\\TMISC\\CACHE.FILE");
+	MakeFile(file1,uid1,contents1);
+
+	TEntry entry;
+	TInt r=TheFs.Entry(file1,entry);
+	test(r==KErrNone);
+	test(entry.iType==uid1);
+
+	TUidType uid2(TUid::Uid(4),TUid::Uid(5),TUid::Uid(6));
+	TCheckedUid checkedUid(uid2);
+	TPtrC8 uidData((TUint8*)&checkedUid,sizeof(TCheckedUid));
+	RFile f;
+	r=f.Open(TheFs,file1,EFileRead|EFileWrite);
+	test(r==KErrNone);
+	r=f.Write(uidData);
+	test(r==KErrNone);
+	r = f.Flush();
+	test(r==KErrNone);
+
+	r=TheFs.Entry(file1,entry);
+	test(r==KErrNone);
+	test(entry.iType==uid2);
+
+	f.Close();
+	r=TheFs.Entry(file1,entry);
+	test(r==KErrNone);
+	test(entry.iType==uid2);
+	}
+
+LOCAL_C void Test8()
+//
+// Test IsValidName
+//
+	{
+	test.Next(_L("Test RFs::IsValidName(TDesC)"));
+
+	// tests calling IsValidName() with invalid name as first call to session
+	// see defect EXT-57KH9K
+	_LIT(KInvalidName, "test\\i1.jpg");
+	RFs fs;
+	test(KErrNone==fs.Connect());
+	test(fs.IsValidName(KInvalidName)==EFalse);
+	fs.Close();
+
+	test(TheFs.IsValidName(_L("*"))==EFalse);
+	test(TheFs.IsValidName(_L("?"))==EFalse);
+	test(TheFs.IsValidName(_L(">"))==EFalse);
+	test(TheFs.IsValidName(_L("<"))==EFalse);
+	test(TheFs.IsValidName(_L(":"))==EFalse);
+	test(TheFs.IsValidName(_L("\""))==EFalse);
+	test(TheFs.IsValidName(_L("/"))==EFalse);
+	test(TheFs.IsValidName(_L("|"))==EFalse);
+	test(TheFs.IsValidName(_L("\\"))==EFalse);
+
+	test(TheFs.IsValidName(_L("xx*yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx?yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx>yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx<yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx:yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx\"yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx/yy"))==EFalse);
+	test(TheFs.IsValidName(_L("xx|yy"))==EFalse);
+
+	test(TheFs.IsValidName(_L("C:\\*\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\?\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\>\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\<\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\:\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\\"\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\/\\group\\release.txt"))==EFalse);
+	test(TheFs.IsValidName(_L("C:\\|\\group\\release.txt"))==EFalse);
+
+	test(TheFs.IsValidName(_L(""))==EFalse); // must be a name or extension present
+	test(TheFs.IsValidName(_L(".ext")));
+	test(TheFs.IsValidName(_L("C:\\asdf.blarg\\"))==EFalse);
+	test(TheFs.IsValidName(_L("\\"))==EFalse);
+
+	test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg")));	//	Valid names
+	test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg")));	//	Valid names
+	test(TheFs.IsValidName(_L("\'")));							//	Valid names
+
+	test.Next(_L("Test RFs::IsValidName(TDesC, TDes) overload"));
+
+	TText testChar;
+	test(TheFs.IsValidName(_L("*"),testChar)==EFalse);
+	test(testChar=='*');
+	test(TheFs.IsValidName(_L("?"),testChar)==EFalse);
+	test(testChar=='?');
+	test(TheFs.IsValidName(_L(">"),testChar)==EFalse);
+	test(testChar=='>');
+	test(TheFs.IsValidName(_L("<"),testChar)==EFalse);
+	test(testChar=='<');
+	test(TheFs.IsValidName(_L(":"),testChar)==EFalse);
+	test(testChar==':');
+	test(TheFs.IsValidName(_L("\""),testChar)==EFalse);
+	test(testChar=='\"');	//	Tests that " is illegal
+	test(TheFs.IsValidName(_L("/"),testChar)==EFalse);
+	test(testChar=='/');
+	test(TheFs.IsValidName(_L("|"),testChar)==EFalse);
+	test(testChar=='|');
+	test(TheFs.IsValidName(_L("\\"),testChar)==EFalse);
+	test(testChar==' ');
+
+	test(TheFs.IsValidName(_L("xx*yy"),testChar)==EFalse);
+ 	test(testChar=='*');
+	test(TheFs.IsValidName(_L("xx?yy"),testChar)==EFalse);
+	test(testChar=='?');
+	test(TheFs.IsValidName(_L("xx>yy"),testChar)==EFalse);
+	test(testChar=='>');
+	test(TheFs.IsValidName(_L("xx<yy"),testChar)==EFalse);
+	test(testChar=='<');
+	test(TheFs.IsValidName(_L("xx:yy"),testChar)==EFalse);
+	test(testChar==':');
+	test(TheFs.IsValidName(_L("xx\"yy"),testChar)==EFalse);
+	test(testChar=='\"');	//	Tests that " is illegal
+	test(TheFs.IsValidName(_L("xx/yy"),testChar)==EFalse);
+	test(testChar=='/');
+	test(TheFs.IsValidName(_L("xx|yy"),testChar)==EFalse);
+	test(testChar=='|');
+
+	test(TheFs.IsValidName(_L("C:\\*\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='*');
+	test(TheFs.IsValidName(_L("C:\\?\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='?');
+	test(TheFs.IsValidName(_L("C:\\..\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='.');	//	Only one "." returned however many are in filename
+	test(TheFs.IsValidName(_L("C:\\.\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='.');
+	test(TheFs.IsValidName(_L("C:\\>\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='>');
+	test(TheFs.IsValidName(_L("C:\\<\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='<');
+	test(TheFs.IsValidName(_L("C:\\HelloWorld\\:\\group\\release.txt"),testChar)==EFalse);
+	test(testChar==':');
+
+
+	test(TheFs.IsValidName(_L("C::\\group\\release.txt"),testChar)==EFalse);
+	test(testChar==':');
+	test(TheFs.IsValidName(_L(">\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='>');
+	test(TheFs.IsValidName(_L("C|group\\release.txt"),testChar)==EFalse);
+	test(testChar=='|');
+	test(TheFs.IsValidName(_L("C\\|\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='|');
+
+	test(TheFs.IsValidName(_L("\\>"),testChar)==EFalse);
+	test(testChar=='>');
+	test(TheFs.IsValidName(_L("C:\\|group\\release.txt"),testChar)==EFalse);
+	test(testChar=='|');
+
+	test(TheFs.IsValidName(_L("C:\\\"\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='\"');
+	test(TheFs.IsValidName(_L("C:\\/\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='/');
+	test(TheFs.IsValidName(_L("C:\\|\\group\\release.txt"),testChar)==EFalse);
+	test(testChar=='|');
+	test(TheFs.IsValidName(_L("C:\\ \\group\\release.txt"),testChar)==EFalse); // must be a name or extension present
+	test(testChar==' ');
+
+//	Test that \ is not allowed in filenames
+	TFileName filename;
+	filename=_L("C:\\HelloWorld\\\\\\group\\release.txt");
+	TPtr pChar(&testChar,sizeof(TText),sizeof(TText));
+	test(TheFs.IsValidName(filename,testChar)==EFalse);
+	test(pChar.Find(_L("\\"))!=KErrNotFound);
+	filename=_L("C:\\\\\\group\\release.txt");
+	test(TheFs.IsValidName(filename,testChar)==EFalse);
+	test(pChar.Find(_L("\\"))!=KErrNotFound);
+	filename=_L("C:\\Hello World\\group\\release.txt");
+	filename[8]=KPathDelimiter;	//	Makes C:\\Hello World\\group\\release.txt
+	test(TheFs.IsValidName(filename,testChar));
+	filename=_L("C:\\HelloWorld\\::\\group\\release.txt");
+	test(TheFs.IsValidName(filename,testChar)==EFalse);
+	test(pChar.Find(_L(":"))!=KErrNotFound);
+
+	filename=_L("C:\\>>\\group\\release.txt");
+	test(TheFs.IsValidName(filename,testChar)==EFalse);
+	test(pChar.Find(_L(">"))!=KErrNotFound);
+
+	test(TheFs.IsValidName(_L(""),testChar)==EFalse); // Must be a name
+	test(testChar==' ');
+	test(TheFs.IsValidName(_L(".ext"),testChar));
+	test(TheFs.IsValidName(_L("C:\\asdf.blarg\\"),testChar)==EFalse);
+	test(testChar==' ');	//	Must be a name else testChar is set to blank
+	test(TheFs.IsValidName(_L("C:\\asdf.blarg"),testChar));
+
+	test(TheFs.IsValidName(_L("C:\\asdf..blarg\\"),testChar)==EFalse);
+	test(testChar==' ');	//	Must be a name else testChar is set to blank
+	test(TheFs.IsValidName(_L("C:\\asdf..blarg"),testChar));
+
+	test(TheFs.IsValidName(_L("\\"),testChar)==EFalse);
+	test(testChar==' ');
+
+//	Test multiple evil characters - parsing occurs from right to left
+//	except that wildcarded characters take priority and are picked out first
+	test(TheFs.IsValidName(_L("abc>def|ghi?jkl:mno<pqr*stu"),testChar)==EFalse);
+	test(testChar=='*');
+	test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno?pqr"),testChar)==EFalse);
+	test(testChar=='?');
+	test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno"),testChar)==EFalse);
+	test(testChar==':');
+	test(TheFs.IsValidName(_L("abc>def|ghi<jkl"),testChar)==EFalse);
+	test(testChar=='<');
+	test(TheFs.IsValidName(_L("abc>def|ghi"),testChar)==EFalse);
+	test(testChar=='|');
+	test(TheFs.IsValidName(_L("abc>def"),testChar)==EFalse);
+	test(testChar=='>');
+
+	test(!TheFs.IsValidName(_L("C:\\v123456.."),testChar));				//	Valid name
+	test(TheFs.IsValidName(_L("abc"),testChar));						//	Valid name
+	test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"),testChar));	//	Valid name
+	test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"),testChar));	//	Valid name
+	test(TheFs.IsValidName(_L("\'"),testChar));							//	Valid name
+
+	//PDEF133084: The wild character in the extension was not being detected.
+	_LIT( KTestString, "E:\\My Videos\\Downloads\\1\\1\\Name.3gp?" );
+    TBuf<50> path;
+    path = KTestString;
+    TBool validName( EFalse );
+    TText badChar;
+    TInt badCharLoc( KErrNotFound );
+
+    while ( ! validName )
+        {
+        validName = TheFs.IsValidName( path, badChar );
+
+        if ( ! validName )
+            {
+            badCharLoc = path.LocateReverse( badChar );
+
+            if ( KErrNotFound != badCharLoc )
+                {
+                path[badCharLoc] = '_';
+                }
+            }
+        }
+	}
+
+LOCAL_C void Test9()
+//
+// Test IsFileInRom
+//
+	{
+
+	test.Next(_L("Test RFs::IsFileInRom"));
+
+	CFileMan* fMan=CFileMan::NewL(TheFs);
+	TInt r=fMan->Copy(_L("Z:\\TEST\\T_FILE.CPP"),_L("C:\\T_FILE.CPP"));
+	test(r==KErrNone || r==KErrAccessDenied);
+	delete fMan;
+	TUint8* addr=TheFs.IsFileInRom(_L("C:\\ESHELL.EXE"));
+	test(addr==NULL);
+	addr=TheFs.IsFileInRom(_L("Z:\\TEST\\T_FILE.CPP"));
+	if (addr!=NULL)
+		{
+		test(addr!=NULL);
+		TPtrC8 startOfFile(addr,12);
+		test(startOfFile==_L8("// Copyright"));
+		}
+	else
+		{
+		test (addr==NULL);
+		}
+	}
+
+LOCAL_C void Test10()
+//
+// Test drive names
+//
+	{
+
+	test.Next(_L("Test Drive Names"));
+	TFileName driveName;
+	TInt i;
+	for(i=0;i<KMaxDrives;i++)
+		{
+		TInt r=TheFs.GetDriveName(i,driveName);
+		test(r==KErrNone);
+		if (driveName.Length())
+			test.Printf(_L("Default name of %c: == %S\n"),'A'+i,&driveName);
+		}
+
+	TBuf<64> drive0=_L("Dilbert");
+	TBuf<64> drive4=_L("Dogbert");
+	TBuf<64> drive17=_L("Flibble");
+	TBuf<64> drive25=_L("RAMDRIVE");
+	TInt r=TheFs.SetDriveName(0,drive0);
+	test(r==KErrNone);
+	r=TheFs.SetDriveName(4,drive4);
+	test(r==KErrNone);
+	r=TheFs.SetDriveName(17,drive17);
+	test(r==KErrNone);
+	r=TheFs.SetDriveName(25,drive25);
+	test(r==KErrNone);
+
+	r=TheFs.GetDriveName(0,driveName);
+	test(r==KErrNone);
+	test(driveName==drive0);
+	r=TheFs.GetDriveName(4,driveName);
+	test(r==KErrNone);
+	test(driveName==drive4);
+	r=TheFs.GetDriveName(17,driveName);
+	test(r==KErrNone);
+	test(driveName==drive17);
+	r=TheFs.GetDriveName(25,driveName);
+	test(r==KErrNone);
+	test(driveName==drive25);
+
+	drive0=_L("askdjflsdfourewoqiuroiuaksjdvx,cvsdhwjhjhalsjhfshfkjhslj");
+	r=TheFs.SetDriveName(0,drive0);
+	test(r==KErrNone);
+	r=TheFs.GetDriveName(0,driveName);
+	test(r==KErrNone);
+	test(driveName==drive0);
+
+//	Test with illegal characters in drive name
+	drive0=_L("Dil>bert");
+	drive4=_L("Dog?bert");
+	drive17=_L("Fli*bble");
+	drive25=_L("RAMD//RIVE");
+
+	r=TheFs.SetDriveName(0,drive0);
+	test(r==KErrBadName);
+	r=TheFs.SetDriveName(4,drive4);
+	test(r==KErrBadName);
+	r=TheFs.SetDriveName(17,drive17);
+	test(r==KErrBadName);
+	r=TheFs.SetDriveName(25,drive25);
+	test(r==KErrBadName);
+
+//	Test that it is OK to set the name to no characters
+
+	drive0=_L("");
+	drive4=_L("");
+	drive17=_L("");
+	drive25=_L("");
+
+	r=TheFs.SetDriveName(0,drive0);
+	test(r==KErrNone);
+	r=TheFs.SetDriveName(4,drive4);
+	test(r==KErrNone);
+	r=TheFs.SetDriveName(17,drive17);
+	test(r==KErrNone);
+	r=TheFs.SetDriveName(25,drive25);
+	test(r==KErrNone);
+
+	r=TheFs.GetDriveName(0,driveName);
+	test(r==KErrNone);
+	test(driveName==drive0);
+	r=TheFs.GetDriveName(4,driveName);
+	test(r==KErrNone);
+	test(driveName==drive4);
+	r=TheFs.GetDriveName(17,driveName);
+	test(r==KErrNone);
+	test(driveName==drive17);
+	r=TheFs.GetDriveName(25,driveName);
+	test(r==KErrNone);
+	test(driveName==drive25);
+
+
+	}
+
+LOCAL_C void Test11()
+//
+// Miscellaneous tests
+//
+	{
+
+	test.Next(_L("Miscellaneous tests"));
+	TVolumeInfo vol;
+	TInt r=TheFs.Volume(vol);
+	test.Printf(_L("VolumeName = %S\n"),&vol.iName);
+	test(r==KErrNone);
+	r=TheFs.RmDir(_L("\\asdfasdf.\\"));
+	test(r==KErrBadName);
+	r=TheFs.MkDir(_L("\\asdfasdf.\\"));
+	test(r==KErrBadName);
+	}
+
+LOCAL_C void Test12()
+//
+// Test SetNotifyUser and GetNotifyUser
+//
+	{
+
+	test.Next(_L("Test Set and GetNotifyUser"));
+	TBool notifyState=TheFs.GetNotifyUser();
+	test(notifyState);
+	notifyState=EFalse;
+	TheFs.SetNotifyUser(notifyState);
+	notifyState=TheFs.GetNotifyUser();
+	test(notifyState==EFalse);
+	notifyState=ETrue;
+	TheFs.SetNotifyUser(notifyState);
+	notifyState=TheFs.GetNotifyUser();
+	test(notifyState);
+	}
+
+LOCAL_C void Test13()
+//
+// Test return values from RFs::Volume on cf-cards
+//
+	{
+
+	test.Next(_L("Test RFs::Volume"));
+	TVolumeInfo vol;
+	TInt r=TheFs.Volume(vol,EDriveB);
+	test(r==KErrNotReady || r==KErrNone || KErrPathNotFound);
+	test.Printf(_L("RFs::Volume EDriveB returned %d\n"),r);
+
+	r=TheFs.Volume(vol,EDriveC);
+	test(r==KErrNotReady || r==KErrNone || KErrPathNotFound);
+	test.Printf(_L("RFs::Volume EDriveC returned %d\n"),r);
+
+	r=TheFs.Volume(vol,EDriveD);
+	test(r==KErrNotReady || r==KErrNone || KErrPathNotFound);
+	test.Printf(_L("RFs::Volume EDriveD returned %d\n"),r);
+
+	r=TheFs.Volume(vol,EDriveE);
+	test(r==KErrNotReady || r==KErrNone || KErrPathNotFound);
+	test.Printf(_L("RFs::Volume EDriveE returned %d\n"),r);
+
+	r=TheFs.Volume(vol,EDriveF);
+	test(r==KErrNotReady || r==KErrNone || KErrPathNotFound);
+	test.Printf(_L("RFs::Volume EDriveF returned %d\n"),r);
+	}
+
+
+void    DoTest14(TInt aDrvNum);
+TInt    CreateStuffedFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize);
+TInt    CreateEmptyFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize);
+TBool   CheckFileContents(RFs& aFs, const TDesC& aFileName);
+TBool   CheckBufferContents(const TDesC8& aBuffer, TUint aPrintBaseAddr=0);
+
+/**
+Testing unallocated data initialization vulnerability in RFile
+This test is performed on RAM drives and non-removable media that supports DeleteNotify (KMediaAttDeleteNotify flag)
+e.g. XSR NAND
+*/
+LOCAL_C void Test14()
+{
+	TInt nRes;
+
+	test.Next(_L("Testing unallocated data initialization vulnerability in RFile"));
+
+	TDriveList driveList;
+	TDriveInfo driveInfo;
+
+	//-- 1. get drives list
+	nRes=TheFs.DriveList(driveList);
+    test(nRes == KErrNone);
+
+	//-- 2. walk through all drives, performing the test only on suitable ones
+	for (TInt drvNum=0; drvNum<KMaxDrives; ++drvNum)
+    {
+	    if(!driveList[drvNum])
+	        continue;   //-- skip unexisting drive
+
+	    //-- get drive info
+	    test(TheFs.Drive(driveInfo, drvNum) == KErrNone);
+
+	    //-- select a suitable drive for the testing. It shall be RAM drive, of FLASH but not removable
+	    //-- and not read only, if it is FLASH, it shall support "Delete Notify" facility
+        switch(driveInfo.iType)
+        {
+        //-- RAM drive, OK
+        case EMediaRam:
+        break;
+
+        //-- FLASH drive, OK
+        case EMediaFlash:
+        case EMediaNANDFlash:
+            if(driveInfo.iMediaAtt & KMediaAttDeleteNotify)
+                break; //-- this type of media shall support DeleteNotify flag, otherwise this test is inconsistent
+            else continue;
+
+        //break; //unreacable
+
+        default:
+            continue;
+        }//switch(driveInfo.iType)
+
+		if (driveInfo.iDriveAtt	& KDriveAttSubsted)
+			{
+			// skip subst drives.
+			continue;
+			}
+
+        TBool readOnly = driveInfo.iMediaAtt & KMediaAttWriteProtected;
+        if(readOnly)
+            continue; //-- nothing to do, can't create any file etc.
+
+        //-- skip test on the emulator's C: drive, doesn't make any sense because
+        //-- in this case we deal with WIN32 API and filesystem.
+        #ifdef __WINS__
+        if(drvNum == 2)
+        {
+             test.Printf(_L("Skipping test on emulator's C: drive\n"));
+             continue;
+        }
+        #endif
+
+        DoTest14(drvNum);
+
+    }// for (TInt drvNum=0; ...
+
+}
+
+//--------------------------------------------------------
+
+/**
+    Actually perform the test on a drive aDrvNum.
+    @param  aDrvNum drive number
+*/
+void DoTest14(TInt aDrvNum)
+{
+
+    TFileName fileName;
+    fileName.Format(_L("Testing drive %c:"), 'A'+aDrvNum);
+    test.Next(fileName);
+
+    const TInt  KFileSize = 0x1000; //-- size of the files t be created
+    TInt        nRes;
+
+    fileName.Format(_L("%c:\\TestFile.bin"), aDrvNum+'A');
+    TheFs.Delete(fileName); //-- just in case
+
+    //==============================
+    //== Scenario 1.
+    //== Create an empty file; AllocateSingleClusterL, ExtendClusterListL will be involved.
+    //== Check that the file doesn't contain any meaningful information
+    //==============================
+    test.Printf(_L("Testing scenario 1\n"));
+
+    //-- 1. create an empty file
+    nRes = CreateEmptyFile(TheFs, fileName, KFileSize);
+    test(nRes == KErrNone);
+
+    //-- 1.1  check that this file doesn't contain illegitimate information.
+    nRes = CheckFileContents(TheFs, fileName);
+    test(nRes == KErrNone);
+
+    //-- 1.2 delete the empty file
+    nRes = TheFs.Delete(fileName);
+    test(nRes == KErrNone);
+
+    //==============================
+    //== Scenario 2.
+    //== Create file, filling it with some pattern.
+    //== Delete this file, FreeClusterListL() will be involved.
+    //== Create an empty file supposedly of the place of just deleted one
+    //== Check that the file doesn't contain any meaningful information
+    //==============================
+    test.Printf(_L("Testing scenario 2\n"));
+
+    //-- 2. create file filled with some data pattern
+    nRes = CreateStuffedFile(TheFs, fileName, KFileSize);
+    test(nRes == KErrNone);
+
+    //-- 2.1 delete this file
+    TheFs.Delete(fileName);
+
+    //-- 2.1 create an empty file on the place of just deleted one (hopefully)
+    nRes = CreateEmptyFile(TheFs, fileName, KFileSize);
+    test(nRes == KErrNone);
+
+    //-- 2.2  check that this file doesn't contain illegitimate information.
+    nRes = CheckFileContents(TheFs, fileName);
+    test(nRes == KErrNone);
+
+    //-- 2.3 delete this file
+    TheFs.Delete(fileName);
+
+}
+
+LOCAL_C void Test15()
+//
+// Test IsValidName
+//
+	{
+	test.Next(_L("Test RFs::IsValidName(TDesC& ,RFs::TNameValidParam& )"));
+	TBool useDefaultSessionPath = EFalse;
+	//tests under this loop are run twice
+	//first, when the sessionPath is not used.
+	//second, when the sessionPath is used.
+	for(TInt i = 0; i<2; i++)
+		{
+		RFs::TNameValidParam param(useDefaultSessionPath);
+		test(TheFs.IsValidName(_L("*"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+	
+		test(TheFs.IsValidName(_L("?"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+		
+		test(TheFs.IsValidName(_L(">"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+	
+		test(TheFs.IsValidName(_L("<"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+		
+		test(TheFs.IsValidName(_L(":"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+	
+		test(TheFs.IsValidName(_L("\""),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+	
+		test(TheFs.IsValidName(_L("/"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+	
+		test(TheFs.IsValidName(_L("|"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+	
+		test(TheFs.IsValidName(_L("xx*yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+		
+		test(TheFs.IsValidName(_L("xx?yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+	
+		test(TheFs.IsValidName(_L("xx>yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+	
+		test(TheFs.IsValidName(_L("xx<yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+
+		test(TheFs.IsValidName(_L("xx:yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+		
+		test(TheFs.IsValidName(_L("xx\"yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+		
+		test(TheFs.IsValidName(_L("xx/yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+			
+		test(TheFs.IsValidName(_L("xx|yy"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+			
+		test(TheFs.IsValidName(_L("C:\\*\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("C:\\?\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("C:\\..\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("C:\\.\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+		
+		test(TheFs.IsValidName(_L("C:\\>\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("C:\\<\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("C:\\HelloWorld\\:\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 15);
+		
+		test(TheFs.IsValidName(_L("C::\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+			
+		test(TheFs.IsValidName(_L(">\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 1);
+			
+		test(TheFs.IsValidName(_L("C|group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 2);
+			
+		test(TheFs.IsValidName(_L("C\\|\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 3);
+			
+		test(TheFs.IsValidName(_L("\\>"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 2);
+			
+		test(TheFs.IsValidName(_L("C:\\|group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+				
+		test(TheFs.IsValidName(_L("C:\\\"\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+		
+		test(TheFs.IsValidName(_L("C:\\/\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("C:\\|\\group\\release.txt"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+		
+		test(TheFs.IsValidName(_L("C:\\ \\group\\release.txt"),param)==EFalse);//intermediate directory names cannot be blank
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadName);
+			
+		//	Test that \ is not allowed in filenames
+		TFileName filename;
+		filename=_L("C:\\HelloWorld\\\\\\group\\release.txt");
+		
+		test(TheFs.IsValidName(filename,param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 22);
+		
+		filename=_L("C:\\\\\\group\\release.txt");
+		test(TheFs.IsValidName(filename,param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 11);
+		
+		filename=_L("C:\\Hello World\\group\\release.txt");
+		filename[8]=KPathDelimiter;
+		test(TheFs.IsValidName(filename,param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+		
+		filename=_L("C:\\HelloWorld\\::\\group\\release.txt");
+		test(TheFs.IsValidName(filename,param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 16);
+			
+		filename=_L("C:\\>>\\group\\release.txt");
+		test(TheFs.IsValidName(filename,param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 5);
+		
+		test(TheFs.IsValidName(_L(""),param)==EFalse); // Must be a name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadName);
+		
+		test(TheFs.IsValidName(_L(".ext"),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+		
+		test(TheFs.IsValidName(_L("C:\\asdf.blarg"),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+		
+		test(TheFs.IsValidName(_L("C:\\asdf..blarg"),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+		
+		//	Test multiple evil characters - parsing occurs from right to left
+		//	except that wildcarded characters take priority and are picked out first
+		
+		test(TheFs.IsValidName(_L("abc>def|ghi?jkl:mno<pqr*stu"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 24);
+	
+		test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno?pqr"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 20);
+		
+		test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 16);
+		
+		test(TheFs.IsValidName(_L("abc>def|ghi<jkl:mno"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 16);
+	
+		test(TheFs.IsValidName(_L("abc>def|ghi<jkl"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 12);
+				
+		test(TheFs.IsValidName(_L("abc>def|ghi<jkl"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 12);
+	
+		test(TheFs.IsValidName(_L("abc>def|ghi"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 8);
+			
+		test(TheFs.IsValidName(_L("abc>def|ghi"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 8);
+	
+		test(TheFs.IsValidName(_L("abc>def"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(TheFs.IsValidName(_L("abc>def"),param)==EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 4);
+	
+		test(!TheFs.IsValidName(_L("C:\\v123456.."),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 11);
+		
+		test(!TheFs.IsValidName(_L("C:\\v123456.."),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadCharacter);
+		test(param.InvalidCharPos() == 11);
+	
+		test(TheFs.IsValidName(_L("abc"),param));						//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+	
+		test(TheFs.IsValidName(_L("abc"),param));						//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+	
+		test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"),param));	//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+	
+		test(TheFs.IsValidName(_L("as(){}@~#;!\xA3$%^&()df.blarg"),param));	//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+	
+		test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"),param));	//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+	
+		test(TheFs.IsValidName(_L("C:\\asdf.blarg\\asdf.blarg"),param));	//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+	
+		test(TheFs.IsValidName(_L("\'"),param));							//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+		
+		test(TheFs.IsValidName(_L("\'"),param));							//	Valid name
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+		
+		//testing directory names
+		test(TheFs.IsValidName(_L("\\"),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);           // Valid Name
+		
+		test(TheFs.IsValidName(_L("C:\\asdf.blarg\\"),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);           // Valid Name
+		
+		
+		test(TheFs.IsValidName(_L("C:\\asdf..blarg\\"),param));
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);           // Valid Name
+		
+		test(TheFs.IsValidName(_L("file1.txt\\\\"),param) == EFalse);
+		test(param.ErrorCode() == RFs::TNameValidParam::ErrBadName);
+	
+		// test name which exceeds KMaxFileName only on prepending the session path
+		_LIT(KNameLength250, "AAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAABBBBBBBBBBAAAAAAAAAA");
+		if(useDefaultSessionPath)
+			{
+			test(TheFs.IsValidName(KNameLength250, param)==EFalse);
+			test(param.ErrorCode() == RFs::TNameValidParam::ErrNameTooLong);
+			break;
+			}
+		else
+			{
+			test(TheFs.IsValidName(KNameLength250, param));
+			test(param.ErrorCode() == RFs::TNameValidParam::ErrNone);
+			}
+		useDefaultSessionPath = ETrue;
+		}
+	}
+
+
+
+void TestGetMediaSerialNumber()
+    {
+	test.Next(_L("Test RFs::GetMediaSerialNumber"));	
+    TInt theDrive;
+    TInt r = TheFs.CharToDrive(gDriveToTest,theDrive);
+    test(r == KErrNone);
+    TMediaSerialNumber serNum;
+    r = TheFs.GetMediaSerialNumber(serNum, theDrive);
+	if (r) test.Printf(_L("RFs::GetMediaSerialNumber returned error %d"), r);
+    test(r == KErrNotSupported || r == KErrNotReady || r == KErrNone);
+    if (r == KErrNotSupported)
+        {
+        test.Printf(_L("MediaSerialNumber: Not Supported\n"));
+        }
+    else
+        {
+        test.Printf(_L("MediaSerialNumber: length=%d\n"), serNum.Length());
+        TBuf<20> str;
+        _LIT(KNumberString, "%02X");
+        _LIT(KNewLine, "\n");
+        TInt i;
+        for (i = 0; i < serNum.Length(); i++)
+            {
+            str.AppendFormat(KNumberString, serNum[i]);
+            if (i%8 == 7)
+                {
+                str.Append(KNewLine);
+                test.Printf(_L("%S"), &str);
+                str.SetLength(0);
+                }
+            }
+        if (i%8 != 7)
+            {
+            test.Printf(KNewLine);
+            }
+        }
+    }
+
+
+//--------------------------------------------------------
+
+/**
+    Create an empty file of specified size.
+    @param  aFs		    ref. to the FS
+    @param  aFileName   name of the file
+    @param  aFileSize   size of the file to be created
+    @return    KErrNone on success, system-wide error code otherwise
+*/
+TInt CreateEmptyFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize)
+{
+    RFile   file;
+	TInt    nRes;
+
+	nRes = file.Create(aFs, aFileName, EFileRead|EFileWrite);
+    if(nRes != KErrNone)
+        return nRes;
+
+	nRes = file.SetSize(aFileSize);
+    if(nRes != KErrNone)
+        return nRes;
+
+    file.Close();
+
+    return KErrNone;
+}
+
+//--------------------------------------------------------
+
+/**
+    Create a file of specified size filled with some data pattern.
+    @param  aFs		    ref. to the FS
+    @param  aFileName   name of the file
+    @param  aFileSize   size of the file to be created
+    @return    KErrNone on success, system-wide error code otherwise
+*/
+TInt CreateStuffedFile(RFs& aFs, const TDesC& aFileName, TUint aFileSize)
+{
+	TInt    nRes;
+    RFile   file;
+
+	//-- create a buffer with some data
+	const TUint KBufLength = 0x100;
+	TBuf8<KBufLength> buffer;
+	buffer.SetLength(KBufLength);
+
+    TUint i;
+
+	for(i = 0; i < KBufLength; i++)
+		buffer[i] = static_cast<TUint8> (i) ;
+
+	//-- create a file
+	nRes = file.Create(aFs, aFileName, EFileRead|EFileWrite);
+    if(nRes != KErrNone)
+        return nRes;
+
+    const TUint n1 = aFileSize / KBufLength;
+    const TUint n2 = aFileSize % KBufLength;
+
+    //-- fill the file with the data from buffer
+    for(i=0; i<n1; ++i)
+    {
+        nRes = file.Write(buffer);
+        if(nRes != KErrNone)
+            return nRes;
+    }
+
+    if(n2)
+    {
+        nRes = file.Write(buffer, n2); //-- write the rest of the data
+        if(nRes != KErrNone)
+            return nRes;
+    }
+
+    file.Close();
+
+    return KErrNone;
+}
+
+//--------------------------------------------------------
+
+/**
+    Check if the specified file contains illegitimate information i.e. something different from 0x00, 0xff, 0x03, 0xcc
+
+    @param  aFs		    ref. to the FS
+    @param  aFileName   name of the file
+    @return    KErrNone on success, KErrCorrupt otherwise
+*/
+TInt   CheckFileContents(RFs& aFs, const TDesC& aFileName)
+{
+	TInt    nRes = KErrNone;
+    RFile   file;
+
+	const TInt KBufLength = 0x100;
+	TBuf8<KBufLength> buffer;
+    buffer.SetLength(0);
+
+    //-- open the file
+    nRes = file.Open(aFs, aFileName, EFileRead);
+    test(nRes == KErrNone);
+
+    //-- check file contents
+    TUint nFilePos=0;
+    for(;;)
+    {
+        //-- read data from the file into the buffer
+        nRes = file.Read(buffer);
+        test(nRes == KErrNone);
+
+        if(buffer.Length() == 0)
+        {
+            nRes = KErrNone; //-- read all the file, no illegitimate information found
+            break; //EOF
+        }
+
+        //-- check if the buffer contains only allowed data (RAM page initialisation data, etc. e.g. 0x00, 0xff, 0x03, 0xcc)
+        if(!CheckBufferContents(buffer, nFilePos))
+        {
+            test.Printf(_L("\nCheckFileContents failed ! The file contains illegitimate information!\n"));
+            nRes = KErrCorrupt; //-- indicate that the read buffer contains illegitimate information
+            break; //-- comment this out if you need a full dump of the file
+        }
+
+        nFilePos+=buffer.Length();
+    }
+
+    file.Close();
+    return nRes;
+}
+
+//--------------------------------------------------------
+
+/**
+    Check if the buffer contains illegitimate information i.e. something different from 0x00, 0xff, 0x03, 0xcc
+
+    @param  aBuffer         buffer descriptor to check
+    @param  aPrintBaseAddr  dump base address, used for dumping buffer only
+    @return ETrue on success
+*/
+TBool CheckBufferContents(const TDesC8& aBuffer, TUint aPrintBaseAddr/*=0*/)
+{
+    TBool bRes = ETrue;
+
+    //-- check if the buffer filled with allowable data (RAM page initialisation data or something similar)
+    //-- but not something meaningful.
+    //-- allowable bytes: 0x00, 0x03, 0xff, 0xcc
+    for(TInt i=0; i<aBuffer.Size(); ++i)
+    {
+        TUint8 byte = aBuffer[i];
+        if(byte != 0x00 && byte != 0x03 && byte != 0xff && byte != 0xcc )
+        {
+            bRes = EFalse;
+            break;
+        }
+    }
+
+    //-- dump the buffer if it contains anything different than allowed data
+	if (!bRes)
+	{
+		for (TInt n=0; n<aBuffer.Size(); )
+			{
+			TBuf16<3> byteBuffer;
+			TBuf16<256> lineBuffer;
+			lineBuffer.Format(_L("%08X: "), aPrintBaseAddr+n);
+			for (TInt m=0; m<16 && n<aBuffer.Size(); m++, n++)
+				{
+				byteBuffer.Format(_L("%02X "), aBuffer[n]);
+				lineBuffer.Append(byteBuffer);
+				}
+			test.Printf(lineBuffer);
+			}
+	}
+
+    return bRes;
+}
+
+
+GLDEF_C void CallTestsL()
+//
+// Call tests that may leave
+//
+	{
+
+	Test1();
+	Test2();
+	Test3();
+	Test4();
+	Test5();
+	Test6();
+	Test7();
+	Test8();
+	Test9();
+	Test10();
+	Test11();
+	Test12();
+	Test13();
+	Test14();
+	Test15();
+    TestGetMediaSerialNumber();
+	}