textandlocutils/nearestlangutils/tsrc/T_LangUtilsImp.cpp
changeset 59 7d891bb52a7d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textandlocutils/nearestlangutils/tsrc/T_LangUtilsImp.cpp	Tue Sep 07 16:39:34 2010 +0800
@@ -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<TLanguage>(ELangEnglish|EDialectOrange);
+const TLanguage ELangAmericanSprint = static_cast<TLanguage>(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<TInt>(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<TLanguage>(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<TLanguage>(2);
+    finder.iPath[1] = static_cast<TLanguage>(15702);
+    finder.iPath[2] = static_cast<TLanguage>(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<TLanguage>(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();
+    }
+