diff -r 000000000000 -r e4d67989cc36 lowlevellibsandfws/apputils/tsrc/t_bafllang.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lowlevellibsandfws/apputils/tsrc/t_bafllang.cpp Tue Feb 02 02:01:42 2010 +0200 @@ -0,0 +1,501 @@ +// Copyright (c) 2004-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 + +LOCAL_D CTrapCleanup* TheTrapCleanup=NULL; + +LOCAL_D RTest TheTest (_L("T_BaflLang")); +LOCAL_D RFs TheFs; + +// Our test diectory and files... + +_LIT (KNullFilename, ""); +_LIT (KRscFilename, "C:\\abc.rsc"); +_LIT (KRscFilenameNoSuffix, "C:\\abc."); + +_LIT (KAmericanLang, "C:\\abc.r10"); +_LIT (KFrenchLang, "C:\\abc.r02"); +_LIT (KJapanEnglishLang, "C:\\abc.r160"); +_LIT (KEnglishLang, "C:\\abc.r01"); + +LOCAL_C void DeleteTestFiles() +{ + User::LeaveIfError (TheFs.Connect ()); + ::CleanupClosePushL (TheFs); + + BaflUtils::DeleteFile (TheFs, KRscFilename); + BaflUtils::DeleteFile (TheFs, KAmericanLang); + BaflUtils::DeleteFile (TheFs, KFrenchLang); + BaflUtils::DeleteFile (TheFs, KJapanEnglishLang); + BaflUtils::DeleteFile (TheFs, KEnglishLang); + + CleanupStack::PopAndDestroy (&::TheFs); +} + +// +//Test macroses and functions +LOCAL_C void Check(TInt aValue, TInt aLine) + { + if(!aValue) + { + ::DeleteTestFiles(); + TheTest(EFalse, aLine); + } + } + +#define TEST(arg) ::Check((arg), __LINE__) + +LOCAL_C void CreateTestFiles() +{ + User::LeaveIfError (TheFs.Connect ()); + ::CleanupClosePushL (TheFs); + TEST (BaflUtils::FileExists (TheFs, KRscFilename) == EFalse); + TEST (BaflUtils::FileExists (TheFs, KAmericanLang) == EFalse); + TEST (BaflUtils::FileExists (TheFs, KFrenchLang) == EFalse); + TEST (BaflUtils::FileExists (TheFs, KJapanEnglishLang) == EFalse); + TEST (BaflUtils::FileExists (TheFs, KEnglishLang) == EFalse); + + // Create the files... + RFile rFile; + // KFilename1 can't be created + rFile.Create (TheFs, KRscFilename, EFileRead); + rFile.Close (); + rFile.Create (TheFs, KAmericanLang, EFileRead); + rFile.Close (); + rFile.Create (TheFs, KFrenchLang, EFileRead); + rFile.Close (); + + CleanupStack::PopAndDestroy (&::TheFs); + +} + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0070 +@SYMTestCaseDesc Tests the configuration of the ideal language. +@SYMTestPriority High +@SYMTestActions Set the ideal language and look for nearest language files. +@SYMTestExpectedResults The test must not fail. +@SYMREQ 3770: Configurable "ideal language" in BaflUtils::NearestLanguageFile. +*/ +void REQ3770L() + { + TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-0070 REQ3770L ")); + + __UHEAP_MARK; + + User::LeaveIfError (TheFs.Connect ()); + ::CleanupClosePushL (TheFs); + + TBuf <256> filename; + TLanguage language; + + // Test ideal language code + + // Check initial value of ideal language + + language=BaflUtils::IdealLanguage(); + TEST(language == ELangNone); + + // Set and read back the ideal language + + BaflUtils::SetIdealLanguage( ELangGerman); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangGerman); + + BaflUtils::SetIdealLanguage( ELangAmerican); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangAmerican); + + // Test NearestLanguageFile with empty name + TFileName resPath; + BaflUtils::NearestLanguageFile (TheFs, resPath); + TEST(resPath.Length()==0); + TheTest.Printf (_L ("The NearestLanguageFile for the null file - %S - is - %S -\n"), &KNullFilename, &filename); + + // Test NearestLanguageFile with no suffix + filename.Copy (KRscFilenameNoSuffix); + BaflUtils::NearestLanguageFile (TheFs, filename); + TEST(filename==KRscFilenameNoSuffix); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoSuffix, &filename); + + // Test NearestLanguageFile + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + TEST(filename == KAmericanLang); + + // Set ideal language to one we don't have + BaflUtils::SetIdealLanguage( ELangGerman); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangGerman); + + // Test NearestLanguageFile + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + TEST(filename == KRscFilename); + + // Restore ideal language to default + BaflUtils::SetIdealLanguage( ELangNone); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangNone); + + // Test NearestLanguageFile + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + TEST(filename == KRscFilename); + + // Set ideal language to French + + BaflUtils::SetIdealLanguage( ELangFrench); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangFrench); + + // Test NearestLanguageFile + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); + TEST(filename == KFrenchLang); + + // Restore ideal language to default + BaflUtils::SetIdealLanguage( ELangNone); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangNone); + + // Release ideal language - free's TLS + + BaflUtils::ReleaseIdealLanguage(); + + CleanupStack::PopAndDestroy (&::TheFs); + + __UHEAP_MARKEND; + } + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0071 +@SYMTestCaseDesc Tests the overload of BaflUtils::NearestLanguageFile. +@SYMTestPriority High +@SYMTestActions Calls the overload of BaflUtils::NearestLanguageFile and checks the returned language. +@SYMTestExpectedResults The test must not fail. +@SYMREQ 3785: Overload of BaflUtils::NearestLanguageFile. +*/ +void REQ3785L() + { + TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-0071 REQ3785L ")); + + __UHEAP_MARK; + + User::LeaveIfError (TheFs.Connect ()); + ::CleanupClosePushL (TheFs); + + TBuf <256> filename; + TLanguage language; + + // Ensure that ideal language is default + BaflUtils::SetIdealLanguage( ELangNone); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangNone); + + // Test NearestLanguageFile overload with language returned + language=ELangAmerican; + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename, language); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); + TEST(language == ELangNone); + TEST(filename == KRscFilename); + + // Set ideal language to American + + BaflUtils::SetIdealLanguage( ELangAmerican); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangAmerican); + + // Test NearestLanguageFile overload with language returned + language=ELangNone; + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename, language); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); + TEST(language == ELangAmerican); + TEST(filename == KAmericanLang); + + // Set ideal language to French + + BaflUtils::SetIdealLanguage( ELangFrench); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangFrench); + + // Test NearestLanguageFile overload with language returned + language=ELangNone; + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename, language); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); + TEST(language == ELangFrench); + TEST(filename == KFrenchLang); + + // Set ideal language to one we don't have + BaflUtils::SetIdealLanguage( ELangGerman); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangGerman); + + // Test NearestLanguageFile overload with language returned + language=ELangAmerican; + filename.Copy (KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, filename, language); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); + TEST(language == ELangNone); + TEST(filename == KRscFilename); + + // Restore ideal language to default + BaflUtils::SetIdealLanguage( ELangNone); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangNone); + + // Release ideal language - free's TLS + + BaflUtils::ReleaseIdealLanguage(); + + CleanupStack::PopAndDestroy (&::TheFs); + + __UHEAP_MARKEND; + } + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-3158 +@SYMTestCaseDesc Test the downgrade path from ELangMalay_Apac to ELangMalay +@SYMTestPriority High +@SYMTestActions Calls the BaflUtils::GetDowngradePathL function to check that ELangMalay_Apac downgrades to ELangMalay +@SYMTestExpectedResults The test must not fail. +@SYMDEF DEF094490 +*/ +void DEF094490L() + { + TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-3158 DEF094490L ")); + + __UHEAP_MARK; + + User::LeaveIfError (TheFs.Connect ()); + ::CleanupClosePushL (TheFs); + RArray aLanguageArray; + + //Test GetDowngradePathL to see if ELangMalay is included in the path + BaflUtils::GetDowngradePathL(TheFs,ELangMalay_Apac,aLanguageArray); + TEST(aLanguageArray.Find(ELangMalay)!= KErrNotFound); + + aLanguageArray.Close(); + + CleanupStack::PopAndDestroy (&::TheFs); + + __UHEAP_MARKEND; + } + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-3359 +@SYMTestCaseDesc Test correct and incorrect usage of NearestLanguageFile as documented in the developer library +@SYMTestPriority High +@SYMTestActions Calls the BaflUtils::NearestLanguageFile function with different contructed +language downgrade path cases along with different input paths +@SYMTestExpectedResults The test must not fail. +@SYMDEF DEF096421 +*/ +void DEF096421L() + { + TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-3359 DEF096421 ")); + __UHEAP_MARK; + + TBuf <256> path; + TLanguage language; + RFile rFile; + + //number of characters in the suffix is less than KInvNameAndMinSuffixLength(2) + _LIT (KInvalidSuffix1, "C:\\abc.r"); + + //number of digits in the suffix is more than KMaxSuffixLength(5) + _LIT (KInvalidSuffix2, "C:\\abc.r123456"); + + //no proceeding alphabetical characters in the suffix + _LIT (KInvalidSuffix3, "C:\\abc.10"); + + //no drive letters supplied in the path + _LIT (KRscFilenameNoDrive, "\\abc.rsc"); + + _LIT (KRscFileInZDrive, "\\system\\data\\T_CALYPSO_TEST_RESOURCE_FILE_1.RSC"); + _LIT (KRScFullFile, "Z:\\system\\data\\T_CALYPSO_TEST_RESOURCE_FILE_1.RSC"); + + User::LeaveIfError (TheFs.Connect ()); + ::CleanupClosePushL (TheFs); + + rFile.Create (TheFs, KJapanEnglishLang, EFileRead); + rFile.Close (); + rFile.Create (TheFs, KEnglishLang, EFileRead); + rFile.Close (); + + BaflUtils::SetIdealLanguage( ELangAmerican); + language=BaflUtils::IdealLanguage(); + TEST(language == ELangAmerican); + + //Test match for the ideal language + path.Copy(KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KAmericanLang); + TEST(language == ELangAmerican); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); + + //Test match when supplied with the language file + path.Copy(KAmericanLang); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KAmericanLang); + TEST(language == ELangAmerican); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KAmericanLang, &path); + + //Test when the no. of characters in the suffix is less than KInvNameAndMinSuffixLength(2) + path.Copy(KInvalidSuffix1); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KInvalidSuffix1); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KInvalidSuffix1, &path); + + //Test when filename ends with a period + path.Copy(KRscFilenameNoSuffix); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KRscFilenameNoSuffix); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoSuffix, &path); + + //Test when the no. of digits in the suffix is more than KMaxSuffixLength(5) + path.Copy(KInvalidSuffix2); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KInvalidSuffix2); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KInvalidSuffix2, &path); + + //Test when theres no proceeding alphabetical characters in the suffix + path.Copy(KInvalidSuffix3); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KInvalidSuffix3); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KInvalidSuffix3, &path); + + //Test when no drive letter is supplied in the path and theres no corresponding file in Z: + path.Copy(KRscFilenameNoDrive); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KRscFilenameNoDrive); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoDrive, &path); + + BaflUtils::SetIdealLanguage(ELangEnglish_Japan); + TheTest.Printf(_L("The ideal langauge set to ELangEnglish_Japan\n")); + + //Test when the matching language file is 3 digits long + path.Copy(KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KJapanEnglishLang); + TEST(language == ELangEnglish_Japan); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); + + BaflUtils::DeleteFile (TheFs, KJapanEnglishLang); + TheTest.Printf(_L("Deleting C:\\abc.r160\n")); + + //Test match for the current locale (2nd best match) + path.Copy(KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KEnglishLang); + TEST(language == ELangEnglish); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); + + BaflUtils::DeleteFile (TheFs, KEnglishLang); + TheTest.Printf(_L("Deleting C:\\abc.r01\n")); + + //Test when theres no matching language file + path.Copy(KRscFilename); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KRscFilename); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); + + //Test when no drive letter is supplied in the + //path but theres a corresponding file in Z: + path.Copy(KRscFileInZDrive); + BaflUtils::NearestLanguageFile (TheFs, path, language); + TEST(path == KRScFullFile); + TEST(language == ELangNone); + TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFileInZDrive, &path); + + CleanupStack::PopAndDestroy (&::TheFs); + + BaflUtils::ReleaseIdealLanguage(); + __UHEAP_MARKEND; + + } +//=============================================================================== + +/** +Initialise the cleanup stack +*/ +LOCAL_C void SetupL () + { + TheTrapCleanup = CTrapCleanup::New (); + User::LeaveIfNull (TheTrapCleanup); + } + +/** +Cleanup +*/ +LOCAL_C void CleanupL () + { + delete TheTrapCleanup; + } + +/** +Invoke the tests +*/ +LOCAL_C void DoTestsL () + { + CreateTestFiles(); + REQ3770L (); + REQ3785L (); + DEF094490L(); + DEF096421L(); + DeleteTestFiles(); + } + + +GLDEF_C TInt E32Main () + { + __UHEAP_MARK; + + TheTest.Printf (_L ("\n")); + TheTest.Title (); + TheTest.Start (_L("Ideal language Tests ")); + + TRAPD (err, SetupL ()); + TheTest (err == KErrNone); + + TRAP (err, DoTestsL ()); + TheTest (err == KErrNone); + + CleanupL (); + + TheTest.End (); + TheTest.Close (); + + __UHEAP_MARKEND; + return (KErrNone); + }