http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cd487156/automation_tests/src/UnitTest/Tests/ContainerAttributeTest.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/UnitTest/Tests/ContainerAttributeTest.as 
b/automation_tests/src/UnitTest/Tests/ContainerAttributeTest.as
index 1901b92..5375549 100644
--- a/automation_tests/src/UnitTest/Tests/ContainerAttributeTest.as
+++ b/automation_tests/src/UnitTest/Tests/ContainerAttributeTest.as
@@ -18,1600 +18,1816 @@
 
////////////////////////////////////////////////////////////////////////////////
 package UnitTest.Tests
 {
-       import UnitTest.ExtendedClasses.TestSuiteExtended;
-       import UnitTest.ExtendedClasses.VellumTestCase;
-       import UnitTest.Fixtures.TestConfig;
-       
-       import flash.display.BitmapData;
-       import flash.display.DisplayObject;
-       import flash.display.Shape;
-       import flash.display.Sprite;
-       import flash.events.Event;
-       import flash.events.MouseEvent;
-       import flash.geom.Point;
-       import flash.geom.Rectangle;
-       import flash.system.Capabilities;
-       import flash.text.engine.TextLine;
-       import flash.ui.Mouse;
-       import flash.utils.*;
-       
-       import flashx.textLayout.compose.TextFlowLine;
-       import flashx.textLayout.container.*;
-       import flashx.textLayout.conversion.TextConverter;
-       import flashx.textLayout.edit.EditManager;
-       import flashx.textLayout.elements.Configuration;
-       import flashx.textLayout.elements.DivElement;
-       import flashx.textLayout.elements.GlobalSettings;
-       import flashx.textLayout.elements.InlineGraphicElementStatus;
-       import flashx.textLayout.elements.ListElement;
-       import flashx.textLayout.elements.ListItemElement;
-       import flashx.textLayout.elements.ParagraphElement;
-       import flashx.textLayout.elements.SpanElement;
-       import flashx.textLayout.elements.TextFlow;
-       import flashx.textLayout.events.StatusChangeEvent;
-       import flashx.textLayout.formats.*;
-       import flashx.textLayout.tlf_internal;
-       
-       import mx.containers.Canvas;
+    import UnitTest.ExtendedClasses.TestSuiteExtended;
+    import UnitTest.ExtendedClasses.VellumTestCase;
+    import UnitTest.Fixtures.TestConfig;
+
+    import flash.display.BitmapData;
+    import flash.display.DisplayObject;
+    import flash.display.Shape;
+    import flash.display.Sprite;
+    import flash.events.Event;
+    import flash.events.MouseEvent;
+    import flash.geom.Point;
+    import flash.geom.Rectangle;
+    import flash.system.Capabilities;
+    import flash.text.engine.TextLine;
+    import flash.ui.Mouse;
+    import flash.utils.*;
+
+    import flashx.textLayout.compose.TextFlowLine;
+    import flashx.textLayout.container.*;
+    import flashx.textLayout.conversion.TextConverter;
+    import flashx.textLayout.edit.EditManager;
+    import flashx.textLayout.elements.Configuration;
+    import flashx.textLayout.elements.GlobalSettings;
+    import flashx.textLayout.elements.InlineGraphicElementStatus;
+    import flashx.textLayout.elements.ParagraphElement;
+    import flashx.textLayout.elements.TextFlow;
+    import flashx.textLayout.events.StatusChangeEvent;
+    import flashx.textLayout.formats.*;
+    import flashx.textLayout.tlf_internal;
+
+    import mx.containers.Canvas;
 
     import org.flexunit.asserts.assertTrue;
 
     use namespace tlf_internal;
 
-       public class ContainerAttributeTest extends VellumTestCase
-       {
-               private var testContainer:Boolean;
-               private var inputContainerAttrs:TextLayoutFormat;
-               private var outputContainerAttrs:ITextLayoutFormat;
-               private var initSize:Point;
-
-               public function ContainerAttributeTest(methodName:String, 
testID:String, testConfig:TestConfig, testCaseXML:XML=null)
-               {
-                       super(methodName, testID, testConfig, testCaseXML);
-                       this.testContainer = (TestData.testContainer=="true");
-                       TestID = TestID + ":" + testContainer;
-                       inputContainerAttrs = new TextLayoutFormat();
-
-                       metaData.productArea = "Text Container";
-               }
-
-               public static function suiteFromXML(testListXML:XML, 
testConfig:TestConfig, ts:TestSuiteExtended):void
-               {
-                       var testCaseClass:Class = ContainerAttributeTest;
-                       VellumTestCase.suiteFromXML(testCaseClass, testListXML, 
testConfig, ts);
-               }
-
-       public override function setUpTest():void
-       {
-               super.setUpTest();
-               paddingRight = 0;
-                       paddingLeft = 0;
-                       SelManager.textFlow.paddingLeft = 0;
-                       SelManager.textFlow.paddingRight = 0;
-                       SelManager.selectAll();
-                       columnGap = 0;
-                       columnWidth = FormatValue.AUTO;
-                       columnCount = FormatValue.AUTO;
-       }
-
-               public override function tearDownTest():void
-               {
-                       if(initSize){
-                               size = initSize;
-                       }
-
-                       super.tearDownTest();
-               }
-
-               private function set columnCount(count:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.columnCount = count;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.columnCount = count;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function get columnCount():Object
-               {
-                       outputContainerAttrs = TestFrame.computedFormat;
-                       return outputContainerAttrs.columnCount;
-               }
-
-               private function set columnGap(gap:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.columnGap = gap;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.columnGap = gap;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function get columnGap():Object
-               {
-                       outputContainerAttrs = TestFrame.computedFormat;
-                       return outputContainerAttrs.columnGap;
-               }
-
-               private function set columnWidth(width:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.columnWidth = width;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.columnWidth = width;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function get verticalAlign():Object
-               {
-                       outputContainerAttrs = TestFrame.computedFormat;
-                       return outputContainerAttrs.verticalAlign;
-               }
-
-               private function set verticalAlign(align:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.verticalAlign = align as String;
-                               TestFrame.format = ca;
-
-                               // Added as result of bug #1875477
-                               
TestFrame.textFlow.flowComposer.updateAllControllers();
-                       }
-                       else
-                       {
-                               inputContainerAttrs.verticalAlign = align as 
String;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function get columnWidth():Object
-               {
-                       outputContainerAttrs = TestFrame.computedFormat;
-                       return outputContainerAttrs.columnWidth;
-               }
-
-               private function set paddingTop(padding:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.paddingTop = padding;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.paddingTop = padding;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function set paddingBottom(padding:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.paddingBottom = padding;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.paddingBottom = padding;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function set paddingRight(padding:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.paddingRight = padding;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.paddingRight = padding;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function set paddingLeft(padding:Object):void
-               {
-                       if(testContainer)
-                       {
-                               var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                               ca.paddingLeft = padding;
-                               TestFrame.format = ca;
-                       }
-                       else
-                       {
-                               inputContainerAttrs.paddingLeft = padding;
-                               
SelManager.applyContainerFormat(inputContainerAttrs);
-                       }
-               }
-
-               private function get testFrameWidth():Number
-               {
-                       return TestFrame.compositionWidth;
-               }
-               private function get testFrameHeight():Number
-               {
-                       return TestFrame.compositionHeight;
-               }
-
-               private function get blockProgression():String
-               {
-                       return 
TestFrame.rootElement.computedFormat.blockProgression;
-               }
-
-               private function set blockProgression(mode:String):void
-               {
-                       TestFrame.rootElement.blockProgression = mode;
-                       TestFrame.textFlow.flowComposer.compose();
-               }
-
-               private function get size():Point
-               {
-                       var width:Number = 0;
-                       var height:Number = 0;
-
-                       if(TestFrame.container is DisplayObject)
-                       {
-                               var frame:DisplayObject = TestFrame.container 
as DisplayObject;
-                               width = frame.width;
-                               height = frame.height;
-                       }
-
-                       return new Point(width,height);
-               }
-
-               private function set size(dimension:Point):void
-               {
-                       var containerAttr:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
-                       containerAttr.columnCount = 1;
-                       containerAttr.paddingLeft = 0;
-                       containerAttr.paddingRight = 0;
-                       containerAttr.paddingTop = 0;
-                       containerAttr.paddingBottom = 0;
-                       TestFrame.format = containerAttr;
-
-                       if (TestFrame.container is Sprite)
-                       {
-                               
TextFlow(testApp.getTextFlow()).flowComposer.getControllerAt(0).setCompositionSize(dimension.x,dimension.y);
-                               
TextFlow(testApp.getTextFlow()).flowComposer.updateAllControllers();
-                       }
-                       else
-                               throw new Error("test does not know how to 
resize this container type");        // Above should be generalized?
-               }
-
-               /**
-                * Set and get the firstBaselineOffset string values and test 
bound of numeric values.
-                */
-               public function checkfirstBaselineOffset():void // KJT
-               {
-
-                       inputContainerAttrs.firstBaselineOffset = 
flashx.textLayout.formats.BaselineOffset.ASCENT;
-                       assertTrue("expected: ascent.  cascaded: " + 
String(inputContainerAttrs.firstBaselineOffset),
-                                               
String(inputContainerAttrs.firstBaselineOffset) == 
flashx.textLayout.formats.BaselineOffset.ASCENT);
-                       inputContainerAttrs.firstBaselineOffset = 
flashx.textLayout.formats.BaselineOffset.LINE_HEIGHT;
-                       assertTrue("expected: leading.  cascaded: " + 
String(inputContainerAttrs.firstBaselineOffset),
-                                               
String(inputContainerAttrs.firstBaselineOffset) == 
flashx.textLayout.formats.BaselineOffset.LINE_HEIGHT);
-                       for (var cter:uint = 
TextLayoutFormat.firstBaselineOffsetProperty.minValue; cter <= 
TextLayoutFormat.firstBaselineOffsetProperty.maxValue; cter+=33.33)
-                       {
-                               inputContainerAttrs.firstBaselineOffset = cter;
-                               assertTrue("expected: " + cter + ". cascaded: " 
+ 
inputContainerAttrs.firstBaselineOffset,inputContainerAttrs.firstBaselineOffset 
== cter);
-                       }
-
-                       inputContainerAttrs.firstBaselineOffset = undefined;
-               }
-
-               /**
-                * Set the gap, then change the width to see how the column 
count changes.
-                */
-               public function checkColumnCountOnWidthChangeTest():void
-               {
-                       var width:Number = testFrameWidth;
-                       var cWidth:Number = width/10;
-
-                       columnGap = 0;
-                       columnWidth = cWidth;
-
-                       var initCount:int = TestFrame.columnState.columnCount;
-
-                       columnWidth = cWidth*2;
-
-
-                       var endCount:int = TestFrame.columnState.columnCount;
-
-                       assertTrue("expected " + Math.floor(initCount/2) + " 
but got " + endCount,
-                                               Math.floor(initCount/2) == 
endCount);
-               }
-
-               /**
-                * Set the width, then change the column gap to see how the 
column count changes.
-                */
-               public function checkColumnCountOnGapChangeTest():void
-               {
-                       var width:Number = testFrameWidth;
-                       var cWidth:Number = width/10;
-
-                       /*paddingRight = 0;
-                       paddingLeft = 0;
-                       SelManager.textFlow.paddingLeft = 0;
-                       SelManager.textFlow.paddingRight = 0;*/
-                       columnGap = 0;
-                       columnWidth = cWidth;
-
-                       var initCount:Number = 
TestFrame.columnState.columnCount;
-
-                       columnGap = cWidth/10;
-
-                       var endCount:Number = TestFrame.columnState.columnCount;
-
-                       assertTrue("expected " + (initCount - 1) + " but got " 
+ endCount,
-                                               initCount - 1 == endCount);
-               }
-
-               /**
-                * Set the column count, then change the column gap and see how 
the column width changes.
-                */
-               public function checkColumnWidthOnGapChangeTest():void
-               {
-                       var width:Number = testFrameWidth;
-                       var cWidth:Number = width/10;
-
-                       /*paddingRight = 0;
-                       paddingLeft = 0;
-                       SelManager.textFlow.paddingLeft = 0;
-                       SelManager.textFlow.paddingRight = 0;*/
-                       columnGap = 0;
-                       columnCount = 10;
-
-                       var initColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var initWidth:Number = initColumn.width;
-
-                       columnGap = cWidth/9;
-
-                       var endColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var endWidth:Number = endColumn.width;
-                       assertTrue("expected " + (initWidth - (initWidth/10)) + 
" but got " + endWidth,
-                                               ((initWidth - (initWidth/10)) - 
endWidth) < 0.01);
-               }
-
-               /**
-                * Set the column gap, then change the column count to see how 
the column width changes.
-                */
-               public function checkColumnWidthOnCountChangeTest():void
-               {
-                       var bp:String = 
TestFrame.textFlow.computedFormat.blockProgression;
-                       var width:Number = bp == BlockProgression.TB ? 
testFrameWidth : testFrameHeight;
-                       var cWidth:Number = width/10;
-
-                       /*paddingRight = 0;
-                       paddingLeft = 0;
-                       SelManager.textFlow.paddingLeft = 0;
-                       SelManager.textFlow.paddingRight = 0;*/
-                       columnGap = 0;
-                       columnCount = 10;
-
-                       var initColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var initWidth:Number = bp == BlockProgression.TB ? 
initColumn.width : initColumn.height;
-
-                       columnCount = 5;
-
-                       var endColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var endWidth:Number = bp == BlockProgression.TB ? 
endColumn.width : endColumn.height;
-
-                       assertTrue("expected " + Math.floor(endWidth/2) + " but 
got " + initWidth,
-                                               Math.floor(endWidth/2) == 
Math.floor(initWidth));
-                       assertTrue("expected " + Math.floor(initWidth) + " but 
got " + Math.floor(cWidth),
-                                               Math.floor(initWidth) == 
Math.floor(cWidth));
-               }
-
-               /**
-                * Set the column count, then change the column width to see 
how the column gap changes.
-                */
-               public function checkColumnGapOnWidthChangeTest():void
-               {
-                       var width:Number = testFrameWidth;
-                       
-                       columnCount = 2;
-                       columnWidth = width/3;
-                       
-                       var initColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var initGap:Number = width - initColumn.width * 2;
-                       
-                       assertTrue("expected init width to equal " + width/3 + 
", but got " + columnWidth,
-                               columnWidth == width/3);
-                       assertTrue("expected init count to equal " + 2 + ", but 
got " + columnCount,
-                               columnCount == 2);
-                       assertTrue("expected init gap to equal " + width/3 + ", 
but got " + initGap,
-                               Math.floor(initGap) == Math.floor(width/3));
-                       
-                       columnWidth = width/2;
-                       
-                       var endColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var endGap:Number = width - endColumn.width * 2;
-                       
-                       assertTrue("expected " + Math.floor(width/2) + " but 
got " + Math.floor(endGap),
-                               Math.floor(endGap) == 0);
-               }
-
-               /**
-                * Set the column width, then change the column count to see 
how the column gap changes.
-                * NOTE: Currently commented out due to bug 1657149.
-                */
-               public function checkColumnGapOnCountChangeTest():void
-               {
-                       var width:Number = testFrameWidth;
-                       
-                       columnCount = 10;
-                       var cWidth:Number = width/10;
-                       //to get gap by reducing column width
-                       columnWidth = cWidth - cWidth/9;
-                       
-                       var initColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var initGap:Number = cWidth - initColumn.width;
-                       
-                       //increase column count but no change to column count, 
gap should reduce
-                       columnCount = 11;
-                       cWidth = width/11;
-                       
-                       var endColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                       var endGap:Number = cWidth - endColumn.width;
-                       assertTrue("Gap should reduce when column count 
increased and column width no change. ",
-                               initGap > endGap);
-               }
-
-                /**
-                * Slowly increase the padding at the top until it pushes a 
line off the screen
-                * then verify that the last line was the line pushed off the 
screen.
-                */
-                public function topPaddingSqueezeTest():void
-                {
-                       var length:int = 
SelManager.textFlow.flowComposer.numLines;
-                       var last:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(length-1);
-                       var size:int = last.textLength;
-                       var count:int = TestFrame.textLength;
-
-                       for(var i:int = 0; i < 1000; i++){
-                               paddingTop = i;
-                               TestFrame.textFlow.flowComposer.compose();
-
-                               if(TestFrame.textLength == count - size){
-                                       return;
-                               }
-                       }
-                       assertTrue ("Expected " + size + "characters to be 
pushed off (the last line)" +
-                                               " but actually had " + 
(TestFrame.textLength - count) + "pushed off",
-                                               TestFrame.textLength != count - 
size);
-                }
-
-                /**
-                * Slowly increase the padding at the bottom until it eats the 
last line
-                * then verify that the last line was the line eaten.
-                */
-                public function bottomPaddingSqueezeTest():void
-                {
-                       //FLEX: Why no lines?
-                       var length:int = 
SelManager.textFlow.flowComposer.numLines;
-                       var last:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(length-1);
-                       var size:int = last.textLength;
-                       var count:int = TestFrame.textLength;
-
-                       for(var i:int = 0; i < 1000; i++){
-                               paddingBottom = i;
-                               TestFrame.textFlow.flowComposer.compose();
-
-                               if(TestFrame.textLength == count - size){
-                                       return;
-                               }
-                       }
-                       assertTrue ("Expected " + size + "characters to be 
pushed off (the last line)" +
-                                               " but actually had " + 
(TestFrame.textLength - count) + "pushed off",
-                                               TestFrame.textLength != count - 
size);
-                }
-
-                /**
-                * Increase the left padding until you force the flow to create 
a new line.
-                */
-                public function leftPaddingSqueezeTest():void
-                {
-                       var length:int = 
SelManager.textFlow.flowComposer.numLines;
-
-                       for(var i:int = 0; i < 1000; i++){
-                               paddingLeft = i;
-                               TestFrame.textFlow.flowComposer.compose();
-
-                               if(SelManager.textFlow.flowComposer.numLines > 
length){
-                                       return;
-                               }
-                       }
-                       assertTrue ("Increasing the left padding to 1000 did 
not add lines",
-                                               
SelManager.textFlow.flowComposer.numLines <= length);
-                }
-
-               /**
-                * Increase the right padding until you force the flow to 
create a new line.
-                */
-                public function rightPaddingSqueezeTest():void
-                {
-                       var length:int = 
SelManager.textFlow.flowComposer.numLines;
-
-                       for(var i:int = 0; i < 1000; i++){
-                               paddingRight = i;
-                               TestFrame.textFlow.flowComposer.compose();
-
-                               if(SelManager.textFlow.flowComposer.numLines > 
length){
-                                       return;
-                               }
-                       }
-                       assertTrue ("Increasing the right padding to 1000 did 
not add lines",
-                                               
SelManager.textFlow.flowComposer.numLines <= length);
-                }
-
-                public function writingModeBreakTest():void
-                {
-                       // clear all padding on the textFlow for this test
-                       SelManager.textFlow.paddingTop = 0;
-                       SelManager.textFlow.paddingLeft = 0;
-                       SelManager.textFlow.paddingRight = 0;
-                       SelManager.textFlow.paddingBottom = 0;
-
-                       initSize = size;
-                       size = new Point(200,200);
-
-                       var initCounts:Array = new  
Array(SelManager.textFlow.flowComposer.numLines);
-
-                       var initMode:String = blockProgression;
-                       var nextMode:String = null;
-
-                       if(initMode == 
flashx.textLayout.formats.BlockProgression.TB){
-                               nextMode = 
flashx.textLayout.formats.BlockProgression.RL;
-                       }else{
-                               nextMode = 
flashx.textLayout.formats.BlockProgression.TB;
-                       }
-
-
-                       var i:int = 0;
-                       for(; i < SelManager.textFlow.flowComposer.numLines; 
i++){
-                               var line:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(i);
-                               if (line.isDamaged())
-                                       break;
-                               initCounts[i] = line.textLength;
-                       }
-                       initCounts.length = i;
-
-                       blockProgression = nextMode;
-                       SelManager.flushPendingOperations();
-
-                       var endCounts:Array = new  
Array(SelManager.textFlow.flowComposer.numLines);
-
-                       i = 0;
-                       for(; i < SelManager.textFlow.flowComposer.numLines; 
i++){
-                               line = 
SelManager.textFlow.flowComposer.getLineAt(i);
-                               if (line.isDamaged())
-                                       break;
-                               endCounts[i] = line.textLength;
-                       }
-                       endCounts.length = i;
-
-                       var one:int = initCounts.length;
-                       var two:int = endCounts.length;
-
-                       assertTrue("number of lines are not the same after 
changing writing direction in a square frame",
-                                               initCounts.length == 
endCounts.length);
-                       for(i = 0; i < initCounts.length; i++){
-                               assertTrue("line length of line " + i + " 
changed after changing writing direction in a square frame",
-                                       initCounts[i] == endCounts[i]);
-                       }
-                }
-
-               /**
-                * This test exists solely for snapshotting.
-                */
-                public function checkVerticalAlignTopTest():void
-                {
-                       var division:int =
-                               
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL ?
-                                       TestFrame.compositionWidth / 3 :
-                                       TestFrame.compositionHeight /3;
-
-                       SelManager.selectAll();
-                       SelManager.deleteNextCharacter();
-                       SelManager.flushPendingOperations();
-
-                       SelManager.insertText("ABC");
-                       SelManager.selectRange(2,2);
-                       SelManager.splitParagraph();
-                       SelManager.selectRange(1,1);
-                       SelManager.splitParagraph();
-                       SelManager.flushPendingOperations();
-
-                       verticalAlign = VerticalAlign.TOP;
-                       SelManager.flushPendingOperations();
-
-                       if(     
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL
-                       ){
-                               assertTrue(
-                                       "Vertical Alignment = TOP did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).x > -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).x < 0
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = TOP did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x > -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x < 0
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = TOP did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).x > -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).x < 0
-                               );
-                       }else{
-                               assertTrue(
-                                       "Vertical Alignment = TOP did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).y < division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = TOP did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).y < division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = TOP did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).y < division
-                               );
-                       }
-                }
-
-               /**
-                * This test exists solely for snapshotting.
-                */
-                public function checkVerticalAlignBottomTest():void
-                {
-                       var division:int =
-                               
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL ?
-                                       TestFrame.compositionWidth / 3 :
-                                       TestFrame.compositionHeight /3;
-
-                       SelManager.selectAll();
-                       SelManager.deleteNextCharacter();
-                       SelManager.flushPendingOperations();
-
-                       SelManager.insertText("ABC");
-                       SelManager.selectRange(2,2);
-                       SelManager.splitParagraph();
-                       SelManager.selectRange(1,1);
-                       SelManager.splitParagraph();
-                       SelManager.flushPendingOperations();
-
-                       verticalAlign = VerticalAlign.BOTTOM;
-                       SelManager.flushPendingOperations();
-
-                       var t1:int = 
SelManager.textFlow.flowComposer.findLineAtPosition(1).x;
-                       var t2:int = 
SelManager.textFlow.flowComposer.findLineAtPosition(1).y;
-
-                       if(     
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL
-                       ){
-                               assertTrue(
-                                       "Vertical Alignment = BOTTOM did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).x < -2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = BOTTOM did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x < -2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = BOTTOM did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).x < -2*division
-                               );
-                       }else{
-                               assertTrue(
-                                       "Vertical Alignment = BOTTOM did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).y > 2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = BOTTOM did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).y > 2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = BOTTOM did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).y > 2*division
-                               );
-                       }
-                }
-
-               /**
-                * This test exists solely for snapshotting.
-                */
-                public function checkVerticalAlignMiddleTest():void
-                {
-                       var division:int =
-                               
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL ?
-                                       TestFrame.compositionWidth / 3 :
-                                       TestFrame.compositionHeight /3;
-
-
-                       SelManager.selectAll();
-                       SelManager.deleteNextCharacter();
-                       SelManager.flushPendingOperations();
-
-                       SelManager.insertText("ABC");
-                       SelManager.selectRange(2,2);
-                       SelManager.splitParagraph();
-                       SelManager.selectRange(1,1);
-                       SelManager.splitParagraph();
-                       SelManager.flushPendingOperations();
-
-                       verticalAlign = VerticalAlign.MIDDLE;
-                       SelManager.flushPendingOperations();
-
-                       if(     
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL
-                       ){
-                               assertTrue(
-                                       "Vertical Alignment = MIDDLE did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).x < -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).x > -2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = MIDDLE did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x < -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x > -2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = MIDDLE did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).x < -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).x > -2*division
-                               );
-                       }else{
-                               assertTrue(
-                                       "Vertical Alignment = MIDDLE did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).y > division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).y < 2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = MIDDLE did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).y > division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).y < 2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = MIDDLE did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).y > division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).y < 2*division
-                               );
-                        }
-                }
-
-               /**
-                * This test exists solely for snapshotting.
-                */
-                public function checkVerticalAlignJustifyTest():void
-                {
-                       var division:int =
-                               
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL ?
-                                       TestFrame.compositionWidth / 3 :
-                                       TestFrame.compositionHeight /3;
-
-                       SelManager.selectAll();
-                       SelManager.deleteNextCharacter();
-                       SelManager.flushPendingOperations();
-
-                       SelManager.insertText("ABC");
-                       SelManager.selectRange(2,2);
-                       SelManager.splitParagraph();
-                       SelManager.selectRange(1,1);
-                       SelManager.splitParagraph();
-                       SelManager.flushPendingOperations();
-
-                       verticalAlign = VerticalAlign.JUSTIFY;
-                       SelManager.flushPendingOperations();
-
-                       if(     
TestFrame.textFlow.computedFormat.blockProgression ==
-                               BlockProgression.RL
-                       ){
-                               assertTrue(
-                                       "Vertical Alignment = JUSTIFY did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).x > -1*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = JUSTIFY did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x < -1*division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).x > -2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = JUSTIFY did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).x < -2*division
-                               );
-                       }else{
-                               assertTrue(
-                                       "Vertical Alignment = JUSTIFY did not 
correctly place the first line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(1).y < division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = JUSTIFY did not 
correctly place the second line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).y > division &&
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(3).y < 2*division
-                               );
-                               assertTrue(
-                                       "Vertical Alignment = JUSTIFY did not 
correctly place the third line.",
-                                       
SelManager.textFlow.flowComposer.findLineAtPosition(5).y > 2*division
-                               );
-                        }
-                }
-       
-                // non-empty flow, check if attribute changed after insertion 
point at position 0
-                public function insertPos0CheckColumnWidthTest():void
-                {
-                        var bp:String = 
TestFrame.textFlow.computedFormat.blockProgression;
-                        var width:Number = bp == BlockProgression.TB ? 
testFrameWidth : testFrameHeight;
-                        var cWidth:Number = width/10;
-                        
-                        columnGap = 0;
-                        columnCount = 10;
-                        
-                        var initColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                        var initWidth:Number = bp == BlockProgression.TB ? 
initColumn.width : initColumn.height;
-                        
-                        SelManager.selectRange(0,0);
-                        SelManager.insertText("BBB");
-                        SelManager.updateAllControllers();
-                        
-                        var endColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                        var endWidth:Number = bp == BlockProgression.TB ? 
endColumn.width : endColumn.height;
-                        
-                        assertTrue("Container attribute got changed, expected 
column width " + initWidth + " but got " + cWidth,
-                                initWidth == endWidth);
-                }
-                
-                //check if container attribute change after insertion in an 
empty flow
-                public function checkColumnCountEmptyFlowInsertTest():void
-                {
-                        var width:Number = testFrameWidth;
-                        var cWidth:Number = width/10;
-                        
-                        columnGap = 0;
-                        columnWidth = cWidth;
-                        
-                        var initCount:Number = 
TestFrame.columnState.columnCount;
-                        
-                        //insert text in a empty flow
-                        SelManager.selectAll();
-                        SelManager.deleteText();
-                        SelManager.insertText("AAAAAAAAAAAAAA");
-                        SelManager.updateAllControllers();
-                        
-                        var endCount:Number = 
TestFrame.columnState.columnCount;
-                        
-                        assertTrue("container attribute has been changed, 
expected colume count is" + initCount + " but got " + endCount,
-                                initCount == endCount );
-                }
-                
-                // non-empty flow, check if attribute changed after insertion 
point at end position 
-                public function insertAtEndOfFlowCheckColumnGapTest():void
-                {
-                        var bp:String = 
TestFrame.textFlow.computedFormat.blockProgression;
-                        var width:Number = testFrameWidth;
-                        
-                        columnCount = 2;
-                        columnWidth = width/3;
-                        
-                        var initColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                        var initGap:Number = bp == BlockProgression.TB ? 
(width - initColumn.width * 2) : (width - initColumn.height * 2);
-                        
-                        var len:int = SelManager.textFlow.textLength;
-                        SelManager.selectRange(len,len);
-                        SelManager.insertText("BBB");
-                        SelManager.updateAllControllers();
-                        
-                        var endColumn:Rectangle = 
TestFrame.columnState.getColumnAt(0);
-                        var endGap:Number = bp == BlockProgression.TB ? (width 
- endColumn.width * 2) : (width - endColumn.height * 2);
-                        
-                        assertTrue("Container attribute got changed, expected 
column gap " + initGap + " but got " + endGap,
-                                initGap == endGap);
-                }
-       
-               public function columnBreakTest():void
-               {
-                       var TestCanvas:Canvas = myEmptyChilds();
-                       
-                       var FORMAT1_BB:int = 1;
-                       var FORMAT1_BA:int = 2;
-                       var FORMAT2_BB:int = 4;
-                       var FORMAT2_BA:int = 8;
-                       var FORMAT3_BB:int = 16;
-                       var FORMAT3_BA:int = 32;
-                       
-                       var tlFmt1:TextLayoutFormat = new TextLayoutFormat();
-                       var tlFmt2:TextLayoutFormat = new TextLayoutFormat();
-                       var tlFmt3:TextLayoutFormat = new TextLayoutFormat();
-                       
-                       var columnWidth:int = 600;
-                       for ( var i:int = 0; i < 64; i ++ )
-                       {
-                               tlFmt1.columnBreakBefore = (FORMAT1_BB & i) ? 
BreakStyle.ALWAYS : BreakStyle.AUTO;      
-                               tlFmt1.columnBreakAfter  = (FORMAT1_BA & i) ? 
BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               tlFmt2.columnBreakBefore = (FORMAT2_BB & i) ? 
BreakStyle.ALWAYS : BreakStyle.AUTO;      
-                               tlFmt2.columnBreakAfter  = (FORMAT2_BA & i) ? 
BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               tlFmt3.columnBreakBefore = (FORMAT3_BB & i) ? 
BreakStyle.ALWAYS : BreakStyle.AUTO;      
-                               tlFmt3.columnBreakAfter  = (FORMAT3_BA & i) ? 
BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               var cb:ColumnBreak = new 
ColumnBreak(columnWidth, tlFmt1, tlFmt2, tlFmt3);
-                               TestCanvas.rawChildren.addChild(cb);
-                       
-                               // Verify test results
-                               var textFlow:TextFlow = cb.textFlow;
-                               var columnWidthModify:int = columnWidth / 3;
-                               trace( textFlow.flowComposer.numLines);
-                               for(var j:int = 0; j < 
textFlow.flowComposer.numLines ;j ++)
-                               {
-                                       var textFlowLine:TextFlowLine = 
textFlow.flowComposer.getLineAt(j);
-                                       var textLine:TextLine = 
textFlowLine.getTextLine();
-                                       var text:String = 
textLine.textBlock.content.text;
-                                       var textLineBounds:Rectangle = 
textFlowLine.getTextLine().getBounds(cb);
-                                       trace(textLineBounds.x, 
textLineBounds.y, text);
-                                       
-                                       // Assert for STR1's position
-                                       if ( j == 0 )
-                                               assertTrue( isBetween( 
textLineBounds.x, 0, columnWidthModify ) );
-                                       
-                                       // Assert for STR2's position
-                                       var isStr2InColumn1:Boolean = true;
-                                       if ( tlFmt1.columnBreakAfter == 
BreakStyle.ALWAYS || tlFmt2.columnBreakBefore == BreakStyle.ALWAYS )
-                                               isStr2InColumn1 = false;
-                                       
-                                       if ( text.search( "STR2" ) >= 0 )
-                                       {
-                                               if ( isStr2InColumn1 )
-                                                       assertTrue( isBetween( 
textLineBounds.x, 0, columnWidthModify ) );
-                                               else
-                                                       assertTrue( isBetween( 
textLineBounds.x, columnWidthModify, columnWidthModify * 2 ) );
-                                       }
-                                       
-                                       // Assert for STR3's position
-                                       if ( text.search( "STR3" ) >= 0 )
-                                       {
-                                               if ( isStr2InColumn1 )
-                                               {
-                                                       if ( 
tlFmt2.columnBreakAfter == BreakStyle.ALWAYS || tlFmt3.columnBreakBefore == 
BreakStyle.ALWAYS )
-                                                               assertTrue( 
isBetween( textLineBounds.x, columnWidthModify, columnWidthModify * 2 ) );
-                                                       else
-                                                               assertTrue( 
isBetween( textLineBounds.x, 0, columnWidthModify ) );
-                                               }
-                                               else
-                                               {
-                                                       if ( 
tlFmt2.columnBreakAfter == BreakStyle.ALWAYS || tlFmt3.columnBreakBefore == 
BreakStyle.ALWAYS )
-                                                               assertTrue( 
isBetween( textLineBounds.x, columnWidthModify * 2, columnWidthModify * 3 ) );
-                                                       else
-                                                               assertTrue( 
isBetween( textLineBounds.x, columnWidthModify, columnWidthModify * 2 ) );
-                                               }
-                                       }
-                                       
-                               }
-                       }
-               }
-               
-               private function isBetween(item:int, x1:int, x2:int):Boolean
-               {
-                       if ( item >= x1 && item <= x2 )
-                               return true;
-                       return false;
-               }
-               
-               public function containerBreakTest():void
-               {
-                       var TestCanvas:Canvas = myEmptyChilds();
-                       
-                       var FORMAT1_BB:int = 1;
-                       var FORMAT1_BA:int = 2;
-                       var FORMAT2_BB:int = 4;
-                       var FORMAT2_BA:int = 8;
-                       var FORMAT3_BB:int = 16;
-                       var FORMAT3_BA:int = 32;
-                       
-                       var tlFmt1:TextLayoutFormat = new TextLayoutFormat();
-                       var tlFmt2:TextLayoutFormat = new TextLayoutFormat();
-                       var tlFmt3:TextLayoutFormat = new TextLayoutFormat();
-                       
-                       var containerWidth:int = 200;
-                       for ( var i:int = 0; i < 64; i ++ )
-                       {
-                               tlFmt1.containerBreakBefore = (FORMAT1_BB & i) 
? BreakStyle.ALWAYS : BreakStyle.AUTO;   
-                               tlFmt1.containerBreakAfter  = (FORMAT1_BA & i) 
? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               tlFmt2.containerBreakBefore = (FORMAT2_BB & i) 
? BreakStyle.ALWAYS : BreakStyle.AUTO;   
-                               tlFmt2.containerBreakAfter  = (FORMAT2_BA & i) 
? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               tlFmt3.containerBreakBefore = (FORMAT3_BB & i) 
? BreakStyle.ALWAYS : BreakStyle.AUTO;   
-                               tlFmt3.containerBreakAfter  = (FORMAT3_BA & i) 
? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               var cb:ContainerBreak = new 
ContainerBreak(containerWidth, tlFmt1, tlFmt2, tlFmt3);
-                               TestCanvas.rawChildren.addChild(cb);
-                               
-                               // Verify test results
-                               var textFlow:TextFlow = cb.textFlow;
-                               trace( textFlow.flowComposer.numLines);
-                               for(var j:int = 0; j < 
textFlow.flowComposer.numLines ;j ++)
-                               {
-                                       var textFlowLine:TextFlowLine = 
textFlow.flowComposer.getLineAt(j);
-                                       var textLine:TextLine = 
textFlowLine.getTextLine();
-                                       var text:String = 
textLine.textBlock.content.text;
-                                       var textLineBounds:Rectangle = 
textFlowLine.getTextLine().getBounds(cb);
-                                       trace(textLineBounds.x, 
textLineBounds.y, text);
-                                       
-                                       // Assert for STR1's position
-                                       if ( j == 0 )
-                                               assertTrue( isBetween( 
textLineBounds.x, 0, containerWidth ) );
-                                       
-                                       // Assert for STR2's position
-                                       var isStr2InColumn1:Boolean = true;
-                                       if ( tlFmt1.containerBreakAfter == 
BreakStyle.ALWAYS || tlFmt2.containerBreakBefore == BreakStyle.ALWAYS )
-                                               isStr2InColumn1 = false;
-                                       
-                                       if ( text.search( "STR2" ) >= 0 )
-                                       {
-                                               if ( isStr2InColumn1 )
-                                                       assertTrue( isBetween( 
textLineBounds.x, 0, containerWidth ) );
-                                               else
-                                                       assertTrue( isBetween( 
textLineBounds.x, containerWidth, containerWidth * 2 ) );
-                                       }
-                                       
-                                       // Assert for STR3's position
-                                       if ( text.search( "STR3" ) >= 0 )
-                                       {
-                                               if ( isStr2InColumn1 )
-                                               {
-                                                       if ( 
tlFmt2.containerBreakAfter == BreakStyle.ALWAYS || tlFmt3.containerBreakBefore 
== BreakStyle.ALWAYS )
-                                                               assertTrue( 
isBetween( textLineBounds.x, containerWidth, containerWidth * 2 ) );
-                                                       else
-                                                               assertTrue( 
isBetween( textLineBounds.x, 0, containerWidth ) );
-                                               }
-                                               else
-                                               {
-                                                       if ( 
tlFmt2.containerBreakAfter == BreakStyle.ALWAYS || tlFmt3.containerBreakBefore 
== BreakStyle.ALWAYS )
-                                                               assertTrue( 
isBetween( textLineBounds.x, containerWidth * 2, containerWidth * 3 ) );
-                                                       else
-                                                               assertTrue( 
isBetween( textLineBounds.x, containerWidth, containerWidth * 2 ) );
-                                               }
-                                       }
-                                       
-                               }
-                       }
-               }
-               
-               public function columnContainerBreakTest0():void
-               {
-                       columnContainerBreakTestX(0);
-               }
-               
-               public function columnContainerBreakTest1000():void
-               {
-                       columnContainerBreakTestX(1000);
-               }
-               
-               public function columnContainerBreakTest2000():void
-               {
-                       columnContainerBreakTestX(2000);
-               }
-               
-               public function columnContainerBreakTest3000():void
-               {
-                       columnContainerBreakTestX(3000);
-               }
-               
-               public function columnContainerBreakTest4000():void
-               {
-                       columnContainerBreakTestX(4000);
-               }
-               
-               public function columnContainerBreakTestX(startIdx:int):void
-               {
-                       var TestCanvas:Canvas = myEmptyChilds();
-                       
-                       var tlFmt1:TextLayoutFormat = new TextLayoutFormat();
-                       var tlFmt2:TextLayoutFormat = new TextLayoutFormat();
-                       var tlFmt3:TextLayoutFormat = new TextLayoutFormat();
-                       
-                       var FORMAT1_COL_BB:int = 1;
-                       var FORMAT1_COL_BA:int = 2;
-                       var FORMAT1_CON_BB:int = 4;
-                       var FORMAT1_CON_BA:int = 8;
-                       var FORMAT2_COL_BB:int = 16;
-                       var FORMAT2_COL_BA:int = 32;
-                       var FORMAT2_CON_BB:int = 64;
-                       var FORMAT2_CON_BA:int = 128;
-                       var FORMAT3_COL_BB:int = 256;
-                       var FORMAT3_COL_BA:int = 512;
-                       var FORMAT3_CON_BB:int = 1024;
-                       var FORMAT3_CON_BA:int = 2048;
-                       
-                       var containerWidth:int = 300;
-                       for ( var i:int = startIdx; i < startIdx + 1000; i ++ )
-                       {
-                               if ( i >= 4096 )
-                                       break;
-                               TestCanvas = myEmptyChilds();
-                               tlFmt1.columnBreakBefore    = (FORMAT1_COL_BB & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               tlFmt1.columnBreakAfter     = (FORMAT1_COL_BA & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               tlFmt1.containerBreakBefore = (FORMAT1_CON_BB & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;       
-                               tlFmt1.containerBreakAfter  = (FORMAT1_CON_BA & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               tlFmt2.columnBreakBefore    = (FORMAT2_COL_BB & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               tlFmt2.columnBreakAfter     = (FORMAT2_COL_BA & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               tlFmt2.containerBreakBefore = (FORMAT2_CON_BB & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;       
-                               tlFmt2.containerBreakAfter  = (FORMAT2_CON_BA & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               
-                               tlFmt3.columnBreakBefore    = (FORMAT3_COL_BB & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               tlFmt3.columnBreakAfter     = (FORMAT3_COL_BA & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                               tlFmt3.containerBreakBefore = (FORMAT3_CON_BB & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;       
-                               tlFmt3.containerBreakAfter  = (FORMAT3_CON_BA & 
i) ? BreakStyle.ALWAYS : BreakStyle.AUTO;
-                                               
-                               var cb:ColumnContainerBreak = new 
ColumnContainerBreak(containerWidth, tlFmt1, tlFmt2, tlFmt3);
-                               TestCanvas.rawChildren.addChild(cb);
-                               
-                               // Verify test results
-                               var textFlow:TextFlow = cb.textFlow;
-                               trace( textFlow.flowComposer.numLines);
-                               var bStr2Checked:Boolean = false;
-                               var bStr3Checked:Boolean = false;
-                               for(var j:int = 0; j < 
textFlow.flowComposer.numLines ;j ++)
-                               {
-                                       var textFlowLine:TextFlowLine = 
textFlow.flowComposer.getLineAt(j);
-                                       var textLine:TextLine = 
textFlowLine.getTextLine();
-                                       var text:String = 
textLine.textBlock.content.text;
-                                       var textLineBounds:Rectangle = 
textFlowLine.getTextLine().getBounds(cb);
-                                       trace(textLineBounds.x, 
textLineBounds.y, text);
-                                       
-                                       // Assert for STR1's position
-                                       if ( j == 0 )
-                                               assertTrue( isBetween( 
textLineBounds.x, 0, containerWidth ) );
-                                       
-                                       // Assert for STR2's position, 
-                                       // str2Pos = 1 means str2 in 
container1, column1
-                                       // str2Pos = 2 means str2 in 
container1, column2
-                                       // str2Pos = 3 means str2 in 
container2, column1
-                                       var str2Pos:int = 1;
-                                       if ( tlFmt1.containerBreakAfter == 
BreakStyle.ALWAYS || tlFmt2.containerBreakBefore == BreakStyle.ALWAYS )
-                                               str2Pos = 3;
-                                       else if ( tlFmt1.columnBreakAfter == 
BreakStyle.ALWAYS || tlFmt2.columnBreakBefore == BreakStyle.ALWAYS )
-                                               str2Pos = 2;
-                                       
-                                       var columnWidth:int = containerWidth / 
3;
-                                       if ( ! bStr2Checked && text.search( 
"STR2" ) >= 0 )
-                                       {
-                                               bStr2Checked = true;
-                                               switch ( str2Pos )
-                                               {
-                                               case 1:
-                                                       assertTrue( isBetween( 
textLineBounds.x, 0, columnWidth ) );
-                                                       break;
-                                               case 2:
-                                                       assertTrue( isBetween( 
textLineBounds.x, columnWidth, columnWidth * 2 ) );
-                                                       break;
-                                               case 3:
-                                                       assertTrue( isBetween( 
textLineBounds.x, containerWidth, containerWidth + columnWidth ) );
-                                                       break;
-                                               default: break;
-                                               }
-                                       }
-                                       
-                                       // Assert for STR3's position
-                                       if ( ! bStr3Checked && text.search( 
"STR3" ) >= 0 )
-                                       {
-                                               bStr3Checked = true;
-                                               var isStr3ColumnBreak    
:Boolean = false;
-                                               var isStr3ContainerBreak 
:Boolean = false;
-                                               if ( tlFmt2.columnBreakAfter == 
BreakStyle.ALWAYS || tlFmt3.columnBreakBefore == BreakStyle.ALWAYS )
-                                                       isStr3ColumnBreak = 
true;
-                                               
-                                               if ( tlFmt2.containerBreakAfter 
== BreakStyle.ALWAYS || tlFmt3.containerBreakBefore == BreakStyle.ALWAYS )
-                                                       isStr3ContainerBreak = 
true;
-                                               
-                                               // str3Pos = 1 means str3 in 
container1, column1
-                                               // str3Pos = 2 means str3 in 
container1, column2
-                                               // str3Pos = 3 means str3 in 
container1, column3
-                                               // str3Pos = 4 means str3 in 
container2, column1
-                                               // str3Pos = 5 means str3 in 
container2, column2
-                                               // str3Pos = 6 means str3 in 
container3, column1
-                                               var str3Pos:int = 0;
-                                               switch ( str2Pos )
-                                               {
-                                               case 1:
-                                                       if ( ! 
isStr3ContainerBreak && ! isStr3ColumnBreak )
-                                                               str3Pos = 1;
-                                                       if ( ! 
isStr3ContainerBreak && isStr3ColumnBreak )
-                                                               str3Pos = 2;
-                                                       if ( 
isStr3ContainerBreak )
-                                                               str3Pos = 4;
-                                                       break;
-                                               case 2:
-                                                       if ( ! 
isStr3ContainerBreak && ! isStr3ColumnBreak )
-                                                               str3Pos = 2;
-                                                       if ( ! 
isStr3ContainerBreak && isStr3ColumnBreak )
-                                                               str3Pos = 3;
-                                                       if ( 
isStr3ContainerBreak )
-                                                               str3Pos = 4;
-                                                       break;
-                                               case 3:
-                                                       if ( ! 
isStr3ContainerBreak && ! isStr3ColumnBreak )
-                                                               str3Pos = 4;
-                                                       if ( ! 
isStr3ContainerBreak && isStr3ColumnBreak )
-                                                               str3Pos = 5;
-                                                       if ( 
isStr3ContainerBreak )
-                                                               str3Pos = 6;
-                                                       break;
-                                               default : break;
-                                               }
-                                                               
-                                               switch ( str3Pos )
-                                               {
-                                               case 1:
-                                                       assertTrue( isBetween( 
textLineBounds.x, 0, columnWidth ) );
-                                                       break;
-                                               case 2:
-                                                       assertTrue( isBetween( 
textLineBounds.x, columnWidth, columnWidth * 2 ) );
-                                                       break;
-                                               case 3:
-                                                       assertTrue( isBetween( 
textLineBounds.x, columnWidth * 2, columnWidth * 3 ) );
-                                                       break;
-                                               case 4:
-                                                       assertTrue( isBetween( 
textLineBounds.x, containerWidth, containerWidth + columnWidth ) );
-                                                       break;
-                                               case 5:
-                                                       assertTrue( isBetween( 
textLineBounds.x, containerWidth + columnWidth, containerWidth + columnWidth * 
2 ) );
-                                                       break;
-                                               case 6:
-                                                       assertTrue( isBetween( 
textLineBounds.x, containerWidth * 2, containerWidth * 2 + columnWidth ) );
-                                                       break;
-                                               default : break;
-                                               }
-                                               
-                                       }
-                               }
-                       }
-               }
-       
-               public function myEmptyChilds():Canvas
-               {
-                       var TestCanvas:Canvas = null;
-                       TestDisplayObject = testApp.getDisplayObject();
-                       if (TestDisplayObject)
-                       {
-                               TestCanvas = Canvas(TestDisplayObject);
-                               TestCanvas.removeAllChildren();
-                               var iCnt:int = TestCanvas.numChildren;
-                               for ( var a:int = 0; a < iCnt; a ++ )
-                               {
-                                       TestCanvas.rawChildren.removeChildAt(0);
-                               }
-                       }
-                       
-                       return TestCanvas;
-               }
-               
-               // mjzhang : Watson Bug#2841799 When lineBreak="toFit" the 
contentBounds width does 
-               // not include the trailing whitespace
-               public function ContentBoundsWithWhitespaces():void
-               {
-                       // This is the switch for calculate whitespace or not 
regardless lineBreak="toFix".
-                       GlobalSettings.alwaysCalculateWhitespaceBounds = true;
-                       
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       SelManager.insertText("AAAAAAAAAAAAAA");
-                       SelManager.updateAllControllers();
-                       
-                       var textFlowLine:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(0);
-                       var textLength:Number = textFlowLine.lineExtent;
-                       var contentBounds:Number = 
SelManager.textFlow.flowComposer.getControllerAt(0).getContentBounds().width;
-                       
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       SelManager.insertText("AAAAAAAAAAAAAA  ");
-                       SelManager.updateAllControllers();
-                       
-                       var textFlowLine1:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(0);
-                       var textWithSpace:Number = textFlowLine1.lineExtent;
-                       var contentBoundsWithSpace:Number = 
SelManager.textFlow.flowComposer.getControllerAt(0).getContentBounds().width;
-                       // mjzhang : if the blockProgression is RL, we needs to 
check the height, not the width.
-                       if ( SelManager.textFlow.blockProgression == 
BlockProgression.RL )
-                       {
-                               textWithSpace = textFlowLine1.lineExtent;
-                               contentBoundsWithSpace = 
SelManager.textFlow.flowComposer.getControllerAt(0).getContentBounds().height;
-                       }
-                       
-                       GlobalSettings.alwaysCalculateWhitespaceBounds = false;
-                       
-                       assertTrue("With spaces text length should larger than 
no spaces text length.", 
-                               textWithSpace > textLength );
-                       assertTrue("With spaces text length should larger than 
no spaces text length.", 
-                               contentBoundsWithSpace > contentBounds );
-               }
-               
-               // mjzhang : Bug#2835316 The TextLine is INVALID and cannot be 
used to access the current state of the TextBlock
-               public function TextSelectAllTest():void
-               {
-                       var textFlow:TextFlow = SelManager.textFlow;
-                       var markup:String = '<TextFlow 
whiteSpaceCollapse="preserve" version="3.0.0" 
xmlns="http://ns.adobe.com/textLayout/2008";><p><span>hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh</span></p></TextFlow>';
-                       var textFlowNew:TextFlow = 
TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT);
-                       
-                       var textLayoutFormat:TextLayoutFormat = new 
TextLayoutFormat();
-                       textLayoutFormat.fontSize = 12;
-                       textLayoutFormat.textIndent = 0;
-                       textLayoutFormat.paragraphSpaceAfter = 5;
-                       textLayoutFormat.fontFamily="Arial" ;
-                       
-                       var paraElement:ParagraphElement = 
textFlowNew.getChildAt(0) as ParagraphElement;
-                       var paraElementCopy:ParagraphElement = 
paraElement.deepCopy(0, paraElement.textLength) as ParagraphElement;
-                       paraElementCopy.format = textLayoutFormat;
-                       textFlow.replaceChildren(0, textFlow.numChildren, 
paraElementCopy);
-                       textFlow.whiteSpaceCollapse = "preserve";
-                       textFlow.flowComposer.updateAllControllers();
-                       
-                       var cc:ContainerController = 
SelManager.textFlow.flowComposer.getControllerAt(0);
-                       cc.setCompositionSize(229, 81);
-                       cc.verticalScrollPolicy = ScrollPolicy.ON;
-                       cc.horizontalScrollPolicy = ScrollPolicy.ON;
-                       SelManager.selectRange(40, 40);
-                       
-                       var mouseEvent:MouseEvent = new 
MouseEvent(MouseEvent.DOUBLE_CLICK, true, false, 80, 80);
-                       TestFrame.container["dispatchEvent"](mouseEvent);
-                       SelManager.flushPendingOperations();
-               }
-               
-               // mjzhang : Bug#2898924 TLF reports incorrect content height 
after composition when floats are used with padding
-               public function ContentBoundsWithPaddingTest():void
-               {
-                       // Get image content height which has padding top set
-                       var textFlow:TextFlow = SelManager.textFlow;
-                       var markup:String = '<TextFlow fontFamily="Arial" 
fontSize="16" paddingBottom="2" paddingLeft="2" paddingRight="2" paddingTop="2" 
whiteSpaceCollapse="preserve" version="2.0.0" 
xmlns="http://ns.adobe.com/textLayout/2008";><p><img paddingTop="-100" 
paddingLeft="50" height="auto" width="auto" 
source="http://www.lacitelibreria.info/ambientazione-cite/cite-libreria-logo.png";
 float="left"/><span fontFamily="Georgia" fontSize="24">La Cité Libreria 
Cafè</span></p></TextFlow>';
-                       var textFlowNew:TextFlow = 
TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT);
-                       
-                       
textFlow.addEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE, 
statusChangeHandler );
-                       
-                       var paraElement:ParagraphElement = 
textFlowNew.getChildAt(0) as ParagraphElement;
-                       var paraElementCopy:ParagraphElement = 
paraElement.deepCopy(0, paraElement.textLength) as ParagraphElement;
-                       textFlow.replaceChildren(0, textFlow.numChildren, 
paraElementCopy);
-                       textFlow.flowComposer.updateAllControllers();
-                       SelManager.updateAllControllers();
-               }
-               
-               // mjzhang : Track the completion of loading inlines
-               private function statusChangeHandler(obj:Event):void
-               {
-                       var event:StatusChangeEvent = StatusChangeEvent(obj);
-                       var textFlow:TextFlow = event.element.getTextFlow();
-                       switch (event.status)
-                       {
-                               case InlineGraphicElementStatus.LOADING:
-                                       break;
-                               case InlineGraphicElementStatus.SIZE_PENDING:
-                                       
textFlow.removeEventListener(StatusChangeEvent.INLINE_GRAPHIC_STATUS_CHANGE,statusChangeHandler);
-                                       var contentHeight:int = 
textFlow.flowComposer.getControllerAt(0).getContentBounds().height;
-                                       var contentWidth:int  = 
textFlow.flowComposer.getControllerAt(0).getContentBounds().width;
-                                       assertTrue("Content height should 
calculate padding info of inlinegraphic, should be 44", contentHeight == 44);
-                                       assertTrue("Content width should 
calculate padding info of inlinegraphic, should be 670", contentWidth == 669);
-                                       break;
-                               case InlineGraphicElementStatus.READY:
-                                       break;
-                               default:
-                                       break;
-                       }
-               }
-               
-               // mjzhang : Bug#2758977 <s:p color="red"/> throws out of range 
error - can you do color lookup like Flex SDK?
-               // Tests all the color options, also test Upper case and bad 
case(XXX)
-               public function colorPropetyTest():void
-               {
-                       var textFlow:TextFlow = SelManager.textFlow;
-                       var markup:String = '<TextFlow 
xmlns="http://ns.adobe.com/textLayout/2008";>'
-                               + '<p color="black"><span>black</span></p>'
-                               + '<p color="blue"><span>blue</span></p>'
-                               + '<p color="green"><span>green</span></p>'
-                               + '<p color="gray"><span>gray</span></p>'
-                               + '<p color="silver"><span>silver</span></p>'
-                               + '<p color="lime"><span>lime</span></p>'
-                               + '<p color="olive"><span>olive</span></p>'
-                               + '<p color="white"><span>white</span></p>'
-                               + '<p color="yellow"><span>yellow</span></p>'
-                               + '<p color="maroon"><span>maroon</span></p>'
-                               + '<p color="navy"><span>navy</span></p>'
-                               + '<p color="red"><span>Red</span></p>'
-                               + '<p color="purple"><span>purple</span></p>'
-                               + '<p color="teal"><span>teal</span></p>'
-                               + '<p color="fuchsia"><span>fuchsia</span></p>'
-                               + '<p color="aqua"><span>aqua</span></p>'
-                               + '<p color="magenta"><span>magenta</span></p>'
-                               + '<p color="cyan"><span>cyan</span></p>'
-                               + '<p color="CYAN"><span>CYAN</span></p>'
-                               + '<p color="XXX"><span>XXX</span></p>'
-                               + '</TextFlow>';
-                       var textFlowNew:TextFlow = 
TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT);
-                       
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       for ( var i:int = 0; i < 20; i ++ )
-                       {
-                               var paraElement:ParagraphElement = 
textFlowNew.getChildAt(i) as ParagraphElement;
-                               var paraElementCopy:ParagraphElement = 
paraElement.deepCopy(0, paraElement.textLength) as ParagraphElement;
-                               textFlow.replaceChildren(i, i, paraElementCopy);
-                       }
-                       SelManager.updateAllControllers();
-                       
-                       var paraBlack  :ParagraphElement = 
textFlow.getChildAt(0) as ParagraphElement;
-                       var paraBlue   :ParagraphElement = 
textFlow.getChildAt(1) as ParagraphElement;
-                       var paraGreen  :ParagraphElement = 
textFlow.getChildAt(2) as ParagraphElement;
-                       var paraGray   :ParagraphElement = 
textFlow.getChildAt(3) as ParagraphElement;
-                       var paraSilver :ParagraphElement = 
textFlow.getChildAt(4) as ParagraphElement;
-                       var paraLime   :ParagraphElement = 
textFlow.getChildAt(5) as ParagraphElement;
-                       var paraOlive  :ParagraphElement = 
textFlow.getChildAt(6) as ParagraphElement;
-                       var paraWhite  :ParagraphElement = 
textFlow.getChildAt(7) as ParagraphElement;
-                       var paraYellow :ParagraphElement = 
textFlow.getChildAt(8) as ParagraphElement;
-                       var paraMaroon :ParagraphElement = 
textFlow.getChildAt(9) as ParagraphElement;
-                       var paraNavy   :ParagraphElement = 
textFlow.getChildAt(10) as ParagraphElement;
-                       var paraRed    :ParagraphElement = 
textFlow.getChildAt(11) as ParagraphElement;
-                       var paraPurple :ParagraphElement = 
textFlow.getChildAt(12) as ParagraphElement;
-                       var paraTeal   :ParagraphElement = 
textFlow.getChildAt(13) as ParagraphElement;
-                       var paraFuchsia:ParagraphElement = 
textFlow.getChildAt(14) as ParagraphElement;
-                       var paraAqua   :ParagraphElement = 
textFlow.getChildAt(15) as ParagraphElement;
-                       var paraMagenta:ParagraphElement = 
textFlow.getChildAt(16) as ParagraphElement;
-                       var paraCyan   :ParagraphElement = 
textFlow.getChildAt(17) as ParagraphElement;
-                       var paraCYAN   :ParagraphElement = 
textFlow.getChildAt(18) as ParagraphElement;
-                       var paraXXX    :ParagraphElement = 
textFlow.getChildAt(19) as ParagraphElement;
-                       assertTrue("Paragraph color value should be equal", 
paraBlack.format.color   == ColorName.BLACK);
-                       assertTrue("Paragraph color value should be equal", 
paraBlue.format.color    == ColorName.BLUE);
-                       assertTrue("Paragraph color value should be equal", 
paraGreen.format.color   == ColorName.GREEN);
-                       assertTrue("Paragraph color value should be equal", 
paraGray.format.color    == ColorName.GRAY);
-                       assertTrue("Paragraph color value should be equal", 
paraSilver.format.color  == ColorName.SILVER);
-                       assertTrue("Paragraph color value should be equal", 
paraLime.format.color    == ColorName.LIME);
-                       assertTrue("Paragraph color value should be equal", 
paraOlive.format.color   == ColorName.OLIVE);
-                       assertTrue("Paragraph color value should be equal", 
paraWhite.format.color   == ColorName.WHITE);
-                       assertTrue("Paragraph color value should be equal", 
paraYellow.format.color  == ColorName.YELLOW);
-                       assertTrue("Paragraph color value should be equal", 
paraMaroon.format.color  == ColorName.MAROON);
-                       assertTrue("Paragraph color value should be equal", 
paraNavy.format.color    == ColorName.NAVY);
-                       assertTrue("Paragraph color value should be equal", 
paraRed.format.color     == ColorName.RED);
-                       assertTrue("Paragraph color value should be equal", 
paraPurple.format.color  == ColorName.PURPLE);
-                       assertTrue("Paragraph color value should be equal", 
paraTeal.format.color    == ColorName.TEAL);
-                       assertTrue("Paragraph color value should be equal", 
paraFuchsia.format.color == ColorName.FUCHSIA);
-                       assertTrue("Paragraph color value should be equal", 
paraAqua.format.color    == ColorName.AQUA);
-                       assertTrue("Paragraph color value should be equal", 
paraMagenta.format.color == ColorName.MAGENTA);
-                       assertTrue("Paragraph color value should be equal", 
paraCyan.format.color    == ColorName.CYAN);
-                       assertTrue("Paragraph color value should be equal", 
paraCYAN.format.color    == undefined);
-                       assertTrue("Paragraph color value should be equal", 
paraXXX.format.color     == undefined);
-               }
-               
-               private function myHBeamCursorFunction(value:String):String
-               {
-                       var cursorPoints:Vector.<Number>;
-                       var cursorCommands:Vector.<int>;
-                       
-                       // mjzhang : IBEAM cursor have different appearence on 
Mac and Win, so we draw HBEAM differently
-                       if ( Capabilities.os.search("Mac OS") > -1 )
-                       {
-                               cursorPoints = new <Number>[0,0, 0,1, 3,4,  
3,4, 0,7, 0,8,  3,4, 16,4,  19,0, 19,1, 17,4,  17,4, 19,7, 19,8,  10,3, 10,6];
-                               cursorCommands = new <int>[1, 2, 2, 1, 2, 2, 1, 
2, 1, 2, 2, 1, 2, 2, 1, 2];
-                       }
-                       else
-                       {
-                               cursorPoints = new <Number>[0,0, 0,4, 0,5, 0,9, 
1,4, 17,4, 17,0, 17,4, 17,5, 17,9];
-                               cursorCommands = new <int>[1, 2, 1, 2, 1, 2, 1, 
2, 1, 2];
-                       }
-                       var cursorShape:Shape = new Shape();
-                       cursorShape.graphics.beginFill(0x000000, 1.0);
-                       cursorShape.graphics.lineStyle(1);
-                       cursorShape.graphics.drawPath(cursorCommands, 
cursorPoints);
-                       cursorShape.graphics.endFill();
-                       var cursorBmp:BitmapData = new BitmapData(20, 10, true, 
0);
-                       cursorBmp.draw(cursorShape);
-                       
-                       var cursorData:Vector.<BitmapData> = new 
Vector.<BitmapData>();
-                       cursorData.push(cursorBmp);
-                       
-                       var MouseCursorDataClass:Class;
-                       try 
-                       {
-                               MouseCursorDataClass = 
getDefinitionByName("flash.ui.MouseCursorData") as Class;
-                       }
-                       catch(e:Error) {}
-                       
-                       if (MouseCursorDataClass)
-                       {
-                               var mouseCursorData:Object = new 
MouseCursorDataClass();
-                               mouseCursorData.data = cursorData;
-                               mouseCursorData.hotSpot = new Point(10, 5);
-                               
-                               var registerCursor:Function = 
Mouse["registerCursor"];
-                               if ( Mouse["registerCursor"] != undefined )
-                               { 
-                                       registerCursor("hbeam", 
mouseCursorData);
-                               }
-                               
-                       }
-                       
-                       return "hbeam";
-                       
-               }
-               
-               public function HBeamCursorTest():void
-               {
-                       SelManager.selectAll();
-                       SelManager.deleteText();
-                       
-                       var markup:String = '<TextFlow 
whiteSpaceCollapse="preserve" version="2.0.0" 
xmlns="http://ns.adobe.com/textLayout/2008";><p paddingBottom="25"><span>Move 
your mouse over this text to see custom cursor</span></p></TextFlow>';
-                       
-                       var config:Configuration = new Configuration();
-                       config.cursorFunction = myHBeamCursorFunction;
-                       var textFlow:TextFlow = 
TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT, config);
-                       textFlow.blockProgression = BlockProgression.RL;
-                       textFlow.interactionManager = new EditManager();
-                       
-                       var sprite:Sprite = new Sprite();
-                       textFlow.flowComposer.addController(new 
ContainerController(sprite, 400, 200));
-                       textFlow.flowComposer.updateAllControllers();
-                       
-                       var testCanvas:Canvas = myEmptyChilds();
-                       testCanvas.rawChildren.addChild(sprite);
-               }
-               
-               // mjzhang : Bug#2907691 When composition starts in middle of 
the container, paddingBottom for the previous paragraph is ignored
-               public function paddingBottomTest():void
-               {
-                       var textFlow:TextFlow = SelManager.textFlow;
-                       var markup:String = '<TextFlow 
whiteSpaceCollapse="preserve" version="2.0.0" 
xmlns="http://ns.adobe.com/textLayout/2008";><p 
paddingBottom="25"><span>para1</span></p><p 
paddingBottom="25"><span>para2</span></p><p 
paddingBottom="25"><span>para3</span></p></TextFlow>';
-                       var textFlowNew:TextFlow = 
TextConverter.importToFlow(markup, TextConverter.TEXT_LAYOUT_FORMAT);
-                       textFlow.replaceChildren(0, textFlow.numChildren, 
textFlowNew.mxmlChildren);                    
-                       SelManager.updateAllControllers();
-                       
-                       SelManager.selectRange(100, 100);
-                       SelManager.insertText("aaa");
-                       SelManager.textFlow.flowComposer.compose();
-                       
-                       var textFlowLine:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(2);
-                       var canvas:Canvas = Canvas(testApp.getDisplayObject());
-                       var textLineBounds:Rectangle = 
textFlowLine.getTextLine().getBounds(canvas);
-                       assertTrue("Paragraph3's top value should be 87.55.", 
textLineBounds.top == 87.55);
-               }
-               
-               //Fix bug 2869747  using TextFlow.flowComposer and 
ContainerController, displayed text is incorrectly masked
-               public function scrollRectTest():void
-               {
-                       var textFlow:TextFlow = SelManager.textFlow;
-                   var container:Sprite = new Sprite();
-                       container = 
textFlow.flowComposer.getControllerAt(0).container as Sprite;
-                       textFlow.flowComposer.addController(new 
ContainerController(container, 200, 100));              
-                       textFlow.flowComposer.updateAllControllers();   
-                       textFlow.flowComposer.removeAllControllers();           
-                       textFlow.flowComposer.addController(new 
ContainerController(container, 500, 500));
-                       textFlow.flowComposer.updateAllControllers();
-               }
-               
-       }
+    [RunWith("org.flexunit.runners.Parameterized")]
+    public class ContainerAttributeTest extends VellumTestCase
+    {
+        public static var dataProvider1:Array = [
+            [
+                {testContainer: true, minimal: true, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: false}
+            ],
+            [
+                {testContainer: false, minimal: true, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: false}
+            ],
+        ];
+
+        public static var dataProvider2:Array = [
+            [
+                {testContainer: false, minimal: false, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: false}
+            ],
+            [
+                {testContainer: false, minimal: true, blockProgression: 
BlockProgression.TB, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+        ];
+
+        public static var dataProvider3:Array = [
+            [
+                {testContainer: true, minimal: true, blockProgression: 
BlockProgression.TB, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+            [
+                {testContainer: true, minimal: false, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+        ];
+
+        public static var dataProvider4:Array = [
+            [
+                {testContainer: true, minimal: true, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+            [
+                {testContainer: false, minimal: false, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+        ];
+
+        public static var dataProvider5:Array = [
+            [
+                {testContainer: false, minimal: true, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+            [
+                {testContainer: false, minimal: false, blockProgression: 
BlockProgression.TB, direction: Direction.LTR, bitmapSnapshot: true}
+            ],
+        ];
+
+        public static var dataProvider6:Array = [
+            [
+                {testContainer: false, minimal: true, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+            [
+                {testContainer: false, minimal: false, blockProgression: 
BlockProgression.TB, direction: Direction.LTR, bitmapSnapshot: false}
+            ],
+        ];
+
+        public static var dataProvider7:Array = [
+            [
+                {testContainer: false, minimal: true, blockProgression: 
BlockProgression.RL, direction: Direction.RTL, bitmapSnapshot: true}
+            ],
+            [
+                {testContainer: false, minimal: false, blockProgression: 
BlockProgression.TB, direction: Direction.RTL, bitmapSnapshot: false}
+            ],
+        ];
+
+        private var testContainer:Boolean;
+        private var inputContainerAttrs:TextLayoutFormat;
+        private var outputContainerAttrs:ITextLayoutFormat;
+        private var initSize:Point;
+
+        private var currentDpData:Object;
+
+        public function ContainerAttributeTest()
+        {
+            super("", "ContainerAttributeTest", TestConfig.getInstance());
+            this.testContainer = (TestData.testContainer == "true");
+            TestID = TestID + ":" + testContainer;
+            inputContainerAttrs = new TextLayoutFormat();
+
+            metaData = {};
+            metaData.productArea = "Text Container";
+        }
+
+        public override function setUpTest():void
+        {
+            super.setUpTest();
+            paddingRight = 0;
+            paddingLeft = 0;
+            SelManager.textFlow.paddingLeft = 0;
+            SelManager.textFlow.paddingRight = 0;
+            SelManager.selectAll();
+            columnGap = 0;
+            columnWidth = FormatValue.AUTO;
+            columnCount = FormatValue.AUTO;
+
+            testContainer = currentDpData.testContainer;
+            TestData.bitmapSnapshot = currentDpData.bitmapSnapshot ? "true" : 
"false";
+            TestData.minimal = currentDpData.bitmapSnapshot ? "true" : "false";
+            writingDirection[0] = currentDpData.blockProgression == 
BlockProgression.RL ? BlockProgression.TB : BlockProgression.RL;
+            writingDirection[1] = currentDpData.direction == Direction.RTL ? 
Direction.LTR : Direction.LTR;
+        }
+
+        [After]
+        public override function tearDownTest():void
+        {
+            if (initSize)
+            {
+                size = initSize;
+            }
+
+            super.tearDownTest();
+        }
+
+        private function set columnCount(count:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.columnCount = count;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.columnCount = count;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function get columnCount():Object
+        {
+            outputContainerAttrs = TestFrame.computedFormat;
+            return outputContainerAttrs.columnCount;
+        }
+
+        private function set columnGap(gap:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.columnGap = gap;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.columnGap = gap;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function get columnGap():Object
+        {
+            outputContainerAttrs = TestFrame.computedFormat;
+            return outputContainerAttrs.columnGap;
+        }
+
+        private function set columnWidth(width:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.columnWidth = width;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.columnWidth = width;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function get verticalAlign():Object
+        {
+            outputContainerAttrs = TestFrame.computedFormat;
+            return outputContainerAttrs.verticalAlign;
+        }
+
+        private function set verticalAlign(align:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.verticalAlign = align as String;
+                TestFrame.format = ca;
+
+                // Added as result of bug #1875477
+                TestFrame.textFlow.flowComposer.updateAllControllers();
+            }
+            else
+            {
+                inputContainerAttrs.verticalAlign = align as String;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function get columnWidth():Object
+        {
+            outputContainerAttrs = TestFrame.computedFormat;
+            return outputContainerAttrs.columnWidth;
+        }
+
+        private function set paddingTop(padding:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.paddingTop = padding;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.paddingTop = padding;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function set paddingBottom(padding:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.paddingBottom = padding;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.paddingBottom = padding;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function set paddingRight(padding:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.paddingRight = padding;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.paddingRight = padding;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function set paddingLeft(padding:Object):void
+        {
+            if (testContainer)
+            {
+                var ca:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+                ca.paddingLeft = padding;
+                TestFrame.format = ca;
+            }
+            else
+            {
+                inputContainerAttrs.paddingLeft = padding;
+                SelManager.applyContainerFormat(inputContainerAttrs);
+            }
+        }
+
+        private function get testFrameWidth():Number
+        {
+            return TestFrame.compositionWidth;
+        }
+
+        private function get testFrameHeight():Number
+        {
+            return TestFrame.compositionHeight;
+        }
+
+        private function get blockProgression():String
+        {
+            return TestFrame.rootElement.computedFormat.blockProgression;
+        }
+
+        private function set blockProgression(mode:String):void
+        {
+            TestFrame.rootElement.blockProgression = mode;
+            TestFrame.textFlow.flowComposer.compose();
+        }
+
+        private function get size():Point
+        {
+            var width:Number = 0;
+            var height:Number = 0;
+
+            if (TestFrame.container is DisplayObject)
+            {
+                var frame:DisplayObject = TestFrame.container as DisplayObject;
+                width = frame.width;
+                height = frame.height;
+            }
+
+            return new Point(width, height);
+        }
+
+        private function set size(dimension:Point):void
+        {
+            var containerAttr:TextLayoutFormat = new 
TextLayoutFormat(TestFrame.format);
+            containerAttr.columnCount = 1;
+            containerAttr.paddingLeft = 0;
+            containerAttr.paddingRight = 0;
+            containerAttr.paddingTop = 0;
+            containerAttr.paddingBottom = 0;
+            TestFrame.format = containerAttr;
+
+            if (TestFrame.container is Sprite)
+            {
+                
TextFlow(testApp.getTextFlow()).flowComposer.getControllerAt(0).setCompositionSize(dimension.x,
 dimension.y);
+                
TextFlow(testApp.getTextFlow()).flowComposer.updateAllControllers();
+            }
+            else
+                throw new Error("test does not know how to resize this 
container type");       // Above should be generalized?
+        }
+
+        /**
+         * Set and get the firstBaselineOffset string values and test bound of 
numeric values.
+         */
+        [Test(dataProvider=dataProvider1)]
+        public function checkfirstBaselineOffset(dpData:Object):void // KJT
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            inputContainerAttrs.firstBaselineOffset = BaselineOffset.ASCENT;
+            assertTrue("expected: ascent.  cascaded: " + 
String(inputContainerAttrs.firstBaselineOffset),
+                    String(inputContainerAttrs.firstBaselineOffset) == 
BaselineOffset.ASCENT);
+            inputContainerAttrs.firstBaselineOffset = 
BaselineOffset.LINE_HEIGHT;
+            assertTrue("expected: leading.  cascaded: " + 
String(inputContainerAttrs.firstBaselineOffset),
+                    String(inputContainerAttrs.firstBaselineOffset) == 
BaselineOffset.LINE_HEIGHT);
+            for (var cter:uint = 
TextLayoutFormat.firstBaselineOffsetProperty.minValue; cter <= 
TextLayoutFormat.firstBaselineOffsetProperty.maxValue; cter += 33.33)
+            {
+                inputContainerAttrs.firstBaselineOffset = cter;
+                assertTrue("expected: " + cter + ". cascaded: " + 
inputContainerAttrs.firstBaselineOffset, 
inputContainerAttrs.firstBaselineOffset == cter);
+            }
+
+            inputContainerAttrs.firstBaselineOffset = undefined;
+        }
+
+        /**
+         * Set the gap, then change the width to see how the column count 
changes.
+         */
+        public function checkColumnCountOnWidthChangeTest():void
+        {
+            var width:Number = testFrameWidth;
+            var cWidth:Number = width / 10;
+
+            columnGap = 0;
+            columnWidth = cWidth;
+
+            var initCount:int = TestFrame.columnState.columnCount;
+
+            columnWidth = cWidth * 2;
+
+
+            var endCount:int = TestFrame.columnState.columnCount;
+
+            assertTrue("expected " + Math.floor(initCount / 2) + " but got " + 
endCount,
+                    Math.floor(initCount / 2) == endCount);
+        }
+
+        /**
+         * Set the width, then change the column gap to see how the column 
count changes.
+         */
+        public function checkColumnCountOnGapChangeTest():void
+        {
+            var width:Number = testFrameWidth;
+            var cWidth:Number = width / 10;
+
+            /*paddingRight = 0;
+             paddingLeft = 0;
+             SelManager.textFlow.paddingLeft = 0;
+             SelManager.textFlow.paddingRight = 0;*/
+            columnGap = 0;
+            columnWidth = cWidth;
+
+            var initCount:Number = TestFrame.columnState.columnCount;
+
+            columnGap = cWidth / 10;
+
+            var endCount:Number = TestFrame.columnState.columnCount;
+
+            assertTrue("expected " + (initCount - 1) + " but got " + endCount,
+                    initCount - 1 == endCount);
+        }
+
+        /**
+         * Set the column count, then change the column gap and see how the 
column width changes.
+         */
+        [Test(dataProvider=dataProvider1)]
+        public function checkColumnWidthOnGapChangeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var width:Number = testFrameWidth;
+            var cWidth:Number = width / 10;
+
+            /*paddingRight = 0;
+             paddingLeft = 0;
+             SelManager.textFlow.paddingLeft = 0;
+             SelManager.textFlow.paddingRight = 0;*/
+            columnGap = 0;
+            columnCount = 10;
+
+            var initColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var initWidth:Number = initColumn.width;
+
+            columnGap = cWidth / 9;
+
+            var endColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var endWidth:Number = endColumn.width;
+            assertTrue("expected " + (initWidth - (initWidth / 10)) + " but 
got " + endWidth,
+                    ((initWidth - (initWidth / 10)) - endWidth) < 0.01);
+        }
+
+        /**
+         * Set the column gap, then change the column count to see how the 
column width changes.
+         */
+        [Test(dataProvider=dataProvider1)]
+        public function checkColumnWidthOnCountChangeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var bp:String = TestFrame.textFlow.computedFormat.blockProgression;
+            var width:Number = bp == BlockProgression.TB ? testFrameWidth : 
testFrameHeight;
+            var cWidth:Number = width / 10;
+
+            /*paddingRight = 0;
+             paddingLeft = 0;
+             SelManager.textFlow.paddingLeft = 0;
+             SelManager.textFlow.paddingRight = 0;*/
+            columnGap = 0;
+            columnCount = 10;
+
+            var initColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var initWidth:Number = bp == BlockProgression.TB ? 
initColumn.width : initColumn.height;
+
+            columnCount = 5;
+
+            var endColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var endWidth:Number = bp == BlockProgression.TB ? endColumn.width 
: endColumn.height;
+
+            assertTrue("expected " + Math.floor(endWidth / 2) + " but got " + 
initWidth,
+                    Math.floor(endWidth / 2) == Math.floor(initWidth));
+            assertTrue("expected " + Math.floor(initWidth) + " but got " + 
Math.floor(cWidth),
+                    Math.floor(initWidth) == Math.floor(cWidth));
+        }
+
+        /**
+         * Set the column count, then change the column width to see how the 
column gap changes.
+         */
+        [Test(dataProvider=dataProvider1)]
+        [Ignore]
+        public function checkColumnGapOnWidthChangeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var width:Number = testFrameWidth;
+
+            columnCount = 2;
+            columnWidth = width / 3;
+
+            var initColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var initGap:Number = width - initColumn.width * 2;
+
+            assertTrue("expected init width to equal " + width / 3 + ", but 
got " + columnWidth,
+                    columnWidth == width / 3);
+            assertTrue("expected init count to equal " + 2 + ", but got " + 
columnCount,
+                    columnCount == 2);
+            assertTrue("expected init gap to equal " + width / 3 + ", but got 
" + initGap,
+                    Math.floor(initGap) == Math.floor(width / 3));
+
+            columnWidth = width / 2;
+
+            var endColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var endGap:Number = width - endColumn.width * 2;
+
+            assertTrue("expected " + Math.floor(width / 2) + " but got " + 
Math.floor(endGap),
+                    Math.floor(endGap) == 0);
+        }
+
+        /**
+         * Set the column width, then change the column count to see how the 
column gap changes.
+         * NOTE: Currently commented out due to bug 1657149.
+         */
+        [Test(dataProvider=dataProvider1)]
+        public function checkColumnGapOnCountChangeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var width:Number = testFrameWidth;
+
+            columnCount = 10;
+            var cWidth:Number = width / 10;
+            //to get gap by reducing column width
+            columnWidth = cWidth - cWidth / 9;
+
+            var initColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var initGap:Number = cWidth - initColumn.width;
+
+            //increase column count but no change to column count, gap should 
reduce
+            columnCount = 11;
+            cWidth = width / 11;
+
+            var endColumn:Rectangle = TestFrame.columnState.getColumnAt(0);
+            var endGap:Number = cWidth - endColumn.width;
+            assertTrue("Gap should reduce when column count increased and 
column width no change. ",
+                    initGap > endGap);
+        }
+
+        /**
+         * Slowly increase the padding at the top until it pushes a line off 
the screen
+         * then verify that the last line was the line pushed off the screen.
+         */
+        [Test(dataProvider=dataProvider4)]
+        public function topPaddingSqueezeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var length:int = SelManager.textFlow.flowComposer.numLines;
+            var last:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(length - 1);
+            var size:int = last.textLength;
+            var count:int = TestFrame.textLength;
+
+            for (var i:int = 0; i < 1000; i++)
+            {
+                paddingTop = i;
+                TestFrame.textFlow.flowComposer.compose();
+
+                if (TestFrame.textLength == count - size)
+                {
+                    return;
+                }
+            }
+            assertTrue("Expected " + size + "characters to be pushed off (the 
last line)" +
+                    " but actually had " + (TestFrame.textLength - count) + 
"pushed off",
+                    TestFrame.textLength != count - size);
+        }
+
+        /**
+         * Slowly increase the padding at the bottom until it eats the last 
line
+         * then verify that the last line was the line eaten.
+         */
+        [Test(dataProvider=dataProvider4)]
+        public function bottomPaddingSqueezeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            //FLEX: Why no lines?
+            var length:int = SelManager.textFlow.flowComposer.numLines;
+            var last:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(length - 1);
+            var size:int = last.textLength;
+            var count:int = TestFrame.textLength;
+
+            for (var i:int = 0; i < 1000; i++)
+            {
+                paddingBottom = i;
+                TestFrame.textFlow.flowComposer.compose();
+
+                if (TestFrame.textLength == count - size)
+                {
+                    return;
+                }
+            }
+            assertTrue("Expected " + size + "characters to be pushed off (the 
last line)" +
+                    " but actually had " + (TestFrame.textLength - count) + 
"pushed off",
+                    TestFrame.textLength != count - size);
+        }
+
+        /**
+         * Increase the left padding until you force the flow to create a new 
line.
+         */
+        [Test(dataProvider=dataProvider4)]
+        public function leftPaddingSqueezeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var length:int = SelManager.textFlow.flowComposer.numLines;
+
+            for (var i:int = 0; i < 1000; i++)
+            {
+                paddingLeft = i;
+                TestFrame.textFlow.flowComposer.compose();
+
+                if (SelManager.textFlow.flowComposer.numLines > length)
+                {
+                    return;
+                }
+            }
+            assertTrue("Increasing the left padding to 1000 did not add lines",
+                    SelManager.textFlow.flowComposer.numLines <= length);
+        }
+
+        /**
+         * Increase the right padding until you force the flow to create a new 
line.
+         */
+        [Test(dataProvider=dataProvider4)]
+        public function rightPaddingSqueezeTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var length:int = SelManager.textFlow.flowComposer.numLines;
+
+            for (var i:int = 0; i < 1000; i++)
+            {
+                paddingRight = i;
+                TestFrame.textFlow.flowComposer.compose();
+
+                if (SelManager.textFlow.flowComposer.numLines > length)
+                {
+                    return;
+                }
+            }
+            assertTrue("Increasing the right padding to 1000 did not add 
lines",
+                    SelManager.textFlow.flowComposer.numLines <= length);
+        }
+
+        [Test(dataProvider=dataProvider1)]
+        public function writingModeBreakTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            // clear all padding on the textFlow for this test
+            SelManager.textFlow.paddingTop = 0;
+            SelManager.textFlow.paddingLeft = 0;
+            SelManager.textFlow.paddingRight = 0;
+            SelManager.textFlow.paddingBottom = 0;
+
+            initSize = size;
+            size = new Point(200, 200);
+
+            var initCounts:Array = new 
Array(SelManager.textFlow.flowComposer.numLines);
+
+            var initMode:String = blockProgression;
+            var nextMode:String = null;
+
+            if (initMode == BlockProgression.TB)
+            {
+                nextMode = BlockProgression.RL;
+            } else
+            {
+                nextMode = BlockProgression.TB;
+            }
+
+
+            var i:int = 0;
+            for (; i < SelManager.textFlow.flowComposer.numLines; i++)
+            {
+                var line:TextFlowLine = 
SelManager.textFlow.flowComposer.getLineAt(i);
+                if (line.isDamaged())
+                    break;
+                initCounts[i] = line.textLength;
+            }
+            initCounts.length = i;
+
+            blockProgression = nextMode;
+            SelManager.flushPendingOperations();
+
+            var endCounts:Array = new 
Array(SelManager.textFlow.flowComposer.numLines);
+
+            i = 0;
+            for (; i < SelManager.textFlow.flowComposer.numLines; i++)
+            {
+                line = SelManager.textFlow.flowComposer.getLineAt(i);
+                if (line.isDamaged())
+                    break;
+                endCounts[i] = line.textLength;
+            }
+            endCounts.length = i;
+
+            var one:int = initCounts.length;
+            var two:int = endCounts.length;
+
+            assertTrue("number of lines are not the same after changing 
writing direction in a square frame",
+                    initCounts.length == endCounts.length);
+            for (i = 0; i < initCounts.length; i++)
+            {
+                assertTrue("line length of line " + i + " changed after 
changing writing direction in a square frame",
+                        initCounts[i] == endCounts[i]);
+            }
+        }
+
+        /**
+         * This test exists solely for snapshotting.
+         */
+        [Test(dataProvider=dataProvider2)]
+        public function checkVerticalAlignTopTest(dpData:Object):void
+        {
+            currentDpData = dpData;
+            setUpTest();
+
+            var division:int =
+                    TestFrame.textFlow.computedFormat.blockProgression ==
+                            BlockProgression.RL ?
+                            TestFrame.compositionWidth / 3 :
+                            TestFrame.compositionHeight / 3;
+
+            SelManager.selectAll();
+            SelManager.delet

<TRUNCATED>

Reply via email to