diff -r f902e87c146f -r 748ec5531811 textrendering/textformatting/test/src/TGraphemeIterator.cpp --- a/textrendering/textformatting/test/src/TGraphemeIterator.cpp Wed Jun 09 11:40:52 2010 +0300 +++ b/textrendering/textformatting/test/src/TGraphemeIterator.cpp Tue Aug 31 17:01:26 2010 +0300 @@ -1,5 +1,5 @@ /* -* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies). +* Copyright (c) 2003-2010 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" @@ -21,69 +21,77 @@ #include "TGraphicsContext.h" #include "TMINTERP.H" -#include +#include "tgraphemeiterator.h" + +namespace LocalToTGraphemeIterator +{ +CTGraphemeIteratorStep* TestStep; +#define TESTPOINT(p) TestStep->testpoint(p,(TText8*)__FILE__,__LINE__) +#define TESTPRINT(p) TestStep->print(p,(TText8*)__FILE__,__LINE__) struct TTransliteration - { - const TText* iString; - TInt iChar; - }; + { + const TText* iString; + TInt iChar; + }; static const TTransliteration KArabicTransliteration[] = - { - { reinterpret_cast(L"?"), 0x61F }, - { reinterpret_cast(L"`"), 0x621 }, // in-line hamza - { reinterpret_cast(L"a"), 0x627 }, // alif - { reinterpret_cast(L"b"), 0x628 }, - { reinterpret_cast(L"A"), 0x629 }, // teh marbuta - { reinterpret_cast(L"t"), 0x62A }, - { reinterpret_cast(L"th"), 0x62B }, - { reinterpret_cast(L"j"), 0x62C }, - { reinterpret_cast(L"H"), 0x62D }, // hah - { reinterpret_cast(L"kh"), 0x62E }, - { reinterpret_cast(L"d"), 0x62F }, - { reinterpret_cast(L"dh"), 0x630 }, - { reinterpret_cast(L"r"), 0x631 }, - { reinterpret_cast(L"z"), 0x632 }, - { reinterpret_cast(L"s"), 0x633 }, - { reinterpret_cast(L"sh"), 0x634 }, - { reinterpret_cast(L"S"), 0x635 }, - { reinterpret_cast(L"D"), 0x636 }, - { reinterpret_cast(L"T"), 0x637 }, - { reinterpret_cast(L"Z"), 0x638 }, // zah - { reinterpret_cast(L"'"), 0x639 }, // ain - { reinterpret_cast(L"g"), 0x63A }, - { reinterpret_cast(L"_"), 0x640 }, // kashida - { reinterpret_cast(L"f"), 0x641 }, - { reinterpret_cast(L"q"), 0x642 }, - { reinterpret_cast(L"k"), 0x643 }, - { reinterpret_cast(L"l"), 0x644 }, // lam - { reinterpret_cast(L"m"), 0x645 }, - { reinterpret_cast(L"n"), 0x646 }, - { reinterpret_cast(L"h"), 0x647 }, // heh - { reinterpret_cast(L"w"), 0x648 }, - { reinterpret_cast(L"y"), 0x64A }, - { reinterpret_cast(L"^F"), 0x64B }, // fathatan - { reinterpret_cast(L"^D"), 0x64C }, // dammatan - { reinterpret_cast(L"^K"), 0x64D }, // kasratan - { reinterpret_cast(L"^f"), 0x64E }, // fatha - { reinterpret_cast(L"^d"), 0x64F }, // damma - { reinterpret_cast(L"^k"), 0x650 }, // kasra - { reinterpret_cast(L"^s"), 0x651 }, // shadda - { reinterpret_cast(L"^h"), 0x652 }, // sukun - { reinterpret_cast(L"^~"), 0x653 }, // maddah - { reinterpret_cast(L"^`"), 0x654 }, // hamza above - { reinterpret_cast(L"_`"), 0x653 }, // hamza below - { reinterpret_cast(L"0"), 0x660 }, - { reinterpret_cast(L"1"), 0x661 }, - { reinterpret_cast(L"2"), 0x662 }, - { reinterpret_cast(L"3"), 0x663 }, - { reinterpret_cast(L"4"), 0x664 }, - { reinterpret_cast(L"5"), 0x665 }, - { reinterpret_cast(L"6"), 0x666 }, - { reinterpret_cast(L"7"), 0x667 }, - { reinterpret_cast(L"8"), 0x668 }, - { reinterpret_cast(L"9"), 0x669 } - }; + { + { reinterpret_cast(L"?"), 0x61F }, + { reinterpret_cast(L"`"), 0x621 }, // in-line hamza + { reinterpret_cast(L"a"), 0x627 }, // alif + { reinterpret_cast(L"b"), 0x628 }, + { reinterpret_cast(L"A"), 0x629 }, // teh marbuta + { reinterpret_cast(L"t"), 0x62A }, + { reinterpret_cast(L"th"), 0x62B }, + { reinterpret_cast(L"j"), 0x62C }, + { reinterpret_cast(L"H"), 0x62D }, // hah + { reinterpret_cast(L"kh"), 0x62E }, + { reinterpret_cast(L"d"), 0x62F }, + { reinterpret_cast(L"dh"), 0x630 }, + { reinterpret_cast(L"r"), 0x631 }, + { reinterpret_cast(L"z"), 0x632 }, + { reinterpret_cast(L"s"), 0x633 }, + { reinterpret_cast(L"sh"), 0x634 }, + { reinterpret_cast(L"S"), 0x635 }, + { reinterpret_cast(L"D"), 0x636 }, + { reinterpret_cast(L"T"), 0x637 }, + { reinterpret_cast(L"Z"), 0x638 }, // zah + { reinterpret_cast(L"'"), 0x639 }, // ain + { reinterpret_cast(L"g"), 0x63A }, + { reinterpret_cast(L"_"), 0x640 }, // kashida + { reinterpret_cast(L"f"), 0x641 }, + { reinterpret_cast(L"q"), 0x642 }, + { reinterpret_cast(L"k"), 0x643 }, + { reinterpret_cast(L"l"), 0x644 }, // lam + { reinterpret_cast(L"m"), 0x645 }, + { reinterpret_cast(L"n"), 0x646 }, + { reinterpret_cast(L"h"), 0x647 }, // heh + { reinterpret_cast(L"w"), 0x648 }, + { reinterpret_cast(L"y"), 0x64A }, + { reinterpret_cast(L"^F"), 0x64B }, // fathatan + { reinterpret_cast(L"^D"), 0x64C }, // dammatan + { reinterpret_cast(L"^K"), 0x64D }, // kasratan + { reinterpret_cast(L"^f"), 0x64E }, // fatha + { reinterpret_cast(L"^d"), 0x64F }, // damma + { reinterpret_cast(L"^k"), 0x650 }, // kasra + { reinterpret_cast(L"^s"), 0x651 }, // shadda + { reinterpret_cast(L"^h"), 0x652 }, // sukun + { reinterpret_cast(L"^~"), 0x653 }, // maddah + { reinterpret_cast(L"^`"), 0x654 }, // hamza above + { reinterpret_cast(L"_`"), 0x653 }, // hamza below + { reinterpret_cast(L"0"), 0x660 }, + { reinterpret_cast(L"1"), 0x661 }, + { reinterpret_cast(L"2"), 0x662 }, + { reinterpret_cast(L"3"), 0x663 }, + { reinterpret_cast(L"4"), 0x664 }, + { reinterpret_cast(L"5"), 0x665 }, + { reinterpret_cast(L"6"), 0x666 }, + { reinterpret_cast(L"7"), 0x667 }, + { reinterpret_cast(L"8"), 0x668 }, + { reinterpret_cast(L"9"), 0x669 } + }; +} +using namespace LocalToTGraphemeIterator; TText TransliterateSingle(const TText*& aInput, const TText* aEnd) { @@ -147,8 +155,7 @@ Tests RTmGraphemeEdgeIterator::DocPosMatches for this document position and edge. */ -void TestDocPosMatchesCase(RTest& aTest, - const TTmGraphemeEdgeInfo& aEdgeInfo, +void TestDocPosMatchesCase(const TTmGraphemeEdgeInfo& aEdgeInfo, TTmDocPosSpec& aPosSpec, RTmGraphemeEdgeIterator::TGraphemeMatch aExpectedMatchType) { @@ -162,16 +169,16 @@ ++end; } aPosSpec.iPos = start - 1; - aTest(RTmGraphemeEdgeIterator::DocPosMatches(aPosSpec, aEdgeInfo) + TESTPOINT(RTmGraphemeEdgeIterator::DocPosMatches(aPosSpec, aEdgeInfo) == RTmGraphemeEdgeIterator::ENoMatch); for (TInt i = start; i != end; ++i) { aPosSpec.iPos = i; - aTest(RTmGraphemeEdgeIterator::DocPosMatches(aPosSpec, aEdgeInfo) + TESTPOINT(RTmGraphemeEdgeIterator::DocPosMatches(aPosSpec, aEdgeInfo) == aExpectedMatchType); } aPosSpec.iPos = end; - aTest(RTmGraphemeEdgeIterator::DocPosMatches(aPosSpec, aEdgeInfo) + TESTPOINT(RTmGraphemeEdgeIterator::DocPosMatches(aPosSpec, aEdgeInfo) == RTmGraphemeEdgeIterator::ENoMatch); } @@ -179,8 +186,7 @@ Tests RTmGraphemeEdgeIterator::DocPosMatches for this edge and all relevant document position specifications. */ -void TestDocPosMatchesAllSpecs(RTest& aTest, - const TTmGraphemeEdgeInfo& aEdgeInfo) +void TestDocPosMatchesAllSpecs(const TTmGraphemeEdgeInfo& aEdgeInfo) { TTmDocPosSpec posSpec; RTmGraphemeEdgeIterator::TGraphemeMatch expected; @@ -188,29 +194,29 @@ expected = aEdgeInfo.iPos.iRightToLeft? RTmGraphemeEdgeIterator::EPositionOnly : RTmGraphemeEdgeIterator::ETotalMatch; - TestDocPosMatchesCase(aTest, aEdgeInfo, posSpec, expected); + TestDocPosMatchesCase(aEdgeInfo, posSpec, expected); posSpec.iType = TTmDocPosSpec::ERightToLeft; expected = aEdgeInfo.iPos.iRightToLeft? RTmGraphemeEdgeIterator::ETotalMatch : RTmGraphemeEdgeIterator::EPositionOnly; - TestDocPosMatchesCase(aTest, aEdgeInfo, posSpec, expected); + TestDocPosMatchesCase(aEdgeInfo, posSpec, expected); posSpec.iType = TTmDocPosSpec::ETrailing; expected = aEdgeInfo.iPos.iDocPos.iLeadingEdge? RTmGraphemeEdgeIterator::ENoMatch : RTmGraphemeEdgeIterator::ETotalMatch; - TestDocPosMatchesCase(aTest, aEdgeInfo, posSpec, expected); + TestDocPosMatchesCase(aEdgeInfo, posSpec, expected); posSpec.iType = TTmDocPosSpec::ELeading; expected = aEdgeInfo.iPos.iDocPos.iLeadingEdge? RTmGraphemeEdgeIterator::ETotalMatch : RTmGraphemeEdgeIterator::ENoMatch; - TestDocPosMatchesCase(aTest, aEdgeInfo, posSpec, expected); + TestDocPosMatchesCase(aEdgeInfo, posSpec, expected); } /** Tests RTmGraphemeEdgeIterator::DocPosMatches for a variety of edges and positions. */ -void TestDocPosMatches(RTest& aTest) +void TestDocPosMatches() { TTmGraphemeEdgeInfo edgeInfo; edgeInfo.iPos.iDocPos.iPos = 5; @@ -219,13 +225,13 @@ { edgeInfo.iPos.iDocPos.iLeadingEdge = ETrue; edgeInfo.iPos.iRightToLeft = EFalse; - TestDocPosMatchesAllSpecs(aTest, edgeInfo); + TestDocPosMatchesAllSpecs(edgeInfo); edgeInfo.iPos.iDocPos.iLeadingEdge = EFalse; - TestDocPosMatchesAllSpecs(aTest, edgeInfo); + TestDocPosMatchesAllSpecs(edgeInfo); edgeInfo.iPos.iRightToLeft = ETrue; - TestDocPosMatchesAllSpecs(aTest, edgeInfo); + TestDocPosMatchesAllSpecs(edgeInfo); edgeInfo.iPos.iDocPos.iLeadingEdge = ETrue; - TestDocPosMatchesAllSpecs(aTest, edgeInfo); + TestDocPosMatchesAllSpecs(edgeInfo); } } @@ -551,53 +557,53 @@ /** Tests that the edge information matches the expected edge. */ -void TestExpectedEdge(RTest& aTest, const TTmPosInfo2& aEdgeInfo, +void TestExpectedEdge(const TTmPosInfo2& aEdgeInfo, const TEdge* aExpected) { - aTest(aEdgeInfo.iRightToLeft? + TESTPOINT(aEdgeInfo.iRightToLeft? aExpected->iRightToLeft : !aExpected->iRightToLeft); - aTest(aEdgeInfo.iDocPos.iPos == aExpected->iPos); - aTest(aEdgeInfo.iDocPos.iLeadingEdge? + TESTPOINT(aEdgeInfo.iDocPos.iPos == aExpected->iPos); + TESTPOINT(aEdgeInfo.iDocPos.iLeadingEdge? aExpected->iLeading : !aExpected->iLeading); } /** Tests that the edge information matches one of the expected edges. */ -void TestEdgeExists(RTest& aTest, const TTmPosInfo2& aEdgeInfo, +void TestEdgeExists(const TTmPosInfo2& aEdgeInfo, const TEdge* aExpected, TInt aNumExpected) { TTmDocPos pos(aEdgeInfo.iDocPos); const TEdge* edge = FindExpectedEdge(pos, aExpected, aNumExpected); - aTest(edge != 0); - TestExpectedEdge(aTest, aEdgeInfo, edge); + TESTPOINT(edge != 0); + TestExpectedEdge(aEdgeInfo, edge); } /** Tests that the visual position matches one of the expected edges. */ -void TestVisualPositionExists(RTest& aTest, const TTmVisualDocPos& aPos, +void TestVisualPositionExists(const TTmVisualDocPos& aPos, const TEdge* aExpected, TInt aNumExpected) { - aTest(aPos.Ambiguity() != TTmVisualDocPos::ENotFound); + TESTPOINT(aPos.Ambiguity() != TTmVisualDocPos::ENotFound); TTmDocPos posLeft(aPos.LeftEdge().iDocPos); const TEdge* left = FindExpectedEdge(posLeft, aExpected, aNumExpected); - TestExpectedEdge(aTest, aPos.LeftEdge(), left); + TestExpectedEdge(aPos.LeftEdge(), left); TTmDocPos posRight(aPos.RightEdge().iDocPos); const TEdge* right = FindExpectedEdge(posRight, aExpected, aNumExpected); - TestExpectedEdge(aTest, aPos.RightEdge(), right); - aTest( (aPos.Ambiguity() == TTmVisualDocPos::EAmbiguous + TestExpectedEdge(aPos.RightEdge(), right); + TESTPOINT( (aPos.Ambiguity() == TTmVisualDocPos::EAmbiguous && left->iAmbiguity && right->iAmbiguity) || (aPos.Ambiguity() != TTmVisualDocPos::EAmbiguous && !left->iAmbiguity && !right->iAmbiguity) ); - aTest(ExpectedEdgesCoincide(left, right)); + TESTPOINT(ExpectedEdgesCoincide(left, right)); } /** Tests that a RTmGraphemeEdgeIterator iterates through all the positions in a line from left to right. */ -void TestLayoutSimplePass(RTest& aTest, CTestTmTextLayout& aLayout, +void TestLayoutSimplePass(CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { CTmTextLayout& layout = aLayout.Layout(); @@ -610,12 +616,12 @@ for (TInt i = 0; i != aNumExpected; ++i) { const TEdge& expected = aExpected[i]; - aTest(expected.iPos == last.iDocPos.iPos); - aTest(expected.iLeading == last.iDocPos.iLeadingEdge); + TESTPOINT(expected.iPos == last.iDocPos.iPos); + TESTPOINT(expected.iLeading == last.iDocPos.iLeadingEdge); it.Next(); if (it.AtEnd()) { - aTest(expected.iNext == EEdgeNewline); + TESTPOINT(expected.iNext == EEdgeNewline); while (interp.Op() != TTmInterpreter::EOpLine && interp.Next()) {} if (i + 1 != aNumExpected) @@ -627,12 +633,12 @@ else { TTmPosInfo2 thisOne = it.GetInfo(); - TestEdgeExists(aTest, thisOne, aExpected, aNumExpected); - aTest(expected.iNext != EEdgeNewline); + TestEdgeExists(thisOne, aExpected, aNumExpected); + TESTPOINT(expected.iNext != EEdgeNewline); if (expected.iNext == EEdgeSame) - aTest(last.iEdge.iX == thisOne.iEdge.iX); + TESTPOINT(last.iEdge.iX == thisOne.iEdge.iX); else if (expected.iNext == EEdgeDifferent) - aTest(last.iEdge.iX != thisOne.iEdge.iX); + TESTPOINT(last.iEdge.iX != thisOne.iEdge.iX); last = thisOne; } } @@ -644,7 +650,7 @@ Tests that FindXPos returns the edge 'closest' to the input co-ordinate where there is no ambiguity. */ -void TestLayoutFindXPosEdges(RTest& aTest, TInt aLine, +void TestLayoutFindXPosEdges(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { @@ -672,10 +678,10 @@ RTmGraphemeEdgeIterator it; it.Begin(interp); it.FindXPos(posInfo.iEdge.iX, visPos); - aTest(visPos.Ambiguity() != TTmVisualDocPos::EAmbiguous); - aTest(visPos.Ambiguity() != TTmVisualDocPos::ENotFound); - aTest(visPos.LeftEdge().iDocPos.iPos == expectedL.iPos); - aTest(visPos.LeftEdge().iDocPos.iLeadingEdge? + TESTPOINT(visPos.Ambiguity() != TTmVisualDocPos::EAmbiguous); + TESTPOINT(visPos.Ambiguity() != TTmVisualDocPos::ENotFound); + TESTPOINT(visPos.LeftEdge().iDocPos.iPos == expectedL.iPos); + TESTPOINT(visPos.LeftEdge().iDocPos.iLeadingEdge? expectedL.iLeading : !expectedL.iLeading); it.Close(); interp.Close(); @@ -691,10 +697,10 @@ RTmGraphemeEdgeIterator it; it.Begin(interp); it.FindXPos(posInfo.iEdge.iX - 1, visPos); - aTest(visPos.Ambiguity() != TTmVisualDocPos::EAmbiguous); - aTest(visPos.Ambiguity() != TTmVisualDocPos::ENotFound); - aTest(visPos.LeftEdge().iDocPos.iPos == expectedR.iPos); - aTest(visPos.LeftEdge().iDocPos.iLeadingEdge? + TESTPOINT(visPos.Ambiguity() != TTmVisualDocPos::EAmbiguous); + TESTPOINT(visPos.Ambiguity() != TTmVisualDocPos::ENotFound); + TESTPOINT(visPos.LeftEdge().iDocPos.iPos == expectedR.iPos); + TESTPOINT(visPos.LeftEdge().iDocPos.iLeadingEdge? expectedR.iLeading : !expectedR.iLeading); it.Close(); interp.Close(); @@ -707,7 +713,7 @@ Tests that RTmGraphemeEdgeIterator::FindXPos finds document positions that match the positions they are supposed to be in. */ -void TestLayoutFindXPos(RTest& aTest, TInt aLine, +void TestLayoutFindXPos(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { @@ -724,31 +730,31 @@ RTmGraphemeEdgeIterator it; it.Begin(interp); it.FindXPos(x, visPos); - TestVisualPositionExists(aTest, visPos, aExpected, aNumExpected); - aTest(visPos.Ambiguity() != TTmVisualDocPos::ENotFound); - aTest(visPos.LeftEdge().iEdge.iX <= visPos.RightEdge().iEdge.iX); - aTest(visPos.Ambiguity() == TTmVisualDocPos::EAmbiguous + TestVisualPositionExists(visPos, aExpected, aNumExpected); + TESTPOINT(visPos.Ambiguity() != TTmVisualDocPos::ENotFound); + TESTPOINT(visPos.LeftEdge().iEdge.iX <= visPos.RightEdge().iEdge.iX); + TESTPOINT(visPos.Ambiguity() == TTmVisualDocPos::EAmbiguous || visPos.LeftEdge().iEdge.iX == visPos.RightEdge().iEdge.iX); - aTest(lastLeftX <= visPos.LeftEdge().iEdge.iX); + TESTPOINT(lastLeftX <= visPos.LeftEdge().iEdge.iX); if (lastLeftX == visPos.LeftEdge().iEdge.iX) { - aTest(lastRightX == visPos.RightEdge().iEdge.iX); + TESTPOINT(lastRightX == visPos.RightEdge().iEdge.iX); while (aExpected->iPos != visPos.LeftEdge().iDocPos.iPos || aExpected->iLeading != visPos.LeftEdge().iDocPos.iLeadingEdge) { - aTest(aExpected->iNext == EEdgeSame); - aTest(0 < aNumExpected); + TESTPOINT(aExpected->iNext == EEdgeSame); + TESTPOINT(0 < aNumExpected); ++aExpected; --aNumExpected; } } else { - aTest(lastRightX <= visPos.LeftEdge().iEdge.iX); + TESTPOINT(lastRightX <= visPos.LeftEdge().iEdge.iX); while (aExpected->iPos != visPos.LeftEdge().iDocPos.iPos || aExpected->iLeading != visPos.LeftEdge().iDocPos.iLeadingEdge) { - aTest(0 < aNumExpected); + TESTPOINT(0 < aNumExpected); ++aExpected; --aNumExpected; } @@ -760,8 +766,8 @@ } while (aExpected->iNext != EEdgeNewline) { - aTest(aExpected->iNext == EEdgeSame); - aTest(0 < aNumExpected); + TESTPOINT(aExpected->iNext == EEdgeSame); + TESTPOINT(0 < aNumExpected); ++aExpected; --aNumExpected; } @@ -790,7 +796,7 @@ Tests that RTmGraphemeEdgeIterator::FindEdge finds the edges in the layout with specifications of leading or trailing edges. */ -void TestLayoutFindEdgesInVisualOrder(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesInVisualOrder(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { @@ -802,12 +808,12 @@ TTmDocPosSpec posSpec(aExpected->iPos, aExpected->iLeading? TTmDocPosSpec::ELeading : TTmDocPosSpec::ETrailing); FindEdgeFromLayout(aLayout, aLine, posSpec, posInfo); - TestEdgeExists(aTest, posInfo, aExpected, aNumExpected); - aTest(aExpected->iLeading? + TestEdgeExists(posInfo, aExpected, aNumExpected); + TESTPOINT(aExpected->iLeading? posInfo.iDocPos.iLeadingEdge : !posInfo.iDocPos.iLeadingEdge); - aTest(aExpected->iPos == posInfo.iDocPos.iPos); - aTest(sameExpected || posInfo.iEdge.iX != lastX); - aTest(!sameExpected || posInfo.iEdge.iX == lastX); + TESTPOINT(aExpected->iPos == posInfo.iDocPos.iPos); + TESTPOINT(sameExpected || posInfo.iEdge.iX != lastX); + TESTPOINT(!sameExpected || posInfo.iEdge.iX == lastX); lastX = posInfo.iEdge.iX; sameExpected = aExpected->iNext == EEdgeSame? ETrue : EFalse; ++aExpected; @@ -819,7 +825,7 @@ Tests that RTmGraphemeEdgeIterator::FindEdge finds the edges in the layout with specifications of directionality. */ -void TestLayoutFindEdgesByDirectionality(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesByDirectionality(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { @@ -836,14 +842,14 @@ TBool lToRFound = FindEdgeFromLayout(aLayout, aLine, lToRPosSpec, lToRPosInfo); if (!lToRFound) { - aTest(!rToLFound); - aTest(pos < lineStart || lineEnd <= pos); + TESTPOINT(!rToLFound); + TESTPOINT(pos < lineStart || lineEnd <= pos); } else { - aTest(rToLFound); - TestEdgeExists(aTest, rToLPosInfo, aExpected, aNumExpected); - TestEdgeExists(aTest, lToRPosInfo, aExpected, aNumExpected); + TESTPOINT(rToLFound); + TestEdgeExists(rToLPosInfo, aExpected, aNumExpected); + TestEdgeExists(lToRPosInfo, aExpected, aNumExpected); // Now find the nearest edges in the expected range TTmDocPosSpec trailingPosSpec(pos, TTmDocPosSpec::ETrailing); const TEdge* trailingExpected @@ -859,17 +865,17 @@ = FindExpectedEdge(rToLPosInfo.iDocPos, aExpected, aNumExpected); const TEdge* lToRPosEdge = FindExpectedEdge(lToRPosInfo.iDocPos, aExpected, aNumExpected); - aTest(leadingExpected != 0); - aTest(trailingExpected != 0); - aTest(ExpectedEdgesCoincide(leadingExpected, rToLPosEdge) + TESTPOINT(leadingExpected != 0); + TESTPOINT(trailingExpected != 0); + TESTPOINT(ExpectedEdgesCoincide(leadingExpected, rToLPosEdge) || ExpectedEdgesCoincide(trailingExpected, rToLPosEdge)); - aTest(ExpectedEdgesCoincide(leadingExpected, lToRPosEdge) + TESTPOINT(ExpectedEdgesCoincide(leadingExpected, lToRPosEdge) || ExpectedEdgesCoincide(trailingExpected, lToRPosEdge)); // Also check that the "found" ones are at least as good as the // "expected" ones. - aTest(rToLPosInfo.iRightToLeft + TESTPOINT(rToLPosInfo.iRightToLeft || (!leadingExpected->iRightToLeft && !trailingExpected->iRightToLeft)); - aTest(!lToRPosInfo.iRightToLeft + TESTPOINT(!lToRPosInfo.iRightToLeft || (leadingExpected->iRightToLeft && trailingExpected->iRightToLeft)); } } @@ -879,7 +885,7 @@ Tests RTmGraphemeEdgeIterator::FindEdgeRightwards or RTmGraphemeEdgeIterator::FindEdgeLeftwards. */ -void TestLayoutFindEdgesLeftRight(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesLeftRight(TInt aLine, CTestTmTextLayout& aLayout, TBool aRightwards, const TEdge* aExpected, TInt aNumExpected) { @@ -962,27 +968,27 @@ // Does what we got match what we expect? if (!leadingExpected) { - aTest(result == RTmGraphemeEdgeIterator::ENone); + TESTPOINT(result == RTmGraphemeEdgeIterator::ENone); } else { - aTest(result == RTmGraphemeEdgeIterator::ENearestOnly + TESTPOINT(result == RTmGraphemeEdgeIterator::ENearestOnly || result == RTmGraphemeEdgeIterator::ENearestAndNext); TTmDocPosSpec nearestPos(nearest.iDocPos); const TEdge* nearestEdge = FindExpectedEdge(nearestPos, aExpected, aNumExpected); - TestExpectedEdge(aTest, nearest, nearestEdge); + TestExpectedEdge(nearest, nearestEdge); const TEdge* matchingEdge = leadingExpected; if (posSpec.iType == TTmDocPosSpec::ELeading) - aTest(ExpectedEdgesCoincide(leadingExpected, nearestEdge)); + TESTPOINT(ExpectedEdgesCoincide(leadingExpected, nearestEdge)); else if (posSpec.iType == TTmDocPosSpec::ETrailing) { - aTest(ExpectedEdgesCoincide(trailingExpected, nearestEdge)); + TESTPOINT(ExpectedEdgesCoincide(trailingExpected, nearestEdge)); matchingEdge = trailingExpected; } else { - aTest(ExpectedEdgesCoincide(leadingExpected, nearestEdge) + TESTPOINT(ExpectedEdgesCoincide(leadingExpected, nearestEdge) || ExpectedEdgesCoincide(trailingExpected, nearestEdge)); if (ExpectedEdgesCoincide(trailingExpected, nearestEdge)) matchingEdge = trailingExpected; @@ -991,7 +997,7 @@ TBool foundCorrectDirectionality = posSpec.iType == TTmDocPosSpec::ERightToLeft? nearest.iRightToLeft : !nearest.iRightToLeft; - aTest(foundCorrectDirectionality || directionalitiesMatch); + TESTPOINT(foundCorrectDirectionality || directionalitiesMatch); } // Find next edge in expected list @@ -1008,18 +1014,18 @@ } } if (!nextExpected) - aTest(result == RTmGraphemeEdgeIterator::ENone + TESTPOINT(result == RTmGraphemeEdgeIterator::ENone || result == RTmGraphemeEdgeIterator::ENearestOnly); else { - aTest(result == RTmGraphemeEdgeIterator::ENearestAndNext); - TestVisualPositionExists(aTest, next, aExpected, aNumExpected); - aTest(next.Ambiguity() != TTmVisualDocPos::ENotFound); + TESTPOINT(result == RTmGraphemeEdgeIterator::ENearestAndNext); + TestVisualPositionExists(next, aExpected, aNumExpected); + TESTPOINT(next.Ambiguity() != TTmVisualDocPos::ENotFound); TTmDocPosSpec nextPosLeft(next.LeftEdge().iDocPos); - aTest(ExpectedEdgesCoincide(nextExpected, + TESTPOINT(ExpectedEdgesCoincide(nextExpected, FindExpectedEdge(nextPosLeft, aExpected, aNumExpected))); TTmDocPosSpec nextPosRight(next.RightEdge().iDocPos); - aTest(ExpectedEdgesCoincide(nextExpected, + TESTPOINT(ExpectedEdgesCoincide(nextExpected, FindExpectedEdge(nextPosRight, aExpected, aNumExpected))); } it.Close(); @@ -1030,22 +1036,22 @@ /** Tests RTmGraphemeEdgeIterator::FindEdgeRightwards. */ -void TestLayoutFindEdgesRightwards(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesRightwards(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { - TestLayoutFindEdgesLeftRight(aTest, aLine, aLayout, ETrue, + TestLayoutFindEdgesLeftRight(aLine, aLayout, ETrue, aExpected, aNumExpected); } /** Tests RTmGraphemeEdgeIterator::FindEdgeLeftwards. */ -void TestLayoutFindEdgesLeftwards(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesLeftwards(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { - TestLayoutFindEdgesLeftRight(aTest, aLine, aLayout, EFalse, + TestLayoutFindEdgesLeftRight(aLine, aLayout, EFalse, aExpected, aNumExpected); } @@ -1054,7 +1060,7 @@ smallest number 'n' that is a position in the same line greater than the input 'i', where the positions and are not coincident. */ -void TestLayoutFindEdgesForwards(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesForwards(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { @@ -1083,42 +1089,42 @@ const TEdge* outEdge = FindExpectedEdge(out, aExpected, aNumExpected); // ...and test that we failed. - aTest(!inEdge || inEdge->iPos <= i); - aTest(!outEdge || outEdge->iPos <= i); + TESTPOINT(!inEdge || inEdge->iPos <= i); + TESTPOINT(!outEdge || outEdge->iPos <= i); } else { - aTest(i < result); + TESTPOINT(i < result); TTmDocPosSpec in(i, TTmDocPosSpec::ELeading); const TEdge* inEdge = FindExpectedEdge(in, aExpected, aNumExpected); TTmDocPosSpec out(result, TTmDocPosSpec::ETrailing); const TEdge* outEdge = FindExpectedEdge(out, aExpected, aNumExpected); - aTest(outEdge != 0); + TESTPOINT(outEdge != 0); if (inEdge) { - aTest(lineStart <= i); - aTest(!ExpectedEdgesCoincide(inEdge, outEdge)); + TESTPOINT(lineStart <= i); + TESTPOINT(!ExpectedEdgesCoincide(inEdge, outEdge)); for (TInt j = i + 1; j != result; ++j) { TTmDocPosSpec between(j, TTmDocPosSpec::ETrailing); const TEdge* betweenEdge = FindExpectedEdge(between, aExpected, aNumExpected); - aTest(betweenEdge != 0); + TESTPOINT(betweenEdge != 0); // Test that, if there actually is a edge, it is // coincident with . If the edge does not exist // it does not matter. We can find out if it exists by checking // whether the returned expected edge has the same position // we asked for. - aTest(ExpectedEdgesCoincide(inEdge, betweenEdge) + TESTPOINT(ExpectedEdgesCoincide(inEdge, betweenEdge) || j != betweenEdge->iPos); } } else { // before the start means finding the first trailing edge - aTest (i < lineStart); + TESTPOINT (i < lineStart); TInt leastTrailingEdge = KMaxTInt; for (const TEdge* e = aExpected; e != aExpected + aNumExpected; ++e) @@ -1126,7 +1132,7 @@ if (!e->iLeading && e->iPos < leastTrailingEdge) leastTrailingEdge = e->iPos; } - aTest(leastTrailingEdge == result); + TESTPOINT(leastTrailingEdge == result); } } it.Close(); @@ -1138,7 +1144,7 @@ largest number 'n' that is a position in the same line smaller than the input 'i', where the positions and are not coincident. */ -void TestLayoutFindEdgesBackwards(RTest& aTest, TInt aLine, +void TestLayoutFindEdgesBackwards(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { @@ -1161,15 +1167,15 @@ // Must be at or before the line's beginning. // Could possibly be that there are no leading edges in the line, but // we'll ignore that possibility. - aTest(i <= lineStart); + TESTPOINT(i <= lineStart); } else { - aTest(result < i); + TESTPOINT(result < i); TTmDocPosSpec out(result, TTmDocPosSpec::ELeading); const TEdge* outEdge = FindExpectedEdge(out, aExpected, aNumExpected); - aTest(outEdge != 0); + TESTPOINT(outEdge != 0); TTmDocPosSpec in(i, TTmDocPosSpec::ETrailing); const TEdge* inEdge = FindExpectedEdge(in, aExpected, aNumExpected); @@ -1177,20 +1183,20 @@ // were beyond the end of the line. if (inEdge && !inEdge->iLeading) { - aTest(inEdge != 0); - aTest(!ExpectedEdgesCoincide(inEdge, outEdge)); + TESTPOINT(inEdge != 0); + TESTPOINT(!ExpectedEdgesCoincide(inEdge, outEdge)); for (TInt j = result + 1; j != i; ++j) { TTmDocPosSpec between(j, TTmDocPosSpec::ELeading); const TEdge* betweenEdge = FindExpectedEdge(between, aExpected, aNumExpected); - aTest(betweenEdge != 0); + TESTPOINT(betweenEdge != 0); // Test that, if there actually is a edge, it is // coincident with . If the edge does not exist // it does not matter. We can find out if it exists by checking // whether the returned expected edge has the same position // we asked for. - aTest(ExpectedEdgesCoincide(inEdge, betweenEdge) + TESTPOINT(ExpectedEdgesCoincide(inEdge, betweenEdge) || j != betweenEdge->iPos); } } @@ -1204,21 +1210,21 @@ if (e->iLeading && greatestLeadingEdge < e->iPos) greatestLeadingEdge = e->iPos; } - aTest(greatestLeadingEdge == result); + TESTPOINT(greatestLeadingEdge == result); } } it.Close(); } } -typedef void FTestLine(RTest& aTest, TInt aLine, +typedef void FTestLine(TInt aLine, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected); /** Runs a particular test for each line in the input data. */ -void TestEachLine(RTest& aTest, FTestLine* aFn, +void TestEachLine(FTestLine* aFn, CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { TInt line = 0; @@ -1227,7 +1233,7 @@ { if (aExpected[end - 1].iNext == EEdgeNewline) { - aFn(aTest, line, aLayout, aExpected + start, end - start); + aFn(line, aLayout, aExpected + start, end - start); start = end; ++line; } @@ -1238,107 +1244,96 @@ Tests TTmGraphemeIterator and supporting functionality for the specified layout. */ -void TestLayoutL(RTest& aTest, CTestTmTextLayout& aLayout, +void TestLayoutL(CTestTmTextLayout& aLayout, const TEdge* aExpected, TInt aNumExpected) { - aTest.Start(_L("Simple iteration")); - TestLayoutSimplePass(aTest, aLayout, aExpected, aNumExpected); - aTest.Next(_L("FindXPos")); - TestEachLine(aTest, TestLayoutFindXPos, + TESTPRINT(_L("Simple iteration")); + TestLayoutSimplePass(aLayout, aExpected, aNumExpected); + TESTPRINT(_L("FindXPos")); + TestEachLine(TestLayoutFindXPos, aLayout, aExpected, aNumExpected); - aTest.Next(_L("FindXPos (unambiguous edges)")); - TestEachLine(aTest, TestLayoutFindXPosEdges, + TESTPRINT(_L("FindXPos (unambiguous edges)")); + TestEachLine(TestLayoutFindXPosEdges, aLayout, aExpected, aNumExpected); - aTest.Next(_L("FindEdge")); - TestEachLine(aTest, TestLayoutFindEdgesInVisualOrder, + TESTPRINT(_L("FindEdge")); + TestEachLine(TestLayoutFindEdgesInVisualOrder, aLayout, aExpected, aNumExpected); - TestEachLine(aTest, TestLayoutFindEdgesByDirectionality, + TestEachLine(TestLayoutFindEdgesByDirectionality, aLayout, aExpected, aNumExpected); - aTest.Next(_L("FindEdgeRightwards")); - TestEachLine(aTest, TestLayoutFindEdgesRightwards, + TESTPRINT(_L("FindEdgeRightwards")); + TestEachLine(TestLayoutFindEdgesRightwards, aLayout, aExpected, aNumExpected); - aTest.Next(_L("FindEdgeLeftwards")); - TestEachLine(aTest, TestLayoutFindEdgesLeftwards, + TESTPRINT(_L("FindEdgeLeftwards")); + TestEachLine(TestLayoutFindEdgesLeftwards, aLayout, aExpected, aNumExpected); - aTest.Next(_L("NextPosition")); - TestEachLine(aTest, TestLayoutFindEdgesForwards, + TESTPRINT(_L("NextPosition")); + TestEachLine(TestLayoutFindEdgesForwards, aLayout, aExpected, aNumExpected); - aTest.Next(_L("PreviousPosition")); - TestEachLine(aTest, TestLayoutFindEdgesBackwards, + TESTPRINT(_L("PreviousPosition")); + TestEachLine(TestLayoutFindEdgesBackwards, aLayout, aExpected, aNumExpected); - aTest.End(); } /** Tests TTmGraphemeIterator and supporting functionality for each piece of text. */ -void RunTestsL(RTest& aTest) +TVerdict CTGraphemeIteratorStep::doTestStepL() { - aTest.Start(_L(" @SYMTestCaseID:SYSLIB-FORM-LEGACY-GRAPHEMEITERATOR-0001 DocPosMatches ")); - TestDocPosMatches(aTest); - aTest.Next(_L("Simple Latin")); + SetTestStepResult(EPass); + TestStep = this; + TESTPRINT(_L("RTmGraphemeEdgeIterator unit")); + + TESTPRINT(_L(" @SYMTestCaseID:SYSLIB-FORM-LEGACY-GRAPHEMEITERATOR-0001 DocPosMatches ")); + TestDocPosMatches(); + TESTPRINT(_L("Simple Latin")); CTestTmTextLayout* latin1 = CTestTmTextLayout::NewLC( KLatin1, 100, Transliterate); - TestLayoutL(aTest, *latin1, KLatin1Edges, + TestLayoutL( *latin1, KLatin1Edges, sizeof(KLatin1Edges)/sizeof(KLatin1Edges[0])); CleanupStack::PopAndDestroy(latin1); - aTest.Next(_L("Simple Arabic")); + TESTPRINT(_L("Simple Arabic")); CTestTmTextLayout* arabic1 = CTestTmTextLayout::NewLC( KArabic1, 100, Transliterate); - TestLayoutL(aTest, *arabic1, KArabic1Edges, + TestLayoutL(*arabic1, KArabic1Edges, sizeof(KArabic1Edges)/sizeof(KArabic1Edges[0])); CleanupStack::PopAndDestroy(arabic1); - aTest.Next(_L("Latin with combining marks and zero width characters")); + TESTPRINT(_L("Latin with combining marks and zero width characters")); CTestTmTextLayout* combiners1 = CTestTmTextLayout::NewLC( KCombiners1, 20, Transliterate); - TestLayoutL(aTest, *combiners1, KCombiners1Edges, + TestLayoutL(*combiners1, KCombiners1Edges, sizeof(KCombiners1Edges)/sizeof(KCombiners1Edges[0])); CleanupStack::PopAndDestroy(combiners1); - aTest.Next(_L("Bidirectional text with combining marks")); + TESTPRINT(_L("Bidirectional text with combining marks")); CTestTmTextLayout* bidi1 = CTestTmTextLayout::NewLC( KBidi1, 60, Transliterate); - TestLayoutL(aTest, *bidi1, KBidi1Edges, + TestLayoutL( *bidi1, KBidi1Edges, sizeof(KBidi1Edges)/sizeof(KBidi1Edges[0])); CleanupStack::PopAndDestroy(bidi1); - aTest.Next(_L("Bidirectional text with combining marks and 'amtriguity'")); + TESTPRINT(_L("Bidirectional text with combining marks and 'amtriguity'")); CTestTmTextLayout* bidi2 = CTestTmTextLayout::NewLC( KBidi2, 60, Transliterate); - TestLayoutL(aTest, *bidi2, KBidi2Edges, + TestLayoutL(*bidi2, KBidi2Edges, sizeof(KBidi2Edges)/sizeof(KBidi2Edges[0])); CleanupStack::PopAndDestroy(bidi2); - aTest.Next(_L("Small paragraphs of alternating directionality")); + TESTPRINT(_L("Small paragraphs of alternating directionality")); CTestTmTextLayout* paragraphs1 = CTestTmTextLayout::NewLC( KParagraphs1, 20, Transliterate); - TestLayoutL(aTest, *paragraphs1, KParagraphs1Edges, + TestLayoutL(*paragraphs1, KParagraphs1Edges, sizeof(KParagraphs1Edges)/sizeof(KParagraphs1Edges[0])); CleanupStack::PopAndDestroy(paragraphs1); - aTest.Next(_L("Lines ending over or next to embedded runs")); + TESTPRINT(_L("Lines ending over or next to embedded runs")); CTestTmTextLayout* embedded1 = CTestTmTextLayout::NewLC( KEmbedded1, 20, Transliterate); - TestLayoutL(aTest, *embedded1, KEmbedded1Edges, + TestLayoutL( *embedded1, KEmbedded1Edges, sizeof(KEmbedded1Edges)/sizeof(KEmbedded1Edges[0])); CleanupStack::PopAndDestroy(embedded1); - aTest.End(); + return TestStepResult(); } -/** -Tests TTmGraphemeIterator and supporting functionality. -*/ -TInt E32Main() - { - RTest rtest(_L("RTmGraphemeEdgeIterator unit")); - CTrapCleanup* TrapCleanup = CTrapCleanup::New(); - rtest.Title(); - TRAPD(err, RunTestsL(rtest)); - rtest.Close(); - delete TrapCleanup; - return err; - } -