sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: sl@0: LOCAL_D CTrapCleanup* TheTrapCleanup=NULL; sl@0: sl@0: LOCAL_D RTest TheTest (_L("T_BaflLang")); sl@0: LOCAL_D RFs TheFs; sl@0: sl@0: // Our test diectory and files... sl@0: sl@0: _LIT (KNullFilename, ""); sl@0: _LIT (KRscFilename, "C:\\abc.rsc"); sl@0: _LIT (KRscFilenameNoSuffix, "C:\\abc."); sl@0: sl@0: _LIT (KAmericanLang, "C:\\abc.r10"); sl@0: _LIT (KFrenchLang, "C:\\abc.r02"); sl@0: _LIT (KJapanEnglishLang, "C:\\abc.r160"); sl@0: _LIT (KEnglishLang, "C:\\abc.r01"); sl@0: sl@0: LOCAL_C void DeleteTestFiles() sl@0: { sl@0: User::LeaveIfError (TheFs.Connect ()); sl@0: ::CleanupClosePushL (TheFs); sl@0: sl@0: BaflUtils::DeleteFile (TheFs, KRscFilename); sl@0: BaflUtils::DeleteFile (TheFs, KAmericanLang); sl@0: BaflUtils::DeleteFile (TheFs, KFrenchLang); sl@0: BaflUtils::DeleteFile (TheFs, KJapanEnglishLang); sl@0: BaflUtils::DeleteFile (TheFs, KEnglishLang); sl@0: sl@0: CleanupStack::PopAndDestroy (&::TheFs); sl@0: } sl@0: sl@0: // sl@0: //Test macroses and functions sl@0: LOCAL_C void Check(TInt aValue, TInt aLine) sl@0: { sl@0: if(!aValue) sl@0: { sl@0: ::DeleteTestFiles(); sl@0: TheTest(EFalse, aLine); sl@0: } sl@0: } sl@0: sl@0: #define TEST(arg) ::Check((arg), __LINE__) sl@0: sl@0: LOCAL_C void CreateTestFiles() sl@0: { sl@0: User::LeaveIfError (TheFs.Connect ()); sl@0: ::CleanupClosePushL (TheFs); sl@0: TEST (BaflUtils::FileExists (TheFs, KRscFilename) == EFalse); sl@0: TEST (BaflUtils::FileExists (TheFs, KAmericanLang) == EFalse); sl@0: TEST (BaflUtils::FileExists (TheFs, KFrenchLang) == EFalse); sl@0: TEST (BaflUtils::FileExists (TheFs, KJapanEnglishLang) == EFalse); sl@0: TEST (BaflUtils::FileExists (TheFs, KEnglishLang) == EFalse); sl@0: sl@0: // Create the files... sl@0: RFile rFile; sl@0: // KFilename1 can't be created sl@0: rFile.Create (TheFs, KRscFilename, EFileRead); sl@0: rFile.Close (); sl@0: rFile.Create (TheFs, KAmericanLang, EFileRead); sl@0: rFile.Close (); sl@0: rFile.Create (TheFs, KFrenchLang, EFileRead); sl@0: rFile.Close (); sl@0: sl@0: CleanupStack::PopAndDestroy (&::TheFs); sl@0: sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0070 sl@0: @SYMTestCaseDesc Tests the configuration of the ideal language. sl@0: @SYMTestPriority High sl@0: @SYMTestActions Set the ideal language and look for nearest language files. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ 3770: Configurable "ideal language" in BaflUtils::NearestLanguageFile. sl@0: */ sl@0: void REQ3770L() sl@0: { sl@0: TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-0070 REQ3770L ")); sl@0: sl@0: __UHEAP_MARK; sl@0: sl@0: User::LeaveIfError (TheFs.Connect ()); sl@0: ::CleanupClosePushL (TheFs); sl@0: sl@0: TBuf <256> filename; sl@0: TLanguage language; sl@0: sl@0: // Test ideal language code sl@0: sl@0: // Check initial value of ideal language sl@0: sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangNone); sl@0: sl@0: // Set and read back the ideal language sl@0: sl@0: BaflUtils::SetIdealLanguage( ELangGerman); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangGerman); sl@0: sl@0: BaflUtils::SetIdealLanguage( ELangAmerican); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangAmerican); sl@0: sl@0: // Test NearestLanguageFile with empty name sl@0: TFileName resPath; sl@0: BaflUtils::NearestLanguageFile (TheFs, resPath); sl@0: TEST(resPath.Length()==0); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for the null file - %S - is - %S -\n"), &KNullFilename, &filename); sl@0: sl@0: // Test NearestLanguageFile with no suffix sl@0: filename.Copy (KRscFilenameNoSuffix); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename); sl@0: TEST(filename==KRscFilenameNoSuffix); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoSuffix, &filename); sl@0: sl@0: // Test NearestLanguageFile sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); sl@0: TEST(filename == KAmericanLang); sl@0: sl@0: // Set ideal language to one we don't have sl@0: BaflUtils::SetIdealLanguage( ELangGerman); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangGerman); sl@0: sl@0: // Test NearestLanguageFile sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); sl@0: TEST(filename == KRscFilename); sl@0: sl@0: // Restore ideal language to default sl@0: BaflUtils::SetIdealLanguage( ELangNone); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangNone); sl@0: sl@0: // Test NearestLanguageFile sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); sl@0: TEST(filename == KRscFilename); sl@0: sl@0: // Set ideal language to French sl@0: sl@0: BaflUtils::SetIdealLanguage( ELangFrench); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangFrench); sl@0: sl@0: // Test NearestLanguageFile sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &filename); sl@0: TEST(filename == KFrenchLang); sl@0: sl@0: // Restore ideal language to default sl@0: BaflUtils::SetIdealLanguage( ELangNone); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangNone); sl@0: sl@0: // Release ideal language - free's TLS sl@0: sl@0: BaflUtils::ReleaseIdealLanguage(); sl@0: sl@0: CleanupStack::PopAndDestroy (&::TheFs); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-0071 sl@0: @SYMTestCaseDesc Tests the overload of BaflUtils::NearestLanguageFile. sl@0: @SYMTestPriority High sl@0: @SYMTestActions Calls the overload of BaflUtils::NearestLanguageFile and checks the returned language. sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMREQ 3785: Overload of BaflUtils::NearestLanguageFile. sl@0: */ sl@0: void REQ3785L() sl@0: { sl@0: TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-0071 REQ3785L ")); sl@0: sl@0: __UHEAP_MARK; sl@0: sl@0: User::LeaveIfError (TheFs.Connect ()); sl@0: ::CleanupClosePushL (TheFs); sl@0: sl@0: TBuf <256> filename; sl@0: TLanguage language; sl@0: sl@0: // Ensure that ideal language is default sl@0: BaflUtils::SetIdealLanguage( ELangNone); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangNone); sl@0: sl@0: // Test NearestLanguageFile overload with language returned sl@0: language=ELangAmerican; sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename, language); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); sl@0: TEST(language == ELangNone); sl@0: TEST(filename == KRscFilename); sl@0: sl@0: // Set ideal language to American sl@0: sl@0: BaflUtils::SetIdealLanguage( ELangAmerican); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangAmerican); sl@0: sl@0: // Test NearestLanguageFile overload with language returned sl@0: language=ELangNone; sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename, language); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); sl@0: TEST(language == ELangAmerican); sl@0: TEST(filename == KAmericanLang); sl@0: sl@0: // Set ideal language to French sl@0: sl@0: BaflUtils::SetIdealLanguage( ELangFrench); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangFrench); sl@0: sl@0: // Test NearestLanguageFile overload with language returned sl@0: language=ELangNone; sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename, language); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); sl@0: TEST(language == ELangFrench); sl@0: TEST(filename == KFrenchLang); sl@0: sl@0: // Set ideal language to one we don't have sl@0: BaflUtils::SetIdealLanguage( ELangGerman); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangGerman); sl@0: sl@0: // Test NearestLanguageFile overload with language returned sl@0: language=ELangAmerican; sl@0: filename.Copy (KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, filename, language); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S, language = %d\n"), &KRscFilename, &filename, language); sl@0: TEST(language == ELangNone); sl@0: TEST(filename == KRscFilename); sl@0: sl@0: // Restore ideal language to default sl@0: BaflUtils::SetIdealLanguage( ELangNone); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangNone); sl@0: sl@0: // Release ideal language - free's TLS sl@0: sl@0: BaflUtils::ReleaseIdealLanguage(); sl@0: sl@0: CleanupStack::PopAndDestroy (&::TheFs); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-3158 sl@0: @SYMTestCaseDesc Test the downgrade path from ELangMalay_Apac to ELangMalay sl@0: @SYMTestPriority High sl@0: @SYMTestActions Calls the BaflUtils::GetDowngradePathL function to check that ELangMalay_Apac downgrades to ELangMalay sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMDEF DEF094490 sl@0: */ sl@0: void DEF094490L() sl@0: { sl@0: TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-3158 DEF094490L ")); sl@0: sl@0: __UHEAP_MARK; sl@0: sl@0: User::LeaveIfError (TheFs.Connect ()); sl@0: ::CleanupClosePushL (TheFs); sl@0: RArray aLanguageArray; sl@0: sl@0: //Test GetDowngradePathL to see if ELangMalay is included in the path sl@0: BaflUtils::GetDowngradePathL(TheFs,ELangMalay_Apac,aLanguageArray); sl@0: TEST(aLanguageArray.Find(ELangMalay)!= KErrNotFound); sl@0: sl@0: aLanguageArray.Close(); sl@0: sl@0: CleanupStack::PopAndDestroy (&::TheFs); sl@0: sl@0: __UHEAP_MARKEND; sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID SYSLIB-BAFL-CT-3359 sl@0: @SYMTestCaseDesc Test correct and incorrect usage of NearestLanguageFile as documented in the developer library sl@0: @SYMTestPriority High sl@0: @SYMTestActions Calls the BaflUtils::NearestLanguageFile function with different contructed sl@0: language downgrade path cases along with different input paths sl@0: @SYMTestExpectedResults The test must not fail. sl@0: @SYMDEF DEF096421 sl@0: */ sl@0: void DEF096421L() sl@0: { sl@0: TheTest.Next (_L (" @SYMTestCaseID SYSLIB-BAFL-CT-3359 DEF096421 ")); sl@0: __UHEAP_MARK; sl@0: sl@0: TBuf <256> path; sl@0: TLanguage language; sl@0: RFile rFile; sl@0: sl@0: //number of characters in the suffix is less than KInvNameAndMinSuffixLength(2) sl@0: _LIT (KInvalidSuffix1, "C:\\abc.r"); sl@0: sl@0: //number of digits in the suffix is more than KMaxSuffixLength(5) sl@0: _LIT (KInvalidSuffix2, "C:\\abc.r123456"); sl@0: sl@0: //no proceeding alphabetical characters in the suffix sl@0: _LIT (KInvalidSuffix3, "C:\\abc.10"); sl@0: sl@0: //no drive letters supplied in the path sl@0: _LIT (KRscFilenameNoDrive, "\\abc.rsc"); sl@0: sl@0: _LIT (KRscFileInZDrive, "\\system\\data\\T_CALYPSO_TEST_RESOURCE_FILE_1.RSC"); sl@0: _LIT (KRScFullFile, "Z:\\system\\data\\T_CALYPSO_TEST_RESOURCE_FILE_1.RSC"); sl@0: sl@0: User::LeaveIfError (TheFs.Connect ()); sl@0: ::CleanupClosePushL (TheFs); sl@0: sl@0: rFile.Create (TheFs, KJapanEnglishLang, EFileRead); sl@0: rFile.Close (); sl@0: rFile.Create (TheFs, KEnglishLang, EFileRead); sl@0: rFile.Close (); sl@0: sl@0: BaflUtils::SetIdealLanguage( ELangAmerican); sl@0: language=BaflUtils::IdealLanguage(); sl@0: TEST(language == ELangAmerican); sl@0: sl@0: //Test match for the ideal language sl@0: path.Copy(KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KAmericanLang); sl@0: TEST(language == ELangAmerican); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); sl@0: sl@0: //Test match when supplied with the language file sl@0: path.Copy(KAmericanLang); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KAmericanLang); sl@0: TEST(language == ELangAmerican); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KAmericanLang, &path); sl@0: sl@0: //Test when the no. of characters in the suffix is less than KInvNameAndMinSuffixLength(2) sl@0: path.Copy(KInvalidSuffix1); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KInvalidSuffix1); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KInvalidSuffix1, &path); sl@0: sl@0: //Test when filename ends with a period sl@0: path.Copy(KRscFilenameNoSuffix); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KRscFilenameNoSuffix); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoSuffix, &path); sl@0: sl@0: //Test when the no. of digits in the suffix is more than KMaxSuffixLength(5) sl@0: path.Copy(KInvalidSuffix2); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KInvalidSuffix2); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KInvalidSuffix2, &path); sl@0: sl@0: //Test when theres no proceeding alphabetical characters in the suffix sl@0: path.Copy(KInvalidSuffix3); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KInvalidSuffix3); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KInvalidSuffix3, &path); sl@0: sl@0: //Test when no drive letter is supplied in the path and theres no corresponding file in Z: sl@0: path.Copy(KRscFilenameNoDrive); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KRscFilenameNoDrive); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilenameNoDrive, &path); sl@0: sl@0: BaflUtils::SetIdealLanguage(ELangEnglish_Japan); sl@0: TheTest.Printf(_L("The ideal langauge set to ELangEnglish_Japan\n")); sl@0: sl@0: //Test when the matching language file is 3 digits long sl@0: path.Copy(KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KJapanEnglishLang); sl@0: TEST(language == ELangEnglish_Japan); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); sl@0: sl@0: BaflUtils::DeleteFile (TheFs, KJapanEnglishLang); sl@0: TheTest.Printf(_L("Deleting C:\\abc.r160\n")); sl@0: sl@0: //Test match for the current locale (2nd best match) sl@0: path.Copy(KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KEnglishLang); sl@0: TEST(language == ELangEnglish); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); sl@0: sl@0: BaflUtils::DeleteFile (TheFs, KEnglishLang); sl@0: TheTest.Printf(_L("Deleting C:\\abc.r01\n")); sl@0: sl@0: //Test when theres no matching language file sl@0: path.Copy(KRscFilename); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KRscFilename); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFilename, &path); sl@0: sl@0: //Test when no drive letter is supplied in the sl@0: //path but theres a corresponding file in Z: sl@0: path.Copy(KRscFileInZDrive); sl@0: BaflUtils::NearestLanguageFile (TheFs, path, language); sl@0: TEST(path == KRScFullFile); sl@0: TEST(language == ELangNone); sl@0: TheTest.Printf (_L ("The NearestLanguageFile for %S is %S\n"), &KRscFileInZDrive, &path); sl@0: sl@0: CleanupStack::PopAndDestroy (&::TheFs); sl@0: sl@0: BaflUtils::ReleaseIdealLanguage(); sl@0: __UHEAP_MARKEND; sl@0: sl@0: } sl@0: //=============================================================================== sl@0: sl@0: /** sl@0: Initialise the cleanup stack sl@0: */ sl@0: LOCAL_C void SetupL () sl@0: { sl@0: TheTrapCleanup = CTrapCleanup::New (); sl@0: User::LeaveIfNull (TheTrapCleanup); sl@0: } sl@0: sl@0: /** sl@0: Cleanup sl@0: */ sl@0: LOCAL_C void CleanupL () sl@0: { sl@0: delete TheTrapCleanup; sl@0: } sl@0: sl@0: /** sl@0: Invoke the tests sl@0: */ sl@0: LOCAL_C void DoTestsL () sl@0: { sl@0: CreateTestFiles(); sl@0: REQ3770L (); sl@0: REQ3785L (); sl@0: DEF094490L(); sl@0: DEF096421L(); sl@0: DeleteTestFiles(); sl@0: } sl@0: sl@0: sl@0: GLDEF_C TInt E32Main () sl@0: { sl@0: __UHEAP_MARK; sl@0: sl@0: TheTest.Printf (_L ("\n")); sl@0: TheTest.Title (); sl@0: TheTest.Start (_L("Ideal language Tests ")); sl@0: sl@0: TRAPD (err, SetupL ()); sl@0: TheTest (err == KErrNone); sl@0: sl@0: TRAP (err, DoTestsL ()); sl@0: TheTest (err == KErrNone); sl@0: sl@0: CleanupL (); sl@0: sl@0: TheTest.End (); sl@0: TheTest.Close (); sl@0: sl@0: __UHEAP_MARKEND; sl@0: return (KErrNone); sl@0: }