--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicsdeviceinterface/gdi/tgdi/TBiDiDefect.cpp Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,702 @@
+// Copyright (c) 2003-2009 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"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#include <biditext.h>
+#include <bidi.h>
+#include <bidivisual.h>
+#include "TGraphicsContext.h"
+#include "TBiDiDefect.h"
+
+class CTBiDiDefect : public CTGraphicsBase
+ {
+
+public:
+ CTBiDiDefect(CTestStep* aStep);
+ ~CTBiDiDefect();
+
+protected:
+//from CTGraphicsStep
+ virtual void RunTestCaseL(TInt aCurTestCase);
+
+private:
+ void CreateTestGraphicsContextL();
+
+ void INC016328L(const TDesC& aTestText);
+ void INC016665L();
+ void INC017825L();
+ void INC017974L();
+ void INC017991L();
+ void DEF021227();
+ void INC023337();
+ void INC023917();
+ void DEF037928();
+ void DEF021347L();
+ void INC037549L();
+ void INC042422L();
+ void DEF059214L();
+
+ void TestDEF021347L(TUint16 aControlCharacter);
+ void TestDEF043720L();
+
+ void TestPDEF117110L();
+
+private:
+ TBidirectionalState::TRunInfo* iRunInfoArray;
+ CTestFont* iTestFont;
+ TBidiText* iBidiText;
+ CTestGraphicsDevice* iTestGraphicsDevice;
+ CTestGraphicsContext* iTestGraphicsContext;
+ };
+
+
+CTBiDiDefect::CTBiDiDefect(CTestStep* aStep) :
+ CTGraphicsBase(aStep),
+ iRunInfoArray(NULL),
+ iTestFont(NULL),
+ iBidiText(NULL),
+ iTestGraphicsDevice(NULL),
+ iTestGraphicsContext(NULL)
+ {
+ }
+
+CTBiDiDefect::~CTBiDiDefect()
+ {
+ delete iTestGraphicsContext;
+ delete iTestGraphicsDevice;
+ delete iBidiText;
+ delete iTestFont;
+ delete [] iRunInfoArray;
+ }
+
+void CTBiDiDefect::RunTestCaseL(TInt aCurTestCase)
+ {
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+ switch(aCurTestCase)
+ {
+ case 1:
+ {
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0001
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0001"));
+ TBuf<32> testText(_L(".Test"));
+ INFO_PRINTF1(_L("INC016328"));
+ INC016328L(testText);
+ }
+ break;
+ case 2:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0002
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0002"));
+ INFO_PRINTF1(_L("INC016665"));
+ INC016665L();
+ break;
+ case 3:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0003
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0003"));
+ INFO_PRINTF1(_L("INC017825"));
+ INC017825L();
+ break;
+ case 4:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0004
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0004"));
+ INFO_PRINTF1(_L("INC017974"));
+ INC017974L();
+ break;
+ case 5:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0005
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0005"));
+ INFO_PRINTF1(_L("INC017991"));
+ INC017991L();
+ break;
+ case 6:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0006
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0006"));
+ INFO_PRINTF1(_L("DEF021227"));
+ DEF021227();
+ break;
+ case 7:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0007
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0007"));
+ INFO_PRINTF1(_L("DEF021347"));
+ DEF021347L();
+ break;
+ case 8:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0008
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0008"));
+ INFO_PRINTF1(_L("INC023337"));
+ INC023337();
+ break;
+ case 9:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0009
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0009"));
+ INFO_PRINTF1(_L("INC023917"));
+ INC023917();
+ break;
+ case 10:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0010
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0010"));
+ INFO_PRINTF1(_L("DEF037928"));
+ DEF037928();
+ break;
+ case 11:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0011
+*/
+ //INC037549 TBidiText crashes if <CR><LF> appear at the end of the text
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0011"));
+ INFO_PRINTF1(_L("INC037549L"));
+ INC037549L();
+ break;
+ case 12:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0012
+*/
+ //INC042422 when calculated length in BidiCompact.cpp TRunInfoCompact::Reorder < 0
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0012"));
+ INFO_PRINTF1(_L("INC042422L"));
+ INC042422L();
+ break;
+ case 13:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0013
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0013"));
+ INFO_PRINTF1(_L("DEF043720"));
+ TestDEF043720L();
+ break;
+ case 14:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0014
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0014"));
+ INFO_PRINTF1(_L("DEF059214: Erroneous caret cursor movements"));
+ DEF059214L();
+ break;
+ case 15:
+/**
+ @SYMTestCaseID GRAPHICS-GDI-BiDiDefect-0015
+*/
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(_L("GRAPHICS-GDI-BiDiDefect-0015"));
+ INFO_PRINTF1(_L("PDEF117110"));
+ TestPDEF117110L();
+ break;
+ case 16:
+ ((CTBiDiDefectStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ ((CTBiDiDefectStep*)iStep)->CloseTMSGraphicsStep();
+ TestComplete();
+ break;
+ }
+ ((CTBiDiDefectStep*)iStep)->RecordTestResultL();
+ }
+
+void CTBiDiDefect::CreateTestGraphicsContextL()
+ {
+ delete iTestGraphicsContext;
+ iTestGraphicsContext = NULL;
+ delete iTestGraphicsDevice;
+ iTestGraphicsDevice = NULL;
+
+ TSize windowSize(400, 400);
+ iTestGraphicsDevice = CTestGraphicsDevice::NewL(windowSize);
+ CGraphicsContext* tContext = NULL;
+ TEST(iTestGraphicsDevice->CreateContext(tContext) == KErrNone);
+ iTestGraphicsContext = static_cast<CTestGraphicsContext*>(tContext);
+ }
+
+//TBidiText crashes if the first character of the text is '.'.
+void CTBiDiDefect::INC016328L(const TDesC& aTestText)
+ {
+ TInt arraySize = TBidirectionalState::GenerateBdRunArray(aTestText.Ptr(), aTestText.Length(), 0, 0);
+ iRunInfoArray = new (ELeave) TBidirectionalState::TRunInfo[arraySize];
+ TBidirectionalState::GenerateBdRunArray(aTestText.Ptr(), aTestText.Length(), iRunInfoArray, arraySize);
+ TBidirectionalState state;
+ state.ReorderLine(iRunInfoArray, arraySize, ETrue, ETrue, EFalse, TChar::EOtherNeutral, TChar::EOtherNeutral);
+ TEST(iRunInfoArray->iLength > 0);
+ }
+
+//Truncation after space character in Bidirectional text classes.
+//Actually it doesn't prove missing space character but proves
+//truncation at the middle of "text" word - yet another defect.
+void CTBiDiDefect::INC016665L()
+ {
+ iTestFont = new (ELeave) CTestFont;
+ iBidiText = TBidiText::NewL(_L("Truncated text"), 1);
+ iBidiText->WrapText(110, *iTestFont, NULL);//"Truncated " and "text"
+ TEST(iBidiText->DisplayText().Length() == 10);
+ TEST(iBidiText->DisplayText()[9] == 0x2026);
+ delete (iBidiText);
+
+ iBidiText = TBidiText::NewL(_L("Truncated text"), 1);
+ iBidiText->WrapText(110, *iTestFont, NULL);//"Truncated " and "text"
+ TEST(iBidiText->DisplayText().Length() == 10);
+ TEST(iBidiText->DisplayText()[9] == 0x2026);
+ }
+
+//TBidiText crashes with length 0 descriptor.
+void CTBiDiDefect::INC017825L()
+ {
+ delete iTestGraphicsContext;
+ iTestGraphicsContext = NULL;
+ CreateTestGraphicsContextL();
+
+ delete iTestFont;
+ iTestFont = NULL;
+ iTestFont = new (ELeave) CTestFont;
+
+ delete iBidiText;
+ iBidiText = NULL;
+ iBidiText = TBidiText::NewL(KNullDesC(), 1);
+ iBidiText->WrapText(100, *iTestFont, NULL);
+
+ iBidiText->DrawText(*iTestGraphicsContext, TPoint(0, 20), 20, CGraphicsContext::ERight);
+ }
+
+//BidiText does not show 0x062A character correctly if it is a first character.
+void CTBiDiDefect::INC017974L()
+ {
+ _LIT(KTextWithLatinLettersFirstArabicLetter, "\x062A abcdef");
+
+ delete iTestFont;
+ iTestFont = NULL;
+ iTestFont = new (ELeave) CTestFont;
+
+ delete iBidiText;
+ iBidiText = NULL;
+ iBidiText = TBidiText::NewL(KTextWithLatinLettersFirstArabicLetter, 1);
+ iBidiText->WrapText(100, *iTestFont, NULL);
+ const TText* text = iBidiText->DisplayText().Ptr();
+ TEST(text[7] == 0x062A);//the arabic character should be the first at the end.
+ }
+
+//TBidiText::DrawText draws out of the area if alignment is right.
+void CTBiDiDefect::INC017991L()
+ {
+ delete iTestGraphicsContext;
+ iTestGraphicsContext = NULL;
+ CreateTestGraphicsContextL();
+
+ _LIT(KTextWithLatinLetters, "abc def ghijk lmnop qrstuvw xyz 12.34.");
+ const TInt KTextWidth = 200;
+
+ delete iTestFont;
+ iTestFont = NULL;
+ iTestFont = new (ELeave) CTestFont;
+
+ delete iBidiText;
+ iBidiText = NULL;
+ iBidiText = TBidiText::NewL(KTextWithLatinLetters, 2);
+ iBidiText->WrapText(KTextWidth, *iTestFont, NULL);
+
+ iBidiText->DrawText(*iTestGraphicsContext, TPoint(0, 20), 20, CGraphicsContext::ERight);
+ const TTestGCDisplayLine& line1 = iTestGraphicsContext->DisplayLine(0);
+ const TDesC& text1 = line1.iLineData;
+ TInt width1 = iTestFont->TextWidthInPixels(text1);
+ TEST((width1 + line1.iLinePos.iX) <= KTextWidth);
+ const TTestGCDisplayLine& line2 = iTestGraphicsContext->DisplayLine(1);
+ const TDesC& text2 = line2.iLineData;
+ TInt width2 = iTestFont->TextWidthInPixels(text2);
+ TEST((width2 + line2.iLinePos.iX) <= KTextWidth);
+ }
+
+//TBidiLogicalToVisual seems to lose characters.
+void CTBiDiDefect::DEF021227()
+ {
+ _LIT(KTestText, "Waitnote + D prompt ");
+// _LIT(KTestText, "Waitnote H D prompt ");
+ TBuf<100> visualText;
+ visualText.Fill(0xCDCD);
+ TBidirectionalState::TRunInfo runArray[6];
+
+ TBidiLogicalToVisual bidiConverter(KTestText, EFalse, runArray,
+ sizeof(runArray)/sizeof(runArray[0]));
+ bidiConverter.Reorder();
+ TDesC des = KTestText;
+ bidiConverter.GetVisualLine(visualText, 0, des.Length() - 1, 0xFFFF);
+ TInt len = visualText.Length();
+ TEST((des.Length() - 1) == len);
+ }
+
+//DrawText should not draw control codes (particularly Bidirectional ones)
+void CTBiDiDefect::DEF021347L()
+ {
+ TestDEF021347L(0x200C);
+ TestDEF021347L(0x200D);
+ TestDEF021347L(0x200E);
+ TestDEF021347L(0x200F);
+ TestDEF021347L(0x202A);
+ TestDEF021347L(0x202B);
+ TestDEF021347L(0x202C);
+ TestDEF021347L(0x202D);
+ TestDEF021347L(0x202E);
+ // Tested in TGLYPHSEL now following rewrite.
+ //TestDEF021347L(0xFFFF);
+ }
+
+void CTBiDiDefect::TestDEF021347L(TUint16 aControlCharacter)
+ {
+ const TInt KTestTextLen = 5;
+ TBuf<100> testText(KTestTextLen);
+ testText[0] = 'a';
+ testText[1] = 'b';
+ testText[2] = aControlCharacter;
+ testText[3] = 'c';
+ testText[4] = 'd';
+
+ delete iTestFont;
+ iTestFont = NULL;
+ iTestFont = new (ELeave) CTestFont;
+
+ CFont::TPositionParam param;
+ param.iDirection = 0;
+ param.iFlags = 1;
+ param.iText.Set(testText);
+ param.iPosInText = 0;
+ param.iPen.iX = 0;
+ param.iPen.iY = 0;
+ param.iPosInText = 2; //testText[2] = aControlCharacter
+ TBool r = iTestFont->GetCharacterPosition(param);
+
+ TEST(r && param.iPen.iX == 0 && param.iOutputGlyphs == 0);
+ }
+
+//TBidiLogicalToVisual::GetVisualLine() panics when aEnd == 0
+void CTBiDiDefect::INC023337()
+ {
+ _LIT(KTestText, "");
+ TBuf<100> visualText;
+ visualText.Fill(0xCDCD);
+ TBidirectionalState::TRunInfo runArray[6];
+ TBidiLogicalToVisual bidiConverter(KTestText, EFalse, runArray, sizeof(runArray)/sizeof(runArray[0]));
+ bidiConverter.Reorder();
+
+ TDesC des = KTestText;
+ const TUint KEmptyChar = TUint(0xFFFF);
+ //The next statement will panics, if INC023337 is not fixed.
+ bidiConverter.GetVisualLine(visualText, 0, des.Length(), KEmptyChar);
+ }
+
+//TBidiLogicalToVisual indexes over the given text.
+void CTBiDiDefect::INC023917()
+ {
+ const TInt dest_buf_len = 10;
+ TBidirectionalState::TRunInfo runInfoArray[dest_buf_len];
+ const TInt src_buf_len = 4;
+ TBuf<src_buf_len> logical;
+ logical.Fill(0x0639, src_buf_len);
+
+ _LIT(KArabicWord, "\x0631\x0641\x0636");
+ logical = KArabicWord;
+
+ TBidiLogicalToVisual bidiConverter(logical, runInfoArray, sizeof(runInfoArray)/sizeof(runInfoArray[0]));
+ bidiConverter.Reorder();
+
+ TBuf<dest_buf_len> visual;
+ bidiConverter.GetVisualLine(visual, 0, logical.Length(), 0xFFFF);
+
+ TEST(visual[0] == 0x0636);
+ }
+
+// DEF037928 - TBidiLogicalToVisual::GetVisualLine does not work correctly for 0 length strings
+void CTBiDiDefect::DEF037928()
+ {
+ // Zero length string for testing
+ _LIT(KTestText, "");
+ TBuf<100> visualText;
+ visualText.Fill(0xCDCD);
+ visualText.SetMax();
+
+ TBidirectionalState::TRunInfo runArray[6];
+ TBidiLogicalToVisual bidiConverter(KTestText, EFalse, runArray,
+ sizeof(runArray)/sizeof(runArray[0]));
+ bidiConverter.Reorder();
+
+ bidiConverter.GetVisualLine(visualText, 0, 1, 0xFFFF);
+ TEST( visualText.Length() == 0);
+ }
+
+
+// INC037549 - TBidiText crashes if <CR><LF> appear at the end of the text
+void CTBiDiDefect::INC037549L()
+ {
+ // This crash occured when the final character is <cr>
+ // and following memory location is <lf>
+ // To test this testString has a length of 5, but sPtr has length 4
+ _LIT( testString, "123\r\n" ) ;
+ TBuf<5> string( testString ) ;
+ TPtrC sPtr( string.Ptr(), 4 ) ;
+ TBidiText* bText = TBidiText::NewL( sPtr, 1, TBidiText::ELeftToRight ) ;
+
+ delete bText;
+ }
+
+// INC042422 - when calculated length in BidiCompact.cpp TRunInfoCompact::Reorder < 0
+//
+// This defect causes an extra blank line to be added when text contains \r\n
+// This was caused by a miscalculation in Biditext.cpp SizeLineBreak().
+// this test case is modified due to change of TBidiText::DoWrapText for fixing PDEF117110
+void CTBiDiDefect::INC042422L()
+ {
+ _LIT( testString, "123\r\n" ) ;
+ TBidiText* bText = TBidiText::NewL( testString, 1, TBidiText::ELeftToRight ) ;
+ bText->WrapText(100,*iTestFont,0);
+ TPtrC text = bText->DisplayText();
+
+ // The defect caused text to contain an extra blank line
+ // So the length was 5 ( text contained:1,2,3, 0x2028, 0x2026)
+ // when the correct value is 4 (text should contain: 1,2,3, 0x2026)
+ // Note: Due to fix for PDEF117109, the correct value is 3 now (text contains: 1,2,3)
+ TEST(text.Length() == 3);
+ TEST(text[0] == '1');
+ TEST(text[1] == '2');
+ TEST(text[2] == '3');
+
+ delete bText;
+ }
+
+//DEF043720 - Assert fails in TBiDiText wrapping when more than one \n is present in the text
+void CTBiDiDefect::TestDEF043720L()
+ {
+ delete iTestFont;
+ iTestFont = NULL;
+ iTestFont = new (ELeave) CTestFont;
+
+ delete iBidiText;
+ iBidiText = NULL;
+ iBidiText = TBidiText::NewL(_L("\n\nAB\n\n\nCD\n"),10);
+ iBidiText->WrapText(10,*iTestFont,0);
+
+ //After wrapping text should look like "\x2028\x2028A\x2028B\x2028\x2028\x2028C\x2028D"
+ //where \x2028 is the line separator
+ TPtrC afterwrap(iBidiText->DisplayText());
+ TEST(afterwrap.Length()==11);
+ TEST(afterwrap[0]==0x2028);
+ TEST(afterwrap[1]==0x2028);
+ TEST(afterwrap[3]==0x2028);
+ TEST(afterwrap[5]==0x2028);
+ TEST(afterwrap[6]==0x2028);
+ TEST(afterwrap[7]==0x2028);
+ TEST(afterwrap[9]==0x2028);
+
+ INFO_PRINTF1(iBidiText->DisplayText());
+
+ delete iBidiText;
+ iBidiText = NULL;
+ delete iTestFont;
+ iTestFont = NULL;
+ }
+
+void CTBiDiDefect::DEF059214L()
+ {
+ TBidirectionalState::TRunInfo runs[4];
+ TBidirectionalState bs;
+ TBool ambig;
+
+ // entirely left to right paragraph is not ambiguous
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ELeftToRight;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, EFalse, TChar::ELeftToRight,
+ TChar::ELeftToRight, ambig);
+
+ // entirely right to left paragraph is not ambiguous
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ERightToLeft;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, ETrue, TChar::ERightToLeft,
+ TChar::ERightToLeft, ambig);
+ TEST(!ambig);
+
+ // right to left portion within left to right paragraph is ambiguous
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ERightToLeft;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, EFalse, TChar::ERightToLeft,
+ TChar::ERightToLeft, ambig);
+ TEST(ambig && ambig != 3000);
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ERightToLeft;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, EFalse, TChar::EOtherNeutral,
+ TChar::ERightToLeft, ambig);
+ TEST(ambig && ambig != 3000);
+
+ // left to right portion within right to left paragraph is ambiguous
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ELeftToRight;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, ETrue, TChar::ELeftToRight,
+ TChar::ELeftToRight, ambig);
+ TEST(ambig && ambig != 3000);
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ELeftToRight;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, ETrue, TChar::EOtherNeutral,
+ TChar::ELeftToRight, ambig);
+ TEST(ambig && ambig != 3000);
+
+ // right to left following on from left to right paragraph is ambiguous
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ELeftToRight;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, EFalse, TChar::ERightToLeft,
+ TChar::ERightToLeft, ambig);
+ TEST(ambig && ambig != 3000);
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ELeftToRight;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, EFalse, TChar::EOtherNeutral,
+ TChar::ERightToLeft, ambig);
+ TEST(ambig && ambig != 3000);
+
+ // left to right following on from right to left paragraph is ambiguous
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ERightToLeft;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, ETrue, TChar::ELeftToRight,
+ TChar::ELeftToRight, ambig);
+ TEST(ambig && ambig != 3000);
+ ambig = 3000;
+ bs.Reset();
+ runs[0].iCategory = TChar::ERightToLeft;
+ runs[0].iStart = 0;
+ runs[0].iLength = 10;
+ bs.ReorderLine(runs, 1, ETrue, EFalse, ETrue, TChar::EOtherNeutral,
+ TChar::ELeftToRight, ambig);
+ TEST(ambig && ambig != 3000);
+ }
+
+void CTBiDiDefect::TestPDEF117110L()
+ {
+ TPtrC wrappedText;
+ TPtrC expectedText;
+
+ delete iTestFont;
+ iTestFont = new (ELeave) CTestFont;
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test Text\n"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 1);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test Text\r"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 1);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test Text\r\n"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 1);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test Text\x2028"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 1);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test Text\n\x2028"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 2);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test Text\x2028"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test\nText\n"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 2);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test\x2028Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test\nText\n"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 1);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test\x2026"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("TestText\n"), 5);
+ iBidiText->WrapText(45, *iTestFont, NULL, 2);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test\x2028Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = TBidiText::NewL(_L("Test Text"), 5);
+ iBidiText->WrapText(KMaxTInt, *iTestFont, NULL, 1);
+ wrappedText.Set(iBidiText->DisplayText());
+ expectedText.Set(_L("Test Text"));
+ TEST(expectedText.Compare(wrappedText) == 0);
+
+ delete iBidiText;
+ iBidiText = NULL;
+ delete iTestFont;
+ iTestFont = NULL;
+ }
+
+//--------------
+CTBiDiDefectStep::CTBiDiDefectStep()
+ {
+ SetTestStepName(KTBiDiDefectStep);
+ }
+
+CTGraphicsBase* CTBiDiDefectStep::CreateTestL()
+ {
+ return new (ELeave) CTBiDiDefect(this);
+ }