--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textandlocutils/nearestlangutils/tsrc/T_LangUtils.cpp Tue Sep 07 16:39:34 2010 +0800
@@ -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 <baclipb.h>
+#include <f32file.h>
+#include <s32strm.h>
+#include <s32file.h>
+#include <e32lang.h>
+#include <langutil.h>
+#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<TLanguage> 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();
+ }
+