diff -r 01e38b33e72a -r a145c1c7a5f4 textandlocutils/nearestlangutils/tsrc/T_LangUtilsImp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textandlocutils/nearestlangutils/tsrc/T_LangUtilsImp.cpp Fri Sep 17 08:40:09 2010 +0300 @@ -0,0 +1,639 @@ +// 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 "t_langutilsimp.h" + + +#define test(cond) \ + { \ + TBool __bb = (cond); \ + TEST(__bb); \ + if (!__bb) \ + { \ + ERR_PRINTF1(_L("ERROR: Test Failed")); \ + User::Leave(1); \ + } \ + } + + + +void CT_LANGUTILSIMP::TestPath(const TLanguagePath& aPath, const TLanguage* aExpected, TInt aExpectedCount) + { + for (int i = 0; i != aExpectedCount; ++i) + test(aPath[i] == *aExpected++); + test(aPath[aExpectedCount] == ELangNone); + } + +const TLanguage ExpectedPath[] = { ELangFrench, ELangJapanese, ELangGerman, ELangGreek, + ELangArabic, ELangEnglish, ELangItalian, ELangHebrew }; + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0443 +@SYMTestCaseDesc Tests TLanguagePath class +@SYMTestPriority High +@SYMTestActions Test for adding different language paths +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +void CT_LANGUTILSIMP::TestAddLanguage() + { + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0443 ")); + TLanguagePath path; + path[0] = ELangNone; + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 0); + AddLanguage(path, ELangFrench); + TestPath(path, ExpectedPath, 1); + AddLanguage(path, ELangFrench); + TestPath(path, ExpectedPath, 1); + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 1); + AddLanguage(path, ELangFrench); + TestPath(path, ExpectedPath, 1); + AddLanguage(path, ELangJapanese); + TestPath(path, ExpectedPath, 2); + AddLanguage(path, ELangFrench); + TestPath(path, ExpectedPath, 2); + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 2); + AddLanguage(path, ELangGerman); + TestPath(path, ExpectedPath, 3); + AddLanguage(path, ELangGreek); + TestPath(path, ExpectedPath, 4); + AddLanguage(path, ELangArabic); + TestPath(path, ExpectedPath, 5); + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 5); + AddLanguage(path, ELangEnglish); + TestPath(path, ExpectedPath, 6); + AddLanguage(path, ELangItalian); + TestPath(path, ExpectedPath, 7); + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 7); + AddLanguage(path, ELangHebrew); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangHebrew); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangEnglish); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangItalian); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangFrench); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangNone); + TestPath(path, ExpectedPath, 8); + AddLanguage(path, ELangGerman); + TestPath(path, ExpectedPath, 8); + } + + + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0444 +@SYMTestCaseDesc Tests for the functionality of TLocale class +@SYMTestPriority High +@SYMTestActions Test for language downgrades +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +void CT_LANGUTILSIMP::TestDowngrade(SDowngradeTest& aTest) + { + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0444 ")); + TLocale loc; + loc.SetLanguageDowngrade(0, aTest.iIn[1]); + loc.SetLanguageDowngrade(1, aTest.iIn[2]); + loc.SetLanguageDowngrade(2, aTest.iIn[3]); + TLanguagePath path; + MakeLanguageDowngradePath(path, aTest.iIn[0], ELangNone, loc); + for (int i = 0; ; ++i) + { + test(i < 9); + test(aTest.iOut[i] == path[i]); + if (path[i] == ELangNone) + return; + } + + MakeLanguageDowngradePath(path, ELangAustralian, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangNewZealand, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangSouthAfricanEnglish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangInternationalEnglish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangAmerican, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangEnglish_Apac, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangEnglish_Taiwan, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangEnglish_HongKong, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangEnglish_Prc, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangEnglish_Japan, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangEnglish_Thailand, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangSwissFrench, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangBelgianFrench, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangInternationalFrench, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangCanadianFrench, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangSwissGerman, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangAustrian, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangInternationalSpanish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangLatinAmericanSpanish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangSwissItalian, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangFinlandSwedish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangCyprusTurkish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangBelgianFlemish, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangHongKongChinese, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangCyprusGreek, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangMalay_Apac, ELangNone, loc); + MakeLanguageDowngradePath(path, ELangBrazilianPortuguese, ELangNone, loc); + + } + + +// Test Dialect enumeration. +// Each value represents a dialect (variant) of a TLanguage language. +// E.g. AmericanSprint is represented by ELangAmerican | EDialectSprint + +// The dialect location -- top six bits +const TUint KDialectFactor=0x0400; +enum TDialect + { + // The following are example dialects for testing only + EDialectSprint = (1*KDialectFactor), + EDialectOrange = (2*KDialectFactor), + EDialectMaximum = EDialectOrange // This must always be equal to the last TDialect enum. + // Up to 63 dialects. + }; + +const TLanguage ELangEnglishOrange = static_cast(ELangEnglish|EDialectOrange); +const TLanguage ELangAmericanSprint = static_cast(ELangAmerican|EDialectSprint); + +SDowngradeTest DowngradeData[] = + { + // 0 = test language + // 1-3 = language downgrade for locale + // 4- = calculated language downgrade path, terminated with ELangNone. + {{ELangEnglishOrange, ELangNone, ELangNone, ELangNone}, + {ELangEnglishOrange, ELangEnglish, ELangNone}}, + {{ELangAmericanSprint, ELangNone, ELangNone, ELangNone}, + {ELangAmericanSprint, ELangAmerican, ELangEnglish, ELangNone}}, + {{ELangFrench, ELangNone, ELangNone, ELangNone}, + {ELangFrench, ELangNone}}, + {{ELangSwissFrench, ELangNone, ELangNone, ELangNone}, + {ELangSwissFrench, ELangFrench, ELangNone}}, + {{ELangCanadianEnglish, ELangNone, ELangNone, ELangNone}, + {ELangCanadianEnglish, ELangAmerican, ELangEnglish, ELangNone}}, + {{ELangSwissFrench, ELangNone, ELangFrench, ELangNone}, + {ELangSwissFrench, ELangFrench, ELangNone}}, + {{ELangCanadianEnglish, ELangEnglish, ELangNone, ELangAmerican}, + {ELangCanadianEnglish, ELangEnglish, ELangAmerican, ELangNone}}, + {{ELangCanadianEnglish, ELangNone, ELangNone, ELangSwissFrench}, + {ELangCanadianEnglish, ELangSwissFrench, ELangAmerican, ELangEnglish, ELangNone}}, + {{ELangCanadianEnglish, ELangFrench, ELangAmerican, ELangSwissFrench}, + {ELangCanadianEnglish, ELangFrench, ELangAmerican, ELangSwissFrench, ELangEnglish, ELangNone}}, + {{ELangCanadianEnglish, ELangNone, ELangGerman, ELangSwissFrench}, + {ELangCanadianEnglish, ELangGerman, ELangSwissFrench, ELangAmerican, ELangEnglish, ELangNone}}, + {{ELangCanadianEnglish, ELangFinlandSwedish, ELangGerman, ELangSwissFrench}, + {ELangCanadianEnglish, ELangFinlandSwedish, ELangGerman, ELangSwissFrench, ELangAmerican, ELangEnglish, ELangNone}}, + {{ELangFinlandSwedish, ELangFinlandSwedish, ELangFinlandSwedish, ELangFinlandSwedish}, + {ELangFinlandSwedish, ELangSwedish, ELangNone}}, + }; + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0445 +@SYMTestCaseDesc Tests for language downgrades +@SYMTestPriority High +@SYMTestActions Call up downgrade path test function +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +void CT_LANGUTILSIMP::TestMakeLanguageDowngradePath() + { + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0445 ")); + for (int i = 0; i != sizeof(DowngradeData)/sizeof(DowngradeData[0]); ++i) + TestDowngrade(DowngradeData[i]); + } + +void CT_LANGUTILSIMP::SetUpFinderForLanguageAndDriveSearchL( + TTestNearestLanguageFileFinder& aFinder) + { + aFinder.iDrives = _L("ZAG"); + aFinder.iFilesSearchedFor = new(ELeave) CDesCArraySeg(10); + aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.e02")); + aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.e02")); + aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.e02")); + aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.e15702")); //Extended lang + aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.e15702")); + aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.e15702")); + aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.e01")); + aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.e01")); + aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.e01")); + aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.ext")); + aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.ext")); + aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.ext")); + aFinder.iDrivesChecked = _L("zagzagzagzagzag"); + } + +_LIT(KTestFileName1, "z:\\dir\\name.ext"); +//_LIT(KTestFileName2, "z:\\dir\\náme.ext"); +_LIT(KTestFileName2, "z:\\dir\\n\u00c1me.ext"); +_LIT(KTestFileName3, "a:\\dir\\name.ext"); +_LIT(KTestFileName4, "c:\\dir\\name.ext"); +_LIT(KTestFileName5, "d:\\dir\\name.ext"); +_LIT(KTestFileName6, "y:\\dir\\name.ext"); +_LIT(KTestFileName7, "A:\\dir\\name.ext"); +_LIT(KTestFileName8, "C:\\dir\\name.ext"); +_LIT(KTestFileName9, "Y:\\dir\\name.ext"); +_LIT(KTestFileName11, "\\abc\\defg.hijkl"); +_LIT(KTestFileName256Chars, "\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz0.ext"); + +_LIT(KExpectedFileName256Chars, "?:\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\ +\\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz0.e"); +_LIT(KExpectedFileName1, "?:\\dir\\name.e"); +_LIT(KExpectedSuffix1, "xt"); +_LIT(KExpectedFileName2, "?:\\abc\\defg.hij"); +_LIT(KExpectedSuffix2, "kl"); +_LIT(KTestFileName1French, "z:\\dir\\name.e02"); +_LIT(KTestFileName1Japanese, "z:\\dir\\name.e32"); +_LIT(KTestFileName1Mongolian, "z:\\dir\\name.e54321"); +_LIT(KTestFileName1AmericanSprint, "z:\\dir\\name.e1034"); //American=0x0A, Sprint=0x0400. 0x040A=1034. +_LIT(KCheckedForFrench, "?:\\dir\\name.e02"); + +/** +@SYMTestCaseID SYSLIB-BAFL-CT-0446 +@SYMTestCaseDesc Nearest language finder test +@SYMTestPriority High +@SYMTestActions Test drive sequence construction + Test addition of language number + Test searching each drive for the specified file + Test searching language and drive down the language path + Test filename matching + Test searching for any language file within a drive + Test searching all drives for any language +@SYMTestExpectedResults Test must not fail +@SYMREQ REQ0000 +*/ +void CT_LANGUTILSIMP::TestNearestLanguageFinder() + { + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0446 ")); + RFs dummy; + TTestNearestLanguageFileFinder finder(dummy); + + // Test file name setting and disecting + // SetFileName + // RepairFileName + TFileName fileName(KTestFileName1); + finder.SetFileName(fileName); + test(0 <= finder.iFileName->MatchF(KExpectedFileName1)); + test(0 == finder.iSuffix.Compare(KExpectedSuffix1)); + test('z' == finder.iInitialDriveLetter); + finder.RepairFileName(); + test(0 == finder.iFileName->Compare(KTestFileName1)); + fileName = KTestFileName11; + finder.SetFileName(fileName); + test(0 <= finder.iFileName->MatchF(KExpectedFileName2)); + test(0 == finder.iSuffix.Compare(KExpectedSuffix2)); + test(-1 == finder.iInitialDriveLetter); + finder.RepairFileName(); + test(0 == finder.iFileName->Compare(KTestFileName11)); + fileName = KTestFileName256Chars; + finder.SetFileName(fileName); + test(0 <= finder.iFileName->MatchF(KExpectedFileName256Chars)); + test(0 == finder.iSuffix.Compare(KExpectedSuffix1)); + test(-1 == finder.iInitialDriveLetter); + finder.RepairFileName(); + test(0 == finder.iFileName->Compare(KTestFileName256Chars)); + + // Test drive sequence construction + // AddCustomResourceDrive + finder.iCustomRscDrive = static_cast(EDriveC); // drive c: + fileName = KTestFileName1; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrNone); + test(0 == finder.iDrives.CompareF(_L("CZ"))); + fileName = KTestFileName3; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrNone); + test(0 == finder.iDrives.CompareF(_L("CA"))); + fileName = KTestFileName4; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrAlreadyExists); + test(0 == finder.iDrives.CompareF(_L("C"))); + fileName = KTestFileName5; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrNone); + test(0 == finder.iDrives.CompareF(_L("CD"))); + fileName = KTestFileName6; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrNone); + test(0 == finder.iDrives.CompareF(_L("CY"))); + fileName = KTestFileName7; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrNone); + test(0 == finder.iDrives.CompareF(_L("CA"))); + fileName = KTestFileName8; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrAlreadyExists); + test(0 == finder.iDrives.CompareF(_L("C"))); + fileName = KTestFileName9; + finder.SetFileName(fileName); + test(finder.AddCustomResourceDrive() == KErrNone); + test(0 == finder.iDrives.CompareF(_L("CY"))); + // AddAllDrives + fileName = KTestFileName1; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("ZYXWVUTSRQPONMLKJIHGFEDCBA"))); + fileName = KTestFileName3; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("AYXWVUTSRQPONMLKJIHGFEDCBZ"))); + fileName = KTestFileName4; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("CYXWVUTSRQPONMLKJIHGFEDBAZ"))); + fileName = KTestFileName5; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("DYXWVUTSRQPONMLKJIHGFECBAZ"))); + fileName = KTestFileName6; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("YXWVUTSRQPONMLKJIHGFEDCBAZ"))); + fileName = KTestFileName7; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("AYXWVUTSRQPONMLKJIHGFEDCBZ"))); + fileName = KTestFileName8; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("CYXWVUTSRQPONMLKJIHGFEDBAZ"))); + fileName = KTestFileName9; + finder.SetFileName(fileName); + finder.AddAllDrives(); + test(0 == finder.iDrives.CompareF(_L("YXWVUTSRQPONMLKJIHGFEDCBAZ"))); + + // Test addition of language number + // AppendLanguageCode + fileName = KTestFileName1; + finder.SetFileName(fileName); + finder.AppendLanguageCode(ELangFrench); + test(0 == finder.iFileName->CompareF(KTestFileName1French)); + finder.SetFileName(fileName); + finder.AppendLanguageCode(ELangJapanese); + test(0 == finder.iFileName->CompareF(KTestFileName1Japanese)); + finder.SetFileName(fileName); + finder.AppendLanguageCode(ELangAmericanSprint); + test(0 == finder.iFileName->CompareF(KTestFileName1AmericanSprint)); + + fileName = KTestFileName1; + finder.SetFileName(fileName); + finder.AppendLanguageCode(static_cast(54321)); + test(0 == finder.iFileName->CompareF(KTestFileName1Mongolian)); + fileName = KTestFileName256Chars; + finder.SetFileName(fileName); + test(!finder.AppendLanguageCode(ELangFrench)); + + // Test searching each drive for the specified file + // FindDrive + finder.iFileCheckedFor = KCheckedForFrench; + finder.iDrivesChecked = _L("D"); + fileName = KTestFileName5; + finder.SetFileName(fileName); + finder.AppendLanguageCode(ELangFrench); + finder.FindDrive(); + test(finder.iDrivesChecked.Length() == 0); + finder.SetFileName(fileName); + finder.AddAllDrives(); + finder.iDrivesChecked = _L("dyxwvutsrqponmlkjihgfecbaz"); + finder.AppendLanguageCode(ELangFrench); + finder.FindDrive(); + test(finder.iDrivesChecked.Length() == 0); + fileName = KTestFileName5; + finder.SetFileName(fileName); + finder.AddAllDrives(); + finder.iDrivesChecked = _L("dyxwvutsrqponmlkjihgfecbaz"); + finder.AppendLanguageCode(ELangFrench); + finder.iFilesThatExist = new (ELeave) CDesCArraySeg(10); + finder.iFilesThatExist->AppendL(_L("o:\\dIR\\NAmE.E02")); + test(finder.FindDrive()); + test(0 == finder.iFileName->CompareF(_L("O:\\dir\\name.e02"))); + fileName = KTestFileName2; + finder.SetFileName(fileName); + finder.AppendLanguageCode(ELangFrench); + finder.AddAllDrives(); + finder.iDrivesChecked = _L("zyxwvutsrqponmlkjihgfedcba"); + finder.iFilesThatExist->AppendL(_L("v:\\dIR\\NA\x301mE.E02")); + //finder.iFileCheckedFor = _L("?:\\dir\\nÁme.e02"); + finder.iFileCheckedFor = _L("?:\\dir\\n\u00c1me.e02"); + test(finder.FindDrive()); + //test(0 == finder.iFileName->CompareF(_L("v:\\dir\\nÁme.e02"))); + test(0 == finder.iFileName->CompareF(_L("v:\\dir\\n\u00c1me.e02"))); + delete finder.iFilesThatExist; + finder.iFilesThatExist = 0; + + // Test searching language and drive down the language path + // FindLanguageAndDrive + finder.iPath[0] = static_cast(2); + finder.iPath[1] = static_cast(15702); + finder.iPath[2] = static_cast(1); + finder.iPath[3] = ELangNone; + fileName = KTestFileName1; + finder.SetFileName(fileName); + SetUpFinderForLanguageAndDriveSearchL(finder); + finder.iFileCheckedFor = _L("?:\\dir\\name.e*"); + test(!finder.FindLanguageAndDrive()); + // check that iFileName is undamaged + finder.RepairFileName(); + test(0 == finder.iFileName->CompareF(KTestFileName1)); + delete finder.iFilesSearchedFor; + finder.iFilesThatExist = new (ELeave) CDesCArraySeg(10); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e15702")); + fileName = KTestFileName1; + finder.SetFileName(fileName); + SetUpFinderForLanguageAndDriveSearchL(finder); + test(finder.FindLanguageAndDrive()); + test(0 == finder.iFileName->CompareF(_L("a:\\dir\\name.e15702"))); + delete finder.iFilesSearchedFor; + finder.iFilesSearchedFor = 0; + + finder.iPath[0] = static_cast(7); + finder.iPath[1] = ELangNone; + finder.iFilesThatExist->AppendL(_L("g:\\dir\\name.ext")); + fileName = KTestFileName1; + finder.SetFileName(fileName); + finder.iDrives = _L("ZAG"); + finder.iDrivesChecked = _L("ZAGZAG"); + test(finder.FindLanguageAndDrive()); + test(0 == finder.iFileName->CompareF(_L("g:\\dir\\name.ext"))); + delete finder.iFilesThatExist; + finder.iFilesThatExist = 0; + + // Test filename matching + // LanguageNumberFromFile + test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("AVB"))); + //test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("ávb04"), _L("A\x301VB"))); + //test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("a\x301vb04"), _L("ÁVB"))); + test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("\u00e1vb04"), _L("A\x301VB"))); + test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("a\x301vb04"), _L("\u00c1VB"))); + test(5254 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb5254"), _L("aVb"))); + test(KErrNotFound == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("avb04"))); + test(KErrNotFound == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("av"))); + test(KErrNotFound == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L(""))); + test(0 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb0000000"), _L("AVB00000"))); + test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb000000004"), _L("AVB0000000"))); + test(100004 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb000100004"), _L("AVB000"))); + test(111114 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb0111114"), _L("AVB0"))); + + // Test searching for any language file within a drive + // FindFirstLanguageFile + fileName = KTestFileName3; + finder.SetFileName(fileName); + finder.iFilesThatExist = new (ELeave) CDesCArraySeg(10); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e107")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e07")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e02")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.ee01")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.01")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name01")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name01.e01")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e15108")); + finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e03")); + finder.iTestScanner.iDriveError[0] = KErrNoMemory; + fileName = KTestFileName3; + finder.SetFileName(fileName); + test(KErrNotFound == finder.FindFirstLanguageFile(dummy)); + finder.iTestScanner.iDriveError[0] = KErrAbort; + fileName = KTestFileName3; + finder.SetFileName(fileName); + test(KErrNotFound == finder.FindFirstLanguageFile(dummy)); + finder.iTestScanner.iDriveError[0] = KErrNone; + fileName = KTestFileName3; + finder.SetFileName(fileName); + test(0 <= finder.FindFirstLanguageFile(dummy)); + test(0 == finder.iFileName->CompareF(_L("a:\\dir\\name.e02"))); + + finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.100")); + finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.9539")); + finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.19539")); + finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.1000")); + finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.102")); + fileName = _L("a:\\abcdefg.xx"); + finder.SetFileName(fileName); + test(0 <= finder.FindFirstLanguageFile(dummy)); + test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000"))); + finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.aaa100")); + finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.0523")); // not well-formed. Will not count. + finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.1001")); + fileName = _L("a:\\abcdefg.xx"); + finder.SetFileName(fileName); + test(0 <= finder.FindFirstLanguageFile(dummy)); + test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000"))); + fileName = _L("a:\\abaffafg.xx"); + finder.SetFileName(fileName); + test(0 <= finder.FindFirstLanguageFile(dummy)); + test(0 == finder.iFileName->CompareF(_L("a:\\abaffafg.100"))); + finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.09")); + fileName = _L("a:\\abaffafg.xx"); + finder.SetFileName(fileName); + test(0 <= finder.FindFirstLanguageFile(dummy)); + test(0 == finder.iFileName->CompareF(_L("a:\\abaffafg.09"))); + + // Test searching all drives for any language + // FindFirstLanguageFileAndDrive + finder.iFilesThatExist->AppendL(_L("z:\\abcdefg.05")); + fileName = _L("c:\\abcdefg.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("az"); + test(0 <= finder.FindFirstLanguageFileAndDrive()); + test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000"))); + fileName = _L("c:\\abaffafg.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("az"); + test(0 <= finder.FindFirstLanguageFileAndDrive()); + test(0 == finder.iFileName->CompareF(_L("a:\\abaffafg.09"))); + fileName = _L("c:\\abcdefg.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("za"); + test(0 <= finder.FindFirstLanguageFileAndDrive()); + test(0 == finder.iFileName->CompareF(_L("z:\\abcdefg.05"))); + fileName = _L("c:\\xxx.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("za"); + test(KErrNotFound == finder.FindFirstLanguageFileAndDrive()); + finder.iTestScanner.iDriveError[25] = KErrAbort; + fileName = _L("c:\\abcdefg.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("za"); + test(0 <= finder.FindFirstLanguageFileAndDrive()); + test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000"))); + fileName = _L("c:\\abcdefg.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("za"); + finder.iTestScanner.iDriveError[0] = KErrNoMemory; + test(KErrNotFound == finder.FindFirstLanguageFileAndDrive()); + fileName = _L("c:\\abcdefg.xx"); + finder.SetFileName(fileName); + finder.iDrives = _L("za"); + finder.iTestScanner.iDriveError[0] = KErrAbort; + test(KErrNotFound == finder.FindFirstLanguageFileAndDrive()); + + } + + + + + +void CT_LANGUTILSIMP::TestLANGUTILSIMP() + { + __UHEAP_MARK; + + INFO_PRINTF1(_L("LangUtils Internal Tests: ")); + + TestAddLanguage(); + TestMakeLanguageDowngradePath(); + TestNearestLanguageFinder(); + + + + __UHEAP_MARKENDC(0); + } + +CT_LANGUTILSIMP::CT_LANGUTILSIMP() + { + SetTestStepName(KTestStep_T_LANGUTILSIMP); + } + +TVerdict CT_LANGUTILSIMP::doTestStepL() + { + SetTestStepResult(EFail); + + __UHEAP_MARK; + + TRAPD(error1, TestLANGUTILSIMP()); + + __UHEAP_MARKEND; + + if(error1 == KErrNone ) + { + SetTestStepResult(EPass); + } + + return TestStepResult(); + } +