textandlocutils/nearestlangutils/tsrc/T_LangUtilsImp.cpp
author hgs
Tue, 07 Sep 2010 16:39:34 +0800
changeset 59 7d891bb52a7d
permissions -rw-r--r--
201033_04

// 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();
    }