os/textandloc/charconvfw/charconv_fw/test/rtest/tsrc/utf/tcomp7.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
/*
sl@0
     2
* Copyright (c) 1997-2009 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 <utf.h>
sl@0
    21
#include "utf7.h"
sl@0
    22
#include "t_comp7.h"
sl@0
    23
sl@0
    24
///////////////////////////////////////////////////////////////////////////////////////
sl@0
    25
sl@0
    26
sl@0
    27
#define test(cond)                                  \
sl@0
    28
    TEST((cond));                                   \
sl@0
    29
    if (!(cond))                                    \
sl@0
    30
        {                                           \
sl@0
    31
        ERR_PRINTF1(_L("ERROR: Test Failed"));      \
sl@0
    32
        User::Leave(1);                             \
sl@0
    33
        }
sl@0
    34
sl@0
    35
sl@0
    36
sl@0
    37
///////////////////////////////////////////////////////////////////////////////////////
sl@0
    38
///////////////////////////////////////////////////////////////////////////////////////
sl@0
    39
sl@0
    40
enum TPanic
sl@0
    41
	{
sl@0
    42
	EPanicNoFreeSpaceAtEndOfBuffer1=1,
sl@0
    43
	EPanicNoFreeSpaceAtEndOfBuffer2
sl@0
    44
	};
sl@0
    45
sl@0
    46
LOCAL_C void Panic(TPanic aPanic)
sl@0
    47
	{
sl@0
    48
	User::Panic(_L("TCOMP7"), aPanic);
sl@0
    49
	}
sl@0
    50
/**
sl@0
    51
@SYMTestCaseID          SYSLIB-CHARCONV-CT-0565
sl@0
    52
@SYMTestCaseDesc        Comparing behaviour with the Unicode CD-ROM UTF-7 sample code
sl@0
    53
@SYMTestPriority        Medium
sl@0
    54
@SYMTestActions        	Tests for CnvUtfConverter::ConvertToUnicodeFromUtf7() function
sl@0
    55
@SYMTestExpectedResults Test must not fail
sl@0
    56
@SYMREQ                 REQ0000
sl@0
    57
*/
sl@0
    58
