os/textandloc/charconvfw/charconvplugins/test/rtest/tsrc/main/t_win1251.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.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     3
* All rights reserved.
sl@0
     4
* This component and the accompanying materials are made available
sl@0
     5
* under the terms of "Eclipse Public License v1.0"
sl@0
     6
* which accompanies this distribution, and is available
sl@0
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     8
*
sl@0
     9
* Initial Contributors:
sl@0
    10
* Nokia Corporation - initial contribution.
sl@0
    11
*
sl@0
    12
* Contributors:
sl@0
    13
*
sl@0
    14
* Description: 
sl@0
    15
*
sl@0
    16
*/
sl@0
    17
sl@0
    18
sl@0
    19
#include <e32std.h>
sl@0
    20
#include <e32base.h>
sl@0
    21
#include <f32file.h>
sl@0
    22
#include <charconv.h>
sl@0
    23
#include "t_win1251.h"
sl@0
    24
sl@0
    25
const TUint KCharacterSetIdentifier=KCharacterSetIdentifierWin1251;
sl@0
    26
sl@0
    27
#ifdef __WINS__
sl@0
    28
_LIT(KInputUnicodeFilename, "c:\\test\\data\\win1251_uni_input.dat");
sl@0
    29
_LIT(KInputForeignFilename, "c:\\test\\data\\win1251_for_input.dat");
sl@0
    30
_LIT(KExpectUnicodeFilename, "c:\\test\\data\\win1251_uni_expect.dat");
sl@0
    31
_LIT(KExpectForeignFilename, "c:\\test\\data\\win1251_for_expect.dat");
sl@0
    32
#else
sl@0
    33
_LIT(KInputUnicodeFilename, "z:\\test\\data\\win1251_uni_input.dat");
sl@0
    34
_LIT(KInputForeignFilename, "z:\\test\\data\\win1251_for_input.dat");
sl@0
    35
_LIT(KExpectUnicodeFilename, "z:\\test\\data\\win1251_uni_expect.dat");
sl@0
    36
_LIT(KExpectForeignFilename, "z:\\test\\data\\win1251_for_expect.dat");
sl@0
    37
#endif
sl@0
    38
sl@0
    39
#define test(cond)                                  \
sl@0
    40
    {                                               \
sl@0
    41
    TBool __bb = (cond);                            \
sl@0
    42
    TEST(__bb);                                     \
sl@0
    43
    if (!__bb)                                      \
sl@0
    44
        {                                           \
sl@0
    45
        ERR_PRINTF1(_L("ERROR: Test Failed"));      \
sl@0
    46
        User::Leave(1);                             \
sl@0
    47
        }                                           \
sl@0
    48
    }
sl@0
    49
sl@0
    50
void CT_WIN1251::ReadDescL(TDes8& aDes, const TDesC& aFilename, RFs& aFs)
sl@0
    51
    {
sl@0
    52
    RFile file;
sl@0
    53
    TInt err = file.Open(aFs, aFilename, EFileRead);
sl@0
    54
    test(err == KErrNone);
sl@0
    55
    CleanupClosePushL(file);    
sl@0
    56
    err = file.Read(aDes);
sl@0
    57
    test(err == KErrNone);
sl@0
    58
    CleanupStack::PopAndDestroy(&file);
sl@0
    59
    }
sl@0
    60
        
sl@0
    61
void CT_WIN1251::Merge_Big(TDesC8& aSource, TDes16& aTarget)
sl@0
    62
    {
sl@0
    63
    TInt length = aSource.Length();
sl@0
    64
    TInt i = 0;
sl@0
    65
    for(i=0;i<length-1;i++)
sl@0
    66
        {
sl@0
    67
        TInt64 temp = *(aSource.Ptr()+(i))*16*16 + *(aSource.Ptr()+i+1);
sl@0
    68
        aTarget.Append(temp);
sl@0
    69
        i++;
sl@0
    70
        }   
sl@0
    71
    }
sl@0
    72
        
sl@0
    73
