--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/commonuisupport/uikon/test/tfileutils/tfileutils.CPP Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,939 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+// Tests EikFileUtils APIs.
+//
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include <eikfutil.h>
+#include <ecom/ecom.h>
+
+#include "tfileutils.h"
+#include <tfileutils.rsg>
+
+
+_LIT(KTFileUtilesResourceFilePath, "z:\\system\\test\\fileutils\\tfileutils.rsc");
+
+// globals
+TBufC<128> KOriginalFileName = _L("c:\\home\\letters\\azxcvmbcdef");
+
+//
+// class CTFileUtilsAppUi
+//
+CTFileUtilsAppUi::CTFileUtilsAppUi(CTmsTestStep* aStep) :
+ CTestAppUi(aStep, KTFileUtilesResourceFilePath)
+ {
+ }
+
+void CTFileUtilsAppUi::ConstructL()
+ {
+ CTestAppUi::ConstructL();
+
+ AutoTestManager().StartAutoTest();
+ }
+
+CTFileUtilsAppUi::~CTFileUtilsAppUi()
+ {
+ }
+
+/**
+ The method is an override from CTestAppUi. The method initiates tests on
+ EikFileUtils APIs.
+ */
+void CTFileUtilsAppUi::RunTestStepL(TInt aNumStep)
+ {
+ User::After(TTimeIntervalMicroSeconds32(500000));
+ switch(aNumStep)
+ {
+ case 1:
+ SetTestStepID(_L("UIF-fileutils-TestFileOperations"));
+ TestFileOperations();
+ RecordTestResultL();
+ break;
+ case 2:
+ SetTestStepID(_L("UIF-fileutils-TestFileOperations2"));
+ TestFileOperations2();
+ RecordTestResultL();
+ break;
+ case 3:
+ SetTestStepID(_L("UIF-fileutils-TestFileOperations3"));
+ TestFileOperations3();
+ RecordTestResultL();
+ break;
+ case 4:
+ SetTestStepID(_L("UIF-fileutils-TestFileOperations4"));
+ TestFileOperations4();
+ RecordTestResultL();
+ break;
+ case 5:
+ SetTestStepID(_L("UIF-fileutils-TestAbbreviateFileName"));
+ TestAbbreviateFileName();
+ RecordTestResultL();
+ break;
+ case 6:
+ SetTestStepID(_L("UIF-fileutils-TestUidTypeMatches"));
+ TestUidTypeMatches();
+ RecordTestResultL();
+ break;
+ case 7:
+ SetTestStepID(_L("UIF-fileutils-TestValidFolderName"));
+ TestValidFolderName();
+ RecordTestResultL();
+ break;
+ case 8:
+ {
+ SetTestStepID(_L("UIF-fileutils-TestDiskListL"));
+ TRAPD(err, TestDiskListL());
+ TEST(err == KErrNone);
+ RecordTestResultL();
+ break;
+ }
+ case 9:
+ {
+ SetTestStepID(_L("UIF-fileutils-TestSortByTableL"));
+ TRAPD(err, TestSortByTableL());
+ TEST(err == KErrNone);
+ RecordTestResultL();
+ CloseTMSGraphicsStep();
+ break;
+ }
+ case 10:
+ INFO_PRINTF1(_L("Tests completed.\n"));
+ AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+
+/**
+ This method creates & sets the application's user interface object.
+ */
+void CFileUtilsStep::ConstructAppL(CEikonEnv* aEikEnv)
+ { // runs inside a TRAP harness
+ aEikEnv->ConstructL();
+ CTFileUtilsAppUi* appUi=new(ELeave) CTFileUtilsAppUi(this);
+
+ CleanupStack::PushL(appUi);
+ aEikEnv->SetAppUi(appUi);
+ appUi->ConstructL();
+ CleanupStack::Pop(appUi);
+ // goes out of scope when function leaves and private members are destroyed. App Architecture handles
+ // CEikAppUI destruction
+ }
+
+
+CFileUtilsStep::~CFileUtilsStep()
+ {
+ }
+
+CFileUtilsStep::CFileUtilsStep()
+ {
+ // Call base class method to set up the human readable name for logging
+ SetTestStepName(KFileUtilsStep);
+ }
+
+
+/**
+ The method creates & sets the test step's user interface object and
+ launches the test step.
+ */
+TVerdict CFileUtilsStep::doTestStepL()
+ {
+ INFO_PRINTF1(_L("Test Started"));
+ PreallocateHALBuffer();
+
+ __UHEAP_MARK;
+
+ CEikonEnv* eikEnv=new CEikonEnv;
+ if (eikEnv==NULL)
+ {
+ INFO_PRINTF1(_L("Failed to create Eikon Environment due to lack of Memory"));
+ SetTestStepResult(EFail);
+ return TestStepResult();
+ }
+ TRAPD(err,ConstructAppL(eikEnv));
+ if (err!=KErrNone)
+ {
+ SetTestStepResult(EFail);
+ delete eikEnv;
+ INFO_PRINTF2(_L("Failed to construct Eikon Environment, error %d"), err);
+ }
+ else
+ eikEnv->ExecuteD();
+
+ REComSession::FinalClose();
+
+ __UHEAP_MARKEND;
+
+ INFO_PRINTF1(_L("Test Finished"));
+ return TestStepResult();
+ }
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestFileOperations
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Test folder information,file copy, renaming & deletion APIs of
+ EikFileUtils.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method tests the following APIs:\n
+ 1.EikFileUtils::IsFolder() : IsFolder() API is tested to verify whether
+ folder path exists by passing invalid & valid folder paths. It also tests the
+ API by passing valid path including filename of a file.\n
+ 2.EikFileUtils::PathExists() : PathExists() API is tested to verify whether
+ the specifed path exists by passing valid path including filename.\n
+ 3.EikFileUtils::FolderExists() : FolderExists() API is tested to verify
+ whether folder exists by passing a valid folder path.\n
+ 4.EikFileUtils::CheckFolder() : CheckFolder() API is tested by passing a
+ non-existent folder path.\n
+ 5.EikFileUtils::CheckWhetherFullNameRefersToFolder() :
+ CheckWhetherFullNameRefersToFolder() API is tested to verify whether the
+ fullname passed refers to a folder. This is done by passing a fullname
+ with filename and by passing fullname without a filename.\n
+ 6.EikFileUtils::CopyFile() : CopyFile() API is tested to verify copying of
+ an existing & non-existent file.\n
+ 7.EikFileUtils::RenameFile() : RenameFile() API is tested to verify renaming
+ of a file.\n
+ 8.EikFileUtils::DeleteFile() : DeleteFile() API is tested to verify deletion
+ of a valid and invalid file.\n
+
+ @SYMTestExpectedResults The test validates results against expected values.
+
+ */
+void CTFileUtilsAppUi::TestFileOperations()
+ {
+ _LIT(KSourceFileName, "z:\\uiktest\\uiktest_t_fileutils.script");
+ _LIT(KSourceFileNameNotExist, "z:\\system\\test\\uiktest\\notexist.txt");
+ _LIT(KDestDir, "c:\\uiktest\\");
+
+ RFs fs;
+ TInt theRes = fs.Connect();
+ TEST(theRes == KErrNone);
+ if(theRes != KErrNone)
+ {
+ return;
+ }
+
+ fs.RmDir(KDestDir);
+
+ INFO_PRINTF2(_L("Tests whether \"%S\" is a folder"), &KDestDir);
+ TBool theBoolRetVal = EFalse;
+ theRes = EikFileUtils::IsFolder(KDestDir, theBoolRetVal);
+ TEST(theRes == KErrNotFound && (!theBoolRetVal));
+
+ fs.MkDirAll(KDestDir);
+ theRes = EikFileUtils::IsFolder(KDestDir, theBoolRetVal);
+ //
+ TEST(theRes == KErrNone);
+ TEST(theBoolRetVal);
+
+ //should be fail as consists filename
+ INFO_PRINTF2(_L("Test whether path \"%S\" exist"), &KSourceFileName);
+ theBoolRetVal = EikFileUtils::PathExists(KSourceFileName);
+ TEST(!theBoolRetVal);
+
+ theRes = EikFileUtils::IsFolder(KSourceFileName, theBoolRetVal);
+ TEST(theRes == KErrNone);
+ TEST(!theBoolRetVal);
+
+ //Tests whether a specified folder exists.
+ INFO_PRINTF2(_L("Tests whether a specified folder \"%S\" exist"), &KDestDir);
+ theBoolRetVal = EikFileUtils::FolderExists(KDestDir);
+ TEST(theBoolRetVal);
+
+ //exercising CheckFolder
+ //non-existant path
+ theRes = EikFileUtils::CheckFolder(_L("c:\\kkkk\\"));
+ TEST(theRes);
+
+ theRes = EikFileUtils::CheckFolder(KDestDir);
+ TEST(theRes == KErrNone);
+
+ INFO_PRINTF2(_L("Passing full path, including filename \"%S\" and check whether full name refers to folder"), &KSourceFileName);
+ theRes = EikFileUtils::CheckWhetherFullNameRefersToFolder(KSourceFileName, theBoolRetVal);
+ TEST(theRes == (TInt)KErrNone);
+ TEST(!theBoolRetVal);
+
+ INFO_PRINTF2(_L("Passing full path, excluding filename \"%S\" and check whether full name refers to folder"), &KDestDir);
+ theRes = EikFileUtils::CheckWhetherFullNameRefersToFolder(KDestDir, theBoolRetVal);
+ TEST(theRes == (TInt)KErrNone);
+ TEST(theBoolRetVal);
+
+ _LIT(KDestFileName, "fileutils.txt");
+ _LIT(KDestNewFileName, "fileutilsnew.txt");
+
+ TFileName destFileName(KDestDir);
+ destFileName += KDestFileName;
+ TFileName destFileNameNew(KDestDir);
+ destFileNameNew += KDestNewFileName;
+
+ // When trying to copy an Non-Existant File , the expected Return code is KErrNotFound
+ INFO_PRINTF1(_L("Try to copy non-existent file"));
+ theRes = EikFileUtils::CopyFile(KSourceFileNameNotExist, KDestFileName, CFileMan::EOverWrite);
+ TEST(theRes == KErrNotFound);
+
+ INFO_PRINTF3(_L("Try to copy a file from %S to %S "), &KSourceFileName, &destFileName);
+ theRes = EikFileUtils::CopyFile(KSourceFileName, destFileName, CFileMan::EOverWrite);
+ TEST(theRes == KErrNone);
+
+ // When the Source and Destination Filenames are the same
+ INFO_PRINTF2(_L("Try to copy with src and dest filenames being same (\"%S\") with aSwitch = EOverWrite"), &destFileName);
+ theRes = EikFileUtils::CopyFile(destFileName, destFileName, CFileMan::EOverWrite);
+ TEST(theRes == KErrNone);
+ INFO_PRINTF3(_L("Expected Return Code is KErrNone %d obtained return code is %d"),KErrNone,theRes);
+
+ INFO_PRINTF2(_L("Try to copy with src and dest filenames being same (\"%S\") with aSwitch = 0"), &destFileName);
+ theRes = EikFileUtils::CopyFile(destFileName, destFileName, 0);
+ TEST(theRes == KErrAlreadyExists);
+ INFO_PRINTF3(_L("Expected Return Code is KErrAlreadyExists %d obtained return code is %d"),KErrAlreadyExists,theRes);
+
+ INFO_PRINTF3(_L("Rename the file from %S to %S"), &destFileName, &destFileNameNew);
+ theRes = EikFileUtils::RenameFile(destFileName, destFileNameNew, CFileMan::EOverWrite);
+ TEST(theRes == KErrNone);
+
+ // Copy usually keeps the same attributes on target, so we need to fix them
+ fs.SetAtt(destFileNameNew,0,KEntryAttReadOnly);
+
+ INFO_PRINTF2(_L("Delete the file : \"%S\""), &destFileNameNew);
+ theRes = EikFileUtils::DeleteFile(destFileNameNew);
+ TEST(theRes == KErrNone);
+ if(theRes != KErrNone)
+ {
+ INFO_PRINTF2(_L("Error during deleting the file %d"), theRes);
+ }
+
+ //try to delete twice
+ INFO_PRINTF1(_L("Delete the file twice"));
+ theRes = EikFileUtils::DeleteFile(destFileNameNew);
+ TEST(theRes == KErrNotFound);
+
+ INFO_PRINTF2(_L("Tests whether a specified folder %S exists"), &KDestDir);
+ theBoolRetVal = EikFileUtils::FolderExists(KDestDir);
+ TEST(theBoolRetVal);
+
+ fs.RmDir(KDestDir);
+
+ //test has to return false as we have deleted the directory
+ theBoolRetVal = EikFileUtils::FolderExists(KDestDir);
+ TEST(!theBoolRetVal);
+
+ fs.Close();
+ }
+
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestAbbreviateFileName
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests EikFileUtils::AbbreviatePath()
+ & EikFileUtils::AbbreviateFileName() APIs.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The tests performs the following:\n
+ 1.EikFileUtils::AbbreviateFileName() : AbbreviateFileName() API is tested to
+ display the filename when the space to display the entire filename is
+ sufficient and in-sufficient.
+ 2.EikFileUtils::AbbreviatePath() : AbbreviatePath() API is tested to display
+ path when the space to display the entire path is sufficient and
+ in-sufficient.
+
+ @SYMTestExpectedResults The test validates results against expected values.
+
+ */
+void CTFileUtilsAppUi::TestAbbreviateFileName()
+ {
+ //exercising AbbreviateFileName function
+ TBuf<256> buf;
+ TBuf<1> buf1;
+
+ TFileName fileName(KOriginalFileName);
+ TFileName fileName1(KOriginalFileName);
+
+ EikFileUtils::AbbreviateFileName(fileName, buf);
+ TEST(buf == KOriginalFileName);
+
+ const TInt theLenghtBuffer = 8;
+ TBuf<theLenghtBuffer> bufLen8;
+
+ EikFileUtils::AbbreviateFileName(fileName, bufLen8);
+
+ TChar ellipsis(0x2026);
+
+ buf = KOriginalFileName.Right(theLenghtBuffer);
+ buf[0] = (TUint16)ellipsis;
+ TEST(buf == bufLen8);
+
+ //exercising AbbreviatePath function
+ buf1.Zero();
+ buf1.Append(ellipsis);
+
+ const CFont* theFont = CEikonEnv::Static()->LegendFont();
+ fileName = KOriginalFileName;
+ TInt theMaxWidthInPixels = 0;
+ INFO_PRINTF1(_L("exercising AbbreviatePath function"));
+ buf = EikFileUtils::AbbreviatePath(fileName, *theFont, theMaxWidthInPixels);
+ TEST(buf == buf1);
+
+ //--------
+ buf.Zero();
+ buf.Append(ellipsis);
+ fileName = KOriginalFileName.Right(KOriginalFileName.Length() / 2);
+ fileName.Insert(0, buf);
+ theMaxWidthInPixels = theFont->TextWidthInPixels(fileName);
+ fileName1 = KOriginalFileName;
+ buf = EikFileUtils::AbbreviatePath(fileName1, *theFont, theMaxWidthInPixels);
+ TEST(buf == fileName);
+
+ //--------
+ buf = EikFileUtils::AbbreviatePath(fileName1, *theFont, theMaxWidthInPixels + 1);
+ TEST(buf == fileName);
+ }
+
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestFileOperations2
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests drive information APIs and Parse() API.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method tests the following APIs:
+ 1.EikFileUtils::RootFolderPath() : RootFolderPath() API is tested to verify
+ whether the root folder for the specified drive is returned.\n
+ 2.EikFileUtils::Parse() : Parse() API is tested to verify whether a specifed
+ filename can be parsed. The test is carried out for valid & invalid file
+ paths.\n
+ 3.EikFileUtils::DiskIsReadOnly() : DiskIsReadOnly() API is tested to verify
+ whether the specified disk is read only. This is done by specifying the drive
+ root folder, drive letter & invalid drives.
+ 4.EikFileUtils::MostSignificantPartOfFullName() : MostSignificantPartOfFullName()
+ API is tested to verify whether it retreives the most significant part of
+ specified drive, path and file name.
+ 5.EikFileUtils::DriveAndPathFromFullName() : DriveAndPathFromFullName()
+ API is tested to verify whether it parses the specified full path to obtain
+ the drive and path.
+
+ @SYMTestExpectedResults The test validates results against expected values.
+
+ */
+void CTFileUtilsAppUi::TestFileOperations2()
+ {
+ TBool theBoolRetVal;
+ TBuf<1> buf1 = _L("d");
+ _LIT(KRootFolderPath, "d:\\");
+
+ TBuf<256> buf;
+
+ buf = EikFileUtils::RootFolderPath(buf1);
+ TEST(buf == KRootFolderPath);
+
+ //exercising parse function
+ buf.Copy(KOriginalFileName);
+ INFO_PRINTF1(_L("Tests whether a specified file name can be parsed"));
+ TInt theRes = EikFileUtils::Parse(buf);
+ TEST(theRes == KErrNone);
+
+ buf.Delete(0, 1);
+ theRes = EikFileUtils::Parse(buf);
+ TEST(theRes == KErrBadName);
+
+ //exercising function TInt DiskIsReadOnly(const TDesC& aFullName, TBool& aIsReadOnly);
+ buf = _L("c:\\");
+ INFO_PRINTF2(_L("Tests whether the specified drive %S is read-only"), &buf);
+ theRes = EikFileUtils::DiskIsReadOnly(buf, theBoolRetVal);
+ INFO_PRINTF1(_L("Tests whether the specified drive is read-only"));
+ TEST(theRes == KErrNone && (!theBoolRetVal));
+
+ buf = _L("z:");
+ theRes = EikFileUtils::DiskIsReadOnly(buf, theBoolRetVal);
+ TEST(theRes == KErrNone && theBoolRetVal);
+
+ buf = _L("c~\\");
+ theRes = EikFileUtils::DiskIsReadOnly(buf, theBoolRetVal);
+ TEST(theRes == KErrBadName && theBoolRetVal);
+
+ buf = _L("c");
+ theRes = EikFileUtils::DiskIsReadOnly(buf, theBoolRetVal);
+ TEST(theRes == KErrBadName);
+
+ //exercising function MostSignificantPartOfFullName
+ TFileName fileName(KOriginalFileName);
+
+ INFO_PRINTF1(_L("Gets the folder/file name"));
+ theRes = EikFileUtils::MostSignificantPartOfFullName(fileName, buf);
+ TEST(theRes == KErrNone);
+ TEST(buf.Compare(_L("azxcvmbcdef")) == 0);
+
+ theRes = fileName.LocateReverseF('\\');
+ fileName = fileName.Mid(theRes + 1);
+
+ TEST(fileName == buf);
+
+ //exercising function DriveAndPathFromFullName
+ fileName = KOriginalFileName;
+ INFO_PRINTF1(_L("Parses the specified full path and file name to obtain the drive and path"));
+ fileName = EikFileUtils::DriveAndPathFromFullName(fileName);
+ buf = KOriginalFileName;
+ theRes = buf.LocateReverseF('\\');
+ buf = buf.Left(theRes + 1);
+
+ TEST(buf == fileName);
+ }
+
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestFileOperations4
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests EikFileUtils::FolderNameFromFullName() API.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method tests FolderNameFromFullName() API to verify whether
+ it retreives folder name from a path and file name. The test is carried out
+ against valid & invalid path & filename.
+
+ @SYMTestExpectedResults The test validates results against expected values.
+
+ */
+void CTFileUtilsAppUi::TestFileOperations4()
+ {
+ TBuf<256> buf;
+
+ //exercising function FolderNameFromFullName
+ buf = KOriginalFileName;
+
+ INFO_PRINTF1(_L("Gets a folder name from a path and file name"));
+ TFileName fileName = EikFileUtils::FolderNameFromFullName(buf);
+ buf=FolderNameFromFullName(buf);
+ TEST(buf == fileName);
+
+ buf = _L("c:");
+ INFO_PRINTF1(_L("Gets a folder name from an invalid folder name"));
+ fileName = EikFileUtils::FolderNameFromFullName(buf);
+ buf=FolderNameFromFullName(buf);
+ TEST(buf == fileName);
+ }
+
+
+/**
+ Auxiliary function for TestCaseID tfileutils-TestFileOperations4
+
+ This method splits folder name from a full path.
+
+ */
+TFileName CTFileUtilsAppUi::FolderNameFromFullName(const TDesC& aFullName)
+ {
+ //remove drive from path
+ TFileName theFileName = aFullName;
+ if(theFileName.Match(_L("?:*")) == 0)
+ {
+ theFileName = theFileName.Mid(2);
+ }
+
+ TInt theRes = theFileName.LocateReverseF('\\');
+ if(theRes >= 0)//whether the char in the string
+ {
+ theFileName = theFileName.Left(theRes);
+ theRes = theFileName.LocateReverseF('\\');
+ if(theRes >= 0)
+ {
+ theFileName = theFileName.Right(theFileName.Length() - theRes - 1);
+ }
+ }
+
+ if(theFileName.Length() == 0)
+ {
+ if(aFullName.MatchF(_L("?:\\")) == 0)
+ {
+ theFileName.Copy(aFullName.Ptr(), 3);
+ }
+ else if(aFullName.MatchF(_L("?:")) == 0)
+ {
+ theFileName.Copy(aFullName.Ptr(), 2);
+ }
+ }
+
+ return theFileName;
+ }
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestFileOperations3
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests removal of system directory "z:\\system".
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method connects to the file server and sets the attributes
+ of system directory & files. The test then calls RFs::GetDir() to populate
+ the system directory & file list. EikFileUtils::RemoveSystemDirectory() is
+ invoked to remove the system directory "z:\\system".
+
+ @SYMTestExpectedResults The test validates results by calling CDir::Count()
+ which lists the directory count matching the attributes set.
+
+ */
+void CTFileUtilsAppUi::TestFileOperations3()
+ {
+ RFs theFs;
+
+ CDir* theDir = NULL;
+ CDir* fileList = NULL;
+
+ theFs.Connect();
+ TInt attribs=KEntryAttDir|KEntryAttSystem|KEntryAttMatchExclusive;
+ theFs.GetDir(_L("z:\\system"),attribs,ESortNone, fileList, theDir);
+
+ TInt theNumber = theDir -> Count();
+ TEST(theNumber == 1);
+ INFO_PRINTF1(_L("Removes the System directory from a list of directory entries"));
+ EikFileUtils::RemoveSystemDirectory(*theDir);
+ theNumber = theDir -> Count();
+ TEST(theNumber == 0);
+
+ delete fileList;
+ delete theDir;
+
+ theFs.Close();
+ }
+
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestUidTypeMatches
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests EikFileUtils::UidTypeMatches() function which tests
+ whether two UID types match.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method creates some valid UID types and NULL UID type. It
+ also creates similar UID types which is used to compare.\n
+ The method then performs the following tests:\n
+ 1. Invokes UidTypeMatches() with valid UID type & its corresponding match UID
+ type.\n
+ 2. Invokes UidTypeMatches() with NULL UID type & its corresponding match UID
+ type ie another NULL UID type.\n
+ 3. Invokes UidTypeMatches() with NULL UID type & a valid UID type.\n
+ 4. Invokes UidTypeMatches() with 2 UID types that do not match.\n
+ 5. Invokes UidTypeMatches() with 2 UID types that contain some NULL UID but
+ are similar matches.\n
+
+ @SYMTestExpectedResults The test validates results against expected boolean values
+ returned by EikFileUtils::UidTypeMatches().
+
+ */
+void CTFileUtilsAppUi::TestUidTypeMatches()
+ {
+ TBool bIsMatch;
+
+ // set up some uid's
+ TUid uid1, uid2, uid3, uid4;
+ uid1.iUid = 11111;
+ uid2.iUid = 22222;
+ uid3.iUid = 33333;
+ uid4.iUid = 0;
+
+ // set up some uid types
+ TUidType theFileUid1(uid1, uid2, uid3);
+ TUidType theFileUid2;
+ TUidType theFileUid3(uid1, uid2, uid4);
+ TUidType theMatchUid1(uid1, uid2, uid3);
+ TUidType theMatchUid2;
+ TUidType theMatchUid3(uid1, uid2, uid4);
+
+ // good
+ INFO_PRINTF3(_L("Tests whether two valid UID types match, uid1 = %d, uid2 = %d"),
+ theFileUid1[0], theMatchUid1[0]);
+ bIsMatch = EikFileUtils::UidTypeMatches(theFileUid1, theMatchUid1);
+ TEST(bIsMatch);
+ // both nulls
+ INFO_PRINTF3(_L("Tests whether two null UID types match, uid1 = %d, uid2 = %d"),
+ theFileUid2[0], theMatchUid2[0]);
+ bIsMatch = EikFileUtils::UidTypeMatches(theFileUid2, theMatchUid2);
+ TEST(bIsMatch);
+ // null passed
+ INFO_PRINTF3(_L("Tests whether null and valid UID types match, uid1 = %d, uid2 = %d"),
+ theFileUid1[0], theMatchUid2[0]);
+ bIsMatch = EikFileUtils::UidTypeMatches(theFileUid1, theMatchUid2);
+ TEST(bIsMatch);
+ // bad
+ INFO_PRINTF3(_L("Tests whether two invalid UID types match, uid1 = %d, uid2 = %d"),
+ theFileUid2[0], theMatchUid1[0]);
+ bIsMatch = EikFileUtils::UidTypeMatches(theFileUid2, theMatchUid1);
+ TEST(!bIsMatch);
+
+ //some of the Uid are null
+ INFO_PRINTF3(_L("Compearing two UId's where some of them are null, uid1 = %d, uid2 = %d"),
+ theFileUid3[0], theMatchUid3[0]);
+ bIsMatch = EikFileUtils::UidTypeMatches(theFileUid3, theMatchUid3);
+ TEST(bIsMatch);
+
+ bIsMatch = EikFileUtils::UidTypeMatches(theFileUid3, theMatchUid1);
+ TEST(!bIsMatch);
+ }
+
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestValidFolderName
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests EikFileUtils::ValidateFolderNameTypedByUserL() API.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method tests EikFileUtils::ValidateFolderNameTypedByUserL()
+ API which tests the folder name provided by user is valid. \n
+ The following tests are performed:\n
+ 1. Verifies whether alphabetical characters provided by user can form a valid
+ folder name.\n
+ 2. Verifies whether invalid characters such as "*?/\":<>\\" provided by user
+ can form a valid folder name.\n
+ 3. Verifies whether valid characters such as "#@%^$£()[]{}&~-_;,.+" provided
+ by user can form a valid folder name.\n
+
+ @SYMTestExpectedResults For alphabet charachets & vlid character specified
+ ValidateFolderNameTypedByUserL() API should return KErrNone.
+
+ */
+void CTFileUtilsAppUi::TestValidFolderName()
+ {
+ const TBufC<128> theCurrentPath = _L("c:\\");
+ const TBufC<128> theFolderNameTypedByUser = _L("abc");
+ TFileName theNewFolderFullName;
+
+ TRAPD(theRes, theNewFolderFullName = EikFileUtils::ValidateFolderNameTypedByUserL(theFolderNameTypedByUser, theCurrentPath));
+ TEST(theRes == KErrNone);
+ TEST(theNewFolderFullName.Compare(_L("c:\\abc\\")) == 0);
+
+ //check invalid characters
+ const TBufC<32> theInvalidCharacters = _L("*?/\":<>\\");
+
+ for(TInt index = 0; index < theInvalidCharacters.Length(); index++)
+ {
+ TBuf<128> buf;
+
+ buf = theFolderNameTypedByUser;
+ buf.Append(theInvalidCharacters[index]);
+ INFO_PRINTF2(_L("Check whether the folder's name %S is invalid"), &buf);
+
+ TRAP(theRes, theNewFolderFullName = EikFileUtils::ValidateFolderNameTypedByUserL(buf, theCurrentPath));
+ TEST(theRes != KErrNone);
+ }
+
+ //check valid characters
+ TBuf<32> theValidCharacters = _L("#@%^$£()[]{}&~-_;,.+");
+ TChar ch(0x20ac);
+ theValidCharacters.Append(ch);
+
+ for(TInt index1 = 0; index1< theValidCharacters.Length(); index1++)
+ {
+ TBuf<128> buf;
+
+ buf = theFolderNameTypedByUser;
+ buf.Append(theValidCharacters[index1]);
+ INFO_PRINTF2(_L("Check whether the folder's name %S is valid"), &buf);
+
+ TRAP(theRes, theNewFolderFullName = EikFileUtils::ValidateFolderNameTypedByUserL(buf, theCurrentPath));
+ TEST(theRes == KErrNone);
+ }
+ }
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestDiskListL
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc Tests EikFileUtils::UpdateDiskListL() API.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The method tests whether UpdateDiskListL() API updates the list
+ of available drives. The following tests are performed on UpdateDiskListL():\n
+ 1. Tests updating drive list so that ROM is not included as a drive.\n
+ 2. Tests updating drive list so that ROM is included as a drive.\n
+ 3. Tests updating drive list after mounting a file system on drive X.\n
+
+ @SYMTestExpectedResults The test validates results against expected values.
+
+ */
+void CTFileUtilsAppUi::TestDiskListL()
+ {
+ CCoeEnv* coeEnv = CCoeEnv::Static();
+ TBool theIncludeRom = EFalse;
+
+ CDesCArray* drives = new(ELeave) CDesCArrayFlat(1);
+ TDriveNumber theDriveNumber1 = EDriveC;
+
+ TBuf<2> driveLetter;
+
+ CleanupStack::PushL(drives);
+
+ EikFileUtils::UpdateDiskListL(coeEnv->FsSession(), *drives, theIncludeRom, theDriveNumber1);
+ INFO_PRINTF2(_L("The number of the drive : %d"), drives->MdcaCount());
+
+ TInt theCurDriveNumber = drives->MdcaCount();
+ TEST(theCurDriveNumber >= 1);
+ driveLetter = (*drives)[0];
+ INFO_PRINTF2(_L("The drive letter should be C only : %S"), &driveLetter);
+ TEST(driveLetter[0] == 'C');
+
+ EikFileUtils::UpdateDiskListL(coeEnv->FsSession(), *drives, theIncludeRom, theDriveNumber1);
+ INFO_PRINTF3(_L("The number of drives has to be the same %d: %d"), theCurDriveNumber, drives->MdcaCount());
+ TEST(drives->MdcaCount() == theCurDriveNumber);
+
+ theIncludeRom = ETrue;
+ EikFileUtils::UpdateDiskListL(coeEnv->FsSession(), *drives, theIncludeRom, theDriveNumber1);
+ INFO_PRINTF2(_L("The number of the drive : %d"), drives->MdcaCount());
+ theCurDriveNumber++;
+ TEST(drives->MdcaCount() == theCurDriveNumber);
+ driveLetter = (*drives)[theCurDriveNumber-1];
+ INFO_PRINTF2(_L("The drive letter should be Z : %S"), &driveLetter);
+ TEST(driveLetter[0] == 'Z');
+
+ CleanupStack::PopAndDestroy(drives);
+ }
+
+
+/**
+ @SYMTestCaseID UIF-fileutils-TestSortByTableL
+
+ @SYMPREQ
+
+ @SYMTestCaseDesc The test exercises EikFileUtils::SortByTable() API.
+
+ @SYMTestPriority High
+
+ @SYMTestStatus Implemented
+
+ @SYMTestActions The test exercises EikFileUtils::SortByTable function.
+ The function must sort list of files in order specified in the second
+ param - table of UIDs. The testing directory has 4 files, two of them have
+ equal UID in the sort table.
+
+ @SYMTestExpectedResults The test validates results against expected values.
+
+ */
+void CTFileUtilsAppUi::TestSortByTableL()
+ {
+ CDir* theFileList;
+ TInt theAttribs=KEntryAttNormal|KEntryAttSystem|KEntryAttAllowUid;
+ TFileName theCurrentPath = _L("Z:\\uiktest\\Documents\\test\\");
+
+ RFs& fs=iEikonEnv->FsSession();
+ const TInt ret=fs.GetDir(theCurrentPath,theAttribs,ESortByName,theFileList);
+ User::LeaveIfError(ret);
+
+ CleanupStack::PushL(theFileList);
+
+ TResourceReader reader;
+ CEikonEnv::Static()->CreateResourceReaderLC(reader,R_EIK_ARRAY_FILE_SORT_TABLE);
+
+ CBaflFileSortTable*theTable = new (ELeave) CBaflFileSortTable();
+ CleanupStack::PushL(theTable);
+ theTable->ConstructFromResourceL(reader);
+
+ INFO_PRINTF1(_L("Get the names of the files sorted by alphabetical order"));
+ for(TInt theIndex1 = 0; theIndex1 < theFileList->Count(); theIndex1++)
+ {
+ TEntry theEntry = (*theFileList)[theIndex1];
+ TUid theUid1 = theEntry[2];
+ INFO_PRINTF4(_L("The %d file in list %S, Uid = 0x%x"), theIndex1 + 1, &theEntry.iName, theUid1.iUid);
+
+ switch(theIndex1)
+ {
+ case 0:
+ TEST(theEntry.iName == _L("tfileutils.agenda"));
+ break;
+ case 1:
+ TEST(theEntry.iName == _L("tfileutils.dummy"));
+ break;
+ case 2:
+ TEST(theEntry.iName == _L("tfileutils.scetch"));
+ break;
+ case 3:
+ TEST(theEntry.iName == _L("tfileutils.word"));
+ break;
+ default:
+ break;
+ }
+ }
+
+
+ EikFileUtils::SortByTable(*theFileList, theTable);
+ INFO_PRINTF1(_L("Get the names of the files sorted by the Uid's table"));
+ for(TInt theIndex = 0; theIndex < theFileList->Count(); theIndex++)
+ {
+ TEntry theEntry = (*theFileList)[theIndex];
+ TUid theUid1 = theEntry[2];
+
+ INFO_PRINTF4(_L("The %d file in list %S, Uid = 0x%x"), theIndex + 1, &theEntry.iName, theUid1.iUid);
+ switch(theIndex)
+ {
+ case 0:
+ TEST(theEntry.iName == _L("tfileutils.word"));
+ break;
+ case 1:
+ TEST(theEntry.iName == _L("tfileutils.agenda"));
+ break;
+ case 2:
+ TEST(theEntry.iName == _L("tfileutils.scetch"));
+ break;
+ case 3:
+ TEST(theEntry.iName == _L("tfileutils.dummy"));
+ break;
+ default:
+ break;
+ }
+ }
+
+ CleanupStack::PopAndDestroy(3); //reader theFileList theTable
+ }
+