os/textandloc/textandlocutils/nearestlangutils/tsrc/T_LangUtilsImp.cpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 //
    15 
    16 #include "t_langutilsimp.h"
    17 
    18 
    19 #define test(cond)                                          \
    20     {                                                       \
    21     TBool __bb = (cond);                                    \
    22     TEST(__bb);                                             \
    23     if (!__bb)                                              \
    24         {                                                   \
    25         ERR_PRINTF1(_L("ERROR: Test Failed"));              \
    26         User::Leave(1);                                     \
    27         }                                                   \
    28     }
    29 
    30 
    31 
    32 void CT_LANGUTILSIMP::TestPath(const TLanguagePath& aPath, const TLanguage* aExpected, TInt aExpectedCount)
    33     {
    34     for (int i = 0; i != aExpectedCount; ++i)
    35         test(aPath[i] == *aExpected++);
    36     test(aPath[aExpectedCount] == ELangNone);
    37     }
    38 
    39 const TLanguage ExpectedPath[] = { ELangFrench, ELangJapanese, ELangGerman, ELangGreek,
    40     ELangArabic, ELangEnglish, ELangItalian, ELangHebrew };
    41 
    42 /**
    43 @SYMTestCaseID          SYSLIB-BAFL-CT-0443
    44 @SYMTestCaseDesc        Tests TLanguagePath class
    45 @SYMTestPriority        High
    46 @SYMTestActions         Test for adding different language paths
    47 @SYMTestExpectedResults Test must not fail
    48 @SYMREQ                 REQ0000
    49 */
    50 void CT_LANGUTILSIMP::TestAddLanguage()
    51     {
    52     INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0443 "));
    53     TLanguagePath path;
    54     path[0] = ELangNone;
    55     AddLanguage(path, ELangNone);
    56     TestPath(path, ExpectedPath, 0);
    57     AddLanguage(path, ELangFrench);
    58     TestPath(path, ExpectedPath, 1);
    59     AddLanguage(path, ELangFrench);
    60     TestPath(path, ExpectedPath, 1);
    61     AddLanguage(path, ELangNone);
    62     TestPath(path, ExpectedPath, 1);
    63     AddLanguage(path, ELangFrench);
    64     TestPath(path, ExpectedPath, 1);
    65     AddLanguage(path, ELangJapanese);
    66     TestPath(path, ExpectedPath, 2);
    67     AddLanguage(path, ELangFrench);
    68     TestPath(path, ExpectedPath, 2);
    69     AddLanguage(path, ELangNone);
    70     TestPath(path, ExpectedPath, 2);
    71     AddLanguage(path, ELangGerman);
    72     TestPath(path, ExpectedPath, 3);
    73     AddLanguage(path, ELangGreek);
    74     TestPath(path, ExpectedPath, 4);
    75     AddLanguage(path, ELangArabic);
    76     TestPath(path, ExpectedPath, 5);
    77     AddLanguage(path, ELangNone);
    78     TestPath(path, ExpectedPath, 5);
    79     AddLanguage(path, ELangEnglish);
    80     TestPath(path, ExpectedPath, 6);
    81     AddLanguage(path, ELangItalian);
    82     TestPath(path, ExpectedPath, 7);
    83     AddLanguage(path, ELangNone);
    84     TestPath(path, ExpectedPath, 7);
    85     AddLanguage(path, ELangHebrew);
    86     TestPath(path, ExpectedPath, 8);
    87     AddLanguage(path, ELangHebrew);
    88     TestPath(path, ExpectedPath, 8);
    89     AddLanguage(path, ELangEnglish);
    90     TestPath(path, ExpectedPath, 8);
    91     AddLanguage(path, ELangItalian);
    92     TestPath(path, ExpectedPath, 8);
    93     AddLanguage(path, ELangNone);
    94     TestPath(path, ExpectedPath, 8);
    95     AddLanguage(path, ELangFrench);
    96     TestPath(path, ExpectedPath, 8);
    97     AddLanguage(path, ELangNone);
    98     TestPath(path, ExpectedPath, 8);
    99     AddLanguage(path, ELangGerman);
   100     TestPath(path, ExpectedPath, 8);
   101     }
   102 
   103 
   104 
   105 /**
   106 @SYMTestCaseID          SYSLIB-BAFL-CT-0444
   107 @SYMTestCaseDesc        Tests for the functionality of TLocale class
   108 @SYMTestPriority        High
   109 @SYMTestActions         Test for language downgrades
   110 @SYMTestExpectedResults Test must not fail
   111 @SYMREQ                 REQ0000
   112 */
   113 void CT_LANGUTILSIMP::TestDowngrade(SDowngradeTest& aTest)
   114     {
   115     INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0444 "));
   116     TLocale loc;
   117     loc.SetLanguageDowngrade(0, aTest.iIn[1]);
   118     loc.SetLanguageDowngrade(1, aTest.iIn[2]);
   119     loc.SetLanguageDowngrade(2, aTest.iIn[3]);
   120     TLanguagePath path;
   121     MakeLanguageDowngradePath(path, aTest.iIn[0], ELangNone, loc);
   122     for (int i = 0; ; ++i)
   123         {
   124         test(i < 9);
   125         test(aTest.iOut[i] == path[i]);
   126         if (path[i] == ELangNone)
   127             return;
   128         }
   129     
   130     MakeLanguageDowngradePath(path, ELangAustralian, ELangNone, loc);
   131     MakeLanguageDowngradePath(path, ELangNewZealand, ELangNone, loc);
   132     MakeLanguageDowngradePath(path, ELangSouthAfricanEnglish, ELangNone, loc);
   133     MakeLanguageDowngradePath(path, ELangInternationalEnglish, ELangNone, loc);
   134     MakeLanguageDowngradePath(path, ELangAmerican, ELangNone, loc);
   135     MakeLanguageDowngradePath(path, ELangEnglish_Apac, ELangNone, loc);
   136     MakeLanguageDowngradePath(path, ELangEnglish_Taiwan, ELangNone, loc);
   137     MakeLanguageDowngradePath(path, ELangEnglish_HongKong, ELangNone, loc);
   138     MakeLanguageDowngradePath(path, ELangEnglish_Prc, ELangNone, loc);
   139     MakeLanguageDowngradePath(path, ELangEnglish_Japan, ELangNone, loc);
   140     MakeLanguageDowngradePath(path, ELangEnglish_Thailand, ELangNone, loc);
   141     MakeLanguageDowngradePath(path, ELangSwissFrench, ELangNone, loc);
   142     MakeLanguageDowngradePath(path, ELangBelgianFrench, ELangNone, loc);
   143     MakeLanguageDowngradePath(path, ELangInternationalFrench, ELangNone, loc);
   144     MakeLanguageDowngradePath(path, ELangCanadianFrench, ELangNone, loc);
   145     MakeLanguageDowngradePath(path, ELangSwissGerman, ELangNone, loc);
   146     MakeLanguageDowngradePath(path, ELangAustrian, ELangNone, loc);
   147     MakeLanguageDowngradePath(path, ELangInternationalSpanish, ELangNone, loc);
   148     MakeLanguageDowngradePath(path, ELangLatinAmericanSpanish, ELangNone, loc);
   149     MakeLanguageDowngradePath(path, ELangSwissItalian, ELangNone, loc);
   150     MakeLanguageDowngradePath(path, ELangFinlandSwedish, ELangNone, loc);
   151     MakeLanguageDowngradePath(path, ELangCyprusTurkish, ELangNone, loc);
   152     MakeLanguageDowngradePath(path, ELangBelgianFlemish, ELangNone, loc);
   153     MakeLanguageDowngradePath(path, ELangHongKongChinese, ELangNone, loc);
   154     MakeLanguageDowngradePath(path, ELangCyprusGreek, ELangNone, loc);
   155     MakeLanguageDowngradePath(path, ELangMalay_Apac, ELangNone, loc);
   156     MakeLanguageDowngradePath(path, ELangBrazilianPortuguese, ELangNone, loc);
   157     
   158     }
   159 
   160 
   161 // Test Dialect enumeration.
   162 // Each value represents a dialect (variant) of a TLanguage language.
   163 // E.g. AmericanSprint is represented by ELangAmerican | EDialectSprint
   164 
   165 // The dialect location -- top six bits
   166 const TUint KDialectFactor=0x0400;
   167 enum TDialect
   168     {
   169     // The following are example dialects for testing only
   170     EDialectSprint = (1*KDialectFactor),
   171     EDialectOrange = (2*KDialectFactor),
   172     EDialectMaximum = EDialectOrange // This must always be equal to the last TDialect enum.
   173     // Up to 63 dialects.
   174     };
   175 
   176 const TLanguage ELangEnglishOrange = static_cast<TLanguage>(ELangEnglish|EDialectOrange);
   177 const TLanguage ELangAmericanSprint = static_cast<TLanguage>(ELangAmerican|EDialectSprint);
   178 
   179 SDowngradeTest DowngradeData[] =
   180     {
   181         // 0 = test language
   182         // 1-3 = language downgrade for locale
   183         // 4- = calculated language downgrade path, terminated with ELangNone.
   184         {{ELangEnglishOrange, ELangNone, ELangNone, ELangNone},
   185             {ELangEnglishOrange, ELangEnglish, ELangNone}},
   186         {{ELangAmericanSprint, ELangNone, ELangNone, ELangNone},
   187             {ELangAmericanSprint, ELangAmerican, ELangEnglish, ELangNone}},
   188         {{ELangFrench, ELangNone, ELangNone, ELangNone},
   189             {ELangFrench, ELangNone}},
   190         {{ELangSwissFrench, ELangNone, ELangNone, ELangNone},
   191             {ELangSwissFrench, ELangFrench, ELangNone}},
   192         {{ELangCanadianEnglish, ELangNone, ELangNone, ELangNone},
   193             {ELangCanadianEnglish, ELangAmerican, ELangEnglish, ELangNone}},
   194         {{ELangSwissFrench, ELangNone, ELangFrench, ELangNone},
   195             {ELangSwissFrench, ELangFrench, ELangNone}},
   196         {{ELangCanadianEnglish, ELangEnglish, ELangNone, ELangAmerican},
   197             {ELangCanadianEnglish, ELangEnglish, ELangAmerican, ELangNone}},
   198         {{ELangCanadianEnglish, ELangNone, ELangNone, ELangSwissFrench},
   199             {ELangCanadianEnglish, ELangSwissFrench, ELangAmerican, ELangEnglish, ELangNone}},
   200         {{ELangCanadianEnglish, ELangFrench, ELangAmerican, ELangSwissFrench},
   201             {ELangCanadianEnglish, ELangFrench, ELangAmerican, ELangSwissFrench, ELangEnglish, ELangNone}},
   202         {{ELangCanadianEnglish, ELangNone, ELangGerman, ELangSwissFrench},
   203             {ELangCanadianEnglish, ELangGerman, ELangSwissFrench, ELangAmerican, ELangEnglish, ELangNone}},
   204         {{ELangCanadianEnglish, ELangFinlandSwedish, ELangGerman, ELangSwissFrench},
   205             {ELangCanadianEnglish, ELangFinlandSwedish, ELangGerman, ELangSwissFrench, ELangAmerican, ELangEnglish, ELangNone}},
   206         {{ELangFinlandSwedish, ELangFinlandSwedish, ELangFinlandSwedish, ELangFinlandSwedish},
   207             {ELangFinlandSwedish, ELangSwedish, ELangNone}},
   208     };
   209 
   210 /**
   211 @SYMTestCaseID          SYSLIB-BAFL-CT-0445
   212 @SYMTestCaseDesc        Tests for language downgrades
   213 @SYMTestPriority        High
   214 @SYMTestActions         Call up downgrade path test function
   215 @SYMTestExpectedResults Test must not fail
   216 @SYMREQ                 REQ0000
   217 */
   218 void CT_LANGUTILSIMP::TestMakeLanguageDowngradePath()
   219     {
   220     INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0445 "));
   221     for (int i = 0; i != sizeof(DowngradeData)/sizeof(DowngradeData[0]); ++i)
   222         TestDowngrade(DowngradeData[i]);
   223     }
   224 
   225 void CT_LANGUTILSIMP::SetUpFinderForLanguageAndDriveSearchL(
   226     TTestNearestLanguageFileFinder& aFinder)
   227     {
   228     aFinder.iDrives = _L("ZAG");
   229     aFinder.iFilesSearchedFor = new(ELeave) CDesCArraySeg(10);
   230     aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.e02"));
   231     aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.e02"));
   232     aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.e02"));
   233     aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.e15702")); //Extended lang
   234     aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.e15702"));
   235     aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.e15702"));
   236     aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.e01"));
   237     aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.e01"));
   238     aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.e01"));
   239     aFinder.iFilesSearchedFor->AppendL(_L("z:\\dir\\name.ext"));
   240     aFinder.iFilesSearchedFor->AppendL(_L("a:\\dir\\name.ext"));
   241     aFinder.iFilesSearchedFor->AppendL(_L("g:\\dir\\name.ext"));
   242     aFinder.iDrivesChecked = _L("zagzagzagzagzag");
   243     }
   244 
   245 _LIT(KTestFileName1, "z:\\dir\\name.ext");
   246 //_LIT(KTestFileName2, "z:\\dir\\náme.ext");
   247 _LIT(KTestFileName2, "z:\\dir\\n\u00c1me.ext");
   248 _LIT(KTestFileName3, "a:\\dir\\name.ext");
   249 _LIT(KTestFileName4, "c:\\dir\\name.ext");
   250 _LIT(KTestFileName5, "d:\\dir\\name.ext");
   251 _LIT(KTestFileName6, "y:\\dir\\name.ext");
   252 _LIT(KTestFileName7, "A:\\dir\\name.ext");
   253 _LIT(KTestFileName8, "C:\\dir\\name.ext");
   254 _LIT(KTestFileName9, "Y:\\dir\\name.ext");
   255 _LIT(KTestFileName11, "\\abc\\defg.hijkl");
   256 _LIT(KTestFileName256Chars, "\
   257 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\
   258 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\
   259 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\
   260 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz0.ext");
   261 
   262 _LIT(KExpectedFileName256Chars, "?:\
   263 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\
   264 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\
   265 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz01234\
   266 \\abcdefghijklmnopqrstuvwxyz01234\\abcdefghijklmnopqrstuvwxyz0.e");
   267 _LIT(KExpectedFileName1, "?:\\dir\\name.e");
   268 _LIT(KExpectedSuffix1, "xt");
   269 _LIT(KExpectedFileName2, "?:\\abc\\defg.hij");
   270 _LIT(KExpectedSuffix2, "kl");
   271 _LIT(KTestFileName1French, "z:\\dir\\name.e02");
   272 _LIT(KTestFileName1Japanese, "z:\\dir\\name.e32");
   273 _LIT(KTestFileName1Mongolian, "z:\\dir\\name.e54321");
   274 _LIT(KTestFileName1AmericanSprint, "z:\\dir\\name.e1034"); //American=0x0A, Sprint=0x0400. 0x040A=1034.
   275 _LIT(KCheckedForFrench, "?:\\dir\\name.e02");
   276 
   277 /**
   278 @SYMTestCaseID          SYSLIB-BAFL-CT-0446
   279 @SYMTestCaseDesc        Nearest language finder test
   280 @SYMTestPriority        High
   281 @SYMTestActions         Test drive sequence construction
   282                         Test addition of language number
   283                         Test searching each drive for the specified file
   284                         Test searching language and drive down the language path
   285                         Test filename matching
   286                         Test searching for any language file within a drive
   287                         Test searching all drives for any language
   288 @SYMTestExpectedResults Test must not fail
   289 @SYMREQ                 REQ0000
   290 */
   291 void CT_LANGUTILSIMP::TestNearestLanguageFinder()
   292     {
   293     INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-BAFL-CT-0446 "));
   294     RFs dummy;
   295     TTestNearestLanguageFileFinder finder(dummy);
   296 
   297     // Test file name setting and disecting
   298     // SetFileName
   299     // RepairFileName
   300     TFileName fileName(KTestFileName1);
   301     finder.SetFileName(fileName);
   302     test(0 <= finder.iFileName->MatchF(KExpectedFileName1));
   303     test(0 == finder.iSuffix.Compare(KExpectedSuffix1));
   304     test('z' == finder.iInitialDriveLetter);
   305     finder.RepairFileName();
   306     test(0 == finder.iFileName->Compare(KTestFileName1));
   307     fileName = KTestFileName11;
   308     finder.SetFileName(fileName);
   309     test(0 <= finder.iFileName->MatchF(KExpectedFileName2));
   310     test(0 == finder.iSuffix.Compare(KExpectedSuffix2));
   311     test(-1 == finder.iInitialDriveLetter);
   312     finder.RepairFileName();
   313     test(0 == finder.iFileName->Compare(KTestFileName11));
   314     fileName = KTestFileName256Chars;
   315     finder.SetFileName(fileName);
   316     test(0 <= finder.iFileName->MatchF(KExpectedFileName256Chars));
   317     test(0 == finder.iSuffix.Compare(KExpectedSuffix1));
   318     test(-1 == finder.iInitialDriveLetter);
   319     finder.RepairFileName();
   320     test(0 == finder.iFileName->Compare(KTestFileName256Chars));
   321 
   322     // Test drive sequence construction
   323     // AddCustomResourceDrive
   324     finder.iCustomRscDrive = static_cast<TInt>(EDriveC);    // drive c:
   325     fileName = KTestFileName1;
   326     finder.SetFileName(fileName);
   327     test(finder.AddCustomResourceDrive() == KErrNone);
   328     test(0 == finder.iDrives.CompareF(_L("CZ")));
   329     fileName = KTestFileName3;
   330     finder.SetFileName(fileName);
   331     test(finder.AddCustomResourceDrive() == KErrNone);
   332     test(0 == finder.iDrives.CompareF(_L("CA")));
   333     fileName = KTestFileName4;
   334     finder.SetFileName(fileName);
   335     test(finder.AddCustomResourceDrive() == KErrAlreadyExists);
   336     test(0 == finder.iDrives.CompareF(_L("C")));
   337     fileName = KTestFileName5;
   338     finder.SetFileName(fileName);
   339     test(finder.AddCustomResourceDrive() == KErrNone);
   340     test(0 == finder.iDrives.CompareF(_L("CD")));
   341     fileName = KTestFileName6;
   342     finder.SetFileName(fileName);
   343     test(finder.AddCustomResourceDrive() == KErrNone);
   344     test(0 == finder.iDrives.CompareF(_L("CY")));
   345     fileName = KTestFileName7;
   346     finder.SetFileName(fileName);
   347     test(finder.AddCustomResourceDrive() == KErrNone);
   348     test(0 == finder.iDrives.CompareF(_L("CA")));
   349     fileName = KTestFileName8;
   350     finder.SetFileName(fileName);
   351     test(finder.AddCustomResourceDrive() == KErrAlreadyExists);
   352     test(0 == finder.iDrives.CompareF(_L("C")));
   353     fileName = KTestFileName9;
   354     finder.SetFileName(fileName);
   355     test(finder.AddCustomResourceDrive() == KErrNone);
   356     test(0 == finder.iDrives.CompareF(_L("CY")));
   357     // AddAllDrives
   358     fileName = KTestFileName1;
   359     finder.SetFileName(fileName);
   360     finder.AddAllDrives();
   361     test(0 == finder.iDrives.CompareF(_L("ZYXWVUTSRQPONMLKJIHGFEDCBA")));
   362     fileName = KTestFileName3;
   363     finder.SetFileName(fileName);
   364     finder.AddAllDrives();
   365     test(0 == finder.iDrives.CompareF(_L("AYXWVUTSRQPONMLKJIHGFEDCBZ")));
   366     fileName = KTestFileName4;
   367     finder.SetFileName(fileName);
   368     finder.AddAllDrives();
   369     test(0 == finder.iDrives.CompareF(_L("CYXWVUTSRQPONMLKJIHGFEDBAZ")));
   370     fileName = KTestFileName5;
   371     finder.SetFileName(fileName);
   372     finder.AddAllDrives();
   373     test(0 == finder.iDrives.CompareF(_L("DYXWVUTSRQPONMLKJIHGFECBAZ")));
   374     fileName = KTestFileName6;
   375     finder.SetFileName(fileName);
   376     finder.AddAllDrives();
   377     test(0 == finder.iDrives.CompareF(_L("YXWVUTSRQPONMLKJIHGFEDCBAZ")));
   378     fileName = KTestFileName7;
   379     finder.SetFileName(fileName);
   380     finder.AddAllDrives();
   381     test(0 == finder.iDrives.CompareF(_L("AYXWVUTSRQPONMLKJIHGFEDCBZ")));
   382     fileName = KTestFileName8;
   383     finder.SetFileName(fileName);
   384     finder.AddAllDrives();
   385     test(0 == finder.iDrives.CompareF(_L("CYXWVUTSRQPONMLKJIHGFEDBAZ")));
   386     fileName = KTestFileName9;
   387     finder.SetFileName(fileName);
   388     finder.AddAllDrives();
   389     test(0 == finder.iDrives.CompareF(_L("YXWVUTSRQPONMLKJIHGFEDCBAZ")));
   390 
   391     // Test addition of language number
   392     // AppendLanguageCode
   393     fileName = KTestFileName1;
   394     finder.SetFileName(fileName);
   395     finder.AppendLanguageCode(ELangFrench);
   396     test(0 == finder.iFileName->CompareF(KTestFileName1French));
   397     finder.SetFileName(fileName);
   398     finder.AppendLanguageCode(ELangJapanese);
   399     test(0 == finder.iFileName->CompareF(KTestFileName1Japanese));
   400     finder.SetFileName(fileName);
   401     finder.AppendLanguageCode(ELangAmericanSprint);
   402     test(0 == finder.iFileName->CompareF(KTestFileName1AmericanSprint));
   403 
   404     fileName = KTestFileName1;
   405     finder.SetFileName(fileName);
   406     finder.AppendLanguageCode(static_cast<TLanguage>(54321));
   407     test(0 == finder.iFileName->CompareF(KTestFileName1Mongolian));
   408     fileName = KTestFileName256Chars;
   409     finder.SetFileName(fileName);
   410     test(!finder.AppendLanguageCode(ELangFrench));
   411 
   412     // Test searching each drive for the specified file
   413     // FindDrive
   414     finder.iFileCheckedFor = KCheckedForFrench;
   415     finder.iDrivesChecked = _L("D");
   416     fileName = KTestFileName5;
   417     finder.SetFileName(fileName);
   418     finder.AppendLanguageCode(ELangFrench);
   419     finder.FindDrive();
   420     test(finder.iDrivesChecked.Length() == 0);
   421     finder.SetFileName(fileName);
   422     finder.AddAllDrives();
   423     finder.iDrivesChecked = _L("dyxwvutsrqponmlkjihgfecbaz");
   424     finder.AppendLanguageCode(ELangFrench);
   425     finder.FindDrive();
   426     test(finder.iDrivesChecked.Length() == 0);
   427     fileName = KTestFileName5;
   428     finder.SetFileName(fileName);
   429     finder.AddAllDrives();
   430     finder.iDrivesChecked = _L("dyxwvutsrqponmlkjihgfecbaz");
   431     finder.AppendLanguageCode(ELangFrench);
   432     finder.iFilesThatExist = new (ELeave) CDesCArraySeg(10);
   433     finder.iFilesThatExist->AppendL(_L("o:\\dIR\\NAmE.E02"));
   434     test(finder.FindDrive());
   435     test(0 == finder.iFileName->CompareF(_L("O:\\dir\\name.e02")));
   436     fileName = KTestFileName2;
   437     finder.SetFileName(fileName);
   438     finder.AppendLanguageCode(ELangFrench);
   439     finder.AddAllDrives();
   440     finder.iDrivesChecked = _L("zyxwvutsrqponmlkjihgfedcba");
   441     finder.iFilesThatExist->AppendL(_L("v:\\dIR\\NA\x301mE.E02"));
   442     //finder.iFileCheckedFor = _L("?:\\dir\\nÁme.e02");
   443     finder.iFileCheckedFor = _L("?:\\dir\\n\u00c1me.e02");
   444     test(finder.FindDrive());
   445     //test(0 == finder.iFileName->CompareF(_L("v:\\dir\\nÁme.e02")));
   446     test(0 == finder.iFileName->CompareF(_L("v:\\dir\\n\u00c1me.e02")));
   447     delete finder.iFilesThatExist;
   448     finder.iFilesThatExist = 0;
   449 
   450     // Test searching language and drive down the language path
   451     // FindLanguageAndDrive
   452     finder.iPath[0] = static_cast<TLanguage>(2);
   453     finder.iPath[1] = static_cast<TLanguage>(15702);
   454     finder.iPath[2] = static_cast<TLanguage>(1);
   455     finder.iPath[3] = ELangNone;
   456     fileName = KTestFileName1;
   457     finder.SetFileName(fileName);
   458     SetUpFinderForLanguageAndDriveSearchL(finder);
   459     finder.iFileCheckedFor = _L("?:\\dir\\name.e*");
   460     test(!finder.FindLanguageAndDrive());
   461     // check that iFileName is undamaged
   462     finder.RepairFileName();
   463     test(0 == finder.iFileName->CompareF(KTestFileName1));
   464     delete finder.iFilesSearchedFor;
   465     finder.iFilesThatExist = new (ELeave) CDesCArraySeg(10);
   466     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e15702"));
   467     fileName = KTestFileName1;
   468     finder.SetFileName(fileName);
   469     SetUpFinderForLanguageAndDriveSearchL(finder);
   470     test(finder.FindLanguageAndDrive());
   471     test(0 == finder.iFileName->CompareF(_L("a:\\dir\\name.e15702")));
   472     delete finder.iFilesSearchedFor;
   473     finder.iFilesSearchedFor = 0;
   474 
   475     finder.iPath[0] = static_cast<TLanguage>(7);
   476     finder.iPath[1] = ELangNone;
   477     finder.iFilesThatExist->AppendL(_L("g:\\dir\\name.ext"));
   478     fileName = KTestFileName1;
   479     finder.SetFileName(fileName);
   480     finder.iDrives = _L("ZAG");
   481     finder.iDrivesChecked = _L("ZAGZAG");
   482     test(finder.FindLanguageAndDrive());
   483     test(0 == finder.iFileName->CompareF(_L("g:\\dir\\name.ext")));
   484     delete finder.iFilesThatExist;
   485     finder.iFilesThatExist = 0;
   486 
   487     // Test filename matching
   488     // LanguageNumberFromFile
   489     test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("AVB")));
   490     //test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("ávb04"), _L("A\x301VB")));
   491     //test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("a\x301vb04"), _L("ÁVB")));
   492     test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("\u00e1vb04"), _L("A\x301VB")));
   493     test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("a\x301vb04"), _L("\u00c1VB")));
   494     test(5254 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb5254"), _L("aVb")));
   495     test(KErrNotFound == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("avb04")));
   496     test(KErrNotFound == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("av")));
   497     test(KErrNotFound == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb04"), _L("")));
   498     test(0 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb0000000"), _L("AVB00000")));
   499     test(4 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb000000004"), _L("AVB0000000")));
   500     test(100004 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb000100004"), _L("AVB000")));
   501     test(111114 == TNearestLanguageFileFinder::LanguageNumberFromFile(_L("avb0111114"), _L("AVB0")));
   502 
   503     // Test searching for any language file within a drive
   504     // FindFirstLanguageFile
   505     fileName = KTestFileName3;
   506     finder.SetFileName(fileName);
   507     finder.iFilesThatExist = new (ELeave) CDesCArraySeg(10);
   508     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e107"));
   509     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e07"));
   510     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e02"));
   511     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.ee01"));
   512     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.01"));
   513     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name01"));
   514     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name01.e01"));
   515     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e15108"));
   516     finder.iFilesThatExist->AppendL(_L("a:\\dir\\name.e03"));
   517     finder.iTestScanner.iDriveError[0] = KErrNoMemory;
   518     fileName = KTestFileName3;
   519     finder.SetFileName(fileName);
   520     test(KErrNotFound == finder.FindFirstLanguageFile(dummy));
   521     finder.iTestScanner.iDriveError[0] = KErrAbort;
   522     fileName = KTestFileName3;
   523     finder.SetFileName(fileName);
   524     test(KErrNotFound == finder.FindFirstLanguageFile(dummy));
   525     finder.iTestScanner.iDriveError[0] = KErrNone;
   526     fileName = KTestFileName3;
   527     finder.SetFileName(fileName);
   528     test(0 <= finder.FindFirstLanguageFile(dummy));
   529     test(0 == finder.iFileName->CompareF(_L("a:\\dir\\name.e02")));
   530 
   531     finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.100"));
   532     finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.9539"));
   533     finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.19539"));
   534     finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.1000"));
   535     finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.102"));
   536     fileName = _L("a:\\abcdefg.xx");
   537     finder.SetFileName(fileName);
   538     test(0 <= finder.FindFirstLanguageFile(dummy));
   539     test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000")));
   540     finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.aaa100"));
   541     finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.0523"));    // not well-formed. Will not count.
   542     finder.iFilesThatExist->AppendL(_L("a:\\abcdefg.1001"));
   543     fileName = _L("a:\\abcdefg.xx");
   544     finder.SetFileName(fileName);
   545     test(0 <= finder.FindFirstLanguageFile(dummy));
   546     test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000")));
   547     fileName = _L("a:\\abaffafg.xx");
   548     finder.SetFileName(fileName);
   549     test(0 <= finder.FindFirstLanguageFile(dummy));
   550     test(0 == finder.iFileName->CompareF(_L("a:\\abaffafg.100")));
   551     finder.iFilesThatExist->AppendL(_L("a:\\abaffafg.09"));
   552     fileName = _L("a:\\abaffafg.xx");
   553     finder.SetFileName(fileName);
   554     test(0 <= finder.FindFirstLanguageFile(dummy));
   555     test(0 == finder.iFileName->CompareF(_L("a:\\abaffafg.09")));
   556 
   557     // Test searching all drives for any language
   558     // FindFirstLanguageFileAndDrive
   559     finder.iFilesThatExist->AppendL(_L("z:\\abcdefg.05"));
   560     fileName = _L("c:\\abcdefg.xx");
   561     finder.SetFileName(fileName);
   562     finder.iDrives = _L("az");
   563     test(0 <= finder.FindFirstLanguageFileAndDrive());
   564     test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000")));
   565     fileName = _L("c:\\abaffafg.xx");
   566     finder.SetFileName(fileName);
   567     finder.iDrives = _L("az");
   568     test(0 <= finder.FindFirstLanguageFileAndDrive());
   569     test(0 == finder.iFileName->CompareF(_L("a:\\abaffafg.09")));
   570     fileName = _L("c:\\abcdefg.xx");
   571     finder.SetFileName(fileName);
   572     finder.iDrives = _L("za");
   573     test(0 <= finder.FindFirstLanguageFileAndDrive());
   574     test(0 == finder.iFileName->CompareF(_L("z:\\abcdefg.05")));
   575     fileName = _L("c:\\xxx.xx");
   576     finder.SetFileName(fileName);
   577     finder.iDrives = _L("za");
   578     test(KErrNotFound == finder.FindFirstLanguageFileAndDrive());
   579     finder.iTestScanner.iDriveError[25] = KErrAbort;
   580     fileName = _L("c:\\abcdefg.xx");
   581     finder.SetFileName(fileName);
   582     finder.iDrives = _L("za");
   583     test(0 <= finder.FindFirstLanguageFileAndDrive());
   584     test(0 == finder.iFileName->CompareF(_L("a:\\abcdefg.1000")));
   585     fileName = _L("c:\\abcdefg.xx");
   586     finder.SetFileName(fileName);
   587     finder.iDrives = _L("za");
   588     finder.iTestScanner.iDriveError[0] = KErrNoMemory;
   589     test(KErrNotFound == finder.FindFirstLanguageFileAndDrive());
   590     fileName = _L("c:\\abcdefg.xx");
   591     finder.SetFileName(fileName);
   592     finder.iDrives = _L("za");
   593     finder.iTestScanner.iDriveError[0] = KErrAbort;
   594     test(KErrNotFound == finder.FindFirstLanguageFileAndDrive());
   595 
   596     }
   597 
   598 
   599 
   600 
   601 
   602 void CT_LANGUTILSIMP::TestLANGUTILSIMP()
   603     {
   604     __UHEAP_MARK;
   605 
   606     INFO_PRINTF1(_L("LangUtils Internal Tests: "));
   607 
   608     TestAddLanguage();
   609     TestMakeLanguageDowngradePath();
   610     TestNearestLanguageFinder();
   611 
   612 
   613 
   614     __UHEAP_MARKENDC(0);
   615     }
   616 
   617 CT_LANGUTILSIMP::CT_LANGUTILSIMP()
   618     {
   619     SetTestStepName(KTestStep_T_LANGUTILSIMP);
   620     }
   621 
   622 TVerdict CT_LANGUTILSIMP::doTestStepL()
   623     {
   624     SetTestStepResult(EFail);
   625 
   626     __UHEAP_MARK;
   627 
   628     TRAPD(error1, TestLANGUTILSIMP());
   629 
   630     __UHEAP_MARKEND;
   631 
   632     if(error1 == KErrNone )
   633         {
   634         SetTestStepResult(EPass);
   635         }
   636 
   637     return TestStepResult();
   638     }
   639