void CT_WIN1251::DoE32MainL()
sl@0
    74
    {
sl@0
    75
    RFs fileServerSession;
sl@0
    76
    CleanupClosePushL(fileServerSession);
sl@0
    77
    User::LeaveIfError(fileServerSession.Connect());
sl@0
    78
    CCnvCharacterSetConverter* characterSetConverter=CCnvCharacterSetConverter::NewLC();
sl@0
    79
    CArrayFix<CCnvCharacterSetConverter::SCharacterSet>* arrayOfCharacterSetsAvailable=\
sl@0
    80
        CCnvCharacterSetConverter::CreateArrayOfCharacterSetsAvailableLC(fileServerSession);
sl@0
    81
    
sl@0
    82
    INFO_PRINTF1(_L("Available:\n"));
sl@0
    83
    for (TInt i=arrayOfCharacterSetsAvailable->Count()-1; i>=0; --i)
sl@0
    84
        {
sl@0
    85
        const CCnvCharacterSetConverter::SCharacterSet& charactersSet=(*arrayOfCharacterSetsAvailable)[i];
sl@0
    86
        characterSetConverter->PrepareToConvertToOrFromL(charactersSet.Identifier(), *arrayOfCharacterSetsAvailable, fileServerSession);
sl@0
    87
        TPtrC charactersSetName(charactersSet.Name());
sl@0
    88
        if (charactersSet.NameIsFileName())
sl@0
    89
            {
sl@0
    90
            charactersSetName.Set(TParsePtrC(charactersSetName).Name());
sl@0
    91
            }
sl@0
    92
        INFO_PRINTF2(_L("    %S\n"), &charactersSetName);
sl@0
    93
        }
sl@0
    94
    
sl@0
    95
    INFO_PRINTF1(_L("Encoding from Unicode to Foreign"));
sl@0
    96
    characterSetConverter->PrepareToConvertToOrFromL(KCharacterSetIdentifier, *arrayOfCharacterSetsAvailable, fileServerSession);
sl@0
    97
    TBuf8<512> temp;
sl@0
    98
    TBuf16<256> originalUnicode;
sl@0
    99
    TBuf8<256> generatedForeign;
sl@0
   100
    TBuf16<256> generatedUnicode;
sl@0
   101
    ReadDescL(temp, KInputUnicodeFilename, fileServerSession);
sl@0
   102
    Merge_Big(temp, originalUnicode);
sl@0
   103
    test(characterSetConverter->ConvertFromUnicode(generatedForeign, originalUnicode) == 0);
sl@0
   104
    ReadDescL(temp, KExpectForeignFilename, fileServerSession);
sl@0
   105
    test(generatedForeign == temp);
sl@0
   106
sl@0
   107
    INFO_PRINTF1(_L("Encoding from Foreign to Unicode"));   
sl@0
   108
    ReadDescL(generatedForeign, KInputForeignFilename, fileServerSession);
sl@0
   109
    TInt state=CCnvCharacterSetConverter::KStateDefault;
sl@0
   110
    test( 0 == characterSetConverter->ConvertToUnicode(generatedUnicode, generatedForeign, state));
sl@0
   111
    ReadDescL(temp, KExpectUnicodeFilename, fileServerSession);
sl@0
   112
    originalUnicode.Zero();
sl@0
   113
    Merge_Big(temp, originalUnicode); 
sl@0
   114
    test(generatedUnicode == originalUnicode);
sl@0
   115
    
sl@0
   116
    CleanupStack::PopAndDestroy(3);
sl@0
   117
    }
sl@0
   118
sl@0
   119
CT_WIN1251::CT_WIN1251()
sl@0
   120
    {
sl@0
   121
    SetTestStepName(KTestStep_T_WIN1251);
sl@0
   122
    }
sl@0
   123
sl@0
   124
TVerdict CT_WIN1251::doTestStepL()
sl@0
   125
    {
sl@0
   126
    SetTestStepResult(EFail);
sl@0
   127
sl@0
   128
    __UHEAP_MARK;
sl@0
   129
    TRAPD(error1, DoE32MainL());
sl@0
   130
    __UHEAP_MARKEND;
sl@0
   131
sl@0
   132
    if(error1 == KErrNone)
sl@0
   133
        {
sl@0
   134
        SetTestStepResult(EPass);
sl@0
   135
        }
sl@0
   136
sl@0
   137
    return TestStepResult();
sl@0
   138
    }