1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/textandloc/textrendering/texthandling/tfields/T_ROMAN.CPP Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,199 @@
1.4 +/*
1.5 +* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
1.6 +* All rights reserved.
1.7 +* This component and the accompanying materials are made available
1.8 +* under the terms of "Eclipse Public License v1.0"
1.9 +* which accompanies this distribution, and is available
1.10 +* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.11 +*
1.12 +* Initial Contributors:
1.13 +* Nokia Corporation - initial contribution.
1.14 +*
1.15 +* Contributors:
1.16 +*
1.17 +* Description:
1.18 +*
1.19 +*/
1.20 +
1.21 +
1.22 +#include "../sfields/FLDNUMS.H"
1.23 +#include "T_ROMAN.h"
1.24 +
1.25 +#define test(cond) \
1.26 + { \
1.27 + TBool __bb = (cond); \
1.28 + TEST(__bb); \
1.29 + if (!__bb) \
1.30 + { \
1.31 + ERR_PRINTF1(_L("ERROR: Test Failed")); \
1.32 + User::Leave(1); \
1.33 + } \
1.34 + }
1.35 +
1.36 +#define UNUSED_VAR(a) a = a
1.37 +
1.38 +const TInt KTestCleanupStack=0x40;
1.39 +
1.40 +LOCAL_D CTrapCleanup* TheTrapCleanup;
1.41 +
1.42 +//
1.43 +
1.44 +void CT_ROMAN::GetValue(HBufC* aBuf,TInt aDenery,TDeneryToCharBase& aNumeral)
1.45 + {
1.46 + TPtr ptr=aBuf->Des();
1.47 + TInt size=aNumeral.DeneryToChar(ptr,aDenery);
1.48 + if (size>0)
1.49 + {
1.50 + aBuf->ReAlloc(size);
1.51 + ptr=aBuf->Des();
1.52 + size = aNumeral.DeneryToChar(ptr,aDenery);
1.53 + test(size==KErrNone);
1.54 + }
1.55 + }
1.56 +
1.57 +
1.58 +void CT_ROMAN::DisplayValue(HBufC* aBuf,TInt aDenery,TDeneryToCharBase& aNumeral)
1.59 + {
1.60 + GetValue(aBuf,aDenery,aNumeral);
1.61 + INFO_PRINTF2(_L("%D: "),aDenery);
1.62 + INFO_PRINTF1(*aBuf);
1.63 + INFO_PRINTF1(_L("\n"));
1.64 + }
1.65 +
1.66 +
1.67 +void CT_ROMAN::test1()
1.68 + {
1.69 + INFO_PRINTF1(_L("Testing with buffer of adequate size"));
1.70 + INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-ETEXT-LEGACY-T_ROMAN-0001 "));
1.71 + HBufC* hbuf = HBufC::NewL(10);
1.72 + CleanupStack::PushL(hbuf);
1.73 + TRomanNumeral roman;
1.74 + GetValue(hbuf,4,roman);
1.75 + TPtr buf = hbuf->Des();
1.76 + test(buf==_L("IV"));
1.77 + CleanupStack::PopAndDestroy();
1.78 + //
1.79 + INFO_PRINTF1(_L("Testing with inadequate buffer"));
1.80 + HBufC* minibuf = HBufC::NewL(1);
1.81 + CleanupStack::PushL(minibuf);
1.82 + GetValue(minibuf,4,roman);
1.83 + TPtr buf2 = minibuf->Des();
1.84 + test(buf2==_L("IV"));
1.85 + CleanupStack::PopAndDestroy();
1.86 + }
1.87 +
1.88 +
1.89 +void CT_ROMAN::test2()
1.90 + {
1.91 + INFO_PRINTF1(_L("Testing Roman numerals for a range of denery values"));
1.92 + HBufC* hbuf = HBufC::NewL(10);
1.93 + CleanupStack::PushL(hbuf);
1.94 + TRomanNumeral roman;
1.95 +
1.96 + DisplayValue(hbuf,1,roman);
1.97 + test(0 == hbuf->CompareC(_L("i"), 1, 0));
1.98 + DisplayValue(hbuf,4,roman);
1.99 + test(0 == hbuf->CompareC(_L("iv"), 1, 0));
1.100 + DisplayValue(hbuf,9,roman);
1.101 + test(0 == hbuf->CompareC(_L("ix"), 1, 0));
1.102 + DisplayValue(hbuf,17,roman);
1.103 + test(0 == hbuf->CompareC(_L("xvii"), 1, 0));
1.104 + DisplayValue(hbuf,34,roman);
1.105 + test(0 == hbuf->CompareC(_L("xxxiv"), 1, 0));
1.106 + DisplayValue(hbuf,99,roman);
1.107 + test(0 == hbuf->CompareC(_L("xcix"), 1, 0));
1.108 + DisplayValue(hbuf,143,roman);
1.109 + test(0 == hbuf->CompareC(_L("cxliii"), 1, 0));
1.110 + DisplayValue(hbuf,1982,roman);
1.111 + test(0 == hbuf->CompareC(_L("mcmlxxxii"), 1, 0));
1.112 +
1.113 + CleanupStack::PopAndDestroy();
1.114 + }
1.115 +
1.116 +
1.117 +void CT_ROMAN::test3()
1.118 + {
1.119 + INFO_PRINTF1(_L("Testing alphabetic numerals for a range of denery values"));
1.120 + HBufC* hbuf = HBufC::NewL(10);
1.121 + CleanupStack::PushL(hbuf);
1.122 + TAlphabeticNumeral alpha;
1.123 +
1.124 + DisplayValue(hbuf,1,alpha);
1.125 + test(0 == hbuf->CompareC(_L("a"), 1, 0));
1.126 + DisplayValue(hbuf,4,alpha);
1.127 + test(0 == hbuf->CompareC(_L("d"), 1, 0));
1.128 + DisplayValue(hbuf,9,alpha);
1.129 + test(0 == hbuf->CompareC(_L("i"), 1, 0));
1.130 + DisplayValue(hbuf,17,alpha);
1.131 + test(0 == hbuf->CompareC(_L("q"), 1, 0));
1.132 + DisplayValue(hbuf,34,alpha);
1.133 + test(0 == hbuf->CompareC(_L("ah"), 1, 0));
1.134 + DisplayValue(hbuf,99,alpha);
1.135 + test(0 == hbuf->CompareC(_L("cu"), 1, 0));
1.136 + DisplayValue(hbuf,143,alpha);
1.137 + test(0 == hbuf->CompareC(_L("em"), 1, 0));
1.138 + DisplayValue(hbuf,1982,alpha);
1.139 + test(0 == hbuf->CompareC(_L("bxf"), 1, 0));
1.140 +
1.141 + CleanupStack::PopAndDestroy();
1.142 + }
1.143 +
1.144 +
1.145 +void CT_ROMAN::runTests()
1.146 +// Test the fields dll.
1.147 +//
1.148 + {
1.149 + // test with HBufs both large enough and too small
1.150 + test1();
1.151 +
1.152 + // test for a range of denery values
1.153 + test2();
1.154 +
1.155 + // Test alphabetics
1.156 + test3();
1.157 + }
1.158 +
1.159 +
1.160 +void CT_ROMAN::setupCleanup()
1.161 +//
1.162 +// Initialise the cleanup stack.
1.163 +//
1.164 + {
1.165 +
1.166 + TheTrapCleanup=CTrapCleanup::New();
1.167 + TRAPD(r,\
1.168 + {\
1.169 + for (TInt i=KTestCleanupStack;i>0;i--)\
1.170 + CleanupStack::PushL((TAny*)1);\
1.171 + test(r==KErrNone);\
1.172 + CleanupStack::Pop(KTestCleanupStack);\
1.173 + });
1.174 + }
1.175 +
1.176 +CT_ROMAN::CT_ROMAN()
1.177 + {
1.178 + SetTestStepName(KTestStep_T_ROMAN);
1.179 + }
1.180 +
1.181 +TVerdict CT_ROMAN::doTestStepL()
1.182 + {
1.183 + INFO_PRINTF1(_L("Testing denery to Roman numeral converter"));
1.184 + SetTestStepResult(EFail);
1.185 +
1.186 + __UHEAP_MARK;
1.187 +
1.188 + setupCleanup();
1.189 +
1.190 + TRAPD(error1, runTests());
1.191 +
1.192 + delete TheTrapCleanup;
1.193 +
1.194 + __UHEAP_MARKEND;
1.195 +
1.196 + if(error1 == KErrNone)
1.197 + {
1.198 + SetTestStepResult(EPass);
1.199 + }
1.200 +
1.201 + return TestStepResult();
1.202 + }