flex-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From pio...@apache.org
Subject [1/2] Migrate ContainerAttributeTest class to FU 4 Remove some unused imports
Date Thu, 05 Jun 2014 21:11:55 GMT
Repository: flex-tlf
Updated Branches:
  refs/heads/FlexUnit4TestsTLF 0d5ac0c12 -> cd4871560


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>

Mime
View raw message