void CT_COMP7::TestCOMP7()
sl@0
    59
	{
sl@0
    60
    INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-CHARCONV-CT-0565 Comparing behaviour with the Unicode CD-ROM UTF-7 sample code "));
sl@0
    61
	TDes16* originalUnicode=new TBuf16<512>;
sl@0
    62
	TDes8* generatedUtf7=new TBuf8<1024>;
sl@0
    63
	TDes8* otherGeneratedUtf7=new TBuf8<1024>;
sl@0
    64
	TDes16* generatedUnicode=new TBuf16<512>;
sl@0
    65
	TDes16* otherGeneratedUnicode=new TBuf16<512>;
sl@0
    66
	TInt state=CnvUtfConverter::KStateDefault;
sl@0
    67
	//
sl@0
    68
	*originalUnicode=_L16("");
sl@0
    69
	originalUnicode->AppendFormat(_L16("Here are some European letters: %c%c%c%c%c%c%c%c%c%c. "), 0x0117, 0x010d, 0x00f1, 0x00df, 0x00d8, 0x0142, 0x0151, 0x016f, 0x0131, 0x00c9);
sl@0
    70
	originalUnicode->AppendFormat(_L16("Here are some Greek letters: %c%c%c%c%c%c%c%c%c%c. "),    0x03a3, 0x03bf, 0x03bc, 0x03b4, 0x03b5, 0x0345, 0x03a9, 0x0392, 0x0395, 0x03a1);
sl@0
    71
	originalUnicode->AppendFormat(_L16("Here are some Cyrillic letters: %c%c%c%c%c%c%c%c%c%c. "), 0x0437, 0x0430, 0x0440, 0x0435, 0x0438, 0x0306, 0x0411, 0x041e, 0x0423, 0x0416);
sl@0
    72
	originalUnicode->AppendFormat(_L16("Here are some Georgian letters: %c%c%c%c%c%c%c%c%c%c. "), 0x10da, 0x10e0, 0x10e9, 0x10ef, 0x10d2, 0x10d7, 0x10e2, 0x10d0, 0x10ed, 0x10e8);
sl@0
    73
	originalUnicode->AppendFormat(_L16("Here are some Japanese kana: %c%c%c%c%c%c%c%c%c%c. "),    0x30a2, 0x30c0, 0x30d5, 0x30b7, 0x30ba, 0x3091, 0x3093, 0x3055, 0x3074, 0x3080);
sl@0
    74
	originalUnicode->AppendFormat(_L16("Here are some Han characters: %c%c%c%c%c%c%c%c%c%c. "),   0x7f0c, 0x7a92, 0x6d90, 0x6272, 0x5934, 0x5973, 0x55ce, 0x516c, 0x4ec0, 0x4e00);
sl@0
    75
	originalUnicode->AppendFormat(_L16("Here are some surrogate pairs: %c%c%c%c%c%c%c%c%c%c. "),   0xd800, 0xdc00, 0xdbff, 0xdfff, 0xdb80, 0xdddd, 0xdbff, 0xdcba, 0xdbeb, 0xdeb0);
sl@0
    76
	originalUnicode->AppendFormat(_L16("Here are some odd bits and pieces: =+-/*?#~'@!\"$%%^&\\|()[]{}<>_;:,. "));
sl@0
    77
	enum TUtf7Flags
sl@0
    78
		{
sl@0
    79
		EUtf7FlagOptional		=0x00000001,
sl@0
    80
		EUtf7FlagOtherOptional	=0x00000002,
sl@0
    81
		EUtf7FlagOtherVerbose	=0x00000004,
sl@0
    82
		EUtf7FlagCrossOver		=0x00000008,
sl@0
    83
		EUtf7FlagDone			=0x00000010
sl@0
    84
		};
sl@0
    85
	INFO_PRINTF1(_L("Round-trips via UTF-7"));
sl@0
    86
	for (TInt i=0; ~i&EUtf7FlagDone; ++i)
sl@0
    87
		{
sl@0
    88
        test(CnvUtfConverter::ConvertFromUnicodeToUtf7(*generatedUtf7, *originalUnicode, i&EUtf7FlagOptional)==0);
sl@0
    89
		{__ASSERT_ALWAYS(originalUnicode->Length()<originalUnicode->MaxLength(), Panic(EPanicNoFreeSpaceAtEndOfBuffer1));
sl@0
    90
		TUint16* sourceStart=CONST_CAST(TUint16*, originalUnicode->Ptr());
sl@0
    91
		TUint16* sourceEnd=sourceStart+originalUnicode->Length();
sl@0
    92
		char* targetStart=REINTERPRET_CAST(char*, CONST_CAST(TUint8*, otherGeneratedUtf7->Ptr()));
sl@0
    93
		char* targetEnd=targetStart+(otherGeneratedUtf7->MaxLength()-1);
sl@0
    94
		test(ConvertUCS2toUTF7(&sourceStart, sourceEnd, &targetStart, targetEnd, i&EUtf7FlagOtherOptional, i&EUtf7FlagOtherVerbose)==ok);
sl@0
    95
		otherGeneratedUtf7->SetLength(targetStart-REINTERPRET_CAST(char*, CONST_CAST(TUint8*, otherGeneratedUtf7->Ptr())));}
sl@0
    96
		TDes8& sourceForReturnTrip=(i&EUtf7FlagCrossOver)? *otherGeneratedUtf7: *generatedUtf7;
sl@0
    97
		TDes8& otherSourceForReturnTrip=(i&EUtf7FlagCrossOver)? *generatedUtf7: *otherGeneratedUtf7;
sl@0
    98
		test(CnvUtfConverter::ConvertToUnicodeFromUtf7(*generatedUnicode, sourceForReturnTrip, state)==0);
sl@0
    99
		test(state==CnvUtfConverter::KStateDefault);
sl@0
   100
		{__ASSERT_ALWAYS(otherSourceForReturnTrip.Length()<otherSourceForReturnTrip.MaxLength(), Panic(EPanicNoFreeSpaceAtEndOfBuffer2));
sl@0
   101
		char* sourceStart=REINTERPRET_CAST(char*, CONST_CAST(TUint8*, otherSourceForReturnTrip.Ptr()));
sl@0
   102
		char* sourceEnd=sourceStart+otherSourceForReturnTrip.Length();
sl@0
   103
		TUint16* targetStart=CONST_CAST(TUint16*, otherGeneratedUnicode->Ptr());
sl@0
   104
		TUint16* targetEnd=targetStart+(otherGeneratedUnicode->MaxLength()-1);
sl@0
   105
		test(ConvertUTF7toUCS2(&sourceStart, sourceEnd, &targetStart, targetEnd)==ok);
sl@0
   106
		otherGeneratedUnicode->SetLength(targetStart-otherGeneratedUnicode->Ptr());}
sl@0
   107
		test(*generatedUnicode==*originalUnicode);
sl@0
   108
		test(*generatedUnicode==*otherGeneratedUnicode);
sl@0
   109
		}
sl@0
   110
	//
sl@0
   111
	delete originalUnicode;
sl@0
   112
	delete generatedUtf7;
sl@0
   113
	delete otherGeneratedUtf7;
sl@0
   114
	delete generatedUnicode;
sl@0
   115
	delete otherGeneratedUnicode;
sl@0
   116
sl@0
   117
	}
sl@0
   118
sl@0
   119
CT_COMP7::CT_COMP7()
sl@0
   120
    {
sl@0
   121
    SetTestStepName(KTestStep_T_COMP7);
sl@0
   122
    }
sl@0
   123
sl@0
   124
TVerdict CT_COMP7::doTestStepL()
sl@0
   125
    {
sl@0
   126
    SetTestStepResult(EFail);
sl@0
   127
sl@0
   128
    __UHEAP_MARK;
sl@0
   129
sl@0
   130
    TRAPD(error1, TestCOMP7());
sl@0
   131
sl@0
   132
    __UHEAP_MARKEND;
sl@0
   133
sl@0
   134
    if(error1 == KErrNone )
sl@0
   135
        {
sl@0
   136
        SetTestStepResult(EPass);
sl@0
   137
        }
sl@0
   138
sl@0
   139
    return TestStepResult();
sl@0
   140
    }