http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/UnitTest/Tests/FloatTest.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/UnitTest/Tests/FloatTest.as 
b/automation_tests/src/UnitTest/Tests/FloatTest.as
index 36267a2..da7a19a 100644
--- a/automation_tests/src/UnitTest/Tests/FloatTest.as
+++ b/automation_tests/src/UnitTest/Tests/FloatTest.as
@@ -18,2363 +18,2615 @@
 
////////////////////////////////////////////////////////////////////////////////
 package UnitTest.Tests
 {
-       import UnitTest.ExtendedClasses.TestDescriptor;
-       import UnitTest.ExtendedClasses.TestSuiteExtended;
-       import UnitTest.ExtendedClasses.VellumTestCase;
-       import UnitTest.Fixtures.TestConfig;
-       import UnitTest.Validation.BoundsChecker;
-       import UnitTest.Validation.CompositionResults;
-       
-       import flash.display.DisplayObject;
-       import flash.display.DisplayObjectContainer;
-       import flash.display.Graphics;
-       import flash.display.Sprite;
-       import flash.events.Event;
-       import flash.events.KeyboardEvent;
-       import flash.geom.Point;
-       import flash.geom.Rectangle;
-       import flash.text.engine.TextLine;
-       import flash.text.engine.TextLineValidity;
-       import flash.ui.KeyLocation;
-       
-       import flashx.textLayout.*;
-       import flashx.textLayout.compose.IFlowComposer;
-       import flashx.textLayout.compose.StandardFlowComposer;
-       import flashx.textLayout.container.ContainerController;
-       import flashx.textLayout.container.ScrollPolicy;
-       import flashx.textLayout.conversion.TextConverter;
-       import flashx.textLayout.debug.assert;
-       import flashx.textLayout.edit.SelectionFormat;
-       import flashx.textLayout.edit.SelectionState;
-       import flashx.textLayout.edit.TextScrap;
-       import flashx.textLayout.elements.*;
-       import flashx.textLayout.events.CompositionCompleteEvent;
-       import flashx.textLayout.factory.StringTextLineFactory;
-       import flashx.textLayout.factory.TruncationOptions;
-       import flashx.textLayout.formats.BlockProgression;
-       import flashx.textLayout.formats.ClearFloats;
-       import flashx.textLayout.formats.Direction;
-       import flashx.textLayout.formats.FormatValue;
-       import flashx.textLayout.formats.ITextLayoutFormat;
-       import flashx.textLayout.formats.LineBreak;
-       import flashx.textLayout.formats.TextAlign;
-       import flashx.textLayout.formats.TextLayoutFormat;
-       import flashx.textLayout.formats.VerticalAlign;
-       import flashx.textLayout.utils.NavigationUtil;
-       use namespace tlf_internal;
-       
-       import flashx.textLayout.edit.EditManager;
-       
-       import flashx.textLayout.factory.StringTextLineFactory;
-       import flashx.textLayout.compose.TextFlowLine;
-       import flashx.textLayout.edit.IEditManager;
-       import flashx.textLayout.formats.Float;
-       import spark.primitives.Line;
-       import flash.events.MouseEvent;
-       import flash.events.IEventDispatcher;
-       import flash.display.Shape;
-       import flashx.textLayout.events.TextLayoutEvent;
-       import mx.core.Container;
-       import mx.core.UIComponent;
-       import mx.utils.LoaderUtil;
-       import flashx.textLayout.events.StatusChangeEvent;
-       import flashx.textLayout.factory.TextFlowTextLineFactory;
-       import mx.containers.Canvas;
-       
-       public class FloatTest extends VellumTestCase
-       {
-               private var _textFlow:TextFlow;
-               private var _flowComposer:IFlowComposer;
-               private var _editManager:IEditManager;
-               private var _testXML:XML;
-               private var _currentContent:String;             // content in 
TextFlow
-               private var _disableVerticalCheck:Boolean;      // don't check 
floats vertical location; tests that force floats down should set this
-               private var _floatColor:int;
-               private var _disableBoundsCheck:Boolean = false;
-               
-               private static var _englishContent:String = "There are many 
such lime-kilns in that tract of country, for the purpose of burning the white 
marble which composes a large part of the substance of the hills. Some of them, 
built years ago, and long deserted, with weeds growing in the vacant round of 
the interior, which is open to the sky, and grass and wild-flowers rooting 
themselves into the chinks of the stones, look already like relics of 
antiquity, and may yet be overspread with the lichens of centuries to come. 
Others, where the lime-burner still feeds his daily and nightlong fire, afford 
points of interest to the wanderer among the hills, who seats himself on a log 
of wood or a fragment of marble, to hold a chat with the solitary man. It is a 
lonesome, and, when the character is inclined to thought, may be an intensely 
thoughtful occupation; as it proved in the case of Ethan Brand, who had mused 
to such strange purpose, in days gone by, while the fire in this very kiln was 
burni
 ng.\n" + 
-                       "The man who now watched the fire was of a different 
order, and troubled himself with no thoughts save the very few that were 
requisite to his business. At frequent intervals, he flung back the clashing 
weight of the iron door, and, turning his face from the insufferable glare, 
thrust in huge logs of oak, or stirred the immense brands with a long pole. 
Within the furnace were seen the curling and riotous flames, and the burning 
marble, almost molten with the intensity of heat; while without, the reflection 
of the fire quivered on the dark intricacy of the surrounding forest, and 
showed in the foreground a bright and ruddy little picture of the hut, the 
spring beside its door, the athletic and coal-begrimed figure of the 
lime-burner, and the half-frightened child, shrinking into the protection of 
his father's shadow. And when again the iron door was closed, then reappeared 
the tender light of the half-full moon, which vainly strove to trace out the 
indistinct shapes of the neighbo
 ring mountains; and, in the upper sky, there was a flitting congregation of 
clouds, still faintly tinged with the rosy sunset, though thus far down into 
the valley the sunshine had vanished long and long ago."
-
-               private static var _japaneseContent:String = 
'文字コードが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクションでは、このようなグリフスする方法について解説しまが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクす。\n文字コードが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクションでは、このようなグリフスする方法について解説しまが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクす。\n'
 +
-                       
'文字コードが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクションでは、このようなグリフスする方法について解説しまが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクす。\n文字コードが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクションでは、このようなグリフスする方法について解説しまが割り当てられていないグリフの大半は既に文字コードが割り当てられているグリフの異体字です。次のセクす。';
-               
-               public function FloatTest(methodName:String, testID:String, 
testConfig:TestConfig, testXML:XML = null)
-               {
-                       super (methodName, testID, testConfig);
-                       _testXML = testXML;
-                       TestData.fileName = null;
-                       
-                       // Note: These must correspond to a Watson product area 
(case-sensitive)
-                       metaData.productArea = "Text Composition";
-                       _floatColor = 0xFF0000;
-               }
-               
-               public static function suite(testConfig:TestConfig, 
ts:TestSuiteExtended):void
-               {
-                       addTestCase(ts, testConfig, "atFlowStart");
-                       addTestCase(ts, testConfig, "atFlowStartSpaceBefore");
-                       addTestCase(ts, testConfig, "atParagraphStart");
-                       addTestCase(ts, testConfig, 
"atParagraphStartSpaceBefore");
-                       addTestCase(ts, testConfig, "atParagraphEnd");
-                       addTestCase(ts, testConfig, "atLineStart");
-                       addTestCase(ts, testConfig, "atLineMiddle");
-                       addTestCase(ts, testConfig, "atLineEnd");
-                       addTestCase(ts, testConfig, "stackedFloats");
-                       addTestCase(ts, testConfig, "onTwoSidesSameLine");
-                       addTestCase(ts, testConfig, 
"onTwoSidesSuccessiveLines");
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"fillsColumn", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"noEmergencyBreakByFloat", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"fillsColumnRecursion", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"widerThanColumn", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"widerThanColumnScroll", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"contentHeightCheck", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"noFloatsWithMeasureOrExplicit", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"floatOnly", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"noVJ", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"verticalAlignMiddleFloatAtEnd", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"verticalAlignMiddleTextAtEnd", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"verticalAlignBottomFloatAtEnd", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"verticalAlignBottomTextAtEnd", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"verticalAlignBottomFloat2636122", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"textAlignRightAtStart", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"textAlignRightInMiddle", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"leftIndent", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"rightIndent", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"leftBigIndent", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"rightBigIndent", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"clearOneAll", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"clearTwoAll", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"paddingAndMargins", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"negativePaddingAndMargins", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"rightIndentWithTab", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"leftIndentWithTab", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"hoistFailure", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"clearNoPrecedingFloatAll", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"stackedLeftFloats", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"stackedRightFloats", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"smallFloatBigText", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"lineHeightIgnoredOnFloatingImages", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"convertFloatToInline", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"cursorByAnchor", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"insertTextBeforeFloat", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"atControllerEnd", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"resizeControllerWithFloats", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"textIndentAfterFloat", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"composeAcrossControllers", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"deleteAtStart", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"measureWidth", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"inlineWideAndFloat", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"narrowColumnFloat", testConfig, null) );                            
                                                                                
                                                                               
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"infiniteLoop2769562", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor (FloatTest, 
"verticalAlignInline", testConfig, null) );
-                       ts.addTestDescriptor (new TestDescriptor (FloatTest, 
"pasteManyFloatsWithLoading", testConfig, null) ); 
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"contentBoundsWithFactoryComposition", testConfig, null) );
-                       // We only need one version of these tests
-                       if (testConfig.writingDirection[0] == 
BlockProgression.TB && testConfig.writingDirection[1] == Direction.LTR)
-                       {
-                               ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"inlineAndFloat", testConfig, null) );
-                               ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"htmlImportTest", testConfig, null) );
-                               ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"overFlowAtStart", testConfig, null) );
-                               ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"caretOnEmptyInlineGraphic", testConfig, null) );
-                               ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"restartComposeFromStart", testConfig, null) );
-                               ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"convertInlineToFloat", testConfig, null) );
-                               
-                       }
-               }
-               
-               private static function addTestCase(ts:TestSuiteExtended, 
testConfig:TestConfig, methodName:String):void
-               {
-                       //ts.addTestDescriptor (new TestDescriptor 
(MeasurementGridTest,methodName, testConfig, creationType, measureType, 
lineBreak) );
-                       var testXML:XML = <TestCase>
-                                                               <TestData 
name="methodName">{methodName}</TestData>
-                                                               <TestData 
name="id">{methodName}</TestData>
-                                                       </TestCase>;
-                       
-                       ts.addTestDescriptor (new TestDescriptor 
(FloatTest,"callTestMethod", testConfig, testXML) );
-               }
-               
-               override public function setUp() : void
-               {
-                       super.setUp();
-                       initializeSourceTextFlow();
-                       
initializeFlow(TextConverter.importToFlow(_englishContent, 
TextConverter.PLAIN_TEXT_FORMAT));
-               }
-               
-               override public function tearDown(): void
-               {
-                       if (TestFrame && TestFrame.textFlow && 
!_disableBoundsCheck)
-                       {
-                               var s:Sprite = new Sprite();
-                               
testApp.getDisplayObject().rawChildren.addChild(s);
-                               BoundsChecker.validateAll(TestFrame.textFlow, 
s, 10, true);
-                               
testApp.getDisplayObject().rawChildren.removeChild(s);
-                       }
-                       super.tearDown();
-               }
-               
-               private function initializeFlow(textFlow:TextFlow):void
-               {
-                       _textFlow = textFlow;
-                       _flowComposer = _textFlow.flowComposer;
-                       VellumTestCase.testApp.contentChange (_textFlow);
-                       TestDisplayObject = 
VellumTestCase.testApp.getDisplayObject();
-                       TestFrame = _textFlow.flowComposer.getControllerAt(0);
-                       if (TestFrame.rootElement)
-                       {
-                               // Set the writing direction specified by the 
test
-                               _textFlow.blockProgression = 
writingDirection[0];
-                               _textFlow.direction        = 
writingDirection[1];
-                               SelManager = 
EditManager(_textFlow.interactionManager);
-                               if(SelManager) 
-                               {
-                                       SelManager.selectRange(0, 0);
-                                       //make sure there is never any blinking 
when running these tests
-                                       setCaretBlinkRate (0);
-                               }
-                               _editManager = SelManager;
-                       }
-                       _textFlow.flowComposer.updateAllControllers();
-               }
-
-               private static var sourceTextFlow:Array;
-               
-               private function setUpFlow(content:String):void
-               {
-                       var sourceFlow:TextFlow;
-                       if (content == _englishContent)
-                               sourceFlow = sourceTextFlow[0];
-                       else if (content == _japaneseContent)
-                               sourceFlow = sourceTextFlow[1];
-                       else 
-                               sourceFlow = 
TextConverter.importToFlow(content, TextConverter.PLAIN_TEXT_FORMAT);
-                       
-                       _textFlow.replaceChildren(0, _textFlow.numChildren);
-                       assertTrue("Empty TextFlow has incorrect 
ContainerLength",_textFlow.textLength == 
_textFlow.flowComposer.getControllerAt(0).textLength);
-                       var newFlow:TextFlow = sourceFlow.deepCopy() as 
TextFlow;
-                       var childCount:int = newFlow.numChildren;
-                       for (var i:int = newFlow.numChildren - 1; i >= 0; --i)
-                       {
-                               var child:FlowElement = newFlow.getChildAt(i);
-                               _textFlow.addChildAt(0, child);
-                       }
-                       _textFlow.flowComposer.updateAllControllers();
-                       _textFlow.interactionManager.selectRange(0, 0);
-                       _currentContent = content;
-               }
-               
-               private function initializeSourceTextFlow():void
-               {
-                       sourceTextFlow = [];
-                       
-                       // Create english content
-                       var englishFlow:TextFlow = 
TextConverter.importToFlow(_englishContent, TextConverter.PLAIN_TEXT_FORMAT);
-                       sourceTextFlow.push(englishFlow);
-
-                       // Create japanese content
-                       var japaneseFlow:TextFlow = 
TextConverter.importToFlow(_japaneseContent, TextConverter.PLAIN_TEXT_FORMAT);
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat();
-                       textFlowFormat.locale = "ja";
-                       japaneseFlow.format = textFlowFormat;
-                       sourceTextFlow.push(japaneseFlow);
-               }
-               
-               // axies
-               static private var floatTypeList:Array = [Float.LEFT, 
Float.RIGHT /*, Float.START, Float.END */];       // start & end disabled to 
make tests run faster
-               static private var contentLanguageList:Array = [ 
_englishContent, _japaneseContent];
-               static private var floatWidthList:Array = [ 5, 20, 50, 100, 
200, 400 ]
-               static private var floatHeightList:Array = [ 5, 20, 50, 100, 
200, 400 ]; 
-               
-               public function callTestMethod():void
-               {
-                       for each (var content:String in contentLanguageList)
-                       {
-                               var TestCase:XML = _testXML;
-                               var methodName:String = 
TestCase.TestData.(@name == "methodName").toString();                   
-                               for each (var floatValue:String in 
floatTypeList)
-                                       for each (var floatWidth:String in 
floatWidthList)
-                                               for each (var 
floatHeight:String in floatHeightList)
-                                               {
-                                                       setUpFlow(content);
-                                               //      trace(methodName, 
floatValue, floatWidth.toString(), floatHeight.toString());
-                                                       
this[methodName](floatValue, floatWidth, floatHeight);
-                                               }
-                       }
-               }
-               
-               // Test Cases:
-               // float at paragraph start (left, right)
-               // float at line start (left, right)
-               // float in middle of line (left, right)
-               // stacked floats (left, right)
-               // multiple (stacked) floats at start
-               // floats with no graphic
-               // float doesn't fit in container (width/height) (*on end last 
para height = 400 this happens)
-               // float does fit in container, following line does not
-               // float at end of container
-               // floats in multiple columns
-               // float fits, not enough space for text (min-width??)
-               
-               import flashx.textLayout.edit.ElementRange;
-               import flashx.textLayout.edit.ParaEdit;
-               
-               private function addFloatAtPosition(position:int, width:Number, 
height:Number, float:String):DisplayObject
-               {
-                       var secondColor:int = 0;
-                       switch(_floatColor)
-                       {
-                               case 0xFF0000:  secondColor = 0x770000;
-                                       break;
-                               case 0x00FF00:  secondColor = 0x007700;
-                                       break;
-                               case 0x0000FF:  secondColor = 0x000077;
-                                       break;
-                       }
-
-                       // Create a simple rectangular display object for the 
float
-                       // Rectangle is two tone, to make it easier to know 
which part you're looking at
-                       var displayObject:Sprite = new Sprite();
-                       var g:Graphics = displayObject.graphics;
-                       g.beginFill(_floatColor);
-                       g.drawRect(0, 0, width/2, height);
-                       g.endFill();
-                       g.beginFill(secondColor);
-                       g.drawRect(width/2, 0, width/2, height);
-                       g.endFill();
-                       
-                       // Cycle through colors so multiple floats can be 
visually disintguished
-                       switch (_floatColor)
-                       {
-                               case 0xFF0000:  _floatColor = 0x00FF00;
-                                                               break;
-                               case 0x00FF00:  _floatColor = 0x0000FF;
-                                                               break;
-                               case 0x0000FF:  _floatColor = 0xFF0000;
-                                                               break;
-                       }
-                       
-                       // Add it to the TextFlow at the specified location
-               //      _editManager.insertInlineGraphic(displayObject, width, 
height, float, new SelectionState(_textFlow, position, position));
-
-                       var range:ElementRange = 
ElementRange.createElementRange(_textFlow,position, position);         
-                       var leafNode:FlowElement = range.firstLeaf;
-                       var leafNodeParent:FlowGroupElement = leafNode.parent;
-                       
-                       ParaEdit.createImage(leafNodeParent, position - 
leafNodeParent.getAbsoluteStart(), displayObject, width, height, float, null);
-                       return displayObject;
-               }
-               
-               private function atParagraphStartInternal(leaf:FlowLeafElement, 
width:Number, height:Number, float:String, paragraphSpaceBefore:Number = 0):void
-               {
-                       var paragraph:ParagraphElement = leaf.getParagraph();
-                       var paraStart:int = paragraph.getAbsoluteStart();
-                       if (paragraph.computedFormat.paragraphSpaceBefore != 
paragraphSpaceBefore)
-                       {
-                               var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat();
-                               paragraphFormat.paragraphSpaceBefore = 
paragraphSpaceBefore;
-                               paragraph.format = paragraphFormat;
-                       }
-                       var floatObject:DisplayObject = 
addFloatAtPosition(paraStart, width, height, float);
-                       
-                       verifyFloatInLine(paraStart, width, height, float, 
floatObject);                
-               }
-               
-               /** Test adding a float to the start of the first and last 
paragraphs, with either left or right float, and with
-                * spaceBefore either 0 or 15. */
-               private function atFlowStart(float:String, width:Number, 
height:Number):void
-               {
-                       // On the first paragraph, add a float
-                       atParagraphStartInternal(_textFlow.getFirstLeaf(), 
width, height, float);                       
-               }
-               
-               /** Test adding a float to the start of the first and last 
paragraphs, with either left or right float, and with
-                * spaceBefore either 0 or 15. */
-               private function atFlowStartSpaceBefore(float:String, 
width:Number, height:Number):void
-               {
-                       // On the first paragraph, add a float
-                       atParagraphStartInternal(_textFlow.getFirstLeaf(), 
width, height, float, 15);                   
-               }
-               
-               /** Test adding a float to the start of the first and last 
paragraphs, with either left or right float, and with
-                * spaceBefore either 0 or 15. */
-               private function atParagraphStart(float:String, width:Number, 
height:Number):void
-               {
-                       // On the last paragraph, add a float
-                       atParagraphStartInternal(_textFlow.getLastLeaf(), 
width, height, float);                        
-               }
-               
-               private function atParagraphStartSpaceBefore(float:String, 
width:Number, height:Number):void
-               {
-                       // On the last paragraph, add a spaceBefore and a float
-                       atParagraphStartInternal(_textFlow.getFirstLeaf(), 
width, height, float, 15);                   
-               }
-
-               // Certify that the float was added to the container
-               // Certify that the float appears below the previous line's 
descenders
-               // Check that float appears at the correct horizontal alignment 
(left or right)
-               // If there's an intersecting float that comes before, it would 
appear to the left or right of that float (i.e., stacked)
-               // Look to see if they overlap in the blockProgression 
direction; if so, they're going to stack if they have the same float property
-               // Check the vertical location of the float. It should go below 
the previous line's descender, and at or above the next line.
-               // The EXCEPTION is if the float was displaced lower because it 
didn't fit on it's natural position (too wide). In that case,
-               // float may appear below following lines. Test needs to flag 
this so we don't assert false positive.
-               private function verifyFloatInLine(pos:int, width:Number, 
height:Number, float:String, floatObject:DisplayObject):void
-               {
-                       if (float == Float.NONE)                // not a float, 
nothing to check
-                               return;
-                       
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(pos);
-                       
-                       var previousTextFlowLine:TextFlowLine;
-                       var textFlowLine:TextFlowLine;
-                       
-                       // Certify that the float was added to the container
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var firstLine:TextFlowLine = 
controller.getFirstVisibleLine();
-                       var lastLine:TextFlowLine = 
controller.getLastVisibleLine();
-                       var firstLineIndex:int = firstLine ? 
_textFlow.flowComposer.findLineIndexAtPosition(firstLine.absoluteStart) : -1;
-                       var lastLineIndex:int = lastLine ? 
_textFlow.flowComposer.findLineIndexAtPosition(lastLine.absoluteStart) : -1;
-                       if (lineIndex >= firstLineIndex && lineIndex <= 
lastLineIndex)
-                       {
-                               assertTrue("Float not added as child of the 
container", controller.container.contains(floatObject));
-                       
-                               // Certify that the float appears below the 
previous line's descenders
-                               if (lineIndex > firstLineIndex)
-                               {
-                                       previousTextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex - 1);
-                               }
-                               textFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                               
-                               // Check that float appears at the correct 
horizontal alignment (left or right)
-                               // If there's an intersecting float that comes 
before, it would appear to the left or right of that float (i.e., stacked)
-                               var currentPos:int = textFlowLine.absoluteStart 
+ textFlowLine.textLength;
-                               var floatRect:Rectangle = new 
Rectangle(floatHolder.x, floatHolder.y, floatObject.width, floatObject.height);
-                               var pos:int = 0;
-                               var paraFormat:ITextLayoutFormat = 
textFlowLine.paragraph.computedFormat;
-                               var maxLeft:Number = 0;
-                               var maxRight:Number = verticalText ? 
controller.compositionHeight : controller.compositionWidth;
-                               var otherDirection:String;
-                               var otherFloatType:String;
-                               for (var leaf:FlowLeafElement = 
_textFlow.getFirstLeaf(); leaf && pos < currentPos; leaf = leaf.getNextLeaf())
-                               {
-                                       var otherInline:InlineGraphicElement = 
leaf as InlineGraphicElement;
-                                       if (otherInline)
-                                       {
-                                               if (otherInline.graphic == 
floatObject)         // this is our float, we're done
-                                                       break;
-                                               // Look to see if they overlap 
in the blockProgression direction; if so, they're going to stack if they have 
the same float property
-                                               if (verticalText)
-                                               {
-                                                       if 
(Math.floor(otherInline.graphic.parent.x) < Math.floor(floatRect.right))
-                                                       {
-                                                               otherDirection 
= otherInline.getParagraph().computedFormat.direction;
-                                                               otherFloatType 
= otherInline.computedFloat;
-                                                               if 
(otherFloatType == Float.START)
-                                                                       
otherFloatType = (otherDirection == Direction.LTR) ? Float.LEFT : Float.RIGHT;
-                                                               else if 
(otherFloatType == Float.END)
-                                                                       
otherFloatType = (otherDirection == Direction.RTL) ? Float.LEFT : Float.RIGHT;
-                                                               if 
(otherFloatType == Float.RIGHT)
-                                                                       
maxRight -= otherInline.elementHeight;
-                                                               if 
(otherFloatType == Float.LEFT)
-                                                                       maxLeft 
+= otherInline.elementHeight;
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       if 
(otherInline.graphic.parent.y + otherInline.elementHeight > floatRect.top)
-                                                       {
-                                                               otherDirection 
= otherInline.getParagraph().computedFormat.direction;
-                                                               otherFloatType 
= otherInline.computedFloat;
-                                                               if 
(otherFloatType == Float.START)
-                                                                       
otherFloatType = (otherDirection == Direction.LTR) ? Float.LEFT : Float.RIGHT;
-                                                               else if 
(otherFloatType == Float.END)
-                                                                       
otherFloatType = (otherDirection == Direction.RTL) ? Float.LEFT : Float.RIGHT;
-                                                               if 
(otherFloatType == Float.LEFT)
-                                                                       maxLeft 
+= otherInline.elementWidth;
-                                                               if 
(otherFloatType == Float.RIGHT)
-                                                                       
maxRight -= otherInline.elementWidth;
-                                                       }
-                                               }
-                                       }
-                                       pos += leaf.textLength;
-                               }
-
-                               // Check the vertical location of the float. It 
should go below the previous line's descender, and at or above the next line.
-                               // The EXCEPTION is if the float was displaced 
lower because it didn't fit on it's natural position (too wide). In that case,
-                               // float may appear below following lines. Test 
needs to flag this so we don't assert false positive.
-                               if (!_disableVerticalCheck)
-                               {
-                                       var floatAlignsWithPrevious:Boolean = 
false;
-                                       if (previousTextFlowLine)
-                                       {
-                                               if (verticalText)
-                                                       floatAlignsWithPrevious 
= Math.abs((floatHolder.x + floatObject.width) - (previousTextFlowLine.x - 
previousTextFlowLine.descent)) < 1;
-                                               else
-                                                       floatAlignsWithPrevious 
= Math.abs(floatHolder.y - (previousTextFlowLine.y + 
previousTextFlowLine.ascent + previousTextFlowLine.descent)) < 1;
-                                       }
-                                       else  // no previous line, so check it 
against the container logical top (assume 0)
-                                               if (verticalText)
-                                                       floatAlignsWithPrevious 
= true;
-                                               else
-                                                       floatAlignsWithPrevious 
= Math.abs(floatHolder.y) < 1;
-                                       var floatAlignsWithSameLine:Boolean = 
false;
-                                       if (verticalText)
-                                               floatAlignsWithSameLine = 
Math.abs((floatHolder.x + floatObject.width) - (textFlowLine.x - 
textFlowLine.descent)) < 1;
-                                       else
-                                               floatAlignsWithSameLine = 
Math.abs(floatHolder.y - (textFlowLine.y + textFlowLine.ascent + 
textFlowLine.descent)) < 1;
-                                       assertTrue("Float has incorrect logical 
vertical position", floatAlignsWithPrevious || floatAlignsWithSameLine);
-                               }
-
-                               // Check horizontal location of the float
-                               if (float == Float.START)
-                                       float = (paraFormat.direction == 
Direction.LTR) ? Float.LEFT : Float.RIGHT;
-                               else if (float == Float.END)
-                                       float = (paraFormat.direction == 
Direction.RTL) ? Float.LEFT : Float.RIGHT;
-                               if (float == Float.LEFT)
-                               {
-                                       if (verticalText)
-                                               assertTrue("Float should be on 
the left", Math.abs(floatHolder.y - maxLeft) < 1);
-                                       else
-                                               assertTrue("Float should be on 
the left", Math.abs(floatHolder.x - maxLeft) < 1);
-                               }
-                               else if (float == Float.RIGHT)
-                               {
-                                       if (verticalText)
-                                               assertTrue("Float should be on 
the right", Math.abs(floatRect.bottom - maxRight) < 1);
-                                       else
-                                               assertTrue("Float should be on 
the right", Math.abs(floatRect.right - maxRight) < 1);
-                               }
-                       }
-               }
-               
-               private function atLineStartInternal(lineIndex:int, 
width:Number, height:Number, float:String):void
-               {
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       var pos:int = textFlowLine.absoluteStart;
-                       var floatObject:DisplayObject = addFloatAtPosition(pos, 
width, height, float);
-                       
-                       verifyFloatInLine(pos, width, height, float, 
floatObject);
-               }
-               
-               private function atLineMiddleInternal(lineIndex:int, 
width:Number, height:Number, float:String):void
-               {
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       if (!textFlowLine)
-                               return;
-                       
-                       var pos:int = textFlowLine.absoluteStart + 
(textFlowLine.textLength/2);
-                       var floatObject:DisplayObject = addFloatAtPosition(pos, 
width, height, float);
-                       
-                       verifyFloatInLine(pos, width, height, float, 
floatObject);              // aligns with next line
-               }
-               
-               private function atLineEndInternal(lineIndex:int, width:Number, 
height:Number, float:String):void
-               {
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       var pos:int = textFlowLine.absoluteStart + 
textFlowLine.textLength - 1;
-                       var floatObject:DisplayObject = addFloatAtPosition(pos, 
width, height, float);
-                       
-                       verifyFloatInLine(pos, width, height, float, 
floatObject);              // aligns with next line
-               }
-               
-               /** Test adding a float at the start of a line, float should 
appear below and to the left or right of the line. */
-               private function atLineStart(float:String, width:Number, 
height:Number):void
-               {
-                       // At the start of the second line, add a left float
-                       atLineStartInternal(1, width, height, float);           
        
-               }
-
-               public function atLineMiddle(float:String, width:Number, 
height:Number):void
-               {
-                       // At the start of the second line, add a left float
-                       atLineMiddleInternal(1, width, height, float);          
        
-               }
-               
-               public function atLineEnd(float:String, width:Number, 
height:Number):void
-               {
-                       // At the start of the second line, add a left float
-                       atLineEndInternal(1, width, height, float);             
        
-               }
-               
-               private function 
atParagraphEndInternal(paragraph:ParagraphElement, width:Number, height:Number, 
float:String):void
-               {
-                       var paragraph:ParagraphElement = 
_textFlow.getFirstLeaf().getParagraph();
-                       var pos:int = paragraph.getAbsoluteStart() + 
paragraph.textLength - 1;
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(pos);
-                       atLineEndInternal(lineIndex, width, height, float);     
                
-               }
-               
-               public function atParagraphEnd(float:String, width:Number, 
height:Number):void
-               {
-                       if (height >= 400)
-                               return;
-                       
-                       // Add float to the end of the first paragraph
-                       
atParagraphEndInternal(_textFlow.getFirstLeaf().getParagraph(), width, height, 
float);                  
-               }
-               
-               // Test multiple floats on successive lines
-               public function stackedFloats(float:String, width:Number, 
height:Number):void
-               {
-                       if (width >= 400)
-                               return;
-                       
-                       atLineMiddleInternal(1, width, height, float);          
        
-                       // With a set of wide stacked floats, the second float 
gets pushed to after the 
-                       // preceding float, and therefore won't align with 
previous line's descender.
-                       // This is correct, but will assert so we turn off the 
asserts here.
-                       if ((_textFlow.blockProgression == BlockProgression.RL 
&& height >= 400) ||
-                               (_textFlow.blockProgression == 
BlockProgression.TB && width >= 400))
-                               _disableVerticalCheck = true;           // 
floats get pushed down b/c the second doesn't fit on the line, so don't check
-                       atLineMiddleInternal(2, width, height, float);  
-               }
-               
-               private function flipFloat(float:String):String { return 
Float.LEFT ? Float.RIGHT : Float.LEFT; }
-               
-               // Test multiple floats on successive lines on each side
-               public function onTwoSidesSuccessiveLines(float:String, 
width:Number, height:Number):void
-               {
-                       // On successive lines
-                       atLineMiddleInternal(1, width, height, float);          
        
-
-                       // With a set of wide stacked floats, the second float 
gets pushed to after the 
-                       // preceding float, and therefore won't align with 
previous line's descender.
-                       // This is correct, but will assert so we turn off the 
asserts here.
-                       if ((_textFlow.blockProgression == BlockProgression.RL 
&& height >= 400) ||
-                               (_textFlow.blockProgression == 
BlockProgression.TB && width >= 400))
-                               _disableVerticalCheck = true;           // 
floats get pushed down b/c the second doesn't fit on the line, so don't check
-                       
-                       atLineMiddleInternal(2, width, height, 
flipFloat(float));       
-               }
-
-               // Test multiple floats on the same line, one on each side
-               public function onTwoSidesSameLine(float:String, width:Number, 
height:Number):void
-               {
-                       // On the same line
-                       atLineMiddleInternal(2, width/2, height/2, float);      
                
-
-                       // With a set of wide stacked floats, the second float 
gets pushed to after the 
-                       // preceding float, and therefore won't align with 
previous line's descender.
-                       // This is correct, but will assert so we turn off the 
asserts here.
-                       if ((_textFlow.blockProgression == BlockProgression.RL 
&& height >= 400) ||
-                               (_textFlow.blockProgression == 
BlockProgression.TB && width >= 400))
-                               _disableVerticalCheck = true;           // 
floats get pushed down b/c the second doesn't fit on the line, so don't check
-                       
-                       atLineMiddleInternal(2, width, height, 
flipFloat(float));                                       
-               }
-               
-               private function 
logicalContentHeight(controller:ContainerController, 
verticalText:Boolean):Number { return verticalText ? controller.contentWidth : 
controller.contentHeight; }
-               private function 
logicalContentWidth(controller:ContainerController, 
verticalText:Boolean):Number { return verticalText ? controller.contentHeight : 
controller.contentWidth; }
-               
-               public function contentHeightCheck():void
-               {       
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       
-                       _textFlow.flowComposer.composeToPosition();
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var contentHeight:Number = 
logicalContentHeight(controller, verticalText);
-                       
-                       // Add a float to the end of the text, make sure it 
gets taller
-                       atLineMiddleInternal(_textFlow.flowComposer.numLines - 
1, 100, 100, Float.LEFT);
-                       
-                       // The float goes even with the line, so not all the 
100 pixels are added into the content height...
-                       assertTrue("Expected larger content height because of 
trailing float", logicalContentHeight(controller, verticalText) > contentHeight 
+ 70);
-               }
-               
-               public function contentWidthCheckLongFloat():void
-               {       // Should be adapted for RL
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.lineBreak = LineBreak.EXPLICIT;
-                       _textFlow.format = textFlowFormat;
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var lineNumber:int;
-                       var contentWidth:Number = 
logicalContentWidth(controller, verticalText);
-                       atLineStartInternal(1, 7000, 115, Float.LEFT);          
// insert graphic longer than longest line
-       //              assertTrue("Expected larger content width because of 
trailing float", logicalContentWidth(controller, verticalText) > contentWidth); 
                   
-               }
-               
-               public function noFloatsWithMeasureOrExplicit():void
-               {       
-                       // We expect that when text is not wrapping, floats 
will behave as inlines.
-
-                       var oldLinePos:Array;
-                       var newLinePos:Array;
-                       var flowComposer:IFlowComposer = _textFlow.flowComposer;
-                       var controller:ContainerController = 
flowComposer.getControllerAt(0);
-                       var textFlowFormat:TextLayoutFormat;
-                       var width:Number = controller.compositionWidth;
-                       var height:Number = controller.compositionHeight;
-                       
-                       // Create baseline to compare against, using inlines
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       textFlowFormat = new TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.lineBreak = LineBreak.EXPLICIT;
-                       _textFlow.format = textFlowFormat;
-                       atLineMiddleInternal(1, 100, 100, Float.NONE);          
        
-                       atLineMiddleInternal(2, 100, 100, Float.NONE);          
        
-                       flowComposer.updateAllControllers();
-                       oldLinePos = getCompositionResults(verticalText, 
flowComposer);
-                       
-                       // Flip inlines to floats
-                       for (var leaf:FlowLeafElement = 
_textFlow.getFirstLeaf(); leaf; leaf = leaf.getNextLeaf())
-                       {
-                               if (leaf is InlineGraphicElement)
-                                       (leaf as InlineGraphicElement).float = 
Float.LEFT;
-                       }
-
-                       // Test lineBreak=explicit, with floats
-                       flowComposer.updateAllControllers();
-                       newLinePos = getCompositionResults(verticalText, 
flowComposer);
-                       assertCompositionMatches(oldLinePos, newLinePos);
-                       
-                       // Test with lineBreak=toFit, with measuring
-                       textFlowFormat = new TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.lineBreak = LineBreak.TO_FIT;
-                       _textFlow.format = textFlowFormat;
-                       if (verticalText)
-                               controller.setCompositionSize(width, NaN);
-                       else
-                               controller.setCompositionSize(NaN, height);
-                       flowComposer.updateAllControllers();
-                       newLinePos = getCompositionResults(verticalText, 
flowComposer);         
-                       assertCompositionMatches(oldLinePos, newLinePos);
-               }
-               
-               public function hoistFailure():void
-                       // Test case where a graphic is narrow enough to get a 
hoist request, but too tall to fit once its composed. 
-                       // Should fall back to pushing to the next parcel.
-               {
-                       var width:Number = 100;
-                       var height:Number = 100;
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       controller.horizontalScrollPolicy = ScrollPolicy.OFF;
-                       controller.verticalScrollPolicy = ScrollPolicy.OFF;
-                       if (verticalText)
-                               width = controller.compositionWidth;
-                       else
-                               height = controller.compositionHeight;
-
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(1);
-                       if (!textFlowLine)
-                               return;
-                       
-                       var pos:int = textFlowLine.absoluteStart + 
(textFlowLine.textLength/2);
-                       var floatObject:DisplayObject = addFloatAtPosition(pos, 
width, height, Float.LEFT);
-                       
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       assertTrue("Expected float to get pushed out of 
controller, but its a child of container", 
!controller.container.contains(floatObject));
-                       assertTrue("Expected float to get pushed out of 
controller, but its within controller textLength bounds", pos > 
controller.absoluteStart + controller.textLength);
-               }
-               
-               public function noEmergencyBreakByFloat():void
-               {
-                       // We should get breaks in the middle of words because 
a float fills up most but not all of the column.
-                       // Text should appear below the float if the word 
doesn't fit next to the float.
-                       var secondParagraph:ParagraphElement = 
_textFlow.getChildAt(1) as ParagraphElement;
-                       var width:Number =  
(_textFlow.computedFormat.blockProgression == BlockProgression.RL) ? 458 : 807;
-                       var floatPosition:int = 
secondParagraph.getAbsoluteStart();
-                       var floatObject:DisplayObject = 
addFloatAtPosition(floatPosition, width, 60, Float.START);
-                       _textFlow.flowComposer.updateAllControllers(); 
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.findLineAtPosition(floatPosition + 1);
-                       var lastCharInLine:String = 
_textFlow.getText(textFlowLine.absoluteStart + textFlowLine.textLength - 1, 
textFlowLine.absoluteStart + textFlowLine.textLength);
-                       assertTrue("Line should end with a legal word separator 
(expected space", lastCharInLine == " ");
-               }
-               
-               public function fillsColumnRecursion():void
-               {
-                       // Detects an infinite recursion in composition
-                       // Add a float that almost but not quite fits the whole 
column
-                       var secondParagraph:ParagraphElement = 
_textFlow.getChildAt(1) as ParagraphElement;
-                       var width:Number =  
(_textFlow.computedFormat.blockProgression == BlockProgression.RL) ? 458 : 807;
-                       var floatObject:DisplayObject = 
addFloatAtPosition(secondParagraph.getAbsoluteStart(), width, 60, Float.START);
-                       _textFlow.flowComposer.updateAllControllers(); 
-               }
-               
-               public function fillsColumn():void
-               {
-                       var width:Number = 100;
-                       var height:Number = 100;
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       if (verticalText)
-                               height = 
_textFlow.flowComposer.getControllerAt(0).compositionHeight;
-                       else
-                               width = 
_textFlow.flowComposer.getControllerAt(0).compositionWidth;
-                       atLineMiddleInternal(1, width, height, Float.LEFT);
-                       _textFlow.flowComposer.updateAllControllers();
-               }
-               
-               public function atControllerEnd():void
-               {
-                       // Float at the end of a scrollable container should 
appear in the container even if it
-                       // would otherwise be too tall.
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       controller.verticalScrollPolicy = ScrollPolicy.ON;
-                       var width:Number = 50;
-                       var height:Number = controller.compositionHeight + 50;
-                       if (verticalText)
-                       {
-                               width = controller.compositionWidth + 50;
-                               height = 50;
-                       }
-
-                       var secondPara:ParagraphElement = 
_textFlow.getChildAt(1) as ParagraphElement;
-                       var floatPosition:int = secondPara.getAbsoluteStart();
-                       var floatObject:DisplayObject = 
addFloatAtPosition(floatPosition, width, height, Float.START);
-                       _textFlow.flowComposer.updateAllControllers();
-                       assertTrue("Float should be in the container", 
controller.container.contains(floatObject));
-
-                       if (verticalText)
-                               controller.horizontalScrollPolicy = 
ScrollPolicy.OFF;
-                       else
-                               controller.verticalScrollPolicy = 
ScrollPolicy.OFF;
-                       _textFlow.flowComposer.updateAllControllers();
-                       assertTrue("Float should not be composed in the 
container", controller.absoluteStart + controller.textLength <= floatPosition);
-                       assertTrue("Float should not be displayed in the 
container", !controller.container.contains(floatObject));
-                       
-                       // Turning scrolling off changes the basic coordinate 
system
-                       if (verticalText)
-                               _disableBoundsCheck = true;
-       }
-               
-               public function widerThanColumn():void
-               {
-                       // Float is wider than the container. If the height of 
the float fits, and there are 
-                       // no preceeding floats, it should still go in the 
column, and overlap the adjacent 
-                       // columns
-                       setUpContainers(3);
-
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var width:Number = controller.compositionWidth + 50;
-                       var height:Number = 100;
-                       if (verticalText)
-                       {
-                               width = 100;
-                               height = controller.compositionHeight + 50;
-                       }
-                       _textFlow.flowComposer.updateAllControllers();
-                       var contentBoundsTextOnly:Rectangle = 
controller.getContentBounds();
-
-                       var floatObject:DisplayObject = addFloatAtPosition(0, 
width, height, Float.START);
-                       verifyFloatInLine(0, width, height, Float.START, 
floatObject);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var contentBoundsWithFloat:Rectangle = 
controller.getContentBounds();
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                       {
-                               assertTrue("Content bounds with a float wider 
than the column should be larger than content bounds with just text", 
contentBoundsWithFloat.height > contentBoundsTextOnly.height);
-                               assertTrue("Content bounds with a float should 
be equal to or greater than float alone", contentBoundsWithFloat.height >= 
height);
-                       }
-                       else
-                       {
-                               assertTrue("Content bounds with a float wider 
than the column should be larger than content bounds with just text", 
contentBoundsWithFloat.width > contentBoundsTextOnly.width);
-                               assertTrue("Content bounds with a float should 
be equal to or greater than float alone", contentBoundsWithFloat.width >= 
width);
-                       }
-                       
-                       // Check that if the float protrudes past the text it's 
factored into the content height
-                       SelManager.deleteText(new SelectionState(_textFlow, 50, 
int.MAX_VALUE));                // delete so there's not so much text
-                       _textFlow.flowComposer.updateAllControllers();
-                       var contentBoundsAfterDelete:Rectangle = 
controller.getContentBounds();
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                       {
-                               assertTrue("Content bounds doesn't include 
logical height of float", contentBoundsAfterDelete.width >= width);
-                       }
-                       else
-                       {
-                               assertTrue("Content bounds doesn't include 
height of float", contentBoundsAfterDelete.height >= height);
-                       }
-                       SelManager.undo();              // undo the delete of 
the text
-                       
-                       // Resize the first container smaller, so the float 
goes overset
-                       if (verticalText)
-                               controller.setCompositionSize(width - 1, 
controller.compositionHeight);
-                       else
-                               
controller.setCompositionSize(controller.compositionWidth, height - 1);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var secondController:ContainerController = 
_textFlow.flowComposer.getControllerAt(1);
-                       assertTrue("Expected the float to get pushed to second 
container", secondController.absoluteStart == 0);
-                       assertTrue("Float should be in the second container", 
secondController.container.contains(floatObject));
-
-                       // Try it again with columns instead of containers -- 
should be the same
-                       setUpContainers(1);
-                       controller = _textFlow.flowComposer.getControllerAt(0);
-                       controller.columnCount = 3;
-                       verifyFloatInLine(0, width, height, Float.START, 
floatObject);
-                       
-                       // Make the first float smaller, and add a second large 
float afterwards
-                       var inlineElement:InlineGraphicElement = 
_textFlow.findLeaf(0) as InlineGraphicElement;
-                       inlineElement.width = 50;
-                       inlineElement.height = 50;
-                       var secondFloat:DisplayObject = addFloatAtPosition(4, 
width, height, Float.START);
-                       _textFlow.flowComposer.updateAllControllers();
-                       assertTrue("Second float should not appear on the first 
line", verticalText ? (secondFloat.parent.x < floatObject.parent.x) : 
(secondFloat.parent.y > floatObject.parent.y));
-                       assertTrue("Second float should be in the container", 
controller.container.contains(secondFloat));
-               }
-               
-               public function widerThanColumnScroll():void            // 
Watson 2762393
-               {
-                       // Float is wider than the container. If any part of 
the float is visible, the 
-                       // float should appear in the container. Width of float 
should be counted in 
-                       // the contentWidth.
-
-                       
-                       var xml:XML =
-                               <TextFlow 
xmlns='http://ns.adobe.com/textLayout/2008'>                                    
              
-                                       <span fontSize="20">Hello, Dear 
Guest,</span>
-                                       <p></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                                       <p></p>
-                                       <p></p>
-                                       <p></p>
-                                       <p><span>Donec sed risus nec risus 
elementum cursus eget non nulla. Integer dui mauris, lobortis at varius quis, 
elementum at justo. Ut lacinia arcu vitae ipsum pulvinar feugiat a ut risus. 
Vivamus nulla nisi, varius vitae commodo ut, volutpat quis magna. Cras posuere 
quam magna. Aenean felis purus, pellentesque nec fringilla id, dignissim quis 
elit. Praesent velit libero, laoreet quis dignissim id, varius quis neque. 
Suspendisse vulputate placerat purus. Fusce euismod fringilla ornare. Nulla et 
urna est. Proin a tellus et tortor feugiat iaculis.</span></p>
-                               </TextFlow>;
-                       
-                       initializeFlow(TextConverter.importToFlow(xml, 
TextConverter.TEXT_LAYOUT_FORMAT));
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-
-                       // Insert a float wider than the column into the empty 
second paragraph
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var width:Number = controller.compositionWidth + 100;
-                       var height:Number = controller.compositionHeight + 100;
-                       var floatPosition:int = 
_textFlow.getChildAt(1).getAbsoluteStart();
-                       var floatObject:DisplayObject = 
addFloatAtPosition(floatPosition, width, height, Float.END);
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       verifyFloatInLine(floatPosition, width, height, 
Float.END, floatObject);
-                       assertTrue("Float should be visible", 
controller.container.contains(floatObject));
-
-                       var contentBoundsWithFloat:Rectangle = 
controller.getContentBounds();
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                       {
-                               assertTrue("Content bounds with a float wider 
than the column should be larger than content bounds with just text", 
contentBoundsWithFloat.height > controller.compositionHeight);
-                               assertTrue("Content bounds with a float should 
be equal to or greater than float alone", contentBoundsWithFloat.height >= 
height);
-                       }
-                       else
-                       {
-                               assertTrue("Content bounds with a float wider 
than the column should be larger than content bounds with just text", 
contentBoundsWithFloat.width > controller.compositionWidth);
-                               assertTrue("Content bounds with a float should 
be equal to or greater than float alone", contentBoundsWithFloat.width >= 
width);
-                       }
-                       
-                       controller.verticalScrollPosition = 
contentBoundsWithFloat.height;
-                       _textFlow.flowComposer.updateAllControllers();
-       //              assertTrue("Float should not be visible", 
!controller.container.contains(floatObject));
-
-                       controller.verticalScrollPosition = 0;
-                       _textFlow.flowComposer.updateAllControllers();
-                       assertTrue("Float should be visible", 
controller.container.contains(floatObject));
-                       
-               }
-               
-               public function floatOnly():void
-               {
-                       // TextFlow contains only a single float, no text
-                       setUpFlow("");
-                       atParagraphStartInternal(_textFlow.getFirstLeaf(), 100, 
100, Float.LEFT);
-                       
-                       // hittest (Watson 2617901)
-                       // In RTL, we're getting different results from the 
Player depending on Astro or Argo...
-                       if (_textFlow.computedFormat.direction == Direction.LTR 
|| Configuration.playerEnablesArgoFeatures)
-                       {
-                               SelManager.selectRange(0, 0);
-                               _flowComposer.updateAllControllers();
-                               var controller:ContainerController = 
_flowComposer.getControllerAt(0);
-                               var mouseEvent:MouseEvent = new 
MouseEvent(MouseEvent.MOUSE_DOWN, true, false, 200, 200, controller.container, 
false, false, false, false);
-                               controller.container.dispatchEvent(mouseEvent);
-                               
-                               assertTrue("Expected insertion point after 
float", SelManager.absoluteStart == 1);
-                       }
-                       
-               }
-               
-               public function inlineAndFloat():void
-               {
-                       // Inline as first leaf, followed by float. Watson 
2636066
-                       
-                       // TextFlow contains only a single float, no text
-                       setUpFlow("A");
-                       var inlineDO:DisplayObject = addFloatAtPosition(0, 100, 
100, Float.NONE);
-                       var floatDO:DisplayObject = addFloatAtPosition(1, 100, 
100, Float.LEFT);
-                       
-               } 
-               
-               public function convertFloatToInline():void
-               {
-                       var floatValueList:Array = [Float.LEFT, Float.RIGHT , 
Float.NONE, Float.START, Float.END ];     // start & end disabled to make tests 
run faster
-
-                       // Test switching the float type of an inline graphic 
element
-                       var floatValue:String = 
floatValueList[floatTypeList.length - 1];
-                       var secondParagraph:FlowElement = 
_textFlow.getChildAt(1);
-                       var floatPosition:int = 
secondParagraph.getAbsoluteStart();
-                       var floatObject:DisplayObject = 
addFloatAtPosition(floatPosition, 30, 30, floatValue);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var inlineGraphicElement:InlineGraphicElement = 
_textFlow.findLeaf(floatPosition) as InlineGraphicElement;
-                       SelManager.selectRange(floatPosition, floatPosition + 
1);
-                       for each (floatValue in floatValueList)
-                               
SelManager.modifyInlineGraphic(inlineGraphicElement.source, 
inlineGraphicElement.width, inlineGraphicElement.height, floatValue);
-               }
-               
-               public function verticalAlignInline():void
-                       // Make sure that vertical alignment (especially 
justification) is working correctly with inlines. See 2772554
-               {
-                       // TextFlow contains a single line of text with an 
inline, should be centered vertically
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       setUpFlow("Vertical align with inlines test");
-
-                       // Check for middle
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.verticalAlign = VerticalAlign.MIDDLE;
-                       _textFlow.format = textFlowFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(0, 
100, 100, Float.NONE);
-                       _textFlow.flowComposer.updateAllControllers();
-
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var bounds:Rectangle = 
floatObject.getBounds(controller.container);
-                       if (verticalText)
-                               assertTrue("Expected float would be in the 
middle of the container", Math.abs((controller.compositionWidth + bounds.x) - 
Math.abs(bounds.x + bounds.width)) < controller.compositionWidth * .1);
-                       else
-                               assertTrue("Expected float would be in the 
middle of the container", Math.abs((bounds.y + (bounds.height/2)) - 
(controller.compositionHeight / 2)) < controller.compositionHeight * .1);
-
-                       // Check for bottom. Leave a little wiggle room in this 
test because the inline is on the baseline and not against the bottom 
-                       textFlowFormat.verticalAlign = VerticalAlign.BOTTOM;
-                       _textFlow.format = textFlowFormat;
-                       _textFlow.flowComposer.updateAllControllers();
-                       bounds = floatObject.getBounds(controller.container);
-                       if (verticalText)
-                               assertTrue("Expected float would be in the 
bottom of the container", Math.abs(bounds.x + controller.compositionWidth) < 
10);
-                       else
-                               assertTrue("Expected float would be in the 
bottom of the container", Math.abs(bounds.y + bounds.height - 
controller.compositionHeight) < 10);
-                       
-                       // Check for justify -- this needs multiple lines. Set 
alignment to TOP, check position, reset to JUSTIFY, position should have 
changed.
-                       setUpFlow("Vertical align with inlines test  dlfkj sdlk 
jsdlfkj sdlkfj dslkfj sdlkfj dlskfj dslkfj lkdsfj ldksfj dlksfj dslkfj 
dlskjfdslkjf lsdkjf lsdkfj sdlkfj sdlkfj dslkfj dslkfj sdlkfj dslkf jdslkfj 
sdlkfj sdlkfj ldskfj ldksfj lsdkfjldskfj lsdkfjdslkfj");
-                       textFlowFormat.verticalAlign = VerticalAlign.TOP;
-                       _textFlow.format = textFlowFormat;
-                       floatObject = addFloatAtPosition(0, 100, 100, 
Float.NONE);
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       controller = _textFlow.flowComposer.getControllerAt(0);
-                       var topBounds:Rectangle = 
floatObject.getBounds(controller.container);
-                       
-                       textFlowFormat.verticalAlign = VerticalAlign.JUSTIFY;
-                       _textFlow.format = textFlowFormat;
-                       _textFlow.flowComposer.updateAllControllers();
-                       bounds = floatObject.getBounds(controller.container);
-                       assertTrue(!bounds.equals(topBounds), "Line should have 
been moved when vertical justification applied");
-               }
-               
-               private function verticalAlignMiddle(content:String):void
-               {
-                       // TextFlow contains a single line of text with a 
float, should be centered vertically
-                       // Floats extends past the text
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       setUpFlow(content);
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.verticalAlign = VerticalAlign.MIDDLE;
-                       _textFlow.format = textFlowFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(0, 
100, 100, Float.LEFT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       if (verticalText)
-                               assertTrue("Expected float would be in the 
middle of the container", Math.abs((controller.compositionWidth + 
floatHolder.x) - Math.abs(floatHolder.x + floatObject.width)) < 
controller.compositionWidth * .1);
-                       else
-                               assertTrue("Expected float would be in the 
middle of the container", Math.abs((floatHolder.y + (floatObject.height/2)) - 
(controller.compositionHeight / 2)) < controller.compositionHeight * .1);
-               }
-               
-               public function verticalAlignMiddleFloatAtEnd():void
-               {
-                       // TextFlow contains a single line of text with a 
float, should be centered vertically
-                       // Floats extends past the text
-                       verticalAlignMiddle("A");
-               }
-               
-               public function verticalAlignMiddleTextAtEnd():void
-               {
-                       // TextFlow contains a single line of text with a 
float, should be centered vertically
-                       // Text extends past the float
-                       verticalAlignMiddle("A\nBBB BBB BBB BBB BBB BBB BBB BBB 
BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB 
BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB 
");
-               }
-               
-               private function verticalAlignBottom(content:String):void
-               {
-                       // TextFlow contains a single line of text with a 
float, should be on the bottom of the container
-                       // Floats extends past the text
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       setUpFlow(content);
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.verticalAlign = VerticalAlign.BOTTOM;
-                       _textFlow.format = textFlowFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(0, 
100, 100, Float.LEFT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       if (verticalText)
-                               assertTrue("Expected float would be in the 
bottom of the container", Math.abs(floatHolder.x + controller.compositionWidth) 
< 1);
-                       else
-                               assertTrue("Expected float would be in the 
bottom of the container", Math.abs(floatHolder.y + floatObject.height - 
controller.compositionHeight) < 1);
-               }
-               
-               public function verticalAlignBottomFloat2636122():void
-               {
-                       // test for bug 2636122 - very similar to 
verticalAlignBottom, but not quite
-                       
-                       // BoundsChecker fails on this because it sets 
verticalAlign on controller, BoundsChecker checks whole flow
-                       _disableBoundsCheck = true;
-                       
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       setUpFlow("A");
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatObject:DisplayObject = addFloatAtPosition(1, 
100, 100, Float.LEFT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(controller.format);
-                       textFlowFormat.verticalAlign = VerticalAlign.BOTTOM;
-                       controller.format = textFlowFormat;
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       if (verticalText)
-                               assertTrue("Expected float would be in the 
bottom of the container", Math.abs(floatHolder.x + controller.compositionWidth) 
< 1);
-                       else
-                               assertTrue("Expected float would be in the 
bottom of the container", Math.abs(floatHolder.y + floatObject.height - 
controller.compositionHeight) < 1);
-                       var tfl:TextFlowLine = 
_textFlow.flowComposer.getLineAt(0);
-                       if (verticalText)
-                               assertTrue("Expected line would be in the 
bottom of the container", Math.abs((tfl.x + tfl.height) - (floatHolder.x + 
floatHolder.width)) < 1);
-                       else
-                               assertTrue("Expected line would be in the 
bottom of the container", Math.abs(tfl.y + floatObject.height - 
controller.compositionHeight) < 1);
-                       
-               }
-               
-               public function verticalAlignBottomFloatAtEnd():void
-               {
-                       // TextFlow contains a single line of text with a 
float, should be centered vertically
-                       // Floats extends past the text
-                       verticalAlignBottom("A");
-               }
-               
-               public function verticalAlignBottomTextAtEnd():void
-               {
-                       // TextFlow contains a single line of text with a 
float, should be centered vertically
-                       // Text extends past the float
-                       verticalAlignBottom("A\nBBB BBB BBB BBB BBB BBB BBB BBB 
BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB 
BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB BBB 
");
-               }
-               
-               private function getCompositionResults(verticalText:Boolean, 
flowComposer:IFlowComposer):Array
-               {
-                       var linePos:Array = [];
-                       var numLines:int = flowComposer.numLines;
-                       for  (var i:int = 0; i < numLines; ++i)
-                       {
-                               var line:TextFlowLine = 
flowComposer.getLineAt(i);
-                               linePos.push(verticalText ? line.x : line.y);
-                       }
-                       return linePos;
-               }
-               
-               private function assertCompositionMatches(oldLineArray:Array, 
newLineArray:Array):void
-               {
-                       assertTrue("Expected same composition, found different 
line count", oldLineArray.length == newLineArray.length);
-                       for  (var i:int = 0; i < oldLineArray.length; ++i)
-                       {
-                               assertTrue("Expected same composition, found 
line " + i.toString() + "moved in logical vertical direction", oldLineArray[i] 
== newLineArray[i]);
-                       }
-               }
-               public function noVJ():void
-               {
-                       // We expect that verticalAlign = justify in the 
presence of floats is identical to verticalAlign = top (i.e.
-                       // the verticalAlign is ignored.
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       var flowComposer:IFlowComposer = _textFlow.flowComposer;
-                       var line:TextFlowLine;
-                       atLineMiddleInternal(1, 100, 100, Float.LEFT);          
        
-                       flowComposer.updateAllControllers();
-                       var oldLinePos:Array = 
getCompositionResults(verticalText, flowComposer);
-                       
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.verticalAlign = VerticalAlign.JUSTIFY;
-                       _textFlow.format = textFlowFormat;
-                       flowComposer.updateAllControllers();
-                       var newLinePos:Array = 
getCompositionResults(verticalText, flowComposer);
-
-                       assertCompositionMatches(oldLinePos, newLinePos);
-               }
-
-               private function textAlignRight(pos:int):void
-               {
-                       // Test that right-aligned floats do not overlap right 
aligned lines
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       var textFlowFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       textFlowFormat.textAlign = TextAlign.RIGHT;
-                       _textFlow.format = textFlowFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(pos, 
100, 100, Float.RIGHT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(pos);
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex + 1);
-                       var textLine:TextLine 
-                       var bbox:Rectangle = textFlowLine.getBounds();
-                       if (verticalText)
-                               assertTrue("Expected float would not overlap 
text", floatHolder.y >= textFlowLine.y + bbox.width);
-                       else
-                               assertTrue("Expected float would not overlap 
text", Math.abs(floatHolder.x - (textFlowLine.x + bbox.width)) < 2);
-               }
-               
-               public function textAlignRightAtStart():void
-               {
-                       textAlignRight(0);
-               }
-               
-               public function textAlignRightInMiddle():void
-               {
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(3);
-
-                       textAlignRight(textFlowLine.absoluteStart + 
textFlowLine.textLength/2);
-               }
-               
-               private const INDENT_AMOUNT:Number = 20;
-
-               public function leftIndent():void
-               {
-                       // Test that floats in indented paragraphs are indented
-                       
-                       // Try a left float with a start indent
-                       var leaf:FlowLeafElement = _textFlow.getFirstLeaf();
-                       var firstPara:ParagraphElement = leaf.getParagraph();
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(firstPara.format);
-                       if (firstPara.computedFormat.direction == Direction.LTR)
-                               paragraphFormat.paragraphStartIndent = 
INDENT_AMOUNT;
-                       else
-                               paragraphFormat.paragraphEndIndent = 
INDENT_AMOUNT;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       firstPara.format = paragraphFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(200, 
100, 100, Float.LEFT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                               assertTrue("Expected float to be indented with 
paragraph", floatHolder.y == INDENT_AMOUNT);
-                       else
-                               assertTrue("Expected float to be indented with 
paragraph", floatHolder.x == INDENT_AMOUNT);
-               }
-
-               public function rightIndent():void
-               {
-                       // Test that floats in indented paragraphs are indented
-                       
-                       // Try a right float with a right indent
-                       var leaf:FlowLeafElement = _textFlow.getFirstLeaf();
-                       var firstPara:ParagraphElement = leaf.getParagraph();
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(firstPara.format);
-                       if (firstPara.computedFormat.direction == Direction.RTL)
-                               paragraphFormat.paragraphStartIndent = 
INDENT_AMOUNT;
-                       else
-                               paragraphFormat.paragraphEndIndent = 
INDENT_AMOUNT;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       firstPara.format = paragraphFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(200, 
100, 100, Float.RIGHT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                               assertTrue("Expected float to be indented with 
paragraph", Math.abs((floatHolder.y + floatObject.height) - 
(controller.compositionHeight - INDENT_AMOUNT)) < 1);
-                       else
-                               assertTrue("Expected float to be indented with 
paragraph", Math.abs((floatHolder.x + floatObject.width) - 
(controller.compositionWidth - INDENT_AMOUNT)) < 1);
-               }
-               
-               public function leftBigIndent():void
-               {
-                       var indentAmount:Number = 200;  // bigger than float 
width
-                       
-                       // Add a float, and check that a paragraph with a big 
indent will wrap to the max of the indent & float
-                       var leaf:FlowLeafElement = _textFlow.getLastLeaf();
-                       var secondPara:ParagraphElement = leaf.getParagraph();
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(secondPara.format);
-                       if (secondPara.computedFormat.direction == 
Direction.LTR)
-                               paragraphFormat.paragraphStartIndent = 
indentAmount;
-                       else
-                               paragraphFormat.paragraphEndIndent = 
indentAmount;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       secondPara.format = paragraphFormat;
-                       
-                       var floatObject:DisplayObject = addFloatAtPosition(200, 
100, 100, Float.LEFT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(secondPara.getAbsoluteStart());
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       var bbox:Rectangle = textFlowLine.getBounds();
-                       if (secondPara.computedFormat.direction == 
Direction.LTR)
-                       {
-                               if (_textFlow.computedFormat.blockProgression 
== BlockProgression.RL)
-                                       assertTrue("Expected line in second 
paragraph to have large indent", bbox.top == indentAmount);
-                               else
-                                       assertTrue("Expected line in second 
paragraph to have large indent", bbox.left == indentAmount);
-                       }
-               }
-
-               public function rightBigIndent():void
-               {
-                       var indentAmount:Number = 200;  // bigger than float 
width
-                       
-                       // Add a float, and check that a paragraph with a big 
indent will wrap to the max of the indent & float
-                       var leaf:FlowLeafElement = _textFlow.getLastLeaf();
-                       var secondPara:ParagraphElement = leaf.getParagraph();
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(secondPara.format);
-                       if (secondPara.computedFormat.direction == 
Direction.LTR)
-                               paragraphFormat.paragraphEndIndent = 
indentAmount;
-                       else
-                               paragraphFormat.paragraphStartIndent = 
indentAmount;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       secondPara.format = paragraphFormat;
-                       
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var floatObject:DisplayObject = addFloatAtPosition(200, 
100, 100, Float.RIGHT);
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(secondPara.getAbsoluteStart());
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       var bbox:Rectangle = textFlowLine.getBounds();
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                               assertTrue("Expected line in second paragraph 
to have large indent", Math.abs(bbox.bottom - (controller.compositionHeight - 
indentAmount)) < 1);
-                       else
-                               assertTrue("Expected line in second paragraph 
to have large indent", Math.abs(bbox.right - (controller.compositionWidth - 
indentAmount)) < 1);
-               }
-               
-               public function clearNoPrecedingFloatAll():void
-               {
-                       clearAll(clearNoPrecedingFloat, 0);
-               }
-               
-               private function clearNoPrecedingFloat(clear:String, 
floatCount:int):void
-               {
-                       var indentAmount:Number = 200;  
-                       var leaf:FlowLeafElement = _textFlow.getLastLeaf();
-                       var secondPara:ParagraphElement = leaf.getParagraph();
-                       _textFlow.flowComposer.updateAllControllers();
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                               var secondPara_x:int = 
secondPara.getAbsoluteStart();
-                       else
-                               var secondPara_y:int = 
secondPara.getAbsoluteStart();
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(secondPara.format);
-                       paragraphFormat.clearFloats = clear;
-                       if (secondPara.computedFormat.direction == 
Direction.LTR)
-                               paragraphFormat.paragraphEndIndent = 
indentAmount;
-                       else
-                               paragraphFormat.paragraphStartIndent = 
indentAmount;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       secondPara.format = paragraphFormat;
-                       
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                               assertTrue("Second paragraph should not be 
impacted by clear", secondPara_x == secondPara.getAbsoluteStart());
-                       else
-                               assertTrue("Second paragraph should not be 
impacted by clear", secondPara_y == secondPara.getAbsoluteStart());
-               }
-               
-               public function leftIndentWithTab():void
-               {
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       SelManager.insertText("\tThis is test");
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       var leaf:FlowLeafElement = _textFlow.getFirstLeaf();
-                       var firstPara:ParagraphElement = leaf.getParagraph();
-                       if (firstPara.computedFormat.direction == Direction.LTR)
-                               paragraphFormat.paragraphStartIndent = 
INDENT_AMOUNT;
-                       else
-                               paragraphFormat.paragraphEndIndent = 
INDENT_AMOUNT;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       firstPara.format = paragraphFormat;
-                       
-                       var floatObject:DisplayObject = addFloatAtPosition(0, 
100, 100, Float.LEFT);
-                       paragraphFormat.tabStops = "e318";
-                       SelManager.applyParagraphFormat(paragraphFormat);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       var paragraph:ParagraphElement = 
_textFlow.getFirstLeaf().getParagraph();
-                       var posStart:int = paragraph.getAbsoluteStart();
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(posStart);
-                       var tfl:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       
-                       if (verticalText)
-                               assertTrue("Expected float to be indented with 
paragraph", floatHolder.x <= tfl.x);
-                       else
-                               assertTrue("Expected float to be indented with 
paragraph", floatHolder.y <= tfl.y);
-               }
-               
-               public function rightIndentWithTab():void
-               {
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       SelManager.insertText("\tThis is test");
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(_textFlow.format);
-                       var leaf:FlowLeafElement = _textFlow.getFirstLeaf();
-                       var firstPara:ParagraphElement = leaf.getParagraph();
-                       
-                       if (firstPara.computedFormat.direction == Direction.RTL)
-                               paragraphFormat.paragraphStartIndent = 
INDENT_AMOUNT;
-                       else
-                               paragraphFormat.paragraphEndIndent = 
INDENT_AMOUNT;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       firstPara.format = paragraphFormat;
-                       var floatObject:DisplayObject = addFloatAtPosition(5, 
100, 100, Float.RIGHT);
-                       paragraphFormat.tabStops = "e300";
-                       SelManager.applyParagraphFormat(paragraphFormat);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       var paragraph:ParagraphElement = 
_textFlow.getFirstLeaf().getParagraph();
-                       var posStart:int = paragraph.getAbsoluteStart();
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(posStart);
-                       var tfl:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       
-                       if (verticalText)
-                               assertTrue("Expected float to be indented with 
paragraph",  (floatHolder.y >= (tfl.y + tfl.textLength)));
-                       else
-                               assertTrue("Expected float to be indented with 
paragraph", (( tfl.x+ tfl.textLength )<= floatHolder.x ));
-               }
-               
-               private function stackedLeftRightFloats(float:String):void
-               {
-                       var width:Number = 100;
-                       var height:Number = 100;
-                       
-                       var verticalText:Boolean = _textFlow.blockProgression 
== BlockProgression.RL;
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       SelManager.insertText("AAAAAAAAAAAAAAAAAAAAAA\n");
-                       SelManager.insertText("BBBBBBBBBBBBBBBBBBBBBB\n");
-                       _textFlow.flowComposer.updateAllControllers();
-                       
-                       var tlf1:TextFlowLine = 
_textFlow.flowComposer.getLineAt(1);
-                       var tlf2:TextFlowLine = 
_textFlow.flowComposer.getLineAt(2);
-                       
-                       var pos1:int = tlf1.absoluteStart;
-                       var floatObject1:DisplayObject = 
addFloatAtPosition(pos1, width, height, float);
-                       var pos2:int = tlf2.absoluteStart;
-                       var floatObject2:DisplayObject = 
addFloatAtPosition(pos2, width, height, float);
-                       
-                       verifyFloatInLine(pos1, width, height, float, 
floatObject1);
-                       verifyFloatInLine(pos2, width, height, float, 
floatObject2);
-               }
-               
-               public function stackedLeftFloats():void
-               {
-                       var float:String = "left";
-                       stackedLeftRightFloats(float); 
-               }
-               
-               public function stackedRightFloats():void
-               {       
-                       var float:String = "right";
-                       stackedLeftRightFloats(float);
-               }
-               
-               private var clearArray:Array = [ ClearFloats.LEFT, 
ClearFloats.RIGHT, ClearFloats.BOTH, ClearFloats.START, ClearFloats.END ];
-               private function clearAll(method:Function, floatCount:int):void
-               {
-                       for each (var content:String in contentLanguageList)
-                       {
-                               for each (var clearValue:String in clearArray)
-                               {
-                                       setUpFlow(content);
-                                       method(clearValue, floatCount);
-                               }
-                       }
-               }
-               
-               public function clearOneAll():void
-               {
-                       clearAll(clearFloatTest, 1);
-               }
-
-               
-               public function clearTwoAll():void
-               {
-                       clearAll(clearFloatTest, 2);
-               }
-               
-               private function clearFloatTest(clear:String, 
floatCount:int):void
-               {
-                       var indentAmount:Number = 200;  // bigger than float 
width
-                       
-                       // Add a float, and check that a paragraph with a big 
indent will wrap to the max of the indent & float
-                       var leaf:FlowLeafElement = _textFlow.getLastLeaf();
-                       var secondPara:ParagraphElement = leaf.getParagraph();
-                       var paragraphFormat:TextLayoutFormat = new 
TextLayoutFormat(secondPara.format);
-                       paragraphFormat.clearFloats = clear;
-                       paragraphFormat.textAlign = TextAlign.JUSTIFY;
-                       secondPara.format = paragraphFormat;
-
-                       var floatAttr:String = (clear == ClearFloats.LEFT) || 
(clear == ClearFloats.START) ? Float.LEFT : Float.RIGHT;
-                       if (_textFlow.computedFormat.direction == Direction.RTL)
-                       {
-                               if (clear == ClearFloats.START) floatAttr = 
Float.RIGHT;
-                               if (clear == ClearFloats.END) floatAttr = 
Float.LEFT;
-                       }
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var floatObject:DisplayObject = addFloatAtPosition(200, 
100, 100, floatAttr);
-                       if (floatCount == 2)
-                       {
-                               floatObject = addFloatAtPosition(200, 100, 100, 
floatAttr);
-                       }
-                       _textFlow.flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = 
floatObject.parent;
-                       
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(secondPara.getAbsoluteStart());
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       var bbox:Rectangle = textFlowLine.getBounds();
-                       
-                       if (_textFlow.computedFormat.blockProgression == 
BlockProgression.RL)
-                       {
-                               assertTrue("ClearFloat:" + clear + " - Second 
paragraph should be cleared past float " + floatCount, bbox.x + bbox.width < 
floatHolder.x);
-                       }
-                       else
-                       {
-                               assertTrue("ClearFloat:" + clear + " - Second 
paragraph should be cleared past float " + floatCount, bbox.top > floatHolder.y 
+ floatObject.height);
-                       }
-               }
-               
-               public function paddingAndMarginsInternal(float:String, 
width:Number, height:Number, paddingLeft:Number, paddingTop:Number, 
paddingRight:Number, paddingBottom:Number):void
-               {
-                       var verticalText:Boolean = 
(_textFlow.computedFormat.blockProgression == BlockProgression.RL);
-                       var graphic:DisplayObject = addFloatAtPosition(0, 
width, height, float);
-                       var ilgElement:InlineGraphicElement = 
_textFlow.findLeaf(0) as InlineGraphicElement;
-                       var format:TextLayoutFormat = new 
TextLayoutFormat(ilgElement.format);
-                       format.paddingLeft = paddingLeft;
-                       format.paddingTop = paddingTop;
-                       format.paddingRight = paddingRight;
-                       format.paddingBottom = paddingBottom;
-                       ilgElement.format = format;
-                       format = new TextLayoutFormat(_textFlow.format);
-                       format.textAlign = TextAlign.JUSTIFY;
-                       _textFlow.format = format;
-                       _flowComposer.updateAllControllers();
-                       var floatHolder:DisplayObjectContainer = graphic.parent;
-                       assertTrue("Expected to get inline inserted", 
ilgElement != null);
-                       var tfl:TextFlowLine = _flowComposer.getLineAt(0);
-                       assertTrue("Expected padding between container edge and 
float", Math.abs(paddingTop - floatHolder.y) <= 1);
-                       if (verticalText)
-                       {
-                               assertTrue("Expected padding between float and 
text", Math.abs(floatHolder.y + graphic.height + paddingBottom - tfl.y) <= 1);
-                               assertTrue("Expected padding between container 
edge and float", Math.abs(paddingRight + (floatHolder.x + graphic.width)) <= 1);
-                       }
-                       else
-                       {
-                               assertTrue("Expected padding between float and 
text", Math.abs(floatHolder.x + graphic.width + paddingRight - tfl.x) <= 1);
-                               assertTrue("Expected padding between container 
edge and float", Math.abs(paddingLeft - floatHolder.x) <= 1);
-                       }
-                       
-               }
-               
-               public function negativePaddingAndMargins():void
-               {
-                       _disableBoundsCheck = true;
-                       paddingAndMarginsInternal(Float.LEFT, 100, 100, -5, 
-10, -8, -12);
-               }
-               
-               public function paddingAndMargins():void
-               {
-                       paddingAndMarginsInternal(Float.LEFT, 100, 100, 20, 30, 
40, 50);
-               }
-               
-               public function lineHeightIgnoredOnFloatingImages():void
-               {
-                       // LineHeight is supposed to be ignored on floating 
images when calculating line positions. Check that this is so.
-                       // Insert a float at the start of the paragraph, and 
set lineheight on it. 
-                       var secondParagraph:ParagraphElement = 
_textFlow.getChildAt(1) as ParagraphElement;
-                       var floatPosition:int = 
secondParagraph.getAbsoluteStart();
-                       var floatObject:DisplayObject = 
addFloatAtPosition(floatPosition, 10, 10, Float.START);
-                       verifyFloatInLine(floatPosition, 10, 10, Float.START, 
floatObject);
-                       var lineIndex:int =  
_textFlow.flowComposer.findLineIndexAtPosition(floatPosition + 1);
-                       var textFlowLine:TextFlowLine 
=_textFlow.flowComposer.getLineAt(lineIndex);
-                       var verticalText:Boolean = 
(_textFlow.computedFormat.blockProgression == BlockProgression.RL);
-                       var originalPosition:Number = verticalText ? 
textFlowLine.x : textFlowLine.y;
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var originalContentBounds:Rectangle = new 
Rectangle(controller.contentLeft, controller.contentTop, 
controller.contentWidth, controller.contentHeight);
-                       var format:TextLayoutFormat = new TextLayoutFormat();
-                       format.lineHeight = 100;
-                       SelManager.selectRange(floatPosition, floatPosition + 
1);
-                       SelManager.applyLeafFormat(format);
-                       lineIndex =  
_textFlow.flowComposer.findLineIndexAtPosition(floatPosition + 1);
-                       textFlowLine 
=_textFlow.flowComposer.getLineAt(lineIndex);
-                       assertTrue("TextLine moved when lineHeight applied to 
floating graphic", originalPosition == (verticalText ? textFlowLine.x : 
textFlowLine.y));
-                       var contentBounds:Rectangle = new 
Rectangle(controller.contentLeft, controller.contentTop, 
controller.contentWidth, controller.contentHeight);
-                       assertTrue("Content bounds changed when lineHeight 
applied to floating graphic", contentBounds.equals(originalContentBounds));
-               }
-               
-               private function setUpContainers(containerCount:int):void
-               {
-                       testApp.changeContainerSetup("arrangeSideBySide", 0, 
containerCount);   
-               }
-               
-               public function smallFloatBigText():void
-               {
-                       // Test case where there is a small initial (leading) 
float that fits in the container, and a larger line of text that 
-                       // gets pushed to the following container. Both the 
float and the line should get pushed to the following container.
-                       try {
-                               setUpContainers(2);
-                               format = new TextLayoutFormat();
-                               format.fontSize = 14;
-                               format.paragraphSpaceAfter = 15;
-                               format.fontFamily = "Times New Roman"; 
-                               SelManager.applyFormatToElement(_textFlow, 
format);
-
-                               _textFlow.flowComposer.updateAllControllers();
-                               var secondControllerStart:int = 
_textFlow.flowComposer.getControllerAt(1).absoluteStart;
-                               var floatObject:DisplayObject = 
addFloatAtPosition(secondControllerStart - 10, 10, 10, 
_textFlow.computedFormat.direction == Direction.RTL ? Float.RIGHT : Float.LEFT);
-                               
_textFlow.interactionManager.selectRange(secondControllerStart - 9 , 
secondControllerStart - 8);
-                               var format:TextLayoutFormat = new 
TextLayoutFormat();
-                               format.fontSize = 36;
-                               SelManager.applyLeafFormat(format);
-                               
-                               // Float should appear in the top of the second 
container
-                               var secondController:ContainerController = 
_textFlow.flowComposer.getControllerAt(1);
-                               var verticalText:Boolean = 
_textFlow.computedFormat.blockProgression == BlockProgression.RL;
-                               assertTrue("Float should appear in the second 
container", secondController.container.contains(floatObject));
-                               var inlineHolder:DisplayObject = 
floatObject.parent;
-                               assertTrue("Float should appear at the top of 
the container", verticalText ? (inlineHolder.x == -inlineHolder.width) : 
(inlineHolder.y == 0)); 
-                       }
-                       finally {
-                               //setUpContainers(1);
-                       }
-               }
-               
-               public function cursorByAnchor():void
-               {
-                       // Blinking text cursor should be placed by the anchor 
point and sized to the line 
-                       // NOT put next to the float and sized to the float -- 
see bug 2609350
-                       
-                       var secondParagraph:ParagraphElement = 
_textFlow.getChildAt(1) as ParagraphElement;
-                       var floatPosition:int = 
secondParagraph.getAbsoluteStart();
-                       var floatObject:DisplayObject = 
addFloatAtPosition(floatPosition, 30, 30, Float.START);
-                       
-                       // Turn on the blinking cursor
-                       _textFlow.interactionManager.focusedSelectionFormat = 
new SelectionFormat(0xffffff, 1.0, "difference", 0xffffff, 1.0, "difference", 
500);
-                       
-                       _textFlow.interactionManager.selectRange(floatPosition, 
floatPosition);
-                       _textFlow.flowComposer.updateAllControllers();
-                       var controller:ContainerController = 
_textFlow.flowComposer.getControllerAt(0);
-                       var selectionSprite:DisplayObjectContainer = 
controller.getSelectionSprite(false);
-                       assertTrue("Expected there to be a blinking cursor 
selection drawn", selectionSprite != null);
-                       var cursorBounds:Rectangle = 
selectionSprite.getBounds(controller.container);
-                       var lineIndex:int = 
_textFlow.flowComposer.findLineIndexAtPosition(floatPosition);
-                       var textFlowLine:TextFlowLine = 
_textFlow.flowComposer.getLineAt(lineIndex);
-                       var textLine:TextLine = textFlowLine.getTextLine();
-                       var atomIndex:int = 
textLine.getAtomIndexAtCharIndex(floatPosition - 
secondParagraph.getAbsoluteStart());
-                       var atomBounds:Re

<TRUNCATED>

Reply via email to