sl@0: /* sl@0: * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: sl@0: * sl@0: */ sl@0: sl@0: sl@0: #include "../sfields/FLDNUMS.H" sl@0: #include "T_ROMAN.h" sl@0: sl@0: #define test(cond) \ sl@0: { \ sl@0: TBool __bb = (cond); \ sl@0: TEST(__bb); \ sl@0: if (!__bb) \ sl@0: { \ sl@0: ERR_PRINTF1(_L("ERROR: Test Failed")); \ sl@0: User::Leave(1); \ sl@0: } \ sl@0: } sl@0: sl@0: #define UNUSED_VAR(a) a = a sl@0: sl@0: const TInt KTestCleanupStack=0x40; sl@0: sl@0: LOCAL_D CTrapCleanup* TheTrapCleanup; sl@0: sl@0: // sl@0: sl@0: void CT_ROMAN::GetValue(HBufC* aBuf,TInt aDenery,TDeneryToCharBase& aNumeral) sl@0: { sl@0: TPtr ptr=aBuf->Des(); sl@0: TInt size=aNumeral.DeneryToChar(ptr,aDenery); sl@0: if (size>0) sl@0: { sl@0: aBuf->ReAlloc(size); sl@0: ptr=aBuf->Des(); sl@0: size = aNumeral.DeneryToChar(ptr,aDenery); sl@0: test(size==KErrNone); sl@0: } sl@0: } sl@0: sl@0: sl@0: void CT_ROMAN::DisplayValue(HBufC* aBuf,TInt aDenery,TDeneryToCharBase& aNumeral) sl@0: { sl@0: GetValue(aBuf,aDenery,aNumeral); sl@0: INFO_PRINTF2(_L("%D: "),aDenery); sl@0: INFO_PRINTF1(*aBuf); sl@0: INFO_PRINTF1(_L("\n")); sl@0: } sl@0: sl@0: sl@0: void CT_ROMAN::test1() sl@0: { sl@0: INFO_PRINTF1(_L("Testing with buffer of adequate size")); sl@0: INFO_PRINTF1(_L(" @SYMTestCaseID:SYSLIB-ETEXT-LEGACY-T_ROMAN-0001 ")); sl@0: HBufC* hbuf = HBufC::NewL(10); sl@0: CleanupStack::PushL(hbuf); sl@0: TRomanNumeral roman; sl@0: GetValue(hbuf,4,roman); sl@0: TPtr buf = hbuf->Des(); sl@0: test(buf==_L("IV")); sl@0: CleanupStack::PopAndDestroy(); sl@0: // sl@0: INFO_PRINTF1(_L("Testing with inadequate buffer")); sl@0: HBufC* minibuf = HBufC::NewL(1); sl@0: CleanupStack::PushL(minibuf); sl@0: GetValue(minibuf,4,roman); sl@0: TPtr buf2 = minibuf->Des(); sl@0: test(buf2==_L("IV")); sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: sl@0: void CT_ROMAN::test2() sl@0: { sl@0: INFO_PRINTF1(_L("Testing Roman numerals for a range of denery values")); sl@0: HBufC* hbuf = HBufC::NewL(10); sl@0: CleanupStack::PushL(hbuf); sl@0: TRomanNumeral roman; sl@0: sl@0: DisplayValue(hbuf,1,roman); sl@0: test(0 == hbuf->CompareC(_L("i"), 1, 0)); sl@0: DisplayValue(hbuf,4,roman); sl@0: test(0 == hbuf->CompareC(_L("iv"), 1, 0)); sl@0: DisplayValue(hbuf,9,roman); sl@0: test(0 == hbuf->CompareC(_L("ix"), 1, 0)); sl@0: DisplayValue(hbuf,17,roman); sl@0: test(0 == hbuf->CompareC(_L("xvii"), 1, 0)); sl@0: DisplayValue(hbuf,34,roman); sl@0: test(0 == hbuf->CompareC(_L("xxxiv"), 1, 0)); sl@0: DisplayValue(hbuf,99,roman); sl@0: test(0 == hbuf->CompareC(_L("xcix"), 1, 0)); sl@0: DisplayValue(hbuf,143,roman); sl@0: test(0 == hbuf->CompareC(_L("cxliii"), 1, 0)); sl@0: DisplayValue(hbuf,1982,roman); sl@0: test(0 == hbuf->CompareC(_L("mcmlxxxii"), 1, 0)); sl@0: sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: sl@0: void CT_ROMAN::test3() sl@0: { sl@0: INFO_PRINTF1(_L("Testing alphabetic numerals for a range of denery values")); sl@0: HBufC* hbuf = HBufC::NewL(10); sl@0: CleanupStack::PushL(hbuf); sl@0: TAlphabeticNumeral alpha; sl@0: sl@0: DisplayValue(hbuf,1,alpha); sl@0: test(0 == hbuf->CompareC(_L("a"), 1, 0)); sl@0: DisplayValue(hbuf,4,alpha); sl@0: test(0 == hbuf->CompareC(_L("d"), 1, 0)); sl@0: DisplayValue(hbuf,9,alpha); sl@0: test(0 == hbuf->CompareC(_L("i"), 1, 0)); sl@0: DisplayValue(hbuf,17,alpha); sl@0: test(0 == hbuf->CompareC(_L("q"), 1, 0)); sl@0: DisplayValue(hbuf,34,alpha); sl@0: test(0 == hbuf->CompareC(_L("ah"), 1, 0)); sl@0: DisplayValue(hbuf,99,alpha); sl@0: test(0 == hbuf->CompareC(_L("cu"), 1, 0)); sl@0: DisplayValue(hbuf,143,alpha); sl@0: test(0 == hbuf->CompareC(_L("em"), 1, 0)); sl@0: DisplayValue(hbuf,1982,alpha); sl@0: test(0 == hbuf->CompareC(_L("bxf"), 1, 0)); sl@0: sl@0: CleanupStack::PopAndDestroy(); sl@0: } sl@0: sl@0: sl@0: void CT_ROMAN::runTests() sl@0: // Test the fields dll. sl@0: // sl@0: { sl@0: // test with HBufs both large enough and too small sl@0: test1(); sl@0: sl@0: // test for a range of denery values sl@0: test2(); sl@0: sl@0: // Test alphabetics sl@0: test3(); sl@0: } sl@0: sl@0: sl@0: void CT_ROMAN::setupCleanup() sl@0: // sl@0: // Initialise the cleanup stack. sl@0: // sl@0: { sl@0: sl@0: TheTrapCleanup=CTrapCleanup::New(); sl@0: TRAPD(r,\ sl@0: {\ sl@0: for (TInt i=KTestCleanupStack;i>0;i--)\ sl@0: CleanupStack::PushL((TAny*)1);\ sl@0: test(r==KErrNone);\ sl@0: CleanupStack::Pop(KTestCleanupStack);\ sl@0: }); sl@0: } sl@0: sl@0: CT_ROMAN::CT_ROMAN() sl@0: { sl@0: SetTestStepName(KTestStep_T_ROMAN); sl@0: } sl@0: sl@0: TVerdict CT_ROMAN::doTestStepL() sl@0: { sl@0: INFO_PRINTF1(_L("Testing denery to Roman numeral converter")); sl@0: SetTestStepResult(EFail); sl@0: sl@0: __UHEAP_MARK; sl@0: sl@0: setupCleanup(); sl@0: sl@0: TRAPD(error1, runTests()); sl@0: sl@0: delete TheTrapCleanup; sl@0: sl@0: __UHEAP_MARKEND; sl@0: sl@0: if(error1 == KErrNone) sl@0: { sl@0: SetTestStepResult(EPass); sl@0: } sl@0: sl@0: return TestStepResult(); sl@0: }