kerneltest/f32test/server/t_fatcharsetconv_main.cpp
changeset 0 a41df078684a
child 33 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kerneltest/f32test/server/t_fatcharsetconv_main.cpp	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,1526 @@
+// Copyright (c) 2008-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_FatCharSetConv_Main.cpp
+// 
+//
+
+#define __E32TEST_EXTENSION__
+
+#include <e32test.h>
+//#include <hal.h>
+#include <f32fsys.h>
+#include <f32dbg.h>
+#include "t_server.h"
+#include "t_chlffs.h"
+#include "fat_utils.h"
+#include "T_Fatcharsetconv_Cases.h"
+
+
+RTest test(_L("T_FatCharSetConv"));
+
+using namespace Fat_Test_Utils;
+
+#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
+
+template <class C>
+TInt controlIo(RFs &fs, TInt drv, TInt fkn, C &c)
+	{
+    TPtr8 ptrC((TUint8 *)&c, sizeof(C), sizeof(C));
+    TInt r = fs.ControlIo(drv, fkn, ptrC);
+    return r;
+	}
+
+/*
+ * Presetting module, presets initial source, target and comparing direcotries.
+ * @param	aParam	test param that contains all information about a test case
+ */
+void DataGenerationL(const TTestParamAll& aParam)
+	{
+	// Setup source files
+	RBuf path;
+	path.CreateL(aParam.iSrcPrsPath);
+	
+	path[0] = (TUint16)*aParam.iSrcDrvChar;
+	if(path[0] == (TUint8)gDriveToTest)
+		{
+		SetupDirFiles(path, aParam.iSrcPrsFiles);
+		}
+	
+	if (aParam.iAPI == EGetShortName || aParam.iAPI == EGetShortNameWithDLL || aParam.iAPI == EGetShortNameWithoutDLL || aParam.iAPI == ERFsReplace || aParam.iAPI == ERFsRename ||aParam.iAPI == ERenameFile )
+		{
+		path[0] = (TUint16)*aParam.iTrgDrvChar;
+		}
+	path.Close();
+	CheckDisk();
+	}
+
+/*
+ * Test execution module
+ * @param	aParam	test param that contains all information about a test case
+ * @panic	USER:84	if return codes do not match the expected values. 	
+ */
+void DataExecutionL(const TTestParamAll& aParam, const TTCType aTCType)
+	{
+	RBuf srcCmdFile;
+	srcCmdFile.CreateL(aParam.iSrcCmdPath);
+	RBuf trgCmdFile;
+	trgCmdFile.CreateL(aParam.iTrgCmdPath);
+	RBuf srcCmd;
+	srcCmd.CreateL(aParam.iSrcPrsPath);
+	
+	if (srcCmdFile.Length() > 0)
+		{
+		srcCmdFile[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+	else
+		{
+		// srcCmdFile= gSessionPath;
+		srcCmdFile[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+	if (srcCmd.Length() > 0)
+		{
+		srcCmd[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+	else
+		{
+		// srcCmd= gSessionPath;
+		srcCmd[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+
+	// logging for failure
+	gTCType = aTCType;
+	RBuf failedOnBuf;
+	failedOnBuf.CreateL(KExecution());
+	gTCId = aParam.iTestCaseID;
+	RBuf tcUniquePath;
+	tcUniquePath.CreateL(aParam.iSrcPrsPath);
+
+	TInt r = KErrNone;
+
+	switch(aParam.iAPI)
+		{
+		case EGetShortName:
+		case EGetShortNameWithDLL:
+		case EGetShortNameWithoutDLL:
+			{
+			__UHEAP_MARK;
+			if(aParam.iAPI == EGetShortName )
+				gLogFailureData.iAPIName = KGetShortName;
+			else if(aParam.iAPI == EGetShortNameWithDLL )
+				gLogFailureData.iAPIName = KGetShortNameWithDLL;
+			else if(aParam.iAPI == EGetShortNameWithoutDLL )
+				gLogFailureData.iAPIName = KGetShortNameWithoutDLL;
+
+				if (trgCmdFile.Length() > 0)
+					{
+					trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+					}
+				else
+					{
+					//trgCmdFile= gSessionPath;
+					trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+					}
+
+			TBuf<0x10> shortName;
+			r=TheFs.GetShortName(srcCmdFile,shortName);
+			testAndLog(r==KErrNone);
+			srcCmd.ReAllocL(srcCmd.Length() + shortName.Length());
+			srcCmd+= shortName;
+			testAndLog(srcCmd==trgCmdFile);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ELongShortConversion:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KLongShortConversion;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+
+			RBuf lgnFullPath;
+			RBuf shnFullPath;
+			TFileName longName;
+			TBuf<0x10> shortName;
+	
+			r = TheFs.GetShortName(srcCmdFile, shortName);
+			testAndLog(r==KErrNone);
+	
+			shnFullPath.CreateL(srcCmd);
+			shnFullPath.ReAllocL(srcCmd.Length() + shortName.Length());
+			shnFullPath.Append(shortName);
+			r = shnFullPath.Compare(trgCmdFile);
+			testAndLog(r==KErrNone);
+
+			r = TheFs.GetLongName(shnFullPath, longName);
+			testAndLog(r==KErrNone);
+			
+			lgnFullPath.CreateL(srcCmd);
+			lgnFullPath.ReAllocL(srcCmd.Length() + longName.Length());
+			lgnFullPath.Append(longName);
+			r = lgnFullPath.Compare(srcCmdFile);
+			testAndLog(r==KErrNone);
+			
+			lgnFullPath.Close();
+			shnFullPath.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ECreateFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName  = KCreateFile;
+			r = TheFile.Create(TheFs,srcCmdFile,EFileWrite);
+			testAndLog(r==KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EIsValidName:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KIsValidName;
+			TText badChar;
+			r=TheFs.IsValidName(srcCmdFile,badChar);
+			testAndLog(r==(TInt)ETrue);
+			r=TheFs.IsValidName(srcCmdFile);
+			testAndLog(r==(TInt)ETrue);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EMkDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KMkDir;
+			r=TheFs.MkDir(srcCmdFile);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;		
+		case EMkDirAll:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KMkDirAll;
+			r=TheFs.MkDirAll(srcCmdFile);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;		
+		case ERenameFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRenameFile;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+				
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+			r=TheFile.Rename(trgCmdFile);
+			testAndLog(r==KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReadFileSection:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReadFileSection;
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+			
+			TInt numWrite = 15;
+			TBuf8<50> writeBuf = _L8("I am going to write some junk for testing purpose");
+			TheFile.Write(writeBuf, numWrite);
+   			r=TheFile.Flush();
+   			testAndLog(r==KErrNone);
+  			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EDeleteFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KDeleteFile;
+			r=TheFs.Delete(srcCmdFile);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EOpenDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KOpenDir;
+			r=TheDir.Open(TheFs,srcCmdFile,KEntryAttMaskSupported);
+			testAndLog(r==KErrNone);
+			TheDir.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReadDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReadDir;
+			r=TheDir.Open(TheFs,srcCmdFile,KEntryAttMaskSupported);
+			testAndLog(r==KErrNone);
+			TheDir.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERemoveDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRemoveDir;
+			r=TheFs.RmDir(srcCmdFile);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;		
+		case EIsFileInRom:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KIsFileInRom;
+			// The tested files are created on non-rom drives, which should not be found 
+			//	on rom drives
+			TUint8* ptr=TheFs.IsFileInRom(srcCmdFile);
+			testAndLog(ptr==NULL);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReplaceFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReplaceFile;
+			r=TheFile.Replace(TheFs, srcCmdFile ,EFileWrite);
+			testAndLog(r==KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EOperateOnFileNames:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KOperateOnFileNames;
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead);
+			testAndLog(r == KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EFileModify:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KFileModify;
+			TTime time;
+			r=TheFs.Modified(srcCmdFile,time);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EFileAttributes:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KFileAttributes;
+			TUint att;
+			r=TheFs.Att(srcCmdFile,att);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERFsEntry:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRFsEntry;
+			TEntry entryDetail;
+			r=TheFs.Entry(srcCmdFile, entryDetail);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERFsReplace:
+			{
+			__UHEAP_MARK;	
+			gLogFailureData.iAPIName = KRFsReplace;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			r=TheFs.Replace(srcCmdFile,trgCmdFile);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERFsRename:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRFsRename;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				} 
+			r=TheFs.Rename(srcCmdFile,trgCmdFile);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}	
+			break;
+		case EGetDir:	
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KGetDir;
+			CDir *anEntryList;
+			r=TheFs.GetDir(srcCmdFile,KEntryAttNormal,ESortByName,anEntryList);
+			testAndLog(r==KErrNone);
+			delete anEntryList;
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EFileTemp:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KFileTemp;
+			TFileName tempFileName;
+			r=TheFile.Temp(TheFs,srcCmdFile,tempFileName,EFileWrite);
+			testAndLog(r == KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReadFromFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReadFromFile;
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+			
+			TBuf8<200> writeBuf = _L8("I am going to write something to the file and then read from the specified position to test an overload of RFIle::Read");
+			TInt numWrite = 50;
+   			TheFile.Write(writeBuf, numWrite);
+   			testAndLog(r==KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}	
+		break;
+		case EWriteToFile:
+			{
+			__UHEAP_MARK;						
+			gLogFailureData.iAPIName = KWriteToFile;
+
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+
+			TBuf8<200> writeBuf = _L8("I am going to write something to the file and then read from the specified position to test an overload of RFIle::Read");
+			TInt numWrite = 50;
+   			TheFile.Write(writeBuf, numWrite);
+   			testAndLog(r==KErrNone);
+   			r=TheFile.Flush();
+   			testAndLog(r==KErrNone);
+			TheFile.Close();
+   			__UHEAP_MARKEND;
+			}	
+			
+		break;
+	 	default:
+		break;
+
+		}
+//	test.Printf(_L("DataExecution::\tTest case %d passed\n"),aParam.iTestCaseID);
+
+	failedOnBuf.Close();
+	tcUniquePath.Close();
+
+	srcCmdFile.Close();
+	trgCmdFile.Close();
+	srcCmd.Close();
+	CheckDisk();
+	}
+
+void DataVerificationL(const TTestParamAll& aParam, const TTCType aTCType)
+	{
+	RBuf srcCmdFile;
+	srcCmdFile.CreateL(aParam.iSrcCmdPath);
+	RBuf trgCmdFile;
+	trgCmdFile.CreateL(aParam.iTrgCmdPath);
+	RBuf srcCmd;
+	srcCmd.CreateL(aParam.iSrcPrsPath);
+
+	if (srcCmdFile.Length() > 0)
+		{
+		srcCmdFile[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+	else
+		{
+		//srcCmdFile= gSessionPath;
+		srcCmdFile[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+		
+	if (srcCmd.Length() > 0)
+		{
+		srcCmd[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+	else
+		{
+		//srcCmd= gSessionPath;
+		srcCmd[0] = (TUint16)*aParam.iSrcDrvChar;
+		}
+
+	// logging for failure
+	gTCType = aTCType;
+	RBuf failedOnBuf;
+	failedOnBuf.CreateL(KVerification());
+	gTCId = aParam.iTestCaseID;
+	RBuf tcUniquePath;
+	tcUniquePath.CreateL(aParam.iSrcPrsPath);
+
+	TInt r = KErrNone;
+	switch(aParam.iAPI)
+		{
+		case EGetShortName:
+		case EGetShortNameWithDLL:
+		case EGetShortNameWithoutDLL:
+			{
+			__UHEAP_MARK;
+			if(aParam.iAPI == EGetShortName )
+				gLogFailureData.iAPIName = KGetShortName;
+			else if(aParam.iAPI == EGetShortNameWithDLL )
+				gLogFailureData.iAPIName = KGetShortNameWithDLL;
+			else if(aParam.iAPI == EGetShortNameWithoutDLL )
+				gLogFailureData.iAPIName = KGetShortNameWithoutDLL;
+
+				if (trgCmdFile.Length() > 0)
+					{
+					trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+					}
+				else
+					{
+					//trgCmdFile= gSessionPath;
+					trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+					}
+
+			TBuf<0x10> shortName;
+			r=TheFs.GetShortName(srcCmdFile,shortName);
+			testAndLog(r==KErrNone);
+			if(r==KErrNone)
+				{
+				srcCmd.ReAllocL(srcCmd.Length() + shortName.Length());
+				srcCmd+= shortName;
+				testAndLog(srcCmd==trgCmdFile);
+				}
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ELongShortConversion:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KLongShortConversion;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+
+			RBuf lgnFullPath;
+			RBuf shnFullPath;
+			TFileName longName;
+			TBuf<0x10> shortName;
+	
+			r = TheFs.GetShortName(srcCmdFile, shortName);
+			testAndLog(r==KErrNone);
+	
+			if(r==KErrNone)
+				{
+				shnFullPath.CreateL(srcCmd);
+				shnFullPath.ReAllocL(srcCmd.Length() + shortName.Length());
+				shnFullPath.Append(shortName);
+				r = shnFullPath.Compare(trgCmdFile);
+				testAndLog(r==KErrNone);
+
+				r = TheFs.GetLongName(shnFullPath, longName);
+				testAndLog(r==KErrNone);
+				
+				lgnFullPath.CreateL(srcCmd);
+				lgnFullPath.ReAllocL(srcCmd.Length() + longName.Length());
+				lgnFullPath.Append(longName);
+				r = lgnFullPath.Compare(srcCmdFile);
+				testAndLog(r==KErrNone);
+
+				lgnFullPath.Close();
+				shnFullPath.Close();
+				}
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ECreateFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KCreateFile;
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EIsValidName:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KIsValidName;
+			TText badChar;
+			r=TheFs.IsValidName(srcCmdFile,badChar);
+			testAndLog(r);
+			r=TheFs.IsValidName(srcCmdFile);
+			testAndLog(r);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EMkDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KMkDir;
+			r=TheDir.Open(TheFs,srcCmdFile,KEntryAttMaskSupported);
+			testAndLog(r==KErrNone);
+			TheDir.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EMkDirAll:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KMkDirAll;
+			r=TheDir.Open(TheFs,srcCmdFile,KEntryAttMaskSupported);
+			testAndLog(r==KErrNone);
+			TheDir.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERenameFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRenameFile;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNotFound);
+			// r = TheFile.Open(TheFs, trgCmdFile, EFileRead|EFileWrite);
+			// testAndLog(r == KErrNone);
+			// TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReadFileSection:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReadFileSection;
+			TBool isFileOpen = EFalse;
+			r=TheFs.IsFileOpen(srcCmdFile,isFileOpen);
+			testAndLog(r==KErrNone);
+			if(isFileOpen)
+				{
+				TheFile.Close();
+				}
+			else
+				{
+				TInt numRead = 15;
+				TBuf8<50> readBuf;
+				r=TheFs.ReadFileSection(srcCmdFile, 0, readBuf, numRead);
+				testAndLog(r==KErrNone);
+				}
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EDeleteFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KDeleteFile;
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNotFound);
+			// TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EOpenDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KOpenDir;
+			r=TheDir.Open(TheFs,srcCmdFile,KEntryAttMaskSupported);
+			testAndLog(r==KErrNone);
+			TheDir.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReadDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReadDir;
+			TEntry entry;
+			TInt dirEntryCount = 0;
+			r=TheDir.Open(TheFs,srcCmdFile,KEntryAttMaskSupported);
+			testAndLog(r==KErrNone);
+			FOREVER
+				{
+				r = TheDir.Read(entry);
+				if(r == KErrEof)
+					{
+					break;
+					}
+				dirEntryCount++;
+				}
+			TheDir.Close();
+			testAndLog(dirEntryCount == 4);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERemoveDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRemoveDir;
+			r = TheDir.Open(TheFs, srcCmdFile, KEntryAttMaskSupported);
+			testAndLog(r == KErrPathNotFound);
+			// TheDir.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EIsFileInRom:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KIsFileInRom;
+			TUint8* ptr=TheFs.IsFileInRom(srcCmdFile);
+			// file should not be in ROM
+			testAndLog(ptr==NULL)
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EReplaceFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReplaceFile;
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+			TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EOperateOnFileNames:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KOperateOnFileNames;
+			
+			TFileName realFileNameInFS;
+			TFileName fullFileName;
+			TFileName fileName;
+
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead);
+			testAndLog(r == KErrNone);
+
+			if(r==KErrNone)
+				{
+				r=TheFile.FullName(fullFileName);
+				testAndLog(r==KErrNone);
+				testAndLog(fullFileName==srcCmdFile);
+				
+				TInt length = srcCmdFile.Length()-srcCmd.Length();
+				
+				r=TheFile.Name(fileName);
+				testAndLog(r==KErrNone);
+				
+				TBuf<50> tempFileName;
+				tempFileName = srcCmdFile.Right(length);
+				testAndLog(fileName==tempFileName);
+				testAndLog(length==fileName.Length());
+
+				r=TheFs.RealName(srcCmdFile,realFileNameInFS);
+				testAndLog(r==KErrNone);
+				testAndLog(realFileNameInFS==srcCmdFile);
+				TheFile.Close();
+				}
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EFileModify:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KFileModify;
+			TTime tempTime;
+			r=TheFs.Modified(srcCmdFile,tempTime);
+			testAndLog(r==KErrNone);
+			tempTime.HomeTime();
+			r=TheFs.SetModified(srcCmdFile,tempTime);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EFileAttributes:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KFileAttributes;
+			TUint att;
+			r=TheFs.Att(srcCmdFile,att);
+			testAndLog(r==KErrNone);
+			r=TheFs.SetAtt(srcCmdFile,KEntryAttHidden,0);
+			testAndLog(r==KErrNone);
+			r=TheFs.Att(srcCmdFile,att);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERFsEntry:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRFsEntry;
+			TEntry entryDetail;
+			r=TheFs.Entry(srcCmdFile,entryDetail);
+			testAndLog(r==KErrNone);
+			TTime time;
+			time.HomeTime();
+			r=TheFs.SetEntry(srcCmdFile, time, KEntryAttHidden, KEntryAttNormal);
+			testAndLog(r==KErrNone);
+			r=TheFs.Entry(srcCmdFile, entryDetail);
+			testAndLog(r==KErrNone);
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERFsReplace:
+			{
+			__UHEAP_MARK;	
+			gLogFailureData.iAPIName = KRFsReplace;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNotFound);
+			// r = TheFile.Open(TheFs, trgCmdFile, EFileRead|EFileWrite);
+			// testAndLog(r == KErrNone);
+			// TheFile.Close();
+			__UHEAP_MARKEND;
+			}
+			break;
+		case ERFsRename:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KRFsRename;
+			if (trgCmdFile.Length() > 0)
+				{
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				}
+			else
+				{
+				//trgCmdFile= gSessionPath;
+				trgCmdFile[0] = (TUint16)*aParam.iTrgDrvChar;
+				} 
+			TInt len=srcCmdFile.Length();
+			if(srcCmdFile[--len]=='\\')
+				{
+				r = TheDir.Open(TheFs, srcCmdFile, KEntryAttMaskSupported);
+				testAndLog(r == KErrPathNotFound);
+				// r = TheDir.Open(TheFs, trgCmdFile, KEntryAttMaskSupported);
+				// testAndLog(r == KErrNone);			
+				// TheDir.Close();
+				}
+			else
+				{
+				r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+				testAndLog(r == KErrNotFound);
+				// r = TheFile.Open(TheFs, trgCmdFile, EFileRead|EFileWrite);
+				// testAndLog(r == KErrNone);
+				// TheFile.Close();
+				}
+			__UHEAP_MARKEND;			
+			}
+			break;
+		case EGetDir:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KGetDir;
+			CDir *anEntryList;
+			r=TheFs.GetDir(srcCmdFile,KEntryAttNormal,ESortByName,anEntryList);
+			testAndLog(r==KErrNone);
+			delete anEntryList;
+			__UHEAP_MARKEND;
+			}
+			break;
+		case EFileTemp:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KFileTemp;
+			TFileName tempFileName;
+			r=TheFile.Temp(TheFs,srcCmdFile,tempFileName,EFileWrite);
+			testAndLog(r == KErrNone);
+			TheFile.Close();
+			r = TheFile.Create(TheFs, tempFileName, EFileRead|EFileWrite);
+			testAndLog(r == KErrAlreadyExists);
+			__UHEAP_MARKEND;
+			}			
+			break;
+		case EReadFromFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KReadFromFile;
+			
+			TInt start=0, readLen=15, readPos=10;
+			TBuf8<200> readBuf;
+			TInt numWritten = 50;
+
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+
+			if(r==KErrNone)
+				{
+				r=TheFile.Seek(ESeekStart,start);
+		  		testAndLog(r==KErrNone);
+
+				readBuf.SetLength(0);
+				r=TheFile.Read(readBuf);
+				testAndLog(r == KErrNone);
+				testAndLog(numWritten == readBuf.Length());
+				
+				//An overload of RFile::Read(), read specified no.of bytes.
+	   			r=TheFile.Seek(ESeekStart,start);
+	  			testAndLog(r==KErrNone);
+	  			
+				readBuf.SetLength(0);
+				TheFile.Read(readBuf,readLen);
+				testAndLog(r == KErrNone);
+				testAndLog(readLen == readBuf.Length());
+				
+				//An overload of RFile::Read(), read from the specified position.
+				readBuf.SetLength(0);
+				r=TheFile.Read(readPos,readBuf);
+				testAndLog(r == KErrNone);
+				testAndLog(numWritten-readPos == readBuf.Length());
+				TheFile.Close();
+				}
+			__UHEAP_MARKEND;
+			}	
+			break;	
+		case EWriteToFile:
+			{
+			__UHEAP_MARK;
+			gLogFailureData.iAPIName = KWriteToFile;
+			
+			r = TheFile.Open(TheFs, srcCmdFile, EFileRead|EFileWrite);
+			testAndLog(r == KErrNone);
+
+			if(r==KErrNone)
+				{
+				TInt writeLen=20, writePos=10, start=0, readLen=0;
+				TBuf8<200> writeBuf = _L8("I am going to write something to the file and then read from the specified position to test an overload of RFIle::Read");
+				TInt numWritten = writeBuf.Length();
+				TBuf8<200> readBuf;
+				
+	   			TheFile.Write(writeBuf);
+	   			r=TheFile.Flush();
+	   			testAndLog(r==KErrNone);
+	   			
+	   			r=TheFile.Seek(ESeekStart,start);
+	  			testAndLog(r==KErrNone);
+	  		
+	   			readBuf.SetLength(0);
+	   			r=TheFile.Read(readBuf);
+	   			testAndLog(r==KErrNone);
+	   			readLen = readBuf.Length();
+	   			testAndLog(numWritten == readLen);
+	   			
+	   			r=TheFile.SetSize(0);
+	   			testAndLog(r==KErrNone);
+	   			
+	   			//An overload of RFile::Write(), write specified no.of bytes.
+	   			TheFile.Write(writeBuf,writeLen);
+	   			r=TheFile.Flush();
+	   			testAndLog(r==KErrNone);
+	   			
+	   			r=TheFile.Seek(ESeekStart,start);
+	  			testAndLog(r==KErrNone);
+				
+				readBuf.SetLength(0);
+	   			r=TheFile.Read(readBuf);
+	   			testAndLog(r==KErrNone);
+	   			readLen = readBuf.Length();
+	   			testAndLog(writeLen==readLen);
+	   			
+				r=TheFile.SetSize(0);
+	   			testAndLog(r==KErrNone);
+	   			
+	   			//An overload of RFile::Write(), write to a particular position.
+	   			TBuf8<50> testBuf = _L8("Testing different variants of RFile::Write APIs");   		
+	    		TheFile.Write(testBuf);
+	    		r=TheFile.Flush();
+	   			testAndLog(r==KErrNone);
+				
+	   			TheFile.Write(writePos,writeBuf);
+	   			r=TheFile.Flush();
+	   			testAndLog(r==KErrNone);
+	   			
+	      		r=TheFile.Seek(ESeekStart,start);
+	  			testAndLog(r==KErrNone);
+	  			
+	  			readBuf.SetLength(0);
+	   			r=TheFile.Read(readBuf);
+	   			testAndLog(r==KErrNone);
+	   			readLen = readBuf.Length();
+	   			testAndLog(numWritten + writePos == readLen);
+	   			
+				r=TheFile.SetSize(0);
+	   			testAndLog(r==KErrNone);
+	   			
+	   			//An overload of RFile::Write(), write to a particular position and specified no. of bytes.
+	   			TInt size;
+	    		TheFile.Write(testBuf);
+	    		r=TheFile.Flush();
+	   			testAndLog(r==KErrNone);
+			
+	   			TheFile.Write(writePos,writeBuf,writeLen);
+	   			r=TheFile.Flush();
+	   			testAndLog(r==KErrNone);
+	   			
+	   			r=TheFile.Seek(ESeekStart,start);
+	  			testAndLog(r==KErrNone);
+	  			
+	  			readBuf.SetLength(0);
+	   			r=TheFile.Read(readBuf);
+	   			testAndLog(r==KErrNone);
+	   			
+	   			TInt newSize = testBuf.Length()-(writePos+writeLen);
+	   			if(newSize < testBuf.Length())
+	   				{
+	   				size = testBuf.Length();
+	   				}
+	   			else
+	   				size = newSize;
+	   			readLen = readBuf.Length();
+	   			testAndLog(readLen==size);
+
+	   			r=TheFile.SetSize(0);
+	   			testAndLog(r==KErrNone);
+
+	   			TheFile.Close();
+				}
+   			__UHEAP_MARKEND;
+			}
+			break;
+	 	default:
+			break;
+		}
+//	test.Printf(_L("DataVerification::\tTest case %d passed\n"),aParam.iTestCaseID);
+
+	failedOnBuf.Close();
+	tcUniquePath.Close();
+
+	srcCmdFile.Close();
+	trgCmdFile.Close();
+	srcCmd.Close();
+	CheckDisk();
+	}
+	
+void DeletePathAfterTest(const TTestParamAll& aParam)
+	{
+	TFileName path = aParam.iSrcPrsPath;
+	if (path.Length() == 0)
+		{
+		test.Printf(_L("ERROR<SetupDirFiles()>: Zero length src path!\n"));
+		test(EFalse);
+		}
+
+	path[0] = (TUint16)*aParam.iSrcDrvChar;
+	TInt idx = path.Find(_L("Src\\"));
+	path.Delete(idx,path.Length()-idx);
+	RmDir(path);
+	}
+
+
+/*
+ * Do all basic binary test cases defined in gBasicUnitaryTestCases[]
+ */
+void DoAllBasicUnitaryTestsL(const TTestCaseUnitaryBasic aBasicUnitaryTestCaseGroup[],
+									TTestSwitches& aSwitches, TBool aIsWithDLL)
+	{
+	TTestParamAll* 	nextTestCase = new(ELeave) TTestParamAll();
+	
+	TInt i = 0;
+	
+	// Reset the Test Log Data
+	ClearTCLogData();
+
+	while(SearchTestCaseByArrayIdx(i, aBasicUnitaryTestCaseGroup,
+							*nextTestCase, aIsWithDLL) == KErrNone)
+		{
+		TTime startTime;
+		TTime endTime;
+		startTime.HomeTime();
+		if(aSwitches.iExeOnSymbian || aSwitches.iExeOnWindows)
+			{
+			DataGenerationL(*nextTestCase);
+			DataExecutionL(*nextTestCase, EUnitaryTest);
+			}
+		if(aSwitches.iVerOnSymbian || aSwitches.iVerOnWindows)
+			{
+			DataVerificationL(*nextTestCase, EUnitaryTest);
+			DeletePathAfterTest(*nextTestCase);
+			}
+			
+		CheckDisk();
+		endTime.HomeTime();
+		TTimeIntervalMicroSeconds timeTaken(0);
+		timeTaken = endTime.MicroSecondsFrom(startTime);
+
+//		test.Printf(_L("Test Case Id : %d\n"),(*nextTestCase).iTestCaseID);
+//		TInt time=0;
+//		time=I64LOW(timeTaken.Int64()/1000);
+//		test.Printf(_L("Time Taken by test case %d = %d mS \n"),nextTestCase.iTestCaseID,time);
+		++i;
+		}
+	delete nextTestCase;
+	}
+		
+/*
+ * Do all basic binary test cases defined in gBasicBinaryTestCases[]
+ */
+void DoAllBasicBinaryTestsL(const TTestCaseBinaryBasic aBasicBinaryTestCaseGroup[],
+							TTestSwitches& aSwitches, TBool aIsWithDLL)
+	{
+	TTestParamAll*	nextTestCase = new(ELeave) TTestParamAll();
+	
+	TInt i = 0;
+	
+	// Reset the Test Log Data
+	ClearTCLogData();
+	
+	while (SearchTestCaseByArrayIdx(i, aBasicBinaryTestCaseGroup,
+							*nextTestCase, aIsWithDLL) == KErrNone)
+		{
+		if (aIsWithDLL)
+			{
+			if(((aBasicBinaryTestCaseGroup[i].iBasic.iAPI==EGetShortNameWithoutDLL)))
+				{
+				++i;
+				continue;
+				}
+			}
+		else
+			{
+			if(((aBasicBinaryTestCaseGroup[i].iBasic.iAPI== EGetShortNameWithDLL) || (aBasicBinaryTestCaseGroup[i].iBasic.iAPI==ELongShortConversion)) )
+				{
+				++i;
+				continue;
+				}
+			}
+		TTime startTime;
+		TTime endTime;
+		startTime.HomeTime();
+
+		if(aSwitches.iExeOnSymbian || aSwitches.iExeOnWindows) 
+			{
+			DataGenerationL(*nextTestCase);
+			DataExecutionL(*nextTestCase, EBinaryTest);
+			}
+		if(aSwitches.iVerOnSymbian || aSwitches.iVerOnWindows)
+			{
+			DataVerificationL(*nextTestCase, EBinaryTest);
+			DeletePathAfterTest(*nextTestCase);
+			}
+
+		endTime.HomeTime();
+		TTimeIntervalMicroSeconds timeTaken(0);
+		timeTaken = endTime.MicroSecondsFrom(startTime);
+
+//		test.Printf(_L("Test Case Id : %d\n"),(*nextTestCase).iTestCaseID);
+//		TInt time2=0;
+//		time2=I64LOW(timeTaken.Int64()/1000);
+//		test.Printf(_L("Time Taken by test id %d = %d mS \n"),nextTestCase.iTestCaseID,time2);
+		++i;
+		}
+
+	delete nextTestCase;
+	}
+
+/*
+ * Main testing control unit
+ */
+void TestMainWithDLLL(TTestSwitches& aSwitches)
+	{
+	// Enables codepage dll implementation of LocaleUtils functions for this test only
+	TInt r = TheFs.ControlIo(CurrentDrive(), KControlIoEnableFatUtilityFunctions);
+	test(r == KErrNone);
+		
+	test.Printf(_L("Load the Code Page DLL"));
+	r = UserSvr::ChangeLocale(KTestLocale);
+	test(r == KErrNone);
+			
+	test.Next(_L("Test Unitary APIs with only Sync Variant with DLL"));
+	gLogFailureData.iFuncName = KDoAllBasicUnitaryTestsL;
+	DoAllBasicUnitaryTestsL(gBasicUnitaryTestCases, aSwitches, ETrue);
+	
+	test.Next(_L("Test Binary Tests with DLL"));
+	gLogFailureData.iFuncName = KDoAllBasicBinaryTestsL;
+	DoAllBasicBinaryTestsL(gBasicBinaryTestCases, aSwitches, ETrue);
+	
+	// Disables codepage dll implementation of LocaleUtils functions for other base tests
+	r = TheFs.ControlIo(CurrentDrive(), KControlIoDisableFatUtilityFunctions);
+	test(r == KErrNone);
+	}
+	
+void TestMainWithoutDLLL(TTestSwitches& aSwitches)
+	{
+	test.Next(_L("Test Unitary APIs with only Sync Variant without DLL"));
+
+	// Disables codepage dll implementation of LocaleUtils functions
+	TInt r = TheFs.ControlIo(CurrentDrive(), KControlIoDisableFatUtilityFunctions);
+	test(r == KErrNone);
+
+	gLogFailureData.iFuncName = KDoAllBasicUnitaryTestsL;
+	DoAllBasicUnitaryTestsL(gBasicUnitaryTestCases, aSwitches, EFalse);
+	
+	test.Next(_L("Test Binary Tests without DLL"));
+	gLogFailureData.iFuncName = KDoAllBasicBinaryTestsL;
+	DoAllBasicBinaryTestsL(gBasicBinaryTestCases, aSwitches, EFalse);
+	}
+
+void TestCompatibility(const TTestSwitches& aSwitches)
+	{
+	test.Next(_L("test compatibility"));
+
+	// logging for failure
+	gTCType = ESymbianFATSpecific;
+	RBuf failedOnBuf;
+	failedOnBuf.CreateL(gLogFailureData.iFuncName);
+	gTCId = 0;
+	RBuf tcUniquePath;
+	tcUniquePath.CreateL(KNone());
+
+	// original file name in DBCS
+	TFileName fn1 = _L("\\\x798F\x5C71\x96C5\x6CBB");
+	if (aSwitches.iExeOnSymbian)
+		{
+		GetBootInfo();
+		RFile file;
+		TFileName fn = _L("\\ABCD");
+		
+		TInt r=file.Create(TheFs,fn,EFileRead);
+		testAndLog(r==KErrNone);
+		file.Close();
+
+		//	Assume this file is the first entry in the root directory
+		r=TheDisk.Open(TheFs,CurrentDrive());
+		testAndLog(r==KErrNone);
+		
+	    //-- read the 1st dir entry, it should be a DOS entry 
+	    const TInt posEntry1=gBootSector.RootDirStartSector() << KDefaultSectorLog2; //-- dir entry1 position
+	    
+	    TFatDirEntry fatEntry1;
+		TPtr8 ptrEntry1((TUint8*)&fatEntry1,sizeof(TFatDirEntry));
+	    testAndLog(TheDisk.Read(posEntry1, ptrEntry1)==KErrNone); 
+	    testAndLog(!fatEntry1.IsVFatEntry());
+
+	    // Manually modify the short name into unicode characters
+	    // 	Unicode: 	0x(798F 5C71 96C5 6CBB)
+	    //	Shift-JIS: 	0x(959F 8E52 89EB 8EA1)
+
+	    TBuf8<8> unicodeSN = _L8("ABCD1234");
+	    unicodeSN[0] = 0x95;
+	    unicodeSN[1] = 0x9F;
+	    unicodeSN[2] = 0x8E;
+	    unicodeSN[3] = 0x52;
+	    unicodeSN[4] = 0x89;
+	    unicodeSN[5] = 0xEB;
+	    unicodeSN[6] = 0x8E;
+	    unicodeSN[7] = 0xA1;
+	    
+	    fatEntry1.SetName(unicodeSN);
+	    testAndLog(TheDisk.Write(posEntry1, ptrEntry1)==KErrNone);
+	    TheDisk.Close();
+		}
+	if (aSwitches.iVerOnSymbian)
+		{
+		// Access the file without the DLL loaded.
+	    TInt r = TheFs.ControlIo(CurrentDrive(), KControlIoDisableFatUtilityFunctions);
+		testAndLog(r==KErrNone);
+		
+		TEntry entry;
+		r = TheFs.Entry(fn1, entry);
+		testAndLog(r==KErrNotFound);
+		
+	    // Access the file with the DLL loaded.
+	    r = TheFs.ControlIo(CurrentDrive(), KControlIoEnableFatUtilityFunctions);
+		testAndLog(r==KErrNone);
+		r = UserSvr::ChangeLocale(KTestLocale);
+		testAndLog(r==KErrNone);
+
+		r = TheFs.Entry(fn1, entry);
+		testAndLog(r==KErrNone);
+		
+	    r = TheFs.ControlIo(CurrentDrive(), KControlIoDisableFatUtilityFunctions);
+		testAndLog(r==KErrNone);
+		}
+	failedOnBuf.Close();
+	tcUniquePath.Close();
+	}
+
+#endif //defined(_DEBUG) || defined(_DEBUG_RELEASE)
+
+/*
+ * Initialise test 
+*/
+void CallTestsL(TTestSwitches& aSwitches)
+	{
+	test.Title();
+	test.Start(_L("Starting T_FATCHARSETCONV tests"));
+	(void) aSwitches;
+#ifdef LOG_FAILURE_DATA
+	test.Printf(_L("LOG_FAILURE_DATA: ON\n"));
+#else
+	test.Printf(_L("LOG_FAILURE_DATA: OFF\n"));
+#endif
+
+#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
+	// Test only runs on Fat file systems
+	TheFs.SessionPath(gSessionPath);
+	TInt r = TheFs.FileSystemName(aSwitches.iMountedFSName, CurrentDrive());
+	if (KErrNone == r)
+		{
+		// For automated testing this test should run on FAT file systems only.
+		// For inter-operability testing on FAT and Win32 file systems.
+		// if ((AUTO && FAT) || (IOT && (FAT || Win32))
+		test.Printf(_L("Current File System: \"%S\"\n"), &aSwitches.iMountedFSName);
+		if( (gAutoTest && isFAT(aSwitches.iMountedFSName)) ||
+			(gIOTesting && (isFAT(aSwitches.iMountedFSName) || isWin32(aSwitches.iMountedFSName))))
+			{
+			// Log File System Name
+			gLogFailureData.iFSName = aSwitches.iMountedFSName;
+			
+			// Store current file name
+			TFileName fileName;
+			TInt i=0;
+			while(__FILE__[i]!='\0')
+				{
+				fileName.SetLength(i+1);
+				fileName[i] = __FILE__[i++];
+				}
+			gFileName.Append(fileName);
+			
+			InitialiseL();
+			// Special Cases	- Non-Symbian
+			// Note: this case MUST be run as the first case as it performs formatting!!
+			TestCompatibility(aSwitches);
+			CreateTestDirectory(_L("\\F32-TST\\T_FATCHARSETCONV\\"));
+			//Special Cases	- Only Symbian Specific
+			if(!gIOTesting && aSwitches.iMountedFSName.Compare(KFAT) == 0)
+				{
+				DoSymbianSpecificCases();
+				}
+
+			test.Next(_L("Test without DLL loaded"));
+			if(gAutoTest)
+				{
+				QuickFormat();
+				}
+			TestMainWithoutDLLL(aSwitches);
+							
+			test.Next(_L("Test with DLL loaded"));
+			if(gAutoTest)
+				{
+				QuickFormat();
+				}
+			TestMainWithDLLL(aSwitches);
+			Cleanup();
+			}
+		else
+			{
+			if(gAutoTest)
+				test.Printf(_L("Test only runs on \"FAT\" File Systems !!!\n"));
+			if(gIOTesting)
+				test.Printf(_L("Test only runs on \"FAT\" and \"Win32\" File Systems !!!\n"));
+			}
+		}
+	else
+		{
+		test.Printf(_L("Drive %C: is not ready!\n"), 'A'+CurrentDrive());
+		test(EFalse);
+		}
+#else
+	test.Printf(_L("Test only runs on DEBUG builds, see test logs of debug builds for details.\n"));
+#endif  // _DEBUG) || _DEBUG_RELEASE
+	test.End();
+	}
+
+LOCAL_C void PushLotsL()
+//
+// Expand the cleanup stack
+//
+	{
+	TInt i;
+	for(i=0;i<1000;i++)
+		CleanupStack::PushL((CBase*)NULL);
+	CleanupStack::Pop(1000);
+	}
+
+
+LOCAL_C void DoTests(TInt aDrive, TTestSwitches& aSwitches)
+//
+// Do testing on aDrive
+//
+	{
+	gSessionPath=_L("?:\\F32-TST\\");
+	TChar driveLetter;
+	TInt r=TheFs.DriveToChar(aDrive,driveLetter);
+	test(r==KErrNone);
+	gSessionPath[0]=(TText)driveLetter;
+	r=TheFs.SetSessionPath(gSessionPath);
+	test(r==KErrNone);
+	test.Printf(_L("gSessionPath = \"%S\"\n"), &gSessionPath);
+
+// !!! Disable platform security tests until we get the new APIs
+//	if(User::Capability() & KCapabilityRoot)
+		CheckMountLFFS(TheFs,driveLetter);
+	
+	User::After(1000000);
+
+//	Format(CurrentDrive());
+
+	r=TheFs.MkDirAll(gSessionPath);
+	if(r == KErrCorrupt)
+		{
+		Format(aDrive);
+		r=TheFs.MkDirAll(gSessionPath);
+		test(r==KErrNone);
+		}
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("MkDirAll() r %d\n"),r);
+		test(EFalse);
+		}
+	TheFs.ResourceCountMarkStart();
+	TRAP(r,CallTestsL(aSwitches));
+	if (r==KErrNone)
+		TheFs.ResourceCountMarkEnd();
+	else
+		{
+		test.Printf(_L("Error: Leave %d\n"),r);
+		test(EFalse);
+		}
+
+	CheckDisk();
+	TestingLFFS(EFalse);
+	}
+
+	
+GLDEF_C TInt E32Main()
+//
+// Test with drive nearly full
+//
+    {
+	CTrapCleanup* cleanup;
+	cleanup=CTrapCleanup::New();
+	TRAPD(r,PushLotsL());
+	__UHEAP_MARK;
+
+	test.Title();
+	test.Start(_L("Starting tests..."));
+
+	gSessionPath=_L("?:\\F32-TST\\");
+	TTestSwitches testSwitches;
+	ParseCommandArguments(testSwitches);
+
+	r=TheFs.Connect();
+	test(r==KErrNone);
+	TheFs.SetAllocFailure(gAllocFailOn);
+
+	TTime timerC;
+	timerC.HomeTime();
+
+	TInt theDrive;
+	r=TheFs.CharToDrive(gDriveToTest,theDrive);
+	test(r==KErrNone);
+	
+#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
+	TPckgBuf<TIOCacheValues> pkgOrgValues;
+	TIOCacheValues& orgValues=pkgOrgValues();
+	r = controlIo(TheFs,theDrive, KControlIoCacheCount, orgValues);
+	test(r==KErrNone);
+
+	test.Printf(_L("\n"));
+	test.Printf(_L("Requests on close queue at start=%d\n"),orgValues.iCloseCount);
+	test.Printf(_L("Requests on free queue at start=%d\n"),orgValues.iFreeCount);
+	test.Printf(_L("Requests dynamically allocated at start=%d\n"),orgValues.iAllocated);
+	test.Printf(_L("Requests in total at start=%d\n"),orgValues.iTotalCount);
+#endif
+
+	DoTests(theDrive, testSwitches);
+
+	TTime endTimeC;
+	endTimeC.HomeTime();
+	TTimeIntervalSeconds timeTakenC;
+	r=endTimeC.SecondsFrom(timerC,timeTakenC);
+	test(r==KErrNone);
+
+	test.Printf(_L("Time taken for test = %d seconds\n"),timeTakenC.Int());
+	TheFs.SetAllocFailure(gAllocFailOff);
+	
+#if defined(_DEBUG) || defined(_DEBUG_RELEASE)
+	TPckgBuf<TIOCacheValues> pkgValues;
+	TIOCacheValues& values=pkgValues();
+	r = controlIo(TheFs,theDrive, KControlIoCacheCount, values);
+	test(r==KErrNone);
+	
+	test.Printf(_L("Requests on close queue at end=%d\n"),values.iCloseCount);
+	test.Printf(_L("Requests on free queue at end=%d\n"),values.iFreeCount);
+	test.Printf(_L("Requests dynamically allocated at end=%d\n"),values.iAllocated);
+	test.Printf(_L("Requests in total at end=%d\n"),values.iTotalCount);
+	
+	test(orgValues.iCloseCount==values.iCloseCount);
+	test(orgValues.iAllocated == values.iAllocated);
+#endif
+
+	TheFs.Close();
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	delete cleanup;
+	return(KErrNone);
+    }