diff -r 01e38b33e72a -r a145c1c7a5f4 textandlocutils/nearestlangutils/tsrc/T_LangUtils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textandlocutils/nearestlangutils/tsrc/T_LangUtils.cpp Fri Sep 17 08:40:09 2010 +0300 @@ -0,0 +1,425 @@ +// Copyright (c) 1997-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: +// + + +#include +#include +#include +#include +#include +#include +#include "LangUtilImpl.h" +#include "T_LangUtilsTestShareFunc.h" +#include "t_langutils.h" + + + +#define test(cond) \ + { \ + TBool __bb = (cond); \ + TEST(__bb); \ + if (!__bb) \ + { \ + ERR_PRINTF1(_L("ERROR: Test Failed")); \ + User::Leave(1); \ + } \ + } + +// File names for copying + +const TPtrC KSystem1Folder =_L("C:\\System1\\"); +const TPtrC KSystem1Data1Folder =_L("C:\\System1\\data1\\"); + +const TPtrC KSystem1Data1File1 =_L("C:\\System1\\data1\\file1.txt"); +const TPtrC KFile1 =_L("C:\\file1.txt"); +const TPtrC KSystem1Data1SrcFile1 =_L("C:\\System1\\data1\\src\\file1.txt"); +const TPtrC KSystem1Data1DstFile2 =_L("C:\\System1\\data1\\dst\\file2.txt"); +const TPtrC KSystem1Data1File123456789 =_L("C:\\System1\\data1\\file123456789.txt"); +const TPtrC KSystem1Data1File2 =_L("C:\\System1\\data1\\file2.txt"); +const TPtrC KSystem1Data1File5 =_L("C:\\System1\\data1\\file5.txt"); +const TPtrC KSystem1Data1SrcFolder =_L("C:\\System1\\data1\\src\\"); +const TPtrC KSystem1Data1DstFolder =_L("C:\\System1\\data1\\dst\\"); + +const TPtrC KZFile1 =_L("Z:\\file1.txt"); + + + +/////////////////////////////////////////////////////////////////////////////////////// +//LangUtil::GetEquivalentLanguageList +//LangUtil::NearestLanguageFileV2 +//test data +_LIT (KNullFilename, ""); +_LIT (KRscFilename, "C:\\geltest.rsc"); +_LIT (KRscFilenameNoSuffix, "C:\\geltest."); + +_LIT (KAmericanLang, "C:\\geltest.r10"); +_LIT (KFrenchLang, "C:\\geltest.r02"); +_LIT (KJapanEnglishLang, "C:\\geltest.r160"); +_LIT (KEnglishLang, "C:\\geltest.r01"); +_LIT (KInvalidDriveLetterV2, "q:\\geltest.rsc"); +_LIT (KNoSuchLangFile, "c:\\geltest.r54"); + + +//Delete "aFullName" file. +void CT_LANGUTILS::DeleteTestFile(const TDesC& aFullName) + { + RFs fsSession; + TInt err = fsSession.Connect(); + if(err == KErrNone) + { + TEntry entry; + if(fsSession.Entry(aFullName, entry) == KErrNone) + { + INFO_PRINTF2(_L("Deleting \"%S\" file.\n"), &aFullName); + err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly); + if(err != KErrNone) + { + INFO_PRINTF3(_L("Error %d changing \"%S\" file attributes.\n"), err, &aFullName); + } + err = fsSession.Delete(aFullName); + if(err != KErrNone) + { + INFO_PRINTF3(_L("Error %d deleting \"%S\" file.\n"), err, &aFullName); + } + } + fsSession.Close(); + } + else + { + INFO_PRINTF3(_L("Error %d connecting file session. File: %S.\n"), err, &aFullName); + } + } + +//Delete "aFullName" dir. +void CT_LANGUTILS::DeleteTestDir(const TDesC& aFullName) + { + RFs fsSession; + TInt err = fsSession.Connect(); + if(err == KErrNone) + { + TEntry entry; + if(fsSession.Entry(aFullName, entry) == KErrNone) + { + INFO_PRINTF2(_L("Deleting \"%S\" dir.\n"), &aFullName); + err = fsSession.SetAtt(aFullName, 0, KEntryAttReadOnly); + if(err != KErrNone) + { + INFO_PRINTF3(_L("Error %d changing \"%S\" dir attributes.\n"), err, &aFullName); + } + err = fsSession.RmDir(aFullName); + if(err != KErrNone) + { + INFO_PRINTF3(_L("Error %d deleting \"%S\" dir.\n"), err, &aFullName); + } + } + fsSession.Close(); + } + else + { + INFO_PRINTF3(_L("Error %d connecting file session. Dir: %S.\n"), err, &aFullName); + } + } + +//Delete data files used by the test +void CT_LANGUTILS::DeleteTestFiles() + { + DeleteTestFile(KSystem1Data1File1); + DeleteTestFile(KFile1); + DeleteTestFile(KSystem1Data1SrcFile1); + DeleteTestFile(KSystem1Data1DstFile2); + DeleteTestFile(KSystem1Data1File123456789); + DeleteTestFile(KSystem1Data1File2); + DeleteTestFile(KSystem1Data1File5); + DeleteTestDir(KSystem1Data1SrcFolder); + DeleteTestDir(KSystem1Data1DstFolder); + DeleteTestDir(KSystem1Data1Folder); + DeleteTestDir(KSystem1Folder); + } + + + + +void CT_LANGUTILS::DeleteTestFiles2(RFs &aFs) +{ + LangUtilsTest::DeleteFile (aFs, KRscFilename); + LangUtilsTest::DeleteFile (aFs, KAmericanLang); + LangUtilsTest::DeleteFile (aFs, KFrenchLang); + LangUtilsTest::DeleteFile (aFs, KJapanEnglishLang); + LangUtilsTest::DeleteFile (aFs, KEnglishLang); +} + +void CT_LANGUTILS::CreateTestFiles2(RFs &aFs) +{ + test(LangUtilsTest::FileExists (aFs, KRscFilename) == EFalse); + test(LangUtilsTest::FileExists (aFs, KAmericanLang) == EFalse); + test(LangUtilsTest::FileExists (aFs, KFrenchLang) == EFalse); + test(LangUtilsTest::FileExists (aFs, KJapanEnglishLang) == EFalse); + test(LangUtilsTest::FileExists (aFs, KEnglishLang) == EFalse); + + // Create the files... + RFile rFile; + test(KErrNone == rFile.Create (aFs, KRscFilename, EFileRead)); + rFile.Close (); + test(KErrNone == rFile.Create (aFs, KAmericanLang, EFileRead)); + rFile.Close (); + test (KErrNone == rFile.Create (aFs, KFrenchLang, EFileRead)); + rFile.Close (); + test(KErrNone == rFile.Create (aFs, KEnglishLang, EFileRead)); + rFile.Close (); +} +/////////////////////////////////////////////////////////////////////////////////////// +//Copy test file from Z: to C: drive. + +void CT_LANGUTILS::CopyTestFiles() + { + RFs fsSession; + TInt err = fsSession.Connect(); + if(err == KErrNone) + { + User::LeaveIfError(fsSession.MkDir(KSystem1Folder)); + User::LeaveIfError(fsSession.MkDir(KSystem1Data1Folder)); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KSystem1Data1File1) == KErrNone); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KFile1) == KErrNone); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KSystem1Data1File123456789) == KErrNone); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KSystem1Data1File2) == KErrNone); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KSystem1Data1File5) == KErrNone); + User::LeaveIfError(fsSession.MkDir(KSystem1Data1SrcFolder)); + User::LeaveIfError(fsSession.MkDir(KSystem1Data1DstFolder)); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KSystem1Data1SrcFile1) == KErrNone); + test( LangUtilsTest::CopyFile(fsSession, KZFile1, KSystem1Data1DstFile2) == KErrNone); + + fsSession.Close(); + } + else + { + INFO_PRINTF2(_L("Error %d connecting file session.\n"), err); + } + } + + + + + +/** +@SYMTestCaseID TI18N-BAFL-CT-4003 +@SYMTestCaseDesc Tests Baflutils::TestNearestLanguageFileV2. +@SYMTestPriority Medium +@SYMTestActions Pass in various resource file names and change system locale setting, check the return values. +@SYMTestExpectedResults The test must not fail. +@SYMPREQ 2525 Install device equivalent languages from SIS files +*/ +void CT_LANGUTILS::TestNearestLanguageFileV2(RFs& aFs) + { + /* test case ID to be added */ + INFO_PRINTF1(_L (" @SYMTestCaseID TI18N-BAFL-CT-4003 ")); + + __UHEAP_MARK; + + CleanupClosePushL (aFs); + User::LeaveIfError (aFs.Connect ()); + + DeleteTestFiles2(aFs); + CreateTestFiles2(aFs); + + TBuf <256> filename; + TLanguage lang = ELangNone; + INFO_PRINTF2 (_L("lang initial value is %d\n"), lang); + + // Test NearestLanguageFile with empty name + TFileName resPath; + LangUtil::NearestLanguageFileV2(aFs, resPath, lang); + test(resPath.Length()==0); + INFO_PRINTF2 (_L("lang returned by NLFV2 is %d\n"), lang); + test(ELangNone == lang); + INFO_PRINTF3 (_L ("The NearestLanguageFile for the null file - %S - is - %S -\n"), &KNullFilename, &filename); + + // Test NearestLanguageFile with invalid drive letter + filename.Copy (KInvalidDriveLetterV2); + LangUtil::NearestLanguageFileV2(aFs, filename, lang); + //test(filename==KRscFilenameNoSuffix); + INFO_PRINTF4 (_L ("The NearestLanguageFile for %S is %S, lang is %d\n"), &KInvalidDriveLetterV2, &filename, lang); + //test(ELangNone == lang); + + // Test NearestLanguageFile with incorrect ext + DeleteTestFiles2(aFs); + RFile rFile; + test (KErrNone == rFile.Create (aFs, KFrenchLang, EFileRead)); + rFile.Close (); + filename.Copy (KNoSuchLangFile); + LangUtil::NearestLanguageFileV2(aFs, filename, lang); + //test(filename==KRscFilenameNoSuffix); + INFO_PRINTF4 (_L ("The NearestLanguageFile for %S is %S, lang is %d\n"), &KNoSuchLangFile, &filename, lang); + //test(ELangNone == lang); + LangUtilsTest::DeleteFile (aFs, KFrenchLang); + CreateTestFiles2(aFs); + + // Test NearestLanguageFile with no suffix + filename.Copy (KRscFilenameNoSuffix); + LangUtil::NearestLanguageFileV2(aFs, filename, lang); + test(filename==KRscFilenameNoSuffix); + INFO_PRINTF3 (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoSuffix, &filename); + test(ELangNone == lang); + + // change locale to American + /* + TExtendedLocale loc; + loc.LoadSystemSettings(); + TInt ret = loc.LoadLocaleAspect(_L ("elocl_lan.010")); + INFO_PRINTF2(_L("LoadLocale returns %d\n"), ret); + test(KErrNone == ret); + ret = loc.SaveSystemSettings(); + test(KErrNone == ret); + + // Test NearestLanguageFile: AmE is supported + filename.Copy (KRscFilename); + LangUtil::NearestLanguageFileV2(aFs, filename, lang); + INFO_PRINTF3 (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + //test(filename == KEnglishLang); + test(filename == KAmericanLang); + test(lang == ELangAmerican); + + // Delete geltest.r10, AmE downgrades to En_GB. + LangUtilsTest::DeleteFile (aFs, KAmericanLang); + filename.Copy (KRscFilename); + LangUtil::NearestLanguageFileV2(aFs, filename, lang); + INFO_PRINTF3 (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + test(filename == KEnglishLang); + test(lang == ELangEnglish); + + + // Delete geltest.r01, AmE downgrades to en_GB, to ELangNone. + LangUtilsTest::DeleteFile (aFs, KEnglishLang); + filename.Copy (KRscFilename); + LangUtil::NearestLanguageFileV2(aFs, filename, lang); + INFO_PRINTF3 (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + test(filename == KRscFilename); // filename remains unchanged. + test(lang == ELangNone); + + // restore locale settings + INFO_PRINTF1(_L("Restoring locale settings.\n")); + loc.LoadSystemSettings(); + ret = loc.LoadLocaleAspect(_L("elocl_lan.001")); + test(KErrNone == ret); + ret = loc.SaveSystemSettings(); + test(KErrNone == ret); + */ + + CleanupStack::PopAndDestroy (&aFs); + + __UHEAP_MARKEND; + } + +/** +@SYMTestCaseID TI18N-BAFL-CT-4004 +@SYMTestCaseDesc Tests Baflutils::TestGetEquivalentLanguageList. +@SYMTestPriority Medium +@SYMTestActions Pass in various language ID's and check the returned list. +@SYMTestExpectedResults The test must not fail. +@SYMPREQ 2525 Install device equivalent languages from SIS files +*/ +void CT_LANGUTILS::TestGetEquivalentLanguageList() + { + /* test case ID to be added */ + INFO_PRINTF1 (_L (" @SYMTestCaseID TI18N-BAFL-CT-4004 ")); + + __UHEAP_MARK; + + TLanguagePath lp; + // Test GetNearestLanguageFile(); + // 1- There is an entry in the table for the given language + LangUtil::GetEquivalentLanguageList(ELangCyprusGreek, lp); + test(ELangCyprusGreek == lp[0]); + test(ELangGreek == lp[1]); + test(ELangNone == lp[2]); + + // 2- There is no entry for the given language + LangUtil::GetEquivalentLanguageList(ELangFarsi, lp); + test(ELangFarsi == lp[0]); + test(ELangNone == lp[1]); + + __UHEAP_MARKEND; + } + +/** +@SYMTestCaseID TI18N-BAFL-CT-4004 +@SYMTestCaseDesc Tests Baflutils::TestGetDowngradePathL. +@SYMTestPriority Medium +@SYMTestActions Pass in various language ID's and check the returned list. +@SYMTestExpectedResults The test must not fail. +@SYMPREQ 2525 Install device equivalent languages from SIS files +*/ +void CT_LANGUTILS::TestGetDowngradePathL() + { + RFs fsSession; + TInt err = fsSession.Connect(); + if(err == KErrNone) + { + TLanguage currentLang = ELangPrcChinese; + RArray languageArray; + LangUtil::GetDowngradePathL(fsSession, currentLang,languageArray); + fsSession.Close(); + test(ELangPrcChinese == languageArray[0]); + test(1 == languageArray.Count()); + languageArray.Close(); + } + else + { + INFO_PRINTF2(_L("Error %d connecting file session. "), err); + } + } + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0038 +@SYMTestCaseDesc Tests Baflutils. +@SYMTestPriority Medium +@SYMTestActions Executes all T_baflutils tests. +@SYMTestExpectedResults The test must not fail. +@SYMDEF DEF050397 - Crimson test code improvement to be propagated into MCL +*/ +void CT_LANGUTILS::TestLANGUTILS() + { + RFs fs; + + CopyTestFiles(); + TestNearestLanguageFileV2(fs); + TestGetEquivalentLanguageList(); + TestGetDowngradePathL(); + + DeleteTestFiles(); + } + +CT_LANGUTILS::CT_LANGUTILS() + { + SetTestStepName(KTestStep_T_LANGUTILS); + } + +TVerdict CT_LANGUTILS::doTestStepL() + { + SetTestStepResult(EFail); + + __UHEAP_MARK; + + TRAPD(error1, TestLANGUTILS()); + + __UHEAP_MARKEND; + + if(error1 == KErrNone ) + { + SetTestStepResult(EPass); + } + + return TestStepResult(); + } +