You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by pi...@apache.org on 2014/10/05 11:05:23 UTC

[12/30] Reorganized TLF test applications for using Apache Flex Unit 4.2.0 Changed first 8 tests for Apache Flex Unit Fixed ant build - no test automation yet

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/AutomationTestClasses.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/AutomationTestClasses.as b/automation_tests/src/AutomationTestClasses.as
index fb12340..db74742 100644
--- a/automation_tests/src/AutomationTestClasses.as
+++ b/automation_tests/src/AutomationTestClasses.as
@@ -20,7 +20,7 @@ package
 {
  	internal class AutomationTestClasses
 	{
-		import perfAppTests.FTEGridTestCanvas; FTEGridTestCanvas;
+		/*import perfAppTests.FTEGridTestCanvas; FTEGridTestCanvas;
 		import perfAppTests.InputManagerTestSprite; InputManagerTestSprite;
 		import perfAppTests.TextFlowTestSprite; TextFlowTestSprite;
 
@@ -32,9 +32,11 @@ package
 		import UnitTest.PerformanceTests.VellumAliceTests; VellumAliceTests;
 		import UnitTest.PerformanceTests.VellumParaTests; VellumParaTests;
 		import UnitTest.PerformanceTests.VellumWordTests; VellumWordTests;
-
-		import UnitTest.Tests.AccessibilityMethodsTest; AccessibilityMethodsTest;
-		import UnitTest.Tests.AllAttributeTest; AllAttributeTest;
+                                                            */
+		import AllTestsSuite; AllTestsSuite;
+        import MinimalTestsSuite; MinimalTestsSuite;
+        import UnitTest.Tests.AccessibilityMethodsTest; AccessibilityMethodsTest;
+		/*import UnitTest.Tests.AllAttributeTest; AllAttributeTest;
 		import UnitTest.Tests.AllCharAttributeTest; AllCharAttributeTest;
 		import UnitTest.Tests.AllContAttributeTest; AllContAttributeTest;
 		import UnitTest.Tests.AllParaAttributeTest; AllParaAttributeTest;
@@ -84,7 +86,7 @@ package
 		import UnitTest.Tests.TextFlowTextLineFactoryTest; TextFlowTextLineFactoryTest;
 		import UnitTest.Tests.TextLineFilterTest; TextLineFilterTest;
 		import UnitTest.Tests.UndoRedoTest; UndoRedoTest;
-		import UnitTest.Tests.ScrollToRangeTest; ScrollToRangeTest;
+		import UnitTest.Tests.ScrollToRangeTest; ScrollToRangeTest;   */
 	}
 }
 

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/MinimalTestsSuite.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/MinimalTestsSuite.as b/automation_tests/src/MinimalTestsSuite.as
new file mode 100644
index 0000000..3122012
--- /dev/null
+++ b/automation_tests/src/MinimalTestsSuite.as
@@ -0,0 +1,31 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package
+{
+
+    import UnitTest.Tests.AccessibilityMethodsTest;
+
+    [Suite]
+    [RunWith("org.flexunit.runners.Suite")]
+    public dynamic class MinimalTestsSuite
+    {
+        public var accessibilityMethodsTest:AccessibilityMethodsTest;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/UnitTest/Tests/AccessibilityMethodsTest.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/UnitTest/Tests/AccessibilityMethodsTest.as b/automation_tests/src/UnitTest/Tests/AccessibilityMethodsTest.as
index dbc6b9f..8ab3d89 100644
--- a/automation_tests/src/UnitTest/Tests/AccessibilityMethodsTest.as
+++ b/automation_tests/src/UnitTest/Tests/AccessibilityMethodsTest.as
@@ -18,477 +18,462 @@
 ////////////////////////////////////////////////////////////////////////////////
 package UnitTest.Tests
 {
-	import UnitTest.ExtendedClasses.TestDescriptor;
-	import UnitTest.ExtendedClasses.TestSuiteExtended;
-	import UnitTest.ExtendedClasses.VellumTestCase;
-	import UnitTest.Fixtures.TestConfig;
-
-	import flash.accessibility.AccessibilityImplementation;
-	import flash.display.Sprite;
-	import flash.events.IMEEvent;
-	import flash.system.Capabilities;
-	import flash.text.ime.IIMEClient;
-
-	import flashx.textLayout.accessibility.TextAccImpl;
-	import flashx.textLayout.compose.StandardFlowComposer;
-	import flashx.textLayout.compose.TextLineRecycler;
-	import flashx.textLayout.container.ContainerController;
-	import flashx.textLayout.conversion.ConversionType;
-	import flashx.textLayout.conversion.TextConverter;
-	import flashx.textLayout.debug.assert;
-	import flashx.textLayout.edit.EditManager;
-	import flashx.textLayout.edit.SelectionManager;
-	import flashx.textLayout.elements.Configuration;
-	import flashx.textLayout.elements.GlobalSettings;
-	import flashx.textLayout.elements.ParagraphElement;
-	import flashx.textLayout.elements.TextFlow;
-	import flashx.textLayout.formats.TextLayoutFormat;
-	import flashx.textLayout.tlf_internal;
-
-	import mx.containers.Canvas;
-
-	use namespace tlf_internal;
-
-	public class AccessibilityMethodsTest extends VellumTestCase
-	{
-		private var textFlow:TextFlow;
-		private var container:Sprite;
-
-		public function AccessibilityMethodsTest(methodName:String, testID:String, testConfig:TestConfig, testXML:XML = null)
-		{
-			super(methodName, testID, testConfig);
-		}
-
-		public static function suite(testConfig:TestConfig, ts:TestSuiteExtended):void
-		{
-   			ts.addTestDescriptor (new TestDescriptor (AccessibilityMethodsTest, "selectionReportingTests", testConfig ) );
-			ts.addTestDescriptor (new TestDescriptor (AccessibilityMethodsTest, "searchIndexTests", testConfig ) );
-			if (Configuration.versionIsAtLeast(10,1))
-			{
-   				ts.addTestDescriptor (new TestDescriptor (AccessibilityMethodsTest, "textReportingTests", testConfig ) );
-   				ts.addTestDescriptor (new TestDescriptor (AccessibilityMethodsTest, "textSelectTests", testConfig ) );
-				ts.addTestDescriptor (new TestDescriptor (AccessibilityMethodsTest, "multiParaTest", testConfig ) );
-			}
-		}
-
-		override public function setUp() : void
-		{
-			cleanUpTestApp();
-			TestDisplayObject = testApp.getDisplayObject();
-			createTextFlow(getFileData("simple.xml"));
-			TestFrame = textFlow.flowComposer.getControllerAt(0);	//pacify assert in tearDown
-		}
-
-		override public function tearDown():void
-		{
-			super.tearDown();
-			if (container.parent)		// this should've been done already
-				container.parent.removeChild(container);
-			container = null;
-			textFlow = null;
-		}
-
-		private function createTextFlow(flowData:Object):void
-		{
-			// We need to create a new TextFlow even if there's a cached one so that we set it up with the correct Configuration
-			var configuration:Configuration = TextFlow.defaultConfiguration.clone();
-			configuration.enableAccessibility = true;
-			textFlow = TextConverter.importToFlow(flowData, TextConverter.TEXT_LAYOUT_FORMAT, configuration);
-
-			// Add a container to attach the accessibility object onto.
-			container = new Sprite();
-			textFlow.flowComposer.addController(new ContainerController(container, 300, 300));
-			var testCanvas:Canvas = testApp.getDisplayObject();
-			testCanvas.rawChildren.addChild(container);
-		}
-
-		private function getAccessibilityImplementation():AccessibilityImplementation
-		{
-			// Hack! The accessibilityImplementation may not be on the container if the Player does
-			// not detect that accessibility is turned on in the OS/browser. We want the test to run
-			// even in that case, so we push the accessibility implementation in anyway. If accessibility
-			// is turned on, we should not hit this case -- accImpl should be there already
-			if (container.accessibilityImplementation == null &&
-				 textFlow.flowComposer.getControllerAt(0).container == container)
-			{
-				assertTrue("Accessibility object wasn't added to container", !flash.system.Capabilities.hasAccessibility);
-				container.accessibilityImplementation = new TextAccImpl(container, textFlow);
-			}
-
-			return container.accessibilityImplementation;
-		}
-   		/**
-		 */
-
-		public function selectionReportingTests():void
-		{
-
-			var accessibilityObject:AccessibilityImplementation = getAccessibilityImplementation();
-
-			//start with no interaction - should return false
-			textFlow.interactionManager = null;
-
-			//we no longer have a selection manager, so there should be no selection.  Make sure
-			//that we report -1 for anchor and active.
-			assertTrue("selectionActiveIndex should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionActiveIndex"] == -1);
-			assertTrue("selectionAnchorIndex should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionAnchorIndex"] == -1);
-
-			textFlow.interactionManager = new SelectionManager();
-			textFlow.interactionManager.selectRange(25, 50);
-			assertTrue("selectionActiveIndex should report 50 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 50);
-			assertTrue("selectionAnchorIndex should report 25 but is "+ accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 25);
-			assertTrue("selectionActiveIndex should match. SelMgr reports " + textFlow.interactionManager.activePosition +
-				 " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
-			assertTrue("selectionAnchorIndex should match. SelMgr reports " + textFlow.interactionManager.anchorPosition +
-				 " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
-
-			textFlow.interactionManager = new EditManager();
-			textFlow.interactionManager.selectRange(15, 10);
-			assertTrue("selectionActiveIndex should report 10 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 10);
-			assertTrue("selectionAnchorIndex should report 15 but is "+ accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 15);
-			assertTrue("selectionActiveIndex should match. EditMgr reports " + textFlow.interactionManager.activePosition +
-				 " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
-			assertTrue("selectionAnchorIndex should match. EditMgr reports " + textFlow.interactionManager.anchorPosition +
-				 " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
-		}
-
-
-		private function createIMEClient():IIMEClient
-		{
-			// We're mimicing an IME startComposition event, so that we can get an IME client. But under pre-Argo (10.1) players,
-			// there is no imeStartComposition event, so in that case we can't return
-			var imeEvent:IMEEvent = new IMEEvent("imeStartComposition");
-			// figure out which controller we're targetting and set focus on it so the ime event will be received
-			var i:int;
-			for (i = 0; i < textFlow.flowComposer.numControllers && textFlow.flowComposer.getControllerAt(i).container != container; ++i)
-			{
-				// empty loop: prevent compiler warning
-			}
-			if (textFlow.interactionManager)
-				textFlow.interactionManager.selectRange(-1, -1);
-			textFlow.flowComposer.getControllerAt(i).setFocus();
-			container.dispatchEvent(imeEvent);
-			if (imeEvent["imeClient"] !== undefined)
-				return imeEvent["imeClient"];
-			return null;
-		}
-
-		public function textReportingTests():void
-		{
-			// Construct an IMEClient just for testing its getTextInRange in isolation.
-			var editManager:EditManager = new EditManager();
-			textFlow.interactionManager = editManager;
-			var imeClient:IIMEClient = createIMEClient();
-
-			//textFlow.textLength includes all para terminators.  However, we dont' include the final one for the last
-			//paragraph when getting text - since there may not be a carriage return on it
-			var textLen:int = textFlow.textLength - 1;
-
-			var totalText:String = imeClient.getTextInRange(-1, -1);
-			assertTrue("getTextInRange with default values should get all text in the Flow, but only got " + totalText.length
-				+ " characters out of " + textLen + ".", totalText.length == textLen);
-
-			var para:ParagraphElement = textFlow.getFirstLeaf().getParagraph();
-			var paraEnd:int = para.textLength - 1;
-			var selEnd:int = 64 < paraEnd ? 64 : paraEnd;
-			var selStart:int = selEnd >= 10 ? selEnd - 10 : 0;
-			var expectedLen:int = selEnd - selStart;
-
-			//assert that we have legit values.
-			CONFIG::debug{ assert(selStart != selEnd, "We need to have text to make this test work!  Where did it go!?")};
-
-			var subText:String = imeClient.getTextInRange(selStart, selEnd);
-			var outOfOrderText:String = imeClient.getTextInRange(selEnd, selStart);
-			assertTrue("getTextInRange with values (" + selStart + ", " + selEnd + ") should have a text length of " + expectedLen
-				 + " but is " + subText.length,subText.length == expectedLen);
-			assertTrue("getTextInRange with values (" + selEnd + ", " + selStart + ") should have a text length of " + expectedLen
-				 + " but is " + outOfOrderText.length, outOfOrderText.length == expectedLen);
-
-			assertTrue("getTextInRange with values both in and out of order should have the same text!",
-				outOfOrderText == subText);
-
-			//get text directly from paragraph.  Since this is the first one, the absolute positions and relative positions should match
-			var paraText:String = para.getText().substring(selStart, selEnd);
-			assertTrue("getTextInRange did not report the same text as the paragraph!  paraText is \'" + paraText
-				+ "\' while result is \'" + subText + "\'.", paraText == subText);
-
-			//get text from second paragraph
-			var nextPara:ParagraphElement = para.getNextParagraph();
-			if(nextPara)
-			{
-				var nextAbsStart:int = nextPara.getAbsoluteStart();
-				//remember that nextPara.textLength includes the para terminator mark, which will
-				//be included in this calculation.  When we pull the paragraph text, we need to decrement the
-				//value by 1 to prevent a false negative as getText will not include the terminator.
-				selStart = nextAbsStart + nextPara.textLength - 26;
-				selEnd = selStart + 25;
-				subText = imeClient.getTextInRange(selStart, selEnd);
-
-				//make sure that it is 1 < the absStart.  See note above
-				var nextParaText:String = nextPara.getText().substring(selStart - nextAbsStart, selEnd - nextAbsStart);
-				assertTrue("getTextInRange did not report the same text as the paragraph!  nextParaText is \'" + nextParaText
-				+ "\' while result is \'" + subText + "\'.", nextParaText == subText);
-
-				//perform tests accross para boundaries
-				selStart = nextAbsStart - 20;
-				selEnd = nextAbsStart + 20;
-				var boundaryText:String = imeClient.getTextInRange(selStart, selEnd);
-
-				assertTrue("getTextInRange across boundaries should be 40, but is " + boundaryText.length, boundaryText.length == 40);
-
-				//again, in first para, absolute is same as local indicies - substring - all chars up to endIdx, so CR is not included,
-				//which means we only compare the first 19 glyphs of boundaryText
-				var firstBoundaryText:String = para.getText().substring(selStart, selStart + 20);
-				assertTrue("getTextInRange across boundaries did not report the same text as the first paragraph!  paraText is \'" + firstBoundaryText
-				+ "\' while result is \'" + boundaryText.substr(0, 19) + "\'.", firstBoundaryText == boundaryText.substr(0, 19));
-
-				var secondBoundaryText:String = nextPara.getText().substring(0, 20);
-				//use a start idx of 20 so we skip the CR
-				assertTrue("getTextInRange across boundaries did not report the same text as the second paragraph!  paraText is \'" + secondBoundaryText
-				+ "\' while result is \'" + boundaryText.substr(20, 20) + "\'.", secondBoundaryText == boundaryText.substr(20, 20));
-
-			}
-
-
-			//now do negative tests and make sure we fail properly
-			var nullText:String = imeClient.getTextInRange(-2, 0);
-			assertTrue("getTextInRange should return null with an invalid startIndex!", nullText == null);
-
-			nullText = imeClient.getTextInRange(0, -23);
-			assertTrue("getTextInRange should return null with an invalid endIndex!", nullText == null);
-
-			nullText = imeClient.getTextInRange(textLen + 1, 1);
-			assertTrue("getTextInRange should return null with a startIndex > the text length!", nullText == null);
-
-			nullText = imeClient.getTextInRange(0, textLen + 1);
-			assertTrue("getTextInRange should return null with an endIndex > the text length!", nullText == null);
-
-			editManager.endIMESession();
-		}
-
-		public function searchIndexTests():void
-		{
-			var accessibilityObject:AccessibilityImplementation = getAccessibilityImplementation();
-
-			var saveEnableSearch:Boolean = GlobalSettings.enableSearch;
-
-			// Turn search index on and check the length and content of the result
-			GlobalSettings.enableSearch = true;
-			var entireContent:String = accessibilityObject["searchText"];
-			assertTrue("length of searchText should match TextFlow length, got " + entireContent.length.toString + " expected " + (textFlow.textLength - 1).toString, entireContent.length == textFlow.textLength - 1);
-			var checkContent:String = TextConverter.export(textFlow, TextConverter.PLAIN_TEXT_FORMAT, ConversionType.STRING_TYPE) as String;
-			assertTrue("expected content of searchText to match exported plain text", entireContent == checkContent);
-
-			// Turn search index off and check that we get nothing
-			GlobalSettings.enableSearch = false;
-			entireContent = accessibilityObject["searchText"];
-			assertTrue("enableSearchIndex is off, but searchText return result", entireContent == null || entireContent.length == 0);
-
-			GlobalSettings.enableSearch = saveEnableSearch;
-		}
-
-		public function textSelectTests():void
-		{
-			//start with no interaction - should return false
-			textFlow.interactionManager = null;
-			var imeClient:IIMEClient = createIMEClient();
-			assertTrue("imeClient should be null on read-only textFlow", imeClient == null);
-
-			// try a SelectionManager (read-only) should return null
-			textFlow.interactionManager = new SelectionManager();
-			imeClient = createIMEClient();
-			assertTrue("imeClient should be null on read-select textFlow", imeClient == null);
-
-			// Construct an IMEClient just for testing its selectRange in isolation.
-			var editManager:EditManager = new EditManager();
-			textFlow.interactionManager = editManager;
-			imeClient = createIMEClient();
-			imeClient.selectRange(15, 10);
-			assertTrue("selectionActiveIndex should report 15 but is " + imeClient.selectionActiveIndex, imeClient.selectionActiveIndex == 10);
-			assertTrue("selectionAnchorIndex should report 10 but is "+ imeClient.selectionAnchorIndex, imeClient.selectionAnchorIndex == 15);
-
-			editManager.endIMESession();
-		}
-
-		private const Markup:String = "<flow:TextFlow xmlns:flow='http://ns.adobe.com/textLayout/2008' fontSize='14' " +
-				"textIndent='0' paragraphSpaceBefore='6' paddingTop='4' paddingBottom='4' fontFamily='Times New Roman'>" +
-				"<flow:p paragraphSpaceAfter='15' >" +
-					"<flow:span>There are many </flow:span>" +
-					"<flow:span fontStyle='italic'>such</flow:span>" +
-					"<flow:span> lime-kilns in that tract of country, for the purpose of burning the white" +
-						"himself on a log of wood or a fragment of marble, to hold a chat with the solitary man. " +
-						"It is a lonesome, and, when the character is inclined to thought, may be an intensely " +
-						"thoughtful occupation; as it proved in the case of Ethan Brand, who had mused to such " +
-						"strange purpose, in days gone by, while the fire in this very kiln was burning.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-				"<flow:p paragraphSpaceAfter='15'>" +
-					"<flow:span>" +
-						"The man who now watched the fire was of a different order, and troubled himself with no " +
-						"trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
-						"there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
-						"though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
-				"</flow:p>" +
-			"</flow:TextFlow>";
-
-		private var TestCanvas:Canvas = null;
-
-		public function multiParaTest():void
-		{
-			cleanUpTestApp();
-			var posOfSelection:int = TestData.posOfSelection;
-			var format:TextLayoutFormat = new TextLayoutFormat();
-			format = new TextLayoutFormat();
-			format.paddingLeft = 20;
-			format.paddingRight = 20;
-			format.paddingTop = 20;
-			format.paddingBottom = 20;
-
-			createTextFlow(Markup);
-			textFlow.flowComposer = new StandardFlowComposer();
-			var editManager:EditManager = new EditManager();
-        	textFlow.interactionManager = editManager;
-
-        	format.firstBaselineOffset = "auto";
-			editManager.applyContainerFormat(format);
-			editManager.applyFormatToElement(editManager.textFlow,format);
-			editManager.selectRange(0, 0);
-
-			//create two containers
-			container = new Sprite();
-			var container2:Sprite = new Sprite();
-			var controllerOne:ContainerController = new ContainerController(container, 200, 500);
-			var controllerTwo:ContainerController = new ContainerController(container2, 200, 500);
-
-			addToCanvas(container);
-			addToCanvas(container2);
-			container.x = 50;
-			container.y = 50;
-			container2.x = 300;
-			container2.y = 50;
-
-			// add the controllers to the text flow and update them to display the text
-			textFlow.flowComposer.addController(controllerOne);
-			textFlow.flowComposer.addController(controllerTwo);
-			textFlow.flowComposer.updateAllControllers();
-
-			var accessibilityObject:AccessibilityImplementation = getAccessibilityImplementation();
-
-			textFlow.interactionManager = new SelectionManager();
-			textFlow.interactionManager.selectRange(200, 2000);
-			assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
-			assertTrue("selectionAnchorIndex should report 200 but is "+ accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 200);
-			assertTrue("selectionActiveIndex should match. SelMgr reports " + textFlow.interactionManager.activePosition +
-				 " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
-			assertTrue("selectionAnchorIndex should match. SelMgr reports " + textFlow.interactionManager.anchorPosition +
-				 " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
-
-			textFlow.interactionManager = new EditManager();
-			textFlow.interactionManager.selectRange(200, 2000);
-			assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
-			assertTrue("selectionAnchorIndex should report 200 but is "+ accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 200);
-			assertTrue("selectionActiveIndex should match. EditMgr reports " + textFlow.interactionManager.activePosition +
-				 " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
-			assertTrue("selectionAnchorIndex should match. EditMgr reports " + textFlow.interactionManager.anchorPosition +
-				 " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
-
-			// Construct an IMEClient just for testing its getTextInRange in isolation.
-			var imeClient:IIMEClient = createIMEClient();
-
-			var textLen:int = textFlow.textLength - 1;
-			var totalText:String = imeClient.getTextInRange(-1, -1);
-			assertTrue("getTextInRange with default values should get all text in the Flow, but only got " + totalText.length
-				+ " characters out of " + textLen + ".", totalText.length == textLen);
-
-
-			var firstPara:ParagraphElement = textFlow.getFirstLeaf().getParagraph();
-			var secondPara:ParagraphElement = firstPara.getNextParagraph();
-			var thirdPara:ParagraphElement = secondPara.getNextParagraph();
-			var fourthPara:ParagraphElement = thirdPara.getNextParagraph();
-			var secondParaStart:int = secondPara.getAbsoluteStart();
-			var thirdParaEnd:int = fourthPara.getAbsoluteStart() - 1;
-			var subText:String = imeClient.getTextInRange(secondParaStart, thirdParaEnd);
-			var paraText:String = secondPara.getText() + '\n' + thirdPara.getText();
-			var paraLength:int = paraText.length;
-			var subLength:int = subText.length;
-			var secondParaLength:int = secondPara.textLength;
-
-			assertTrue("getTextInRange did not report the same text as the paragraph!  paraText is \'" + paraText
-				+ "\' while result is \'" + subText + "\'.", paraText.length == subText.length);
-			assertTrue("getTextInRange did not report the same text as the paragraph!  paraText is \'" + paraText
-				+ "\' while result is \'" + subText + "\'.", paraText == subText);
-			EditManager(textFlow.interactionManager).endIMESession();
-
-			//start with no interaction - should return false
-			textFlow.interactionManager = null;
-
-			//we no longer have a selection manager, so there should be no selection.  Make sure
-			//that we report -1 for anchor and active.
-			assertTrue("textSelectTests should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionActiveIndex"] == -1);
-			assertTrue("textSelectTests should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionAnchorIndex"] == -1);
-
-			textFlow.interactionManager = new SelectionManager();
-			textFlow.interactionManager.selectRange(200, 2000);
-			assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
-			assertTrue("selectionAnchorIndex should report 200 but is "+ accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 200);
-
-
-			textFlow.interactionManager = new EditManager();
-			textFlow.interactionManager.selectRange(20, 2000);
-			assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
-			assertTrue("selectionAnchorIndex should report 200 but is "+ accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 20);
-
-		}
-
-		private function addToCanvas(sprite:Sprite):void
-		{
-			TestDisplayObject = testApp.getDisplayObject();
-			if (TestDisplayObject is Canvas)
-				Canvas(TestDisplayObject).rawChildren.addChild(sprite);
-		}
-
-
-
-	}
+
+    import UnitTest.ExtendedClasses.VellumTestCase;
+    import UnitTest.Fixtures.TestConfig;
+
+    import flash.accessibility.AccessibilityImplementation;
+    import flash.display.Sprite;
+    import flash.events.IMEEvent;
+    import flash.system.Capabilities;
+    import flash.text.ime.IIMEClient;
+
+    import flashx.textLayout.accessibility.TextAccImpl;
+    import flashx.textLayout.compose.StandardFlowComposer;
+    import flashx.textLayout.container.ContainerController;
+    import flashx.textLayout.conversion.ConversionType;
+    import flashx.textLayout.conversion.TextConverter;
+    import flashx.textLayout.edit.EditManager;
+    import flashx.textLayout.edit.SelectionManager;
+    import flashx.textLayout.elements.Configuration;
+    import flashx.textLayout.elements.GlobalSettings;
+    import flashx.textLayout.elements.ParagraphElement;
+    import flashx.textLayout.elements.TextFlow;
+    import flashx.textLayout.formats.TextLayoutFormat;
+    import flashx.textLayout.tlf_internal;
+
+    import mx.containers.Canvas;
+
+    import org.flexunit.asserts.assertTrue;
+
+    use namespace tlf_internal;
+
+    public class AccessibilityMethodsTest extends VellumTestCase
+    {
+        private var textFlow:TextFlow;
+        private var container:Sprite;
+
+        private const Markup:String = "<flow:TextFlow xmlns:flow='http://ns.adobe.com/textLayout/2008' fontSize='14' " +
+                "textIndent='0' paragraphSpaceBefore='6' paddingTop='4' paddingBottom='4' fontFamily='Times New Roman'>" +
+                "<flow:p paragraphSpaceAfter='15' >" +
+                "<flow:span>There are many </flow:span>" +
+                "<flow:span fontStyle='italic'>such</flow:span>" +
+                "<flow:span> lime-kilns in that tract of country, for the purpose of burning the white" +
+                "himself on a log of wood or a fragment of marble, to hold a chat with the solitary man. " +
+                "It is a lonesome, and, when the character is inclined to thought, may be an intensely " +
+                "thoughtful occupation; as it proved in the case of Ethan Brand, who had mused to such " +
+                "strange purpose, in days gone by, while the fire in this very kiln was burning.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "<flow:p paragraphSpaceAfter='15'>" +
+                "<flow:span>" +
+                "The man who now watched the fire was of a different order, and troubled himself with no " +
+                "trace out the indistinct shapes of the neighboring mountains; and, in the upper sky, " +
+                "there was a flitting congregation of clouds, still faintly tinged with the rosy sunset, " +
+                "though thus far down into the valley the sunshine had vanished long and long ago.</flow:span>" +
+                "</flow:p>" +
+                "</flow:TextFlow>";
+
+        public function AccessibilityMethodsTest()
+        {
+            super("", "AccessibilityMethodsTest", TestConfig.getInstance());
+        }
+
+        [Before]
+        override public function setUpTest():void
+        {
+            super.setUpTest();
+            cleanUpTestApp();
+            TestDisplayObject = testApp.getDisplayObject();
+            createTextFlow(getFileData("simple.xml"));
+            TestFrame = textFlow.flowComposer.getControllerAt(0);	//pacify assert in tearDown  */
+        }
+
+        [After]
+        override public function tearDownTest():void
+        {
+            super.tearDownTest();
+            if (container.parent)		// this should've been done already
+                container.parent.removeChild(container);
+            container = null;
+            textFlow = null;
+        }
+
+        [Test]
+        public function selectionReportingTests():void
+        {
+
+            var accessibilityObject:AccessibilityImplementation = getAccessibilityImplementation();
+
+            //start with no interaction - should return false
+            textFlow.interactionManager = null;
+
+            //we no longer have a selection manager, so there should be no selection.  Make sure
+            //that we report -1 for anchor and active.
+            assertTrue("selectionActiveIndex should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionActiveIndex"] == -1);
+            assertTrue("selectionAnchorIndex should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionAnchorIndex"] == -1);
+
+            textFlow.interactionManager = new SelectionManager();
+            textFlow.interactionManager.selectRange(25, 50);
+            assertTrue("selectionActiveIndex should report 50 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 50);
+            assertTrue("selectionAnchorIndex should report 25 but is " + accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 25);
+            assertTrue("selectionActiveIndex should match. SelMgr reports " + textFlow.interactionManager.activePosition +
+                    " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
+            assertTrue("selectionAnchorIndex should match. SelMgr reports " + textFlow.interactionManager.anchorPosition +
+                    " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
+
+            textFlow.interactionManager = new EditManager();
+            textFlow.interactionManager.selectRange(15, 10);
+            assertTrue("selectionActiveIndex should report 10 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 10);
+            assertTrue("selectionAnchorIndex should report 15 but is " + accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 15);
+            assertTrue("selectionActiveIndex should match. EditMgr reports " + textFlow.interactionManager.activePosition +
+                    " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
+            assertTrue("selectionAnchorIndex should match. EditMgr reports " + textFlow.interactionManager.anchorPosition +
+                    " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
+        }
+
+        [Test]
+        public function textReportingTests():void
+        {
+            // Construct an IMEClient just for testing its getTextInRange in isolation.
+            var editManager:EditManager = new EditManager();
+            textFlow.interactionManager = editManager;
+            var imeClient:IIMEClient = createIMEClient();
+
+            //textFlow.textLength includes all para terminators.  However, we dont' include the final one for the last
+            //paragraph when getting text - since there may not be a carriage return on it
+            var textLen:int = textFlow.textLength - 1;
+
+            var totalText:String = imeClient.getTextInRange(-1, -1);
+            assertTrue("getTextInRange with default values should get all text in the Flow, but only got " + totalText.length
+                    + " characters out of " + textLen + ".", totalText.length == textLen);
+
+            var para:ParagraphElement = textFlow.getFirstLeaf().getParagraph();
+            var paraEnd:int = para.textLength - 1;
+            var selEnd:int = 64 < paraEnd ? 64 : paraEnd;
+            var selStart:int = selEnd >= 10 ? selEnd - 10 : 0;
+            var expectedLen:int = selEnd - selStart;
+
+            //assert that we have legit values.
+            assertTrue(selStart != selEnd, "We need to have text to make this test work!  Where did it go!?");
+            //		CONFIG::debug{ assert(selStart != selEnd, "We need to have text to make this test work!  Where did it go!?")};
+
+            var subText:String = imeClient.getTextInRange(selStart, selEnd);
+            var outOfOrderText:String = imeClient.getTextInRange(selEnd, selStart);
+            assertTrue("getTextInRange with values (" + selStart + ", " + selEnd + ") should have a text length of " + expectedLen
+                    + " but is " + subText.length, subText.length == expectedLen);
+            assertTrue("getTextInRange with values (" + selEnd + ", " + selStart + ") should have a text length of " + expectedLen
+                    + " but is " + outOfOrderText.length, outOfOrderText.length == expectedLen);
+
+            assertTrue("getTextInRange with values both in and out of order should have the same text!",
+                    outOfOrderText == subText);
+
+            //get text directly from paragraph.  Since this is the first one, the absolute positions and relative positions should match
+            var paraText:String = para.getText().substring(selStart, selEnd);
+            assertTrue("getTextInRange did not report the same text as the paragraph!  paraText is \'" + paraText
+                    + "\' while result is \'" + subText + "\'.", paraText == subText);
+
+            //get text from second paragraph
+            var nextPara:ParagraphElement = para.getNextParagraph();
+            if (nextPara)
+            {
+                var nextAbsStart:int = nextPara.getAbsoluteStart();
+                //remember that nextPara.textLength includes the para terminator mark, which will
+                //be included in this calculation.  When we pull the paragraph text, we need to decrement the
+                //value by 1 to prevent a false negative as getText will not include the terminator.
+                selStart = nextAbsStart + nextPara.textLength - 26;
+                selEnd = selStart + 25;
+                subText = imeClient.getTextInRange(selStart, selEnd);
+
+                //make sure that it is 1 < the absStart.  See note above
+                var nextParaText:String = nextPara.getText().substring(selStart - nextAbsStart, selEnd - nextAbsStart);
+                assertTrue("getTextInRange did not report the same text as the paragraph!  nextParaText is \'" + nextParaText
+                        + "\' while result is \'" + subText + "\'.", nextParaText == subText);
+
+                //perform tests accross para boundaries
+                selStart = nextAbsStart - 20;
+                selEnd = nextAbsStart + 20;
+                var boundaryText:String = imeClient.getTextInRange(selStart, selEnd);
+
+                assertTrue("getTextInRange across boundaries should be 40, but is " + boundaryText.length, boundaryText.length == 40);
+
+                //again, in first para, absolute is same as local indicies - substring - all chars up to endIdx, so CR is not included,
+                //which means we only compare the first 19 glyphs of boundaryText
+                var firstBoundaryText:String = para.getText().substring(selStart, selStart + 20);
+                assertTrue("getTextInRange across boundaries did not report the same text as the first paragraph!  paraText is \'" + firstBoundaryText
+                        + "\' while result is \'" + boundaryText.substr(0, 19) + "\'.", firstBoundaryText == boundaryText.substr(0, 19));
+
+                var secondBoundaryText:String = nextPara.getText().substring(0, 20);
+                //use a start idx of 20 so we skip the CR
+                assertTrue("getTextInRange across boundaries did not report the same text as the second paragraph!  paraText is \'" + secondBoundaryText
+                        + "\' while result is \'" + boundaryText.substr(20, 20) + "\'.", secondBoundaryText == boundaryText.substr(20, 20));
+
+            }
+
+
+            //now do negative tests and make sure we fail properly
+            var nullText:String = imeClient.getTextInRange(-2, 0);
+            assertTrue("getTextInRange should return null with an invalid startIndex!", nullText == null);
+
+            nullText = imeClient.getTextInRange(0, -23);
+            assertTrue("getTextInRange should return null with an invalid endIndex!", nullText == null);
+
+            nullText = imeClient.getTextInRange(textLen + 1, 1);
+            assertTrue("getTextInRange should return null with a startIndex > the text length!", nullText == null);
+
+            nullText = imeClient.getTextInRange(0, textLen + 1);
+            assertTrue("getTextInRange should return null with an endIndex > the text length!", nullText == null);
+
+            editManager.endIMESession();
+        }
+
+        [Test]
+        public function searchIndexTests():void
+        {
+            var accessibilityObject:AccessibilityImplementation = getAccessibilityImplementation();
+
+            var saveEnableSearch:Boolean = GlobalSettings.enableSearch;
+
+            // Turn search index on and check the length and content of the result
+            GlobalSettings.enableSearch = true;
+            var entireContent:String = accessibilityObject["searchText"];
+            assertTrue("length of searchText should match TextFlow length, got " + entireContent.length.toString + " expected " + (textFlow.textLength - 1).toString, entireContent.length == textFlow.textLength - 1);
+            var checkContent:String = TextConverter.export(textFlow, TextConverter.PLAIN_TEXT_FORMAT, ConversionType.STRING_TYPE) as String;
+            assertTrue("expected content of searchText to match exported plain text", entireContent == checkContent);
+
+            // Turn search index off and check that we get nothing
+            GlobalSettings.enableSearch = false;
+            entireContent = accessibilityObject["searchText"];
+            assertTrue("enableSearchIndex is off, but searchText return result", entireContent == null || entireContent.length == 0);
+
+            GlobalSettings.enableSearch = saveEnableSearch;
+        }
+
+        [Test]
+        public function textSelectTests():void
+        {
+            //start with no interaction - should return false
+            textFlow.interactionManager = null;
+            var imeClient:IIMEClient = createIMEClient();
+            assertTrue("imeClient should be null on read-only textFlow", imeClient == null);
+
+            // try a SelectionManager (read-only) should return null
+            textFlow.interactionManager = new SelectionManager();
+            imeClient = createIMEClient();
+            assertTrue("imeClient should be null on read-select textFlow", imeClient == null);
+
+            // Construct an IMEClient just for testing its selectRange in isolation.
+            var editManager:EditManager = new EditManager();
+            textFlow.interactionManager = editManager;
+            imeClient = createIMEClient();
+            imeClient.selectRange(15, 10);
+            assertTrue("selectionActiveIndex should report 15 but is " + imeClient.selectionActiveIndex, imeClient.selectionActiveIndex == 10);
+            assertTrue("selectionAnchorIndex should report 10 but is " + imeClient.selectionAnchorIndex, imeClient.selectionAnchorIndex == 15);
+
+            editManager.endIMESession();
+        }
+
+        [Test]
+        public function multiParaTest():void
+        {
+            cleanUpTestApp();
+
+            var format:TextLayoutFormat = new TextLayoutFormat();
+            format = new TextLayoutFormat();
+            format.paddingLeft = 20;
+            format.paddingRight = 20;
+            format.paddingTop = 20;
+            format.paddingBottom = 20;
+
+            createTextFlow(Markup);
+            textFlow.flowComposer = new StandardFlowComposer();
+            var editManager:EditManager = new EditManager();
+            textFlow.interactionManager = editManager;
+
+            format.firstBaselineOffset = "auto";
+            editManager.applyContainerFormat(format);
+            editManager.applyFormatToElement(editManager.textFlow, format);
+            editManager.selectRange(0, 0);
+
+            //create two containers
+            container = new Sprite();
+            var container2:Sprite = new Sprite();
+            var controllerOne:ContainerController = new ContainerController(container, 200, 500);
+            var controllerTwo:ContainerController = new ContainerController(container2, 200, 500);
+
+            addToCanvas(container);
+            addToCanvas(container2);
+            container.x = 50;
+            container.y = 50;
+            container2.x = 300;
+            container2.y = 50;
+
+            // add the controllers to the text flow and update them to display the text
+            textFlow.flowComposer.addController(controllerOne);
+            textFlow.flowComposer.addController(controllerTwo);
+            textFlow.flowComposer.updateAllControllers();
+
+            var accessibilityObject:AccessibilityImplementation = getAccessibilityImplementation();
+
+            textFlow.interactionManager = new SelectionManager();
+            textFlow.interactionManager.selectRange(200, 2000);
+            assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
+            assertTrue("selectionAnchorIndex should report 200 but is " + accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 200);
+            assertTrue("selectionActiveIndex should match. SelMgr reports " + textFlow.interactionManager.activePosition +
+                    " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
+            assertTrue("selectionAnchorIndex should match. SelMgr reports " + textFlow.interactionManager.anchorPosition +
+                    " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
+
+            textFlow.interactionManager = new EditManager();
+            textFlow.interactionManager.selectRange(200, 2000);
+            assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
+            assertTrue("selectionAnchorIndex should report 200 but is " + accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 200);
+            assertTrue("selectionActiveIndex should match. EditMgr reports " + textFlow.interactionManager.activePosition +
+                    " but container reports " + accessibilityObject["selectionActiveIndex"], textFlow.interactionManager.activePosition == accessibilityObject["selectionActiveIndex"]);
+            assertTrue("selectionAnchorIndex should match. EditMgr reports " + textFlow.interactionManager.anchorPosition +
+                    " but container reports " + accessibilityObject["selectionAnchorIndex"], textFlow.interactionManager.anchorPosition == accessibilityObject["selectionAnchorIndex"]);
+
+            // Construct an IMEClient just for testing its getTextInRange in isolation.
+            var imeClient:IIMEClient = createIMEClient();
+
+            var textLen:int = textFlow.textLength - 1;
+            var totalText:String = imeClient.getTextInRange(-1, -1);
+            assertTrue("getTextInRange with default values should get all text in the Flow, but only got " + totalText.length
+                    + " characters out of " + textLen + ".", totalText.length == textLen);
+
+
+            var firstPara:ParagraphElement = textFlow.getFirstLeaf().getParagraph();
+            var secondPara:ParagraphElement = firstPara.getNextParagraph();
+            var thirdPara:ParagraphElement = secondPara.getNextParagraph();
+            var fourthPara:ParagraphElement = thirdPara.getNextParagraph();
+            var secondParaStart:int = secondPara.getAbsoluteStart();
+            var thirdParaEnd:int = fourthPara.getAbsoluteStart() - 1;
+            var subText:String = imeClient.getTextInRange(secondParaStart, thirdParaEnd);
+            var paraText:String = secondPara.getText() + '\n' + thirdPara.getText();
+
+            assertTrue("getTextInRange did not report the same text as the paragraph!  paraText is \'" + paraText
+                    + "\' while result is \'" + subText + "\'.", paraText.length == subText.length);
+            assertTrue("getTextInRange did not report the same text as the paragraph!  paraText is \'" + paraText
+                    + "\' while result is \'" + subText + "\'.", paraText == subText);
+            EditManager(textFlow.interactionManager).endIMESession();
+
+            //start with no interaction - should return false
+            textFlow.interactionManager = null;
+
+            //we no longer have a selection manager, so there should be no selection.  Make sure
+            //that we report -1 for anchor and active.
+            assertTrue("textSelectTests should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionActiveIndex"] == -1);
+            assertTrue("textSelectTests should report -1 when there is no Manager or EditingMode is READ_ONLY!", accessibilityObject["selectionAnchorIndex"] == -1);
+
+            textFlow.interactionManager = new SelectionManager();
+            textFlow.interactionManager.selectRange(200, 2000);
+            assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
+            assertTrue("selectionAnchorIndex should report 200 but is " + accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 200);
+
+
+            textFlow.interactionManager = new EditManager();
+            textFlow.interactionManager.selectRange(20, 2000);
+            assertTrue("selectionActiveIndex should report 2000 but is " + accessibilityObject["selectionActiveIndex"], accessibilityObject["selectionActiveIndex"] == 2000);
+            assertTrue("selectionAnchorIndex should report 200 but is " + accessibilityObject["selectionAnchorIndex"], accessibilityObject["selectionAnchorIndex"] == 20);
+
+        }
+
+        private function addToCanvas(sprite:Sprite):void
+        {
+            TestDisplayObject = testApp.getDisplayObject();
+            if (TestDisplayObject is Canvas)
+                Canvas(TestDisplayObject).rawChildren.addChild(sprite);
+        }
+
+        private function createIMEClient():IIMEClient
+        {
+            // We're mimicing an IME startComposition event, so that we can get an IME client. But under pre-Argo (10.1) players,
+            // there is no imeStartComposition event, so in that case we can't return
+            var imeEvent:IMEEvent = new IMEEvent("imeStartComposition");
+            // figure out which controller we're targetting and set focus on it so the ime event will be received
+            var i:int;
+            for (i = 0; i < textFlow.flowComposer.numControllers && textFlow.flowComposer.getControllerAt(i).container != container; ++i)
+            {
+                // empty loop: prevent compiler warning
+            }
+            if (textFlow.interactionManager)
+                textFlow.interactionManager.selectRange(-1, -1);
+            textFlow.flowComposer.getControllerAt(i).setFocus();
+            container.dispatchEvent(imeEvent);
+            if (imeEvent["imeClient"] !== undefined)
+                return imeEvent["imeClient"];
+            return null;
+        }
+
+        private function createTextFlow(flowData:Object):void
+        {
+            // We need to create a new TextFlow even if there's a cached one so that we set it up with the correct Configuration
+            var configuration:Configuration = TextFlow.defaultConfiguration.clone();
+            configuration.enableAccessibility = true;
+            textFlow = TextConverter.importToFlow(flowData, TextConverter.TEXT_LAYOUT_FORMAT, configuration);
+
+            // Add a container to attach the accessibility object onto.
+            container = new Sprite();
+            textFlow.flowComposer.addController(new ContainerController(container, 300, 300));
+            var testCanvas:Canvas = testApp.getDisplayObject();
+            testCanvas.rawChildren.addChild(container);
+        }
+
+        private function getAccessibilityImplementation():AccessibilityImplementation
+        {
+            // Hack! The accessibilityImplementation may not be on the container if the Player does
+            // not detect that accessibility is turned on in the OS/browser. We want the test to run
+            // even in that case, so we push the accessibility implementation in anyway. If accessibility
+            // is turned on, we should not hit this case -- accImpl should be there already
+            if (container.accessibilityImplementation == null &&
+                    textFlow.flowComposer.getControllerAt(0).container == container)
+            {
+                assertTrue("Accessibility object wasn't added to container", !Capabilities.hasAccessibility);
+                container.accessibilityImplementation = new TextAccImpl(container, textFlow);
+            }
+
+            return container.accessibilityImplementation;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/UnitTest/Tests/AllAttributeTest.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/UnitTest/Tests/AllAttributeTest.as b/automation_tests/src/UnitTest/Tests/AllAttributeTest.as
index 76f7047..44bca88 100644
--- a/automation_tests/src/UnitTest/Tests/AllAttributeTest.as
+++ b/automation_tests/src/UnitTest/Tests/AllAttributeTest.as
@@ -31,7 +31,9 @@ package UnitTest.Tests
 	import flashx.textLayout.formats.TextLayoutFormat;
 	import flashx.textLayout.property.*;
 
-	/** Base class for All*AttributeTest */
+    import org.flexunit.asserts.assertTrue;
+
+    /** Base class for All*AttributeTest */
 	public class AllAttributeTest extends VellumTestCase
 	{
 		// test specific configuration

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/UnitTest/Tests/AllCharAttributeTest.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/UnitTest/Tests/AllCharAttributeTest.as b/automation_tests/src/UnitTest/Tests/AllCharAttributeTest.as
index 401fe85..ff0596e 100644
--- a/automation_tests/src/UnitTest/Tests/AllCharAttributeTest.as
+++ b/automation_tests/src/UnitTest/Tests/AllCharAttributeTest.as
@@ -29,7 +29,9 @@ package UnitTest.Tests
 	import flashx.textLayout.property.Property;
 	import flashx.textLayout.tlf_internal;
 
-	use namespace tlf_internal;
+    import org.flexunit.asserts.assertTrue;
+
+    use namespace tlf_internal;
 
 	public class AllCharAttributeTest extends AllAttributeTest
 	{

http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/UnitTest/Tests/AllContAttributeTest.as
----------------------------------------------------------------------
diff --git a/automation_tests/src/UnitTest/Tests/AllContAttributeTest.as b/automation_tests/src/UnitTest/Tests/AllContAttributeTest.as
index 087b425..978d8f1 100644
--- a/automation_tests/src/UnitTest/Tests/AllContAttributeTest.as
+++ b/automation_tests/src/UnitTest/Tests/AllContAttributeTest.as
@@ -31,7 +31,9 @@ package UnitTest.Tests
 	import flashx.textLayout.property.Property;
 	import flashx.textLayout.tlf_internal;
 
-	use namespace tlf_internal;
+    import org.flexunit.asserts.assertTrue;
+
+    use namespace tlf_internal;
 
 	public class AllContAttributeTest extends AllAttributeTest
 	{
@@ -48,10 +50,10 @@ package UnitTest.Tests
  			testAllProperties(ts, testConfig, TextLayoutFormat.description, Category.CONTAINER, AllContAttributeTest, "runOneContainerAttributeTest");
    		}
 
-   		public override function tearDown():void
+   		public override function tearDownTest():void
 		{
 			SelManager.applyContainerFormat(TextLayoutFormat.defaultFormat);
-			super.tearDown();
+			super.tearDownTest();
 		}
 
 		/**