http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/ExtendedClasses/VellumTestCase.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/ExtendedClasses/VellumTestCase.as b/automation_core/src/UnitTest/ExtendedClasses/VellumTestCase.as index 31c2d44..426563f 100644 --- a/automation_core/src/UnitTest/ExtendedClasses/VellumTestCase.as +++ b/automation_core/src/UnitTest/ExtendedClasses/VellumTestCase.as @@ -18,692 +18,693 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.ExtendedClasses { - import UnitTest.Fixtures.FileRepository; - import UnitTest.Fixtures.TestApp; - import UnitTest.Fixtures.TestConfig; - import UnitTest.Validation.BoundsChecker; - import UnitTest.Validation.LineSnapshot; - import UnitTest.Validation.MD5; - import UnitTest.Validation.StringSnapshot; - import UnitTest.Validation.TCMComposition; - import UnitTest.Validation.XMLSnapshot; - - import flash.display.Bitmap; - import flash.display.BitmapData; - import flash.display.DisplayObject; - import flash.display.IBitmapDrawable; - import flash.display.Sprite; - import flash.system.System; - import flash.utils.ByteArray; - import flash.utils.getTimer; - - import flashx.textLayout.compose.StandardFlowComposer; - import flashx.textLayout.container.ContainerController; - import flashx.textLayout.container.ScrollPolicy; - import flashx.textLayout.conversion.ITextImporter; - import flashx.textLayout.conversion.TextConverter; - import flashx.textLayout.edit.EditManager; - import flashx.textLayout.edit.EditingMode; - import flashx.textLayout.edit.SelectionFormat; - import flashx.textLayout.elements.Configuration; - import flashx.textLayout.elements.TextFlow; - import flashx.textLayout.factory.TextFlowTextLineFactory; - import flashx.textLayout.formats.TextLayoutFormat; - import flashx.textLayout.tlf_internal; - use namespace tlf_internal; - - import flexunit.framework.TestCase; - - import mx.containers.Canvas; - import mx.core.UIComponent; - import mx.skins.Border; - - - public class VellumTestCase extends TestCase - { - //public static var app:VellumUnit = Application.application as VellumUnit; - public static var testApp:TestApp; - public var TestID:String; - public var TestData:Object; - public var TestFrame:ContainerController; - public var TestDisplayObject:DisplayObject; - public var SelManager:EditManager; - public var containerType:String; - public var writingDirection:Array; - public var useEmbeddedFonts:Boolean; - public var baseURL:String; // baseURL for loading files - public var doBeforeAfterCompare:Boolean; - public var diffTolerance:Number; - - public var bitmapBaseline:Bitmap; - public var lineBaseline:XML; - public var plaintextBaseline:String; - public var xflBaseline:XML; - public var htmlBaseline:XML; - - //checksum for the baseline - public var bitmapBaselineChecksum:String = null; - public var lineBaselineChecksum:String = null; - public var plaintextBaselineChecksum:String = null; - public var xflBaselineChecksum:String = null; - public var htmlBaselineChecksum:String = null; - - //checksum for the snapshot - public var bitmapSnapshotChecksum:String = null; - public var lineSnapshotChecksum:String = null; - public var plaintextSnapshotChecksum:String = null; - public var xflSnapshotChecksum:String = null; - public var htmlSnapshotChecksum:String = null; - - //result link for the failed snapshot - public static var snapAdminServerUrl:String = ""; - public var runID:Number; - - public var fileName:String = null; - public var beforeData:BitmapData = null; - public var afterData:Bitmap = null; - - public var bitmapSnapshot:Bitmap = null; - public var lineSnapshot:XML = null; - public var plaintextSnapshot:String = null; - public var xflSnapshot:XML = null; - public var htmlSnapshot:XML = null; - - - public var TCMCompositionResult:Boolean = true; - public var bitmapResult:Boolean = true; - public var lineResult:Boolean = true; - public var plaintextResult:Boolean = true; - public var xflResult:Boolean = true; - public var htmlResult:Boolean = true; - - private var failString:String = ""; - private var endOfSetupTime:Number; - - protected var addDefaultTestSettings:Boolean; - - private static var useRandom:Boolean = false; - private static var LineSnapshotUtils:LineSnapshot = new LineSnapshot(); - private static var XMLSnapshotUtils:XMLSnapshot = new XMLSnapshot(); - private static var StringSnapshotUtils:StringSnapshot = new StringSnapshot(); - - public function VellumTestCase(methodName:String, testID:String, testConfig:TestConfig, testCaseXML:XML = null) - { - TestData = new Object(); - - // set defaults to some items in TestData - these can be overridden - // in a specific test case's constructor or in an XML file - TestData.bitmapSnapshot = "false"; - TestData.lineSnapshot = "false"; - TestData.xflSnapshot = "false"; - TestData.minimal = "true"; - - if (testCaseXML) - { - for each (var testDataXML:XML in testCaseXML.*) - { - TestData[testDataXML.@name] = testDataXML.toString(); - } - } - - if (TestData["bitmapSnapshotTolerance"] != null) - diffTolerance = TestData["bitmapSnapshotTolerance"]; - else - diffTolerance = 0.001; - - writingDirection = testConfig.writingDirection; - containerType = testConfig.containerType; - doBeforeAfterCompare = testConfig.doBeforeAfterCompare; - useEmbeddedFonts = testConfig.useEmbeddedFonts; - baseURL = testConfig.baseURL; - addDefaultTestSettings = true; - - TestID = testID; - - super (methodName); - - } - - public static function suiteFromXML(testCaseClass:Class, testListXML:XML, testConfig:TestConfig, ts:TestSuiteExtended):void - { - var writingDirection:String = testConfig.writingDirection[0] + "_" + testConfig.writingDirection[1]; - for each (var testCaseXML:XML in testListXML.*) - { - var testFile:String = testCaseXML.TestData.(@name == "testFile").toString(); - if (testFile != "") - { - var extension:String = getExtension(testFile); - var folderName:String = ""; - if (extension == "html") - folderName = "html/"; - else if (extension == "txt") - folderName = "plainText/"; - else - folderName = "tlf/"; - FileRepository.readFile(testConfig.baseURL, "../../test/testFiles/markup/" + folderName + testFile); - } - if ((testCaseXML.TestData.(@name == writingDirection).toString() != "false") && - (testCaseXML.TestData.(@name == testConfig.containerType).toString() != "false") && - (testCaseXML.TestData.(@name == testConfig.flashVersion) != "false")) - { - ts.addTestDescriptor (new TestDescriptor (testCaseClass, testCaseXML.@functionName, testConfig, testCaseXML)); - } - } - } - - static public var defaultFileName:String = "simple.xml"; - static private var DEFAULT_COMPOSITION_WIDTH:Number = 826; - static private var DEFAULT_COMPOSITION_HEIGHT:Number = 477; - - /** start every test with nothing on the canvas - */ - public function cleanUpTestApp() : void - { - testApp.detachActiveFlow(true); - var canvas:Canvas = testApp.getDisplayObject(); - // remove everything but the Border - for (var i:int = canvas.rawChildren.numChildren - 1; i >= 0; i--) - if (!(canvas.rawChildren.getChildAt(i) is Border)) - canvas.rawChildren.removeChildAt(i); - } - - override public function setUp() : void - { - //trace("Beginning test: " + TestID); - - // Make sure whatever was left from last test is cleared - cleanUpTestApp(); - - testApp.contentChange(null); - testApp.setInteractionManager(EditingMode.READ_WRITE); - testApp.changeContainerSetup("arrangeSideBySide", 0, 1); - - // if (TestData.requiresLayout == "true") - // { - // trace ("-----------set up layout-enabled container here-----------"); - // } - - fileName = TestData.fileName == undefined ? defaultFileName : TestData.fileName; - - loadTestFile(fileName); - - TestFrame = TextFlow(testApp.getTextFlow()).flowComposer.getControllerAt(0); - TestDisplayObject = testApp.getDisplayObject(); - - // all of this should eventually go away, but some tests are depending - // on it at the moment. I'm assuming that: - // 1. Container attributes should either stay the default, or these - // attributes should get put into the default file. - // 2. Tests that depend on scrolling being off should do that themselves - // 3. Writing direction for the default file should be handled in loadTestFile. - if (fileName == defaultFileName && addDefaultTestSettings) - { - // set the container attributes to the same as those in the Flex TextContainer (see the flow:TextContaienr below) - var containerAttr:TextLayoutFormat = new TextLayoutFormat(TestFrame.format); - containerAttr.columnCount = 2; - containerAttr.columnGap = 10; - //containerAttr.paddingLeft = 4; - containerAttr.paddingRight = 4; - //containerAttr.paddingTop = 4; - TestFrame.horizontalScrollPolicy = ScrollPolicy.OFF; - TestFrame.verticalScrollPolicy = ScrollPolicy.OFF; - TestFrame.format = containerAttr; - containerAttr = null; - if (TestFrame.compositionWidth != DEFAULT_COMPOSITION_WIDTH || TestFrame.compositionHeight != DEFAULT_COMPOSITION_HEIGHT) - TestFrame.setCompositionSize(DEFAULT_COMPOSITION_WIDTH, DEFAULT_COMPOSITION_HEIGHT); - - } - - // Set the writing direction specified by the test - if (fileName == defaultFileName && TestFrame.rootElement) - { - TestFrame.rootElement.blockProgression = writingDirection[0]; - TestFrame.rootElement.direction = writingDirection[1]; - } - - TextFlow(testApp.getTextFlow()).flowComposer.updateAllControllers(); - - if (TestFrame.rootElement) - { - SelManager = EditManager(TestFrame.rootElement.getTextFlow().interactionManager); - if(SelManager) - { - setSelectionRange(); - //make sure there is never any blinking when running these tests - setCaretBlinkRate (0); - } - } - //endOfSetupTime = getTimer(); - } - - override public function tearDown() : void - { - // trace ("Beginning of teardown."); - - if (TestFrame && TestFrame.flowComposer) - TestFrame.flowComposer.updateAllControllers(); - - //middleDuration = (getTimer() - endOfSetupTime); - - // generic validation - // note: why must the selectionmanager be active? - if (SelManager) - { - assertTrue ("teardown assert for active SelectionManager failed", SelManager.hasSelection()); - CONFIG::debug - { - assertTrue("teardown assert for SelManager.debugCheckSelectionManager() failed", SelManager.debugCheckSelectionManager() == 0); - assertTrue("teardown assert for SelManager.textFlow.debugCheckTextFlow() failed", SelManager.textFlow.debugCheckTextFlow() == 0); - } - } - - if (containerType == "sprite") - assertTrue ("TestFrame should be a Sprite, but is not", TestFrame.container is Sprite); - - - //Only run this test if VellumUnit is set to do it. - if (doBeforeAfterCompare) - { - var tempSelManager:EditManager = new EditManager(); - var fFormat:SelectionFormat = SelManager.focusedSelectionFormat; - var nfFormat:SelectionFormat = SelManager.unfocusedSelectionFormat; - var inFormat:SelectionFormat = SelManager.inactiveSelectionFormat; - tempSelManager.focusedSelectionFormat = new SelectionFormat(fFormat.rangeColor, fFormat.rangeAlpha, fFormat.rangeBlendMode, fFormat.pointColor, fFormat.pointAlpha, fFormat.pointBlendMode, 1000); - tempSelManager.unfocusedSelectionFormat = new SelectionFormat(nfFormat.rangeColor, nfFormat.rangeAlpha, nfFormat.rangeBlendMode, nfFormat.pointColor, nfFormat.pointAlpha, nfFormat.pointBlendMode, 1000); - tempSelManager.inactiveSelectionFormat = new SelectionFormat(inFormat.rangeColor, inFormat.rangeAlpha, inFormat.rangeBlendMode, inFormat.pointColor, inFormat.pointAlpha, inFormat.pointBlendMode, 1000); - - var TestCanvas:Canvas = testApp.getDisplayObject(); - var curTextFlow:TextFlow = TextFlow(testApp.getTextFlow()); - - var TCMCompositionUtils:TCMComposition = new TCMComposition(TestCanvas, curTextFlow); - TCMCompositionUtils.Height = testApp.getDisplayObject().height; - TCMCompositionUtils.Width = testApp.getDisplayObject().width; - TCMCompositionResult = TCMCompositionUtils.compare(); - - if (!TCMCompositionResult) - { - failString += " TextContainerManager composition: " + TCMCompositionUtils.ErrorString; - } - - SelManager = tempSelManager; - } - - if (TestData.bitmapSnapshot == true) - { - // Create the afterData snapshot. - if (TestDisplayObject is mx.core.UIComponent) - mx.core.UIComponent(TestDisplayObject).validateNow(); - var bits:BitmapData = new BitmapData(TestDisplayObject.width, TestDisplayObject.height); - bits.draw(TestDisplayObject as IBitmapDrawable); - bitmapSnapshot = new Bitmap(bits); - bits = null; - - var pixels:ByteArray = bitmapSnapshot.bitmapData.getPixels(bitmapSnapshot.bitmapData.rect); - pixels.compress(); - pixels.position = 0; - bitmapSnapshotChecksum = MD5.hashBinary(pixels); - - // If there is a baseline, then run a compare. If not, (gcai) we'll report an error about what's wrong there. - //bitmapResult = true; - if (bitmapBaseline != null) - { - if(bitmapSnapshotChecksum != bitmapBaselineChecksum) - { - // If the checksum is different, do the bitmap compare of the two bitmaps to make the diffTolerance enabled. - bitmapBaseline.bitmapData.draw(bitmapSnapshot, null, null, "difference"); - var diffPixels:ByteArray = bitmapBaseline.bitmapData.getPixels(bitmapBaseline.bitmapData.rect); - diffPixels.position = 0; - var pixelCount:uint = diffPixels.bytesAvailable; - var diffCount:uint = 0; - var redDiff:uint = 0; - var greenDiff:uint = 0; - var blueDiff:uint = 0; - var componentTolerance:uint = 20; - - while (diffPixels.bytesAvailable > 0) - { - // throw away alpha - diffPixels.readUnsignedByte(); - - redDiff = diffPixels.readUnsignedByte(); - greenDiff = diffPixels.readUnsignedByte(); - blueDiff = diffPixels.readUnsignedByte(); - - // only count pixels where the difference is visible - if (redDiff > componentTolerance || greenDiff > componentTolerance || blueDiff > componentTolerance) - { - // previously we'd count the number of pixels that were different - //diffCount ++; - // now we're summing the amount of the differences - so a small number of very different - // pixels will error, but only a large number of slightly different pixels will error - diffCount += redDiff + greenDiff + blueDiff - } - - redDiff = 0; - greenDiff = 0; - blueDiff = 0; - } - - // If this is larger than the tolerance, then something changed and it is a bug. - // previous pixel count threshold - //bitmapResult = (((diffCount/(pixelCount/4))*100) < diffTolerance); - // new summed differences threshold - bitmapResult = diffCount < (pixelCount/4)*diffTolerance*255*3; - //trace (" TestID: " + TestID + " count: "+ diffCount + " threshold: " + (pixelCount/4)*diffTolerance*255); - - if (!bitmapResult) - { - failString += "Bitmap data snapshot differed from the baseline. Detail:"+getUrl("Bitmap"); - failString += " Bitmap compare failed by " + ((diffCount/pixelCount)*100) + " percent of pixels compared."; - } - } - } - else - { - bitmapResult = false; - failString += "Don't have any bitmap baseline for current case. Detail:"+getUrl("Bitmap"); - } - } - - if (TestData.lineSnapshot == true) - { - lineSnapshot = LineSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow()); - var lineDataBytes:ByteArray = new ByteArray(); - lineSnapshot.normalize(); - lineDataBytes.writeObject (lineSnapshot); - lineDataBytes.compress(); - lineDataBytes.uncompress(); - lineSnapshot = new XML(lineDataBytes.readObject()); - lineSnapshot.normalize(); - - lineSnapshotChecksum = getChecksum(lineSnapshot); - // Do a compare as long as there is a baseline. - if (lineBaseline != null) - { - if(lineSnapshotChecksum != lineBaselineChecksum) - { - lineResult = XMLSnapshotUtils.compareAdvanced(lineBaseline, lineSnapshot); - if (!lineResult) - { - failString += " , Line data snapshot differed from the baseline. Detail:"+getUrl("Line"); - } - } - } - else - { - lineResult = false; - failString += " , Don't have any line baseline for current case. Detail:"+getUrl("Line"); - } - } - - if (TestData.plaintextSnapshot == true) - { - plaintextSnapshot = StringSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow(), TextConverter.PLAIN_TEXT_FORMAT); - plaintextSnapshotChecksum = MD5.hash(plaintextSnapshot); - // Do a compare as long as there is a baseline. - if (plaintextBaseline != null) - { - if(plaintextSnapshotChecksum != plaintextBaselineChecksum) - { - plaintextResult = StringSnapshotUtils.compare(plaintextBaseline, plaintextSnapshot); - if (!plaintextResult) - { - failString += " , PlainText data snapshot differed from the baseline. Detail:" + getUrl("PlainText"); - } - } - } - else - { - plaintextResult = false; - failString += " , Don't have any PlainText baseline for current case. Detail:"+getUrl("PlainText"); - } - } - - if (TestData.xflSnapshot == true) - { - xflSnapshot = XMLSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow(), TextConverter.TEXT_LAYOUT_FORMAT); - xflSnapshotChecksum = getChecksum(xflSnapshot); - // Do a compare as long as there is a baseline. - if (xflBaseline != null) - { - if(xflSnapshotChecksum != xflBaselineChecksum) - { - xflResult = XMLSnapshotUtils.compareAdvanced(xflBaseline, xflSnapshot); - if (!xflResult) - { - failString += " , XFL data snapshot differed from the baseline. Detail:" + getUrl("XFL"); - } - } - } - else - { - xflResult = false; - failString += " , Don't have any xfl baseline for current case. Detail:"+getUrl("XFL"); - } - } - - if (TestData.htmlSnapshot == true) - { - htmlSnapshot = XMLSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow(), TextConverter.TEXT_FIELD_HTML_FORMAT); - htmlSnapshotChecksum = getChecksum(htmlSnapshot); - // Do a compare as long as there is a baseline. - if (htmlBaseline != null) - { - if(htmlBaselineChecksum != htmlSnapshotChecksum) - { - htmlResult = XMLSnapshotUtils.compareAdvanced(htmlBaseline, htmlSnapshot); - if (!htmlResult) - { - failString += " , HTML data snapshot differed from the baseline. Detail:"+getUrl("HTML"); - } - } - } - else - { - htmlResult = false; - failString += " , Don't have any HTML baseline for current case. Detail:"+getUrl("HTML"); - } - } - - // Comment this code in to enable bounds checking on each test. - /* if (TestFrame && TestFrame.textFlow) - { - var s:Sprite = new Sprite(); - testApp.getDisplayObject().rawChildren.addChild(s); - BoundsChecker.boundsValidation(TestFrame.textFlow, s); - testApp.getDisplayObject().rawChildren.removeChild(s); - } */ - - - // trace ("Ending test: " + TestID); - - //***************************************************** - if (SelManager) - { - //turn caret blinking back on - setCaretBlinkRate (1000); - } - // Nulls for garbage collection - TestFrame = null; - SelManager = null; - // trace ("End of teardown."); - - - // This code breaks snapshotting of XML - need to move the disposeXML calls somewhere else - /*if (Configuration.playerEnablesArgoFeatures) - System["disposeXML"](lineSnapshot); - lineSnapshot = null; - plaintextSnapshot = null; - if (Configuration.playerEnablesArgoFeatures) - System["disposeXML"](xflSnapshot); - xflSnapshot = null; - if (Configuration.playerEnablesArgoFeatures) - System["disposeXML"](htmlSnapshot); - htmlSnapshot = null;*/ - - - // The assert makes it end the test, so we need to put that at the very - // end of everything, so that all snapshot tests get a chance to run. - assertTrue (failString, ((TCMCompositionResult) && (bitmapResult) && (lineResult) && (xflResult) && (htmlResult))); + + import UnitTest.Fixtures.FileRepository; + import UnitTest.Fixtures.TestApp; + import UnitTest.Fixtures.TestConfig; + import UnitTest.Validation.LineSnapshot; + import UnitTest.Validation.MD5; + import UnitTest.Validation.StringSnapshot; + import UnitTest.Validation.TCMComposition; + import UnitTest.Validation.XMLSnapshot; + + import flash.display.Bitmap; + import flash.display.BitmapData; + import flash.display.DisplayObject; + import flash.display.IBitmapDrawable; + import flash.display.Sprite; + import flash.utils.ByteArray; + import flash.utils.getTimer; + + import flashx.textLayout.container.ContainerController; + import flashx.textLayout.container.ScrollPolicy; + import flashx.textLayout.conversion.ITextImporter; + import flashx.textLayout.conversion.TextConverter; + import flashx.textLayout.edit.EditManager; + import flashx.textLayout.edit.EditingMode; + import flashx.textLayout.edit.SelectionFormat; + import flashx.textLayout.elements.TextFlow; + import flashx.textLayout.formats.TextLayoutFormat; + import flashx.textLayout.tlf_internal; + + import mx.containers.Canvas; + import mx.core.UIComponent; + import mx.skins.Border; + + import org.flexunit.asserts.assertTrue; + + use namespace tlf_internal; + + + public class VellumTestCase extends TestCaseBase + { + //public static var app:VellumUnit = Application.application as VellumUnit; + public static var testApp:TestApp; + public var TestID:String; + public var TestData:Object; + public var TestFrame:ContainerController; + public var TestDisplayObject:DisplayObject; + public var SelManager:EditManager; + public var containerType:String; + public var writingDirection:Array; + public var useEmbeddedFonts:Boolean; + public var baseURL:String; // baseURL for loading files + public var doBeforeAfterCompare:Boolean; + public var diffTolerance:Number; + + public var bitmapBaseline:Bitmap; + public var lineBaseline:XML; + public var plaintextBaseline:String; + public var xflBaseline:XML; + public var htmlBaseline:XML; + + //checksum for the baseline + public var bitmapBaselineChecksum:String = null; + public var lineBaselineChecksum:String = null; + public var plaintextBaselineChecksum:String = null; + public var xflBaselineChecksum:String = null; + public var htmlBaselineChecksum:String = null; + + //checksum for the snapshot + public var bitmapSnapshotChecksum:String = null; + public var lineSnapshotChecksum:String = null; + public var plaintextSnapshotChecksum:String = null; + public var xflSnapshotChecksum:String = null; + public var htmlSnapshotChecksum:String = null; + + //result link for the failed snapshot + public static var snapAdminServerUrl:String = ""; + public var runID:Number; + + public var fileName:String = null; + public var beforeData:BitmapData = null; + public var afterData:Bitmap = null; + + public var bitmapSnapshot:Bitmap = null; + public var lineSnapshot:XML = null; + public var plaintextSnapshot:String = null; + public var xflSnapshot:XML = null; + public var htmlSnapshot:XML = null; + + + public var TCMCompositionResult:Boolean = true; + public var bitmapResult:Boolean = true; + public var lineResult:Boolean = true; + public var plaintextResult:Boolean = true; + public var xflResult:Boolean = true; + public var htmlResult:Boolean = true; + + private var failString:String = ""; + private var endOfSetupTime:Number; + + protected var addDefaultTestSettings:Boolean; + + private static var useRandom:Boolean = false; + private static var LineSnapshotUtils:LineSnapshot = new LineSnapshot(); + private static var XMLSnapshotUtils:XMLSnapshot = new XMLSnapshot(); + private static var StringSnapshotUtils:StringSnapshot = new StringSnapshot(); + + public function VellumTestCase(methodName:String = null, testID:String = null, testConfig:TestConfig = null, testCaseXML:XML = null) + { + TestData = new Object(); + + // set defaults to some items in TestData - these can be overridden + // in a specific test case's constructor or in an XML file + TestData.bitmapSnapshot = "false"; + TestData.lineSnapshot = "false"; + TestData.xflSnapshot = "false"; + TestData.minimal = "true"; + + if (testCaseXML) + { + for each (var testDataXML:XML in testCaseXML.*) + { + TestData[testDataXML.@name] = testDataXML.toString(); + } + } + + if (TestData["bitmapSnapshotTolerance"] != null) + diffTolerance = TestData["bitmapSnapshotTolerance"]; + else + diffTolerance = 0.001; + + writingDirection = testConfig.writingDirection; + containerType = testConfig.containerType; + doBeforeAfterCompare = testConfig.doBeforeAfterCompare; + useEmbeddedFonts = testConfig.useEmbeddedFonts; + baseURL = testConfig.baseURL; + addDefaultTestSettings = true; + + TestID = testID; + + super(methodName); + + } + + public static function suiteFromXML(testCaseClass:Class, testListXML:XML, testConfig:TestConfig, ts:TestSuiteExtended):void + { + var writingDirection:String = testConfig.writingDirection[0] + "_" + testConfig.writingDirection[1]; + for each (var testCaseXML:XML in testListXML.*) + { + var testFile:String = testCaseXML.TestData.(@name == "testFile").toString(); + if (testFile != "") + { + var extension:String = getExtension(testFile); + var folderName:String = ""; + if (extension == "html") + folderName = "html/"; + else if (extension == "txt") + folderName = "plainText/"; + else + folderName = "tlf/"; + FileRepository.readFile(testConfig.baseURL, "../../test/testFiles/markup/" + folderName + testFile); + } + if ((testCaseXML.TestData.(@name == writingDirection).toString() != "false") && + (testCaseXML.TestData.(@name == testConfig.containerType).toString() != "false") && + (testCaseXML.TestData.(@name == testConfig.flashVersion) != "false")) + { + ts.addTestDescriptor(new TestDescriptor(testCaseClass, testCaseXML.@functionName, testConfig, testCaseXML)); + } + } + } + + static public var defaultFileName:String = "simple.xml"; + static private var DEFAULT_COMPOSITION_WIDTH:Number = 826; + static private var DEFAULT_COMPOSITION_HEIGHT:Number = 477; + + /** start every test with nothing on the canvas + */ + public function cleanUpTestApp():void + { + testApp.detachActiveFlow(true); + var canvas:Canvas = testApp.getDisplayObject(); + // remove everything but the Border + for (var i:int = canvas.rawChildren.numChildren - 1; i >= 0; i--) + if (!(canvas.rawChildren.getChildAt(i) is Border)) + canvas.rawChildren.removeChildAt(i); + } + + public function setUpTest():void + { + //trace("Beginning test: " + TestID); + + // Make sure whatever was left from last test is cleared + cleanUpTestApp(); + + testApp.contentChange(null); + testApp.setInteractionManager(EditingMode.READ_WRITE); + testApp.changeContainerSetup("arrangeSideBySide", 0, 1); + + // if (TestData.requiresLayout == "true") + // { + // trace ("-----------set up layout-enabled container here-----------"); + // } + + fileName = TestData.fileName == undefined ? defaultFileName : TestData.fileName; + + loadTestFile(fileName); + + TestFrame = TextFlow(testApp.getTextFlow()).flowComposer.getControllerAt(0); + TestDisplayObject = testApp.getDisplayObject(); + + // all of this should eventually go away, but some tests are depending + // on it at the moment. I'm assuming that: + // 1. Container attributes should either stay the default, or these + // attributes should get put into the default file. + // 2. Tests that depend on scrolling being off should do that themselves + // 3. Writing direction for the default file should be handled in loadTestFile. + if (fileName == defaultFileName && addDefaultTestSettings) + { + // set the container attributes to the same as those in the Flex TextContainer (see the flow:TextContaienr below) + var containerAttr:TextLayoutFormat = new TextLayoutFormat(TestFrame.format); + containerAttr.columnCount = 2; + containerAttr.columnGap = 10; + //containerAttr.paddingLeft = 4; + containerAttr.paddingRight = 4; + //containerAttr.paddingTop = 4; + TestFrame.horizontalScrollPolicy = ScrollPolicy.OFF; + TestFrame.verticalScrollPolicy = ScrollPolicy.OFF; + TestFrame.format = containerAttr; + containerAttr = null; + if (TestFrame.compositionWidth != DEFAULT_COMPOSITION_WIDTH || TestFrame.compositionHeight != DEFAULT_COMPOSITION_HEIGHT) + TestFrame.setCompositionSize(DEFAULT_COMPOSITION_WIDTH, DEFAULT_COMPOSITION_HEIGHT); + + } + + // Set the writing direction specified by the test + if (fileName == defaultFileName && TestFrame.rootElement) + { + TestFrame.rootElement.blockProgression = writingDirection[0]; + TestFrame.rootElement.direction = writingDirection[1]; + } + + TextFlow(testApp.getTextFlow()).flowComposer.updateAllControllers(); + + if (TestFrame.rootElement) + { + SelManager = EditManager(TestFrame.rootElement.getTextFlow().interactionManager); + if (SelManager) + { + setSelectionRange(); + //make sure there is never any blinking when running these tests + setCaretBlinkRate(0); + } + } + //endOfSetupTime = getTimer(); + } + + public function tearDownTest():void + { + // trace ("Beginning of teardown."); + + if (TestFrame && TestFrame.flowComposer) + TestFrame.flowComposer.updateAllControllers(); + + //middleDuration = (getTimer() - endOfSetupTime); + + // generic validation + // note: why must the selectionmanager be active? + if (SelManager) + { + assertTrue("teardown assert for active SelectionManager failed", SelManager.hasSelection()); + /*CONFIG::debug + { + assertTrue("teardown assert for SelManager.debugCheckSelectionManager() failed", SelManager.debugCheckSelectionManager() == 0); + assertTrue("teardown assert for SelManager.textFlow.debugCheckTextFlow() failed", SelManager.textFlow.debugCheckTextFlow() == 0); + } */ + } + + if (containerType == "sprite") + assertTrue("TestFrame should be a Sprite, but is not", TestFrame.container is Sprite); + + + //Only run this test if VellumUnit is set to do it. + if (doBeforeAfterCompare) + { + var tempSelManager:EditManager = new EditManager(); + var fFormat:SelectionFormat = SelManager.focusedSelectionFormat; + var nfFormat:SelectionFormat = SelManager.unfocusedSelectionFormat; + var inFormat:SelectionFormat = SelManager.inactiveSelectionFormat; + tempSelManager.focusedSelectionFormat = new SelectionFormat(fFormat.rangeColor, fFormat.rangeAlpha, fFormat.rangeBlendMode, fFormat.pointColor, fFormat.pointAlpha, fFormat.pointBlendMode, 1000); + tempSelManager.unfocusedSelectionFormat = new SelectionFormat(nfFormat.rangeColor, nfFormat.rangeAlpha, nfFormat.rangeBlendMode, nfFormat.pointColor, nfFormat.pointAlpha, nfFormat.pointBlendMode, 1000); + tempSelManager.inactiveSelectionFormat = new SelectionFormat(inFormat.rangeColor, inFormat.rangeAlpha, inFormat.rangeBlendMode, inFormat.pointColor, inFormat.pointAlpha, inFormat.pointBlendMode, 1000); + + var TestCanvas:Canvas = testApp.getDisplayObject(); + var curTextFlow:TextFlow = TextFlow(testApp.getTextFlow()); + + var TCMCompositionUtils:TCMComposition = new TCMComposition(TestCanvas, curTextFlow); + TCMCompositionUtils.Height = testApp.getDisplayObject().height; + TCMCompositionUtils.Width = testApp.getDisplayObject().width; + TCMCompositionResult = TCMCompositionUtils.compare(); + + if (!TCMCompositionResult) + { + failString += " TextContainerManager composition: " + TCMCompositionUtils.ErrorString; + } + + SelManager = tempSelManager; + } + + if (TestData.bitmapSnapshot == true) + { + // Create the afterData snapshot. + if (TestDisplayObject is UIComponent) + UIComponent(TestDisplayObject).validateNow(); + var bits:BitmapData = new BitmapData(TestDisplayObject.width, TestDisplayObject.height); + bits.draw(TestDisplayObject as IBitmapDrawable); + bitmapSnapshot = new Bitmap(bits); + bits = null; + + var pixels:ByteArray = bitmapSnapshot.bitmapData.getPixels(bitmapSnapshot.bitmapData.rect); + pixels.compress(); + pixels.position = 0; + bitmapSnapshotChecksum = MD5.hashBinary(pixels); + + // If there is a baseline, then run a compare. If not, (gcai) we'll report an error about what's wrong there. + //bitmapResult = true; + if (bitmapBaseline != null) + { + if (bitmapSnapshotChecksum != bitmapBaselineChecksum) + { + // If the checksum is different, do the bitmap compare of the two bitmaps to make the diffTolerance enabled. + bitmapBaseline.bitmapData.draw(bitmapSnapshot, null, null, "difference"); + var diffPixels:ByteArray = bitmapBaseline.bitmapData.getPixels(bitmapBaseline.bitmapData.rect); + diffPixels.position = 0; + var pixelCount:uint = diffPixels.bytesAvailable; + var diffCount:uint = 0; + var redDiff:uint = 0; + var greenDiff:uint = 0; + var blueDiff:uint = 0; + var componentTolerance:uint = 20; + + while (diffPixels.bytesAvailable > 0) + { + // throw away alpha + diffPixels.readUnsignedByte(); + + redDiff = diffPixels.readUnsignedByte(); + greenDiff = diffPixels.readUnsignedByte(); + blueDiff = diffPixels.readUnsignedByte(); + + // only count pixels where the difference is visible + if (redDiff > componentTolerance || greenDiff > componentTolerance || blueDiff > componentTolerance) + { + // previously we'd count the number of pixels that were different + //diffCount ++; + // now we're summing the amount of the differences - so a small number of very different + // pixels will error, but only a large number of slightly different pixels will error + diffCount += redDiff + greenDiff + blueDiff + } + + redDiff = 0; + greenDiff = 0; + blueDiff = 0; + } + + // If this is larger than the tolerance, then something changed and it is a bug. + // previous pixel count threshold + //bitmapResult = (((diffCount/(pixelCount/4))*100) < diffTolerance); + // new summed differences threshold + bitmapResult = diffCount < (pixelCount / 4) * diffTolerance * 255 * 3; + //trace (" TestID: " + TestID + " count: "+ diffCount + " threshold: " + (pixelCount/4)*diffTolerance*255); + + if (!bitmapResult) + { + failString += "Bitmap data snapshot differed from the baseline. Detail:" + getUrl("Bitmap"); + failString += " Bitmap compare failed by " + ((diffCount / pixelCount) * 100) + " percent of pixels compared."; + } + } + } + else + { + bitmapResult = false; + failString += "Don't have any bitmap baseline for current case. Detail:" + getUrl("Bitmap"); + } + } + + if (TestData.lineSnapshot == true) + { + lineSnapshot = LineSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow()); + var lineDataBytes:ByteArray = new ByteArray(); + lineSnapshot.normalize(); + lineDataBytes.writeObject(lineSnapshot); + lineDataBytes.compress(); + lineDataBytes.uncompress(); + lineSnapshot = new XML(lineDataBytes.readObject()); + lineSnapshot.normalize(); + + lineSnapshotChecksum = getChecksum(lineSnapshot); + // Do a compare as long as there is a baseline. + if (lineBaseline != null) + { + if (lineSnapshotChecksum != lineBaselineChecksum) + { + lineResult = XMLSnapshotUtils.compareAdvanced(lineBaseline, lineSnapshot); + if (!lineResult) + { + failString += " , Line data snapshot differed from the baseline. Detail:" + getUrl("Line"); + } + } + } + else + { + lineResult = false; + failString += " , Don't have any line baseline for current case. Detail:" + getUrl("Line"); + } + } + + if (TestData.plaintextSnapshot == true) + { + plaintextSnapshot = StringSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow(), TextConverter.PLAIN_TEXT_FORMAT); + plaintextSnapshotChecksum = MD5.hash(plaintextSnapshot); + // Do a compare as long as there is a baseline. + if (plaintextBaseline != null) + { + if (plaintextSnapshotChecksum != plaintextBaselineChecksum) + { + plaintextResult = StringSnapshotUtils.compare(plaintextBaseline, plaintextSnapshot); + if (!plaintextResult) + { + failString += " , PlainText data snapshot differed from the baseline. Detail:" + getUrl("PlainText"); + } + } + } + else + { + plaintextResult = false; + failString += " , Don't have any PlainText baseline for current case. Detail:" + getUrl("PlainText"); + } + } + + if (TestData.xflSnapshot == true) + { + xflSnapshot = XMLSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow(), TextConverter.TEXT_LAYOUT_FORMAT); + xflSnapshotChecksum = getChecksum(xflSnapshot); + // Do a compare as long as there is a baseline. + if (xflBaseline != null) + { + if (xflSnapshotChecksum != xflBaselineChecksum) + { + xflResult = XMLSnapshotUtils.compareAdvanced(xflBaseline, xflSnapshot); + if (!xflResult) + { + failString += " , XFL data snapshot differed from the baseline. Detail:" + getUrl("XFL"); + } + } + } + else + { + xflResult = false; + failString += " , Don't have any xfl baseline for current case. Detail:" + getUrl("XFL"); + } + } + + if (TestData.htmlSnapshot == true) + { + htmlSnapshot = XMLSnapshotUtils.takeSnapshot(TestFrame.rootElement.getTextFlow(), TextConverter.TEXT_FIELD_HTML_FORMAT); + htmlSnapshotChecksum = getChecksum(htmlSnapshot); + // Do a compare as long as there is a baseline. + if (htmlBaseline != null) + { + if (htmlBaselineChecksum != htmlSnapshotChecksum) + { + htmlResult = XMLSnapshotUtils.compareAdvanced(htmlBaseline, htmlSnapshot); + if (!htmlResult) + { + failString += " , HTML data snapshot differed from the baseline. Detail:" + getUrl("HTML"); + } + } + } + else + { + htmlResult = false; + failString += " , Don't have any HTML baseline for current case. Detail:" + getUrl("HTML"); + } + } + + // Comment this code in to enable bounds checking on each test. + /* if (TestFrame && TestFrame.textFlow) + { + var s:Sprite = new Sprite(); + testApp.getDisplayObject().rawChildren.addChild(s); + BoundsChecker.boundsValidation(TestFrame.textFlow, s); + testApp.getDisplayObject().rawChildren.removeChild(s); + } */ + + + // trace ("Ending test: " + TestID); + + //***************************************************** + if (SelManager) + { + //turn caret blinking back on + setCaretBlinkRate(1000); + } + // Nulls for garbage collection + TestFrame = null; + SelManager = null; + // trace ("End of teardown."); + + + // This code breaks snapshotting of XML - need to move the disposeXML calls somewhere else + /*if (Configuration.playerEnablesArgoFeatures) + System["disposeXML"](lineSnapshot); + lineSnapshot = null; + plaintextSnapshot = null; + if (Configuration.playerEnablesArgoFeatures) + System["disposeXML"](xflSnapshot); + xflSnapshot = null; + if (Configuration.playerEnablesArgoFeatures) + System["disposeXML"](htmlSnapshot); + htmlSnapshot = null;*/ + + + // The assert makes it end the test, so we need to put that at the very + // end of everything, so that all snapshot tests get a chance to run. + assertTrue(failString, ((TCMCompositionResult) && (bitmapResult) && (lineResult) && (xflResult) && (htmlResult))); // fail(failString); - } - - private function getUrl(snapShotType:String):String - { - return snapAdminServerUrl+"runid="+runID+";caseid="+TestID+";snapshottype="+snapShotType; - } - - private function getChecksum(file:XML):String - { - var dataBytes:ByteArray = new ByteArray(); - dataBytes.writeObject (file); - dataBytes.compress(); - dataBytes.position = 0; - - return MD5.hashBinary(dataBytes); - } - - override public function toString():String - { - return TestID; - } - - private function getRandomInteger(start:int, end:int):int - // Return a random number between start and end - { - var num:Number = Math.random(); - return Math.ceil((num * (end - start)) + start); - } - - private function setSelectionRange():void - { - if (useRandom) - { - var startIdx:int = getRandomInteger(0, SelManager.textFlow.textLength); - var endIdx:int = getRandomInteger(0, SelManager.textFlow.textLength); - if (startIdx > endIdx) - { - var tmp:int = startIdx; - startIdx = endIdx; - endIdx = tmp; - } - SelManager.selectRange(startIdx, endIdx); - } - else - { - if(SelManager.textFlow.textLength > 60){ - SelManager.selectRange(22, 60); - }else{ - SelManager.selectRange(0, SelManager.textFlow.textLength / 2); - } - } - } - - public function setCaretBlinkRate (caretBlinkRate:int):void - { - var fFormat:SelectionFormat = SelManager.focusedSelectionFormat; - var nfFormat:SelectionFormat = SelManager.unfocusedSelectionFormat; - var inFormat:SelectionFormat = SelManager.inactiveSelectionFormat; - SelManager.focusedSelectionFormat = new SelectionFormat(fFormat.rangeColor, fFormat.rangeAlpha, fFormat.rangeBlendMode, fFormat.pointColor, fFormat.pointAlpha, fFormat.pointBlendMode, caretBlinkRate); - SelManager.unfocusedSelectionFormat = new SelectionFormat(nfFormat.rangeColor, nfFormat.rangeAlpha, nfFormat.rangeBlendMode, nfFormat.pointColor, nfFormat.pointAlpha, nfFormat.pointBlendMode, caretBlinkRate); - SelManager.inactiveSelectionFormat = new SelectionFormat(inFormat.rangeColor, inFormat.rangeAlpha, inFormat.rangeBlendMode, inFormat.pointColor, inFormat.pointAlpha, inFormat.pointBlendMode, caretBlinkRate); - } - - protected function get importParser():ITextImporter - { - var extension:String = getExtension(fileName); - if (extension == "xml") - extension = TextConverter.TEXT_LAYOUT_FORMAT; - else if (extension == "txt") - extension = TextConverter.PLAIN_TEXT_FORMAT; - else if (extension == "html") - extension = TextConverter.TEXT_FIELD_HTML_FORMAT; - return TextConverter.getImporter(extension); - } - - public static function getExtension(fileName:String):String - { - var dotPos:int = fileName.lastIndexOf("."); - if (dotPos >= 0) - return fileName.substring(dotPos + 1); - return fileName; - } - - public function importContent (content:Object):void - { - var beginTime:int = getTimer(); - //TestFrame.removeAllChildren(); - var parser:ITextImporter = importParser; - var textFlow:TextFlow = parser.importToFlow(content); - - setUpFlowForTest(textFlow); - } - - public function setUpFlowForTest(textFlow:TextFlow):void - { - textFlow.flowComposer = null; - testApp.contentChange (textFlow); - - TestFrame = TextFlow(testApp.getTextFlow()).flowComposer.getControllerAt(0); - if (TestFrame.rootElement) - { - SelManager = EditManager(TestFrame.rootElement.getTextFlow().interactionManager); - if(SelManager) setSelectionRange(); - } - - if (textFlow.flowComposer) - textFlow.flowComposer.compose(); - } - - - public function getFileData(fileName:String):Object - { - var fileData:Object; // XML or String - - var extension:String = getExtension(fileName); - if (extension == "html") - fileData = FileRepository.getFile(baseURL, "../../test/testFiles/markup/html/" + fileName); - else if (extension == "txt") - fileData = FileRepository.getFile(baseURL, "../../test/testFiles/markup/plainText/" + fileName); - else - fileData = FileRepository.getFileAsXML(baseURL, "../../test/testFiles/markup/tlf/" + fileName); - return fileData; - } - - static private var cacheTestFile:TextFlow; - public function loadTestFile (fileName:String):void - { - var containerFormat:TextLayoutFormat; - - if (fileName == defaultFileName && cacheTestFile != null) - { - var textFlow:TextFlow = cacheTestFile.deepCopy(0, cacheTestFile.textLength) as TextFlow; - setUpFlowForTest(textFlow); - } - else - { - var fileData:Object = getFileData(fileName); // XML or String - if (fileData is XML) - { - var flowNS:Namespace = fileData.namespace("flow"); - if (writingDirection[0] != "tb" && writingDirection[1] != "ltr") - { - fileData.flowNS::TextFlow.@blockProgression = writingDirection[0]; - fileData.flowNS::TextFlow.@direction = writingDirection[1]; - } - if (useEmbeddedFonts) - { - fileData.flowNS::TextFlow.@fontLookup = "embeddedCff"; - } - } - importContent(fileData); - } - - if (!cacheTestFile && fileName == defaultFileName) - { - var resultFlow:TextFlow = TestFrame.rootElement as TextFlow; - cacheTestFile = resultFlow.deepCopy() as TextFlow; - } - } - } + } + + private function getUrl(snapShotType:String):String + { + return snapAdminServerUrl + "runid=" + runID + ";caseid=" + TestID + ";snapshottype=" + snapShotType; + } + + private function getChecksum(file:XML):String + { + var dataBytes:ByteArray = new ByteArray(); + dataBytes.writeObject(file); + dataBytes.compress(); + dataBytes.position = 0; + + return MD5.hashBinary(dataBytes); + } + + override public function toString():String + { + return TestID; + } + + private function getRandomInteger(start:int, end:int):int + // Return a random number between start and end + { + var num:Number = Math.random(); + return Math.ceil((num * (end - start)) + start); + } + + private function setSelectionRange():void + { + if (useRandom) + { + var startIdx:int = getRandomInteger(0, SelManager.textFlow.textLength); + var endIdx:int = getRandomInteger(0, SelManager.textFlow.textLength); + if (startIdx > endIdx) + { + var tmp:int = startIdx; + startIdx = endIdx; + endIdx = tmp; + } + SelManager.selectRange(startIdx, endIdx); + } + else + { + if (SelManager.textFlow.textLength > 60) + { + SelManager.selectRange(22, 60); + } + else + { + SelManager.selectRange(0, SelManager.textFlow.textLength / 2); + } + } + } + + public function setCaretBlinkRate(caretBlinkRate:int):void + { + var fFormat:SelectionFormat = SelManager.focusedSelectionFormat; + var nfFormat:SelectionFormat = SelManager.unfocusedSelectionFormat; + var inFormat:SelectionFormat = SelManager.inactiveSelectionFormat; + SelManager.focusedSelectionFormat = new SelectionFormat(fFormat.rangeColor, fFormat.rangeAlpha, fFormat.rangeBlendMode, fFormat.pointColor, fFormat.pointAlpha, fFormat.pointBlendMode, caretBlinkRate); + SelManager.unfocusedSelectionFormat = new SelectionFormat(nfFormat.rangeColor, nfFormat.rangeAlpha, nfFormat.rangeBlendMode, nfFormat.pointColor, nfFormat.pointAlpha, nfFormat.pointBlendMode, caretBlinkRate); + SelManager.inactiveSelectionFormat = new SelectionFormat(inFormat.rangeColor, inFormat.rangeAlpha, inFormat.rangeBlendMode, inFormat.pointColor, inFormat.pointAlpha, inFormat.pointBlendMode, caretBlinkRate); + } + + protected function get importParser():ITextImporter + { + var extension:String = getExtension(fileName); + if (extension == "xml") + extension = TextConverter.TEXT_LAYOUT_FORMAT; + else if (extension == "txt") + extension = TextConverter.PLAIN_TEXT_FORMAT; + else if (extension == "html") + extension = TextConverter.TEXT_FIELD_HTML_FORMAT; + return TextConverter.getImporter(extension); + } + + public static function getExtension(fileName:String):String + { + var dotPos:int = fileName.lastIndexOf("."); + if (dotPos >= 0) + return fileName.substring(dotPos + 1); + return fileName; + } + + public function importContent(content:Object):void + { + var beginTime:int = getTimer(); + //TestFrame.removeAllChildren(); + var parser:ITextImporter = importParser; + var textFlow:TextFlow = parser.importToFlow(content); + + setUpFlowForTest(textFlow); + } + + public function setUpFlowForTest(textFlow:TextFlow):void + { + textFlow.flowComposer = null; + testApp.contentChange(textFlow); + + TestFrame = TextFlow(testApp.getTextFlow()).flowComposer.getControllerAt(0); + if (TestFrame.rootElement) + { + SelManager = EditManager(TestFrame.rootElement.getTextFlow().interactionManager); + if (SelManager) setSelectionRange(); + } + + if (textFlow.flowComposer) + textFlow.flowComposer.compose(); + } + + + public function getFileData(fileName:String):Object + { + var fileData:Object; // XML or String + + var extension:String = getExtension(fileName); + if (extension == "html") + fileData = FileRepository.getFile(baseURL, "../../test/testFiles/markup/html/" + fileName); + else if (extension == "txt") + fileData = FileRepository.getFile(baseURL, "../../test/testFiles/markup/plainText/" + fileName); + else + fileData = FileRepository.getFileAsXML(baseURL, "../../test/testFiles/markup/tlf/" + fileName); + return fileData; + } + + static private var cacheTestFile:TextFlow; + + public function loadTestFile(fileName:String):void + { + var containerFormat:TextLayoutFormat; + + if (fileName == defaultFileName && cacheTestFile != null) + { + var textFlow:TextFlow = cacheTestFile.deepCopy(0, cacheTestFile.textLength) as TextFlow; + setUpFlowForTest(textFlow); + } + else + { + var fileData:Object = getFileData(fileName); // XML or String + if (fileData is XML) + { + var flowNS:Namespace = fileData.namespace("flow"); + if (writingDirection[0] != "tb" && writingDirection[1] != "ltr") + { + fileData.flowNS::TextFlow.@blockProgression = writingDirection[0]; + fileData.flowNS::TextFlow.@direction = writingDirection[1]; + } + if (useEmbeddedFonts) + { + fileData.flowNS::TextFlow.@fontLookup = "embeddedCff"; + } + } + importContent(fileData); + } + + if (!cacheTestFile && fileName == defaultFileName) + { + var resultFlow:TextFlow = TestFrame.rootElement as TextFlow; + cacheTestFile = resultFlow.deepCopy() as TextFlow; + } + } + } }
http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Fixtures/FileRepository.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Fixtures/FileRepository.as b/automation_core/src/UnitTest/Fixtures/FileRepository.as index 937603c..55830f4 100644 --- a/automation_core/src/UnitTest/Fixtures/FileRepository.as +++ b/automation_core/src/UnitTest/Fixtures/FileRepository.as @@ -102,7 +102,9 @@ package UnitTest.Fixtures import flash.events.IOErrorEvent; import flashx.textLayout.debug.assert; - /** Serves as a single bottleneck for all requests that go through +import org.flexunit.asserts.assertEquals; + +/** Serves as a single bottleneck for all requests that go through * FileRepository. Requests come in as URLLoader.load calls, and we * always listen for completion, error, and security error. If a handler * for any of these is passed in when the CustomURLLoader is constructed, @@ -178,7 +180,8 @@ package UnitTest.Fixtures * and the file contents as a string. */ static private function addToCache(urlLoader:CustomURLLoader, data:String):void { - CONFIG::debug { assert(_fileCache[getFileKey(urlLoader)] == null, "Adding over existing cache entry!"); } + + //CONFIG::debug { assertEquals(_fileCache[getFileKey(urlLoader)] == null, "Adding over existing cache entry!"); } _fileCache[getFileKey(urlLoader)] = data; } @@ -247,7 +250,7 @@ package UnitTest.Fixtures // If we have already read this file in, or we are already in the middle of reading it in, don't make another request if (_fileCache.hasOwnProperty(getFileKey(this))) { - CONFIG::debug { assert (completeHandler == null, "Load has file cached, won't be calling completeHandler! You should call get() before calling readFile()"); } + //CONFIG::debug { assert (completeHandler == null, "Load has file cached, won't be calling completeHandler! You should call get() before calling readFile()"); } return; } http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Fixtures/TestConfig.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Fixtures/TestConfig.as b/automation_core/src/UnitTest/Fixtures/TestConfig.as index 1a25299..69e7574 100644 --- a/automation_core/src/UnitTest/Fixtures/TestConfig.as +++ b/automation_core/src/UnitTest/Fixtures/TestConfig.as @@ -24,20 +24,37 @@ package UnitTest.Fixtures public class TestConfig { + private static var _instance:TestConfig; + public var writingDirection:Array = [ BlockProgression.TB, Direction.LTR ] ; public var containerType:String = "flex"; public var doBeforeAfterCompare:Boolean = false; public var useEmbeddedFonts:Boolean = false; public var baseURL:String = ""; public var flashVersion:String = Capabilities.version.substr(4,4); + public var testXMLStore:XML; - public function TestConfig() + public function TestConfig(testConfigEnforcer:TestConfigEnforcer) { + if (testConfigEnforcer == null) + { + throw new Error("Call getInstant()!"); + } } + public static function getInstance():TestConfig + { + if (_instance == null) + { + _instance = new TestConfig(new TestConfigEnforcer()); + } + + return _instance; + } + public function copyTestConfig():TestConfig { - var newConfig:TestConfig = new TestConfig(); + var newConfig:TestConfig = new TestConfig(new TestConfigEnforcer()); newConfig.writingDirection = writingDirection; newConfig.containerType = containerType; newConfig.doBeforeAfterCompare = doBeforeAfterCompare; @@ -49,3 +66,5 @@ package UnitTest.Fixtures } } + +class TestConfigEnforcer{} http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/BoundsChecker.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/BoundsChecker.as b/automation_core/src/UnitTest/Validation/BoundsChecker.as index 6515a04..e77cc3c 100644 --- a/automation_core/src/UnitTest/Validation/BoundsChecker.as +++ b/automation_core/src/UnitTest/Validation/BoundsChecker.as @@ -18,46 +18,30 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.display.DisplayObject; - import flash.display.DisplayObjectContainer; - import flash.display.Graphics; - import flash.display.Sprite; - import flash.events.Event; - import flash.events.EventDispatcher; - import flash.events.IEventDispatcher; - import flash.geom.Rectangle; - import flash.system.*; - import flash.text.engine.TextLine; - import flash.text.engine.TextRotation; - - import flashx.textLayout.compose.StandardFlowComposer; - import flashx.textLayout.container.ContainerController; - import flashx.textLayout.container.ScrollPolicy; - import flashx.textLayout.conversion.ConversionType; - import flashx.textLayout.conversion.TextConverter; - import flashx.textLayout.edit.EditManager; - import flashx.textLayout.edit.IEditManager; - import flashx.textLayout.elements.FlowLeafElement; - import flashx.textLayout.elements.InlineGraphicElement; - import flashx.textLayout.elements.InlineGraphicElementStatus; - import flashx.textLayout.elements.TextFlow; - import flashx.textLayout.events.StatusChangeEvent; - import flashx.textLayout.factory.StringTextLineFactory; - import flashx.textLayout.factory.TextFlowTextLineFactory; - import flashx.textLayout.formats.BlockProgression; - import flashx.textLayout.formats.Direction; - import flashx.textLayout.formats.Float; - import flashx.textLayout.formats.ITextLayoutFormat; - import flashx.textLayout.formats.TextAlign; - import flashx.textLayout.formats.TextLayoutFormat; - import flashx.textLayout.formats.VerticalAlign; - import flashx.textLayout.tlf_internal; - - import flexunit.framework.Assert; - - import mx.core.UIComponent; + import flash.display.DisplayObject; + import flash.display.Sprite; + import flash.geom.Rectangle; + import flash.text.engine.TextRotation; - use namespace tlf_internal; + import flashx.textLayout.compose.StandardFlowComposer; + import flashx.textLayout.container.ContainerController; + import flashx.textLayout.container.ScrollPolicy; + import flashx.textLayout.elements.FlowLeafElement; + import flashx.textLayout.elements.InlineGraphicElement; + import flashx.textLayout.elements.TextFlow; + import flashx.textLayout.factory.TextFlowTextLineFactory; + import flashx.textLayout.formats.BlockProgression; + import flashx.textLayout.formats.Direction; + import flashx.textLayout.formats.Float; + import flashx.textLayout.formats.ITextLayoutFormat; + import flashx.textLayout.formats.TextAlign; + import flashx.textLayout.formats.TextLayoutFormat; + import flashx.textLayout.formats.VerticalAlign; + import flashx.textLayout.tlf_internal; + + import flexunit.framework.Assert; + + use namespace tlf_internal; /** Check a sample text composition result to make sure: * (1) The text falls in the correct area of the container, given the vertical and horizontal alignment values applied to the TextFlow; http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/CompositionCompleteEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/CompositionCompleteEventValidator.as b/automation_core/src/UnitTest/Validation/CompositionCompleteEventValidator.as index 5c39be5..c5d65e5 100644 --- a/automation_core/src/UnitTest/Validation/CompositionCompleteEventValidator.as +++ b/automation_core/src/UnitTest/Validation/CompositionCompleteEventValidator.as @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flashx.textLayout.events.CompositionCompleteEvent; + import flash.events.Event; + import flash.events.IEventDispatcher; - public class CompositionCompleteEventValidator extends EventValidator + import flashx.textLayout.events.CompositionCompleteEvent; + + public class CompositionCompleteEventValidator extends EventValidator { public function CompositionCompleteEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/CompositionResults.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/CompositionResults.as b/automation_core/src/UnitTest/Validation/CompositionResults.as index 2a37e63..1b446bd 100644 --- a/automation_core/src/UnitTest/Validation/CompositionResults.as +++ b/automation_core/src/UnitTest/Validation/CompositionResults.as @@ -18,18 +18,16 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.display.DisplayObject; - import flash.display.Sprite; - import flash.text.engine.TextLine; - - import flashx.textLayout.compose.IFlowComposer; - import flashx.textLayout.compose.TextFlowLine; - import flashx.textLayout.debug.assert; - import flashx.textLayout.elements.TextFlow; - - import flexunit.framework.Assert; - - public class CompositionResults + import flash.display.Sprite; + import flash.text.engine.TextLine; + + import flashx.textLayout.compose.IFlowComposer; + import flashx.textLayout.compose.TextFlowLine; + import flashx.textLayout.elements.TextFlow; + + import flexunit.framework.Assert; + + public class CompositionResults { static public function getContainerResults(container:Sprite):Array { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/DamageEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/DamageEventValidator.as b/automation_core/src/UnitTest/Validation/DamageEventValidator.as index a75422b..cae42cf 100644 --- a/automation_core/src/UnitTest/Validation/DamageEventValidator.as +++ b/automation_core/src/UnitTest/Validation/DamageEventValidator.as @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flashx.textLayout.events.DamageEvent; + import flash.events.Event; + import flash.events.IEventDispatcher; - public class DamageEventValidator extends EventValidator + import flashx.textLayout.events.DamageEvent; + + public class DamageEventValidator extends EventValidator { public function DamageEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/EventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/EventValidator.as b/automation_core/src/UnitTest/Validation/EventValidator.as index db4a206..ff98ce0 100644 --- a/automation_core/src/UnitTest/Validation/EventValidator.as +++ b/automation_core/src/UnitTest/Validation/EventValidator.as @@ -18,60 +18,61 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flexunit.framework.Assert; - public class EventValidator - { - private var _eventCount:int; - private var _expectedEvent:Event; - private var _target:IEventDispatcher; - private var _attachCount:int; + import flash.events.Event; + import flash.events.IEventDispatcher; - public var lastEvent:Event; - - public function EventValidator(target:IEventDispatcher, expectedEvent:Event) - { - _target = target; - _attachCount = 0; - reset(expectedEvent); - } + import flexunit.framework.Assert; - protected function validateHandler(event:Event):void - { - if (event.type == _expectedEvent.type && eventsAreEqual(event, _expectedEvent)) - { - lastEvent = event; - ++_eventCount; - } - } + public class EventValidator + { + private var _eventCount:int; + private var _expectedEvent:Event; + private var _target:IEventDispatcher; + private var _attachCount:int; - protected function eventsAreEqual(event:Event, expectedEvent:Event):Boolean - { - return true; // override in derived class - } + public var lastEvent:Event; - public function validate(count:int):Boolean - { - var result:Boolean = _eventCount == count; - _eventCount = 0; - _target.removeEventListener(_expectedEvent.type, validateHandler); - --_attachCount; - Assert.assertTrue("Expected to get an event, but didn't", result); - return result; - } - - public function reset(expectedEvent:Event = null):void - { - CONFIG::debug { assert (_attachCount == 0, "Expected previous call to validate"); } - if (expectedEvent != null) - _expectedEvent = expectedEvent; - _eventCount = 0; - lastEvent = null; - _target.addEventListener(_expectedEvent.type, validateHandler); - ++_attachCount; - } - } + public function EventValidator(target:IEventDispatcher, expectedEvent:Event) + { + _target = target; + _attachCount = 0; + reset(expectedEvent); + } + + protected function validateHandler(event:Event):void + { + if (event.type == _expectedEvent.type && eventsAreEqual(event, _expectedEvent)) + { + lastEvent = event; + ++_eventCount; + } + } + + protected function eventsAreEqual(event:Event, expectedEvent:Event):Boolean + { + return true; // override in derived class + } + + public function validate(count:int):Boolean + { + var result:Boolean = _eventCount == count; + _eventCount = 0; + _target.removeEventListener(_expectedEvent.type, validateHandler); + --_attachCount; + Assert.assertTrue("Expected to get an event, but didn't", result); + return result; + } + + public function reset(expectedEvent:Event = null):void + { + //CONFIG::debug { assert (_attachCount == 0, "Expected previous call to validate"); } + if (expectedEvent != null) + _expectedEvent = expectedEvent; + _eventCount = 0; + lastEvent = null; + _target.addEventListener(_expectedEvent.type, validateHandler); + ++_attachCount; + } + } } http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/FlowElementMouseEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/FlowElementMouseEventValidator.as b/automation_core/src/UnitTest/Validation/FlowElementMouseEventValidator.as index f94a4c4..40519f7 100644 --- a/automation_core/src/UnitTest/Validation/FlowElementMouseEventValidator.as +++ b/automation_core/src/UnitTest/Validation/FlowElementMouseEventValidator.as @@ -18,15 +18,13 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flash.events.MouseEvent; - import flashx.textLayout.debug.assert; - import flashx.textLayout.elements.FlowElement; - import flashx.textLayout.events.FlowElementMouseEvent; - import flashx.textLayout.elements.LinkElement; + import flash.events.Event; + import flash.events.IEventDispatcher; + import flash.events.MouseEvent; - public class FlowElementMouseEventValidator extends EventValidator + import flashx.textLayout.events.FlowElementMouseEvent; + + public class FlowElementMouseEventValidator extends EventValidator { public function FlowElementMouseEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/FlowOperationEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/FlowOperationEventValidator.as b/automation_core/src/UnitTest/Validation/FlowOperationEventValidator.as index ff0a4a3..8b5f336 100644 --- a/automation_core/src/UnitTest/Validation/FlowOperationEventValidator.as +++ b/automation_core/src/UnitTest/Validation/FlowOperationEventValidator.as @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flashx.textLayout.events.FlowOperationEvent; + import flash.events.Event; + import flash.events.IEventDispatcher; - public class FlowOperationEventValidator extends EventValidator + import flashx.textLayout.events.FlowOperationEvent; + + public class FlowOperationEventValidator extends EventValidator { public function FlowOperationEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/IntUtil.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/IntUtil.as b/automation_core/src/UnitTest/Validation/IntUtil.as index 68be08b..21a1ff3 100644 --- a/automation_core/src/UnitTest/Validation/IntUtil.as +++ b/automation_core/src/UnitTest/Validation/IntUtil.as @@ -18,9 +18,7 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.utils.Endian; - - /** + /** * Contains reusable methods for operations pertaining * to int values. */ http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/LineSnapshot.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/LineSnapshot.as b/automation_core/src/UnitTest/Validation/LineSnapshot.as index 0f847e5..9b1ea4e 100644 --- a/automation_core/src/UnitTest/Validation/LineSnapshot.as +++ b/automation_core/src/UnitTest/Validation/LineSnapshot.as @@ -18,10 +18,9 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flashx.textLayout.elements.TextFlow; - import flashx.textLayout.compose.IFlowComposer; + import flashx.textLayout.elements.TextFlow; - public class LineSnapshot + public class LineSnapshot { /* abandoned in favor of the code already in VellumUnit * main entry point - @@ -49,7 +48,7 @@ package UnitTest.Validation { try { - CONFIG::debug { newSnapshot = newSnapshot.appendChild(aFlow.flowComposer.getLineAt(i).dumpToXML()); } + //CONFIG::debug { newSnapshot = newSnapshot.appendChild(aFlow.flowComposer.getLineAt(i).dumpToXML()); } } catch (m:Error) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/MD5.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/MD5.as b/automation_core/src/UnitTest/Validation/MD5.as index db6e700..3e831ea 100644 --- a/automation_core/src/UnitTest/Validation/MD5.as +++ b/automation_core/src/UnitTest/Validation/MD5.as @@ -18,9 +18,9 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import UnitTest.Validation.IntUtil; - import flash.utils.ByteArray; - /** + import flash.utils.ByteArray; + + /** * The MD5 Message-Digest Algorithm * * Implementation based on algorithm description at http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/SelectionEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/SelectionEventValidator.as b/automation_core/src/UnitTest/Validation/SelectionEventValidator.as index 94f566b..e50694f 100644 --- a/automation_core/src/UnitTest/Validation/SelectionEventValidator.as +++ b/automation_core/src/UnitTest/Validation/SelectionEventValidator.as @@ -18,13 +18,13 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flashx.textLayout.edit.SelectionState; - import flashx.textLayout.events.SelectionEvent; + import flash.events.Event; + import flash.events.IEventDispatcher; - public class SelectionEventValidator extends EventValidator + import flashx.textLayout.edit.SelectionState; + import flashx.textLayout.events.SelectionEvent; + + public class SelectionEventValidator extends EventValidator { public function SelectionEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/StatusChangeEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/StatusChangeEventValidator.as b/automation_core/src/UnitTest/Validation/StatusChangeEventValidator.as index ca64fcd..6e2f6a5 100644 --- a/automation_core/src/UnitTest/Validation/StatusChangeEventValidator.as +++ b/automation_core/src/UnitTest/Validation/StatusChangeEventValidator.as @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flashx.textLayout.events.StatusChangeEvent; + import flash.events.Event; + import flash.events.IEventDispatcher; - public class StatusChangeEventValidator extends EventValidator + import flashx.textLayout.events.StatusChangeEvent; + + public class StatusChangeEventValidator extends EventValidator { public function StatusChangeEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/StringSnapshot.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/StringSnapshot.as b/automation_core/src/UnitTest/Validation/StringSnapshot.as index 80aba13..ae1b683 100644 --- a/automation_core/src/UnitTest/Validation/StringSnapshot.as +++ b/automation_core/src/UnitTest/Validation/StringSnapshot.as @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flashx.textLayout.conversion.ConversionType; - import flashx.textLayout.conversion.ITextExporter; - import flashx.textLayout.conversion.TextConverter; - import flashx.textLayout.elements.TextFlow; + import flashx.textLayout.conversion.ConversionType; + import flashx.textLayout.conversion.ITextExporter; + import flashx.textLayout.conversion.TextConverter; + import flashx.textLayout.elements.TextFlow; - public class StringSnapshot + public class StringSnapshot { /** * return PlainText data from the TextFlow in String http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/TCMComposition.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/TCMComposition.as b/automation_core/src/UnitTest/Validation/TCMComposition.as index 414a63a..093f4d7 100644 --- a/automation_core/src/UnitTest/Validation/TCMComposition.as +++ b/automation_core/src/UnitTest/Validation/TCMComposition.as @@ -18,32 +18,25 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.display.Bitmap; - import flash.display.BitmapData; - import flash.display.DisplayObjectContainer; - import flash.display.Sprite; - import flash.geom.Rectangle; - import flash.utils.ByteArray; + import flash.display.Bitmap; + import flash.display.BitmapData; + import flash.display.DisplayObjectContainer; + import flash.display.Sprite; + import flash.geom.Rectangle; + import flash.utils.ByteArray; - import flashx.textLayout.container.ScrollPolicy; - import flashx.textLayout.conversion.TextConverter; - import flashx.textLayout.edit.EditingMode; - import flashx.textLayout.elements.TextFlow; - import flashx.textLayout.tlf_internal; + import flashx.textLayout.container.TextContainerManager; + import flashx.textLayout.edit.EditingMode; + import flashx.textLayout.elements.TextFlow; + import flashx.textLayout.tlf_internal; - use namespace tlf_internal; + import mx.containers.Canvas; + import mx.skins.Border; - import flexunit.framework.TestCase; + use namespace tlf_internal; - import mx.containers.Canvas; - import mx.core.UIComponent; - import mx.skins.Border; - import mx.utils.LoaderUtil; - import flashx.textLayout.container.TextContainerManager; - import flashx.textLayout.factory.TextFlowTextLineFactory; - - public class TCMComposition + public class TCMComposition { private var ItemsToRemove:Array; private var testCanvas:Canvas = null; http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/UpdateCompleteEventValidator.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/UpdateCompleteEventValidator.as b/automation_core/src/UnitTest/Validation/UpdateCompleteEventValidator.as index 066c922..88e1765 100644 --- a/automation_core/src/UnitTest/Validation/UpdateCompleteEventValidator.as +++ b/automation_core/src/UnitTest/Validation/UpdateCompleteEventValidator.as @@ -18,12 +18,12 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.events.Event; - import flash.events.IEventDispatcher; - import flashx.textLayout.debug.assert; - import flashx.textLayout.events.UpdateCompleteEvent; + import flash.events.Event; + import flash.events.IEventDispatcher; - public class UpdateCompleteEventValidator extends EventValidator + import flashx.textLayout.events.UpdateCompleteEvent; + + public class UpdateCompleteEventValidator extends EventValidator { public function UpdateCompleteEventValidator(target:IEventDispatcher, expectedEvent:Event) { http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/Validation/XMLSnapshot.as ---------------------------------------------------------------------- diff --git a/automation_core/src/UnitTest/Validation/XMLSnapshot.as b/automation_core/src/UnitTest/Validation/XMLSnapshot.as index ce3338f..8a47121 100644 --- a/automation_core/src/UnitTest/Validation/XMLSnapshot.as +++ b/automation_core/src/UnitTest/Validation/XMLSnapshot.as @@ -18,14 +18,14 @@ //////////////////////////////////////////////////////////////////////////////// package UnitTest.Validation { - import flash.utils.ByteArray; - - import flashx.textLayout.conversion.ConversionType; - import flashx.textLayout.conversion.ITextExporter; - import flashx.textLayout.conversion.TextConverter; - import flashx.textLayout.elements.TextFlow; - - public class XMLSnapshot + import flash.utils.ByteArray; + + import flashx.textLayout.conversion.ConversionType; + import flashx.textLayout.conversion.ITextExporter; + import flashx.textLayout.conversion.TextConverter; + import flashx.textLayout.elements.TextFlow; + + public class XMLSnapshot { private var baselineXMLStack:Array = new Array(); private var currentXMLStack:Array = new Array(); http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/libs/flexunit.swc ---------------------------------------------------------------------- diff --git a/automation_tests/libs/flexunit.swc b/automation_tests/libs/flexunit.swc new file mode 100644 index 0000000..0722885 Binary files /dev/null and b/automation_tests/libs/flexunit.swc differ http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_tests/src/AllTestsSuite.as ---------------------------------------------------------------------- diff --git a/automation_tests/src/AllTestsSuite.as b/automation_tests/src/AllTestsSuite.as new file mode 100644 index 0000000..ab31501 --- /dev/null +++ b/automation_tests/src/AllTestsSuite.as @@ -0,0 +1,45 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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; + import UnitTest.Tests.AllEventTest; + import UnitTest.Tests.AttributeTest; + import UnitTest.Tests.BoxTest; + import UnitTest.Tests.ContainerTypeTest; + import UnitTest.Tests.FloatTest; + import UnitTest.Tests.OperationTest; + import UnitTest.Tests.ScrollingTest; + + [Suite] + [RunWith("org.flexunit.runners.Suite")] + public dynamic class AllTestsSuite + { + public var accessibilityMethodsTest:AccessibilityMethodsTest; + public var allEventTest:AllEventTest; + public var attributeTest:AttributeTest; + public var boxTest:BoxTest; + public var containerTypeTest:ContainerTypeTest; + public var floatTest:FloatTest; + public var operationTest:OperationTest; + public var scrollingTest:ScrollingTest; + } + +}
