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:25 UTC
[14/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_apps/src/VellumUnit.mxml
----------------------------------------------------------------------
diff --git a/automation_apps/src/VellumUnit.mxml b/automation_apps/src/VellumUnit.mxml
index ce40fd8..b23beb8 100644
--- a/automation_apps/src/VellumUnit.mxml
+++ b/automation_apps/src/VellumUnit.mxml
@@ -18,413 +18,316 @@
<!--Flow from one frame to another -->
-<s:Application
- xmlns="http://ns.adobe.com/mxml/2009"
- xmlns:mx="library://ns.adobe.com/flex/mx"
- xmlns:s="library://ns.adobe.com/flex/spark"
- xmlns:flexunit="flexunit.flexui.*"
- xmlns:local="UnitTest.*"
- explicitMinWidth="100"
- explicitMinHeight="100"
- width="1100"
- height="800"
- applicationComplete="handleCreationComplete()"
- fontFamily="Verdana">
-
- <Script>
+<s:Application
+ xmlns="http://ns.adobe.com/mxml/2009"
+ xmlns:s="library://ns.adobe.com/flex/spark"
+ xmlns:local="UnitTest.*"
+ explicitMinWidth="100"
+ explicitMinHeight="100"
+ width="1100"
+ height="800"
+ applicationComplete="handleCreationComplete()"
+ fontFamily="Verdana">
+
+ <Script>
<![CDATA[
- import mx.collections.ListCollectionView;
- include "UnitTest/General_Functions.as";
-
- import UnitTest.Fixtures.FileRepository;
-
- import flashx.textLayout.TextLayoutVersion;
- import flashx.textLayout.debug.Debugging;
- import flashx.textLayout.edit.EditManager;
- import flashx.textLayout.edit.SelectionManager;
- import flashx.textLayout.elements.Configuration;
- import flashx.textLayout.elements.TextFlow;
- import flashx.textLayout.formats.BlockProgression;
- import flashx.textLayout.formats.Direction;
- import flashx.textLayout.tlf_internal;
-
- import flexunit.utils.Collection;
-
- import mx.collections.ArrayCollection;
- import mx.collections.ListCollectionView;
- import mx.collections.Sort;
- import mx.collections.SortField;
- import mx.collections.XMLListCollection;
- import mx.controls.Alert;
- import mx.rpc.AsyncResponder;
- import mx.utils.LoaderUtil;
-
- use namespace tlf_internal;
-
- import flash.system.System;
- import flash.system.Security;
-
- import mx.managers.PopUpManager;
- import mx.managers.SystemManager;
-
- // import AND instantiate MarshallingSupport. Enables being loaded as a sub-swf and loading a sub-swf with marshall plan features
- import mx.managers.systemClasses.MarshallingSupport; MarshallingSupport;
-
- import UnitTest.ExtendedClasses.TestDescriptor;
- import UnitTest.ExtendedClasses.TestSuiteExtended;
- import UnitTest.ExtendedClasses.VellumTestCase;
- import UnitTest.Fixtures.TestApp;
- import UnitTest.Fixtures.TestConfig;
- import UnitTest.TestRunnerWindow;
- import UnitTest.TestDescriptorRunner;
- import UnitTest.RunTests;
- import UnitTest.MenuItemObj;
-
- import UnitTest.Tests.*
-
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.events.Event;
- import flash.utils.ByteArray;
-
- import flashx.textLayout.debug.assert;
-
- private var socket:XMLSocket;
- private var curDialog:Object;
- private var treeData:XMLList;
- private var runTestsDialog:RunTests;
- private var testCasesList:ArrayCollection;
- private var useTestSelectDialog:Boolean = false;
-// private var snapshotSaveDialog:SaveSnapshot;
-
- // test control data from testMachine.txt
- public var testMachineName:String = "unspecified";
- public var testOwner:String = "tcalias";
- public var buildType:String = "Private";
- public var snapshotsOn:String = "false";
- public var normalizedURL:String = ""; // for reading control files
- public var generateReport:String = "false";
- public var antSkipTestFile:String = "";
- public var testStartIndex:Number = 0;
- public var testEndIndex:Number = 0;
- public var rangeOfTests:Boolean = false;
- public var testRunDate:String = "";
-
- public var testPropertiesPath:String = "";
-
- private var doSnapshotData:Object;
- private var curTest:VellumTestCase;
- private var beforeTestCallback:Function;
- private var afterTestCallback:Function;
- private var checkMemoryIntervalID:uint = setInterval(checkMemoryUsage,1000);
- private var snapshotStack:Array;
-
- private var curURL:String;
-
- private var myLoader:URLLoader = new URLLoader();
- private var myXMLURL:URLRequest = new URLRequest();
- private var urlReqSnapShotStore:URLRequest = new URLRequest();
-
- private var curSnapshotTypeToStore:String;
- private var tryToStoreCount:Number = 0;
- private var maxTryToStoreCount:Number = 5;
-
- //Set this option to have the test run do the visual compare before and after a test.
- [Bindable]
- public var doBeforeAfterCompare:Boolean = false;
-
- [Bindable]
- public var currentlyUsedMemory:uint = 0;
-
- public var debugOrRelease:String;
- public var vellumDebugOrRelease:String;
-
- public var testXMLStore:Object = null;
- public var skipList:Array;
- //private var snapshotStack:Array;
-
- [Bindable]
- private var canRun:Boolean = true;
-
- // The data from these files is read on creationcomplete and
- // placed into the store. The raw XML can be accessed using
- // the filename as a property name
- // Examples:
- // XFLStore.simple
- // XFLStore.tableExample
- public var XFLFileNameList: Array = [
- "simple.xml",
- "tableExample.xml",
- "asknot.xml",
- "empty.xml",
- "sampleArabic.xml",
- "aliceExcerpt.xml"
- ];
+ import UnitTest.ExtendedClasses.TestDescriptor;
+ import UnitTest.ExtendedClasses.TestSuiteExtended;
+ import UnitTest.ExtendedClasses.VellumTestCase;
+ import UnitTest.Fixtures.FileRepository;
+ import UnitTest.Fixtures.TestApp;
+ import UnitTest.Fixtures.TestConfig;
+ import UnitTest.MenuItemObj;
+ import UnitTest.TestRunnerWindow;
+
+ import flashx.textLayout.elements.Configuration;
+ import flashx.textLayout.elements.TextFlow;
+ import flashx.textLayout.tlf_internal;
+
+ import mx.collections.ArrayCollection;
+ import mx.collections.ListCollectionView;
+ import mx.collections.Sort;
+ import mx.collections.SortField;
+ import mx.controls.Alert;
+ import mx.managers.PopUpManager;
+ import mx.managers.SystemManager;
+ import mx.managers.systemClasses.MarshallingSupport;
+ import mx.utils.LoaderUtil;
+
+ include "UnitTest/General_Functions.as";
+
+ use namespace tlf_internal;
+
+ // import AND instantiate MarshallingSupport. Enables being loaded as a sub-swf and loading a sub-swf with marshall plan features
+ MarshallingSupport;
+
+ private var socket:XMLSocket;
+ private var curDialog:Object;
+ //TODO: Remove
+ // private var treeData:XMLList;
+ private var testCasesList:ArrayCollection;
+ private var useTestSelectDialog:Boolean = false;
+
+ public var testMachineName:String = "unspecified";
+ public var testOwner:String = "tcalias";
+ public var buildType:String = "Private";
+ public var snapshotsOn:String = "false";
+ public var normalizedURL:String = ""; // for reading control files
+ public var generateReport:String = "false";
+ public var antSkipTestFile:String = "";
+ public var testStartIndex:Number = 0;
+ public var testEndIndex:Number = 0;
+ public var rangeOfTests:Boolean = false;
+ public var testRunDate:String = "";
+
+ public var testPropertiesPath:String = "";
+
+ private var doSnapshotData:Object;
+ private var curTest:VellumTestCase;
+ private var beforeTestCallback:Function;
+ private var afterTestCallback:Function;
+ private var checkMemoryIntervalID:uint = setInterval(checkMemoryUsage, 1000);
+ private var snapshotStack:Array;
+
+ private var curURL:String;
+
+ private var myLoader:URLLoader = new URLLoader();
+ private var myXMLURL:URLRequest = new URLRequest();
+ private var urlReqSnapShotStore:URLRequest = new URLRequest();
+
+ private var curSnapshotTypeToStore:String;
+ private var tryToStoreCount:Number = 0;
+ private var maxTryToStoreCount:Number = 5;
+
+ //Set this option to have the test run do the visual compare before and after a test.
+ [Bindable]
+ public var doBeforeAfterCompare:Boolean = false;
+
+ [Bindable]
+ public var currentlyUsedMemory:uint = 0;
+
+ public var debugOrRelease:String;
+ public var vellumDebugOrRelease:String;
+
+ public var testXMLStore:Object = null;
+ public var skipList:Array;
+ //private var snapshotStack:Array;
+
+ [Bindable]
+ private var canRun:Boolean = true;
+
+ // The data from these files is read on creationcomplete and
+ // placed into the store. The raw XML can be accessed using
+ // the filename as a property name
+ // Examples:
+ // XFLStore.simple
+ // XFLStore.tableExample
+ public var XFLFileNameList:Array = [
+ "simple.xml",
+ "tableExample.xml",
+ "asknot.xml",
+ "empty.xml",
+ "sampleArabic.xml",
+ "aliceExcerpt.xml"
+ ];
public var reportXMLResults:Boolean = false;
-
+
// this testApp object needs to be used to set
// the static testApp member of VellumTestCase
// before any VellumTestCase constructors are called.
public var testApp:TestApp = new TestApp();
-
- public function checkMemoryUsage():void
- {
- currentlyUsedMemory = Math.round(System.totalMemory/1000000);
- }
- /**
- * Loads Arial font
- */
- private function loadEmbeddedFont(baseURL:String):void
- {
- var fontLoader:Loader = new Loader();
- fontLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoadEmbeddedFont);
- fontLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, handleLoadEmbeddedFontIOError);
- fontLoader.load(new URLRequest(LoaderUtil.createAbsoluteURL(baseURL,"../../test/testFiles/assets/ARIAL_FONT.swf")));
- }
-
- private function handleLoadEmbeddedFontIOError(evtObj:IOErrorEvent):void
- {
- trace("Unable to load Arial Font.");
- }
-
-
- private function handleLoadEmbeddedFont(evtObj:Event):void
- {
- var arialFont:Class = evtObj.target.applicationDomain.getDefinition("Arial_DF4");
- Font.registerFont(arialFont);
- var arialFontBlack:Class = evtObj.target.applicationDomain.getDefinition("Arial_Black_DF4");
- Font.registerFont(arialFontBlack);
- var arialFontNarrow:Class = evtObj.target.applicationDomain.getDefinition("Arial_Narrow_DF4");
- Font.registerFont(arialFontNarrow);
- var arialFontRoundedMTBold:Class = evtObj.target.applicationDomain.getDefinition("Arial_Rounded_MT_Bold_DF4");
- Font.registerFont(arialFontRoundedMTBold);
- }
-
- public function onSuiteFileRead(evtObj:Event):void
- {
- testXMLStore = new Object();
- testXMLStore.suiteList = XML(evtObj.target.data);
- testXMLStore.suiteIndex = 0;
- readTestCaseFiles();
- }
- /**
- * If the testcase counter hasn't reached the end, read another
- * testcase XML file. Otherwise load up the tests and start testing
- */
- public function readTestCaseFiles():void
- {
- while (testXMLStore.suiteIndex < testXMLStore.suiteList.children().length())
- {
- var fileName:String = testXMLStore.suiteList.*[testXMLStore.suiteIndex].@fileName;
- if (fileName.length > 0)
- {
- FileRepository.readFile(normalizedURL, "../../test/" + fileName, onTestCaseFileRead, null, null, true);
- break;
- }
- ++testXMLStore.suiteIndex;
- }
- if (testXMLStore.suiteIndex >= testXMLStore.suiteList.children().length())
- {
- if (antSkipTestFile != "")
- {
- FileRepository.readFile(normalizedURL, "../../test/" + antSkipTestFile, readSkipList, loadAndRunTests, loadAndRunTests, true);
- }
- else
- {
- loadAndRunTests();
- }
- }
- }
-
- public function readSkipList(evtObj:Event):void
- {
- var fileContents:String = evtObj.target.data;
- var lineSeparator:String;
- if (fileContents.search("\r") == -1)
- {
- lineSeparator = "\n";
- }
- else
- {
- lineSeparator = "\r\n";
- }
- skipList = evtObj.target.data.split(lineSeparator);
- loadAndRunTests();
- }
-
- private function loadAndRunTests():void
- {
- // Set up all of the application dependencies that the tests
- // use and store them in a static member of VellumTestCase
- testApp.getTextFlow = function ():TextFlow {
- return SystemManager(loadedSWF.content).application["activeFlow"];
- }
- testApp.getDisplayObject = function ():DisplayObject {
- return SystemManager(loadedSWF.content).application["rootPanel"];
- }
- testApp.setInteractionManager = SystemManager(loadedSWF.content).application["setInteractionManager"];
- testApp.contentChange = SystemManager(loadedSWF.content).application["changeContent"];
- testApp.detachActiveFlow = SystemManager(loadedSWF.content).application["detachActiveFlow"];
- testApp.changeContainerSetup = SystemManager(loadedSWF.content).application["changeContainerSetup"];
-
- VellumTestCase.testApp = testApp;
-
- SystemManager(loadedSWF.content).application["visiblePanels"] = [];
- SystemManager(loadedSWF.content).application["rulerVisible"] = false;
-
- collectTextLayoutVersion();
- testRunDate = MakeMySQLDate(new Date());
-
- // ************* This code is for the snapshot application ******************//
- // It gathers up the test to create a selectable list of tests to run.
- // Set the type of containers on which the tests should be run.
- var arContainers:Array = ["sprite"];
- var arWritingDirections:Array = [
- [BlockProgression.TB,Direction.LTR],
- [BlockProgression.TB,Direction.RTL],
- [BlockProgression.RL,Direction.LTR] ];
- // Create the test suite based on those containers.
- var vellumTests:TestSuiteExtended = createSuite(arContainers, arWritingDirections);
- if (useTestSelectDialog == true)
- {
- useTestSelectDialog = false;
-
- var testSuiteTests:Array = vellumTests.getTests();
-
- // Initialize the test case object list.
- if (testCasesList == null)
- testCasesList = new ArrayCollection();
-
- treeData = createXMLTree(testSuiteTests).children();
-
- if (rangeOfTests)
- {
- runUnitTests();
- rangeOfTests = false;
- }
- else
- {
- // Booga - This is this code that brings up the run test dialog.
- runTestsDialog = new RunTests();
- runTestsDialog.treeData = treeData;
- runTestsDialog.closeFunction = closeRunTestDialog;
- runTestsDialog.runTestFunction = runUnitTests;
-
- PopUpManager.addPopUp(runTestsDialog,this, true);
- PopUpManager.centerPopUp(runTestsDialog);
- }
- }
- else
- {
- testRunner.reportXML = reportXMLResults;
- if (reportXMLResults)
- {
- // Call the function to make sure the MachineID is in the DB.
- // This can be aynchronous, because the test does not depend on it.
- doSnapshotData = new Object();
- // It needs to put the Machine ID in here from the automation machine.
- doSnapshotData.machineID = testMachineName + ":" + TextLayoutVersion.BRANCH;
-
- /*
- //var testRunnerJ:JUnitTestRunner = new JUnitTestRunner(this);
- testRunner.beforeTest = beforeSnapshotTest;
- testRunner.afterTest = afterSnapshotTest;
-
- var minimalSuite:TestSuiteExtended = createMinimalSuite (vellumTests);
- testRunner.test = minimalSuite;
- testRunner.startTest();*/
- }
- else
- {
- // don't think we should ever get here - astearns 8/15/08
- testRunner.test = vellumTests;
- testRunner.startTest();
- }
- }
- }
-
- private var xmlRoot:XML = null;
-
- private function createXMLTree(testSuiteTests:Array):XML
- {
- if (xmlRoot)
- return xmlRoot;
-
- xmlRoot = <root/>;
- var curContainer:XML;
- var curTestCase:XML;
- var testCaseIndex:int = 0;
-
- var curContainerName:String = null;
-
- var containerCount:int = 0;
- var menuCollection:ListCollectionView = createMenuCollection(testSuiteTests);
- if (testEndIndex < 0)
- testEndIndex = menuCollection.length;
- for (var i:int = 0; i < menuCollection.length; i++)
- {
- // Store the list of tests in a structure so they can be called upon later.
- // Need to be stored so they can be executed.
- var menuItem:MenuItemObj = MenuItemObj(menuCollection.getItemAt(i));
- if (curContainerName != menuItem.testGroupName)
- {
- curContainer = <Container/>;
- curContainer.@["label"] = menuItem.testGroupName;
- xmlRoot.appendChild(curContainer);
- curContainerName = menuItem.testGroupName;
- ++containerCount;
- }
- curTestCase = <TestCase/>;
- curTestCase.@["label"] = menuItem.testName;
- curTestCase.@["testID"] = testCaseIndex;
-
- testCasesList.addItem(menuItem.testCase);
- if (rangeOfTests)
- {
- curTestCase.@["selected"] = (testCaseIndex >= testStartIndex) && (testCaseIndex <= testEndIndex)
- }
- else
- {
- curTestCase.@["selected"] = false;
- }
- curContainer.appendChild(curTestCase);
- testCaseIndex++;
- }
-
- return xmlRoot;
- }
-
- private function createMenuCollection(testSuiteTests:Array):ArrayCollection
- {
- // Create and populate the list
- var menuCollection:ArrayCollection = new ArrayCollection();
- // so far I've flattened the test descriptor list. Seems as arbitrary as expecting one
- // level of test suites.
- var groupName:String = null; // Force the groupName to be regenerated for the suite
- for (var caseIndex:int = 0; caseIndex < testSuiteTests.length; caseIndex++)
- {
- var testDesc:TestDescriptor = testSuiteTests[caseIndex];
-
- groupName = testDesc.className();
-
- // Store the list of tests in a structure so they can be called upon later.
- // Need to be stored so they can be executed.
- var menuItem:MenuItemObj = new MenuItemObj();
-
- var strTmp:String = testDesc.testID;
- //menuItem.testName = strTmp;
- menuItem.testName = strTmp.substr(strTmp.lastIndexOf(":")+1);
- menuItem.testGroupName = groupName;
- menuItem.testCase = testDesc;
- menuItem.writingDirection = testDesc.config.writingDirection;
- menuCollection.addItem(menuItem);
- }
-
- // Sort the list
- /* Create the SortField object for the "data" field in the ArrayCollection object, and make sure we do a numeric sort. */
- var dataSortField1:SortField = new SortField();
+
+ public function checkMemoryUsage():void
+ {
+ currentlyUsedMemory = Math.round(System.totalMemory / 1000000);
+ }
+
+ /**
+ * Loads Arial font
+ */
+ private function loadEmbeddedFont(baseURL:String):void
+ {
+ var fontLoader:Loader = new Loader();
+ fontLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, handleLoadEmbeddedFont);
+ fontLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, handleLoadEmbeddedFontIOError);
+ fontLoader.load(new URLRequest(LoaderUtil.createAbsoluteURL(baseURL, "../../test/testFiles/assets/ARIAL_FONT.swf")));
+ }
+
+ private function handleLoadEmbeddedFontIOError(evtObj:IOErrorEvent):void
+ {
+ trace("Unable to load Arial Font.");
+ }
+
+
+ private function handleLoadEmbeddedFont(evtObj:Event):void
+ {
+ /*var arialFont:Class = evtObj.target.applicationDomain.getDefinition("Arial_DF4");
+ Font.registerFont(arialFont);
+ var arialFontBlack:Class = evtObj.target.applicationDomain.getDefinition("Arial_Black_DF4");
+ Font.registerFont(arialFontBlack);
+ var arialFontNarrow:Class = evtObj.target.applicationDomain.getDefinition("Arial_Narrow_DF4");
+ Font.registerFont(arialFontNarrow);
+ var arialFontRoundedMTBold:Class = evtObj.target.applicationDomain.getDefinition("Arial_Rounded_MT_Bold_DF4");
+ Font.registerFont(arialFontRoundedMTBold); */
+ }
+
+ /**
+ * If the testcase counter hasn't reached the end, read another
+ * testcase XML file. Otherwise load up the tests and start testing
+ */
+ public function readTestCaseFiles():void
+ {
+ while (testXMLStore.suiteIndex < testXMLStore.suiteList.children().length())
+ {
+ var fileName:String = testXMLStore.suiteList.*[testXMLStore.suiteIndex].@fileName;
+ if (fileName.length > 0)
+ {
+ FileRepository.readFile(normalizedURL, "../../test/" + fileName, onTestCaseFileRead, null, null, true);
+ break;
+ }
+ ++testXMLStore.suiteIndex;
+ }
+ if (testXMLStore.suiteIndex >= testXMLStore.suiteList.children().length())
+ {
+ if (antSkipTestFile != "")
+ {
+ FileRepository.readFile(normalizedURL, "../../test/" + antSkipTestFile, readSkipList, loadAndRunTests, loadAndRunTests, true);
+ }
+ else
+ {
+ loadAndRunTests();
+ }
+ }
+ }
+
+ public function readSkipList(evtObj:Event):void
+ {
+ var fileContents:String = evtObj.target.data;
+ var lineSeparator:String;
+ if (fileContents.search("\r") == -1)
+ {
+ lineSeparator = "\n";
+ }
+ else
+ {
+ lineSeparator = "\r\n";
+ }
+ skipList = evtObj.target.data.split(lineSeparator);
+ loadAndRunTests();
+ }
+
+ private function loadAndRunTests(isMinimialTests:Boolean = false):void
+ {
+ var config:TestConfig = TestConfig.getInstance();
+ config.baseURL = normalizedURL;
+ config.testXMLStore = XML(testXMLStore);
+ // Set up all of the application dependencies that the tests
+ // use and store them in a static member of VellumTestCase
+ testApp.getTextFlow = function ():TextFlow
+ {
+ return SystemManager(loadedSWF.content).application["activeFlow"];
+ }
+ testApp.getDisplayObject = function ():DisplayObject
+ {
+ return SystemManager(loadedSWF.content).application["rootPanel"];
+ }
+ testApp.setInteractionManager = SystemManager(loadedSWF.content).application["setInteractionManager"];
+ testApp.contentChange = SystemManager(loadedSWF.content).application["changeContent"];
+ testApp.detachActiveFlow = SystemManager(loadedSWF.content).application["detachActiveFlow"];
+ testApp.changeContainerSetup = SystemManager(loadedSWF.content).application["changeContainerSetup"];
+
+ VellumTestCase.testApp = testApp;
+
+ SystemManager(loadedSWF.content).application["visiblePanels"] = [];
+ SystemManager(loadedSWF.content).application["rulerVisible"] = false;
+
+ testRunDate = MakeMySQLDate(new Date());
+
+ testRunner.startTest(isMinimialTests);
+ }
+
+ private var xmlRoot:XML = null;
+
+ private function createXMLTree(testSuiteTests:Array):XML
+ {
+ if (xmlRoot)
+ return xmlRoot;
+
+ xmlRoot = <root/>;
+ var curContainer:XML;
+ var curTestCase:XML;
+ var testCaseIndex:int = 0;
+
+ var curContainerName:String = null;
+
+ var containerCount:int = 0;
+ var menuCollection:ListCollectionView = createMenuCollection(testSuiteTests);
+ if (testEndIndex < 0)
+ testEndIndex = menuCollection.length;
+ for (var i:int = 0; i < menuCollection.length; i++)
+ {
+ // Store the list of tests in a structure so they can be called upon later.
+ // Need to be stored so they can be executed.
+ var menuItem:MenuItemObj = MenuItemObj(menuCollection.getItemAt(i));
+ if (curContainerName != menuItem.testGroupName)
+ {
+ curContainer = <Container/>;
+ curContainer.@["label"] = menuItem.testGroupName;
+ xmlRoot.appendChild(curContainer);
+ curContainerName = menuItem.testGroupName;
+ ++containerCount;
+ }
+ curTestCase = <TestCase/>;
+ curTestCase.@["label"] = menuItem.testName;
+ curTestCase.@["testID"] = testCaseIndex;
+
+ testCasesList.addItem(menuItem.testCase);
+ if (rangeOfTests)
+ {
+ curTestCase.@["selected"] = (testCaseIndex >= testStartIndex) && (testCaseIndex <= testEndIndex)
+ }
+ else
+ {
+ curTestCase.@["selected"] = false;
+ }
+ curContainer.appendChild(curTestCase);
+ testCaseIndex++;
+ }
+
+ return xmlRoot;
+ }
+
+ private function createMenuCollection(testSuiteTests:Array):ArrayCollection
+ {
+ // Create and populate the list
+ var menuCollection:ArrayCollection = new ArrayCollection();
+ // so far I've flattened the test descriptor list. Seems as arbitrary as expecting one
+ // level of test suites.
+ var groupName:String = null; // Force the groupName to be regenerated for the suite
+ for (var caseIndex:int = 0; caseIndex < testSuiteTests.length; caseIndex++)
+ {
+ var testDesc:TestDescriptor = testSuiteTests[caseIndex];
+
+ groupName = testDesc.className();
+
+ // Store the list of tests in a structure so they can be called upon later.
+ // Need to be stored so they can be executed.
+ var menuItem:MenuItemObj = new MenuItemObj();
+
+ var strTmp:String = testDesc.testID;
+ //menuItem.testName = strTmp;
+ menuItem.testName = strTmp.substr(strTmp.lastIndexOf(":") + 1);
+ menuItem.testGroupName = groupName;
+ menuItem.testCase = testDesc;
+ menuItem.writingDirection = testDesc.config.writingDirection;
+ menuCollection.addItem(menuItem);
+ }
+
+ // Sort the list
+ /* Create the SortField object for the "data" field in the ArrayCollection object, and make sure we do a numeric sort. */
+ var dataSortField1:SortField = new SortField();
dataSortField1.name = "testGroupName";
- dataSortField1.numeric = false;
+ dataSortField1.numeric = false;
var dataSortField2:SortField = new SortField();
dataSortField2.name = "testName";
@@ -438,620 +341,439 @@
menuCollection.sort = numericDataSort;
menuCollection.refresh();
- return menuCollection;
- }
-
- private function doJUnitRun(runID:int):void
- {
- doSnapshotData.runID = runID;
-
- var arContainers:Array = ["sprite"];
- var arWritingDirections:Array = [
- [BlockProgression.TB,Direction.LTR],
- [BlockProgression.TB,Direction.RTL],
- [BlockProgression.RL,Direction.LTR] ];
- // Create the test suite based on those containers.
- var vellumTests:TestSuiteExtended = createSuite(arContainers, arWritingDirections);
-
- var minimalSuite:TestSuiteExtended = createMinimalSuite (vellumTests);
- testRunner.test = minimalSuite;
- testRunner.startTest();
- }
-
- /**
- * Set properties in testRunner that describe the build
- * for use in the XML report.
- */
- public function collectTextLayoutVersion():void
- {
- var buildAndChangelist:String = TextLayoutVersion.BUILD_NUMBER;
-
- testRunner.suiteMetaData.vellumBranch = TextLayoutVersion.BRANCH;
- testRunner.suiteMetaData.vellumVersion = TextLayoutVersion.getVersionString(TextLayoutVersion.CURRENT_VERSION);
- testRunner.suiteMetaData.vellumBuild = Number(buildAndChangelist.split(" ")[0]);
- testRunner.suiteMetaData.vellumChangelistNumber = Number((buildAndChangelist.split("(")[1]).split(")")[0]);
- testRunner.suiteMetaData.vellumDescription = vellumDebugOrRelease;
- testRunner.suiteMetaData.vellumSDKVersion = "";
- testRunner.suiteMetaData.vellumPlayerGlobals = "";
- testRunner.suiteMetaData.testMachineName = testMachineName;
- testRunner.suiteMetaData.testOwner = testOwner;
- testRunner.suiteMetaData.buildType = buildType;
- }
-
- /**
- * This is the callback function used to run the tests that are selected.
- * It is supplied on the initial creation of the dialog.
- */
- public function runUnitTests (doBeforeAndAfterTest:Boolean = false, iterations:int = 1):void
- {
- doBeforeAfterCompare = doBeforeAndAfterTest;
- // Close the select test dialog.
- PopUpManager.removePopUp(runTestsDialog);
- // Determine which items are checked and which are not.
- var testsToRun:Array = new Array();
- if (treeData.children().length() > 0)
- walkTests(treeData, testsToRun);
-
- var ts:TestSuiteExtended = new TestSuiteExtended(this);
- var lengthOfTests:int = testsToRun.length;
-
- for (var i:int = 0; i < lengthOfTests; i++)
- {
- for (var j:int = 0; j < iterations; j++)
- ts.addTestDescriptor( testCasesList[testsToRun[i]] );
- }
- if (rangeOfTests)
- {
- ts = createMinimalSuite (ts);
- }
- if (ts.getTests().length > 0)
- {
- // Add the event listener to listen for put the TestComplete event.
- addEventListener("TestComplete",onSuiteDone, false, 0, true);
-
- testRunner.reportXML = reportXMLResults;
- testRunner.test = ts;
- testRunner.beforeTest = beforeRunTest;
- //testRunner.afterTest = afterSnapshotTest;
- testRunner.startTest();
- }
- }
-
- public function beforeRunTest(testCase:VellumTestCase, callBack:Function):void
- {
- beforeTestCallback = callBack;
- testCase.doBeforeAfterCompare = doBeforeAfterCompare;
- beforeTestCallback(testCase);
- }
- /**
- * This function walks the test data set from the tree to determine
- * what items are selected to be run.
- */
- private function walkTests(data:Object, testsToRun:Array):void
- {
- for each (var f:XML in data)
- {
- if (f.children().length() > 0)
- walkTests(f.children(), testsToRun);
-
- if (f.@selected == true && f.@testID.length() > 0)
- testsToRun.push(int(f.@testID));
- }
- }
-
- /**
- * callback function of HandleRunInfo
- * **/
- private function finishHandleRunInfo(runID:int):void
- {
- doSnapshotData.runID = runID;
- }
-
- private function errorWithMachineID(info:Object, token:Object):void
- {
- //trace ("could not retrieve machine ID: snapshot tests aborted");
- Alert.show(info.toString());
- }
-
-
- private function handleError(info:Object, token:Object):void
- {
- Alert.show(info.toString());
- }
-
- private function ioErrorPutBaseline(evtObj:IOErrorEvent):void
- {
- // Remove the event listeners to plug up memory leaks.
- if (evtObj)
- {
- evtObj.target.removeEventListener("complete", doSnapShotStoreStack);
- evtObj.target.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorPutBaseline);
- evtObj.target.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
- }
- trace ("Error trying to put the baseline.");
- /*
- if (tryToStoreCount < maxTryToStoreCount)
- {
- // Put it back on the stack and try again.
- snapshotStack.push(curSnapshotTypeToStore);
- // Increment the count of the number of tries.
- tryToStoreCount ++;
- trace ("Attempt #" + tryToStoreCount.toString() + " to store it again.");
- }
- else if (tryToStoreCount == maxTryToStoreCount)
- {
- trace("Max Try Count Exceeded - Snapshot failed to be stored. " + evtObj.text)
- // Reset the tryToStoreCount for the next run.
- tryToStoreCount = 0;
- }
- else
- {
- // Reset the tryToStoreCount for the next run.
- tryToStoreCount = 0;
- }
- */
- // Continue doing the snapshots.
- doSnapShotStoreStack(null);
- }
-
- private function doSnapShotStoreStack(evtObj:Event):void
- {
- if (evtObj)
- {
- evtObj.target.removeEventListener("complete", doSnapShotStoreStack);
- evtObj.target.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorPutBaseline);
- evtObj.target.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
- }
- var snapshotType:String = snapshotStack.shift();
- if (snapshotType != null)
- {
- //store result after test
-
- }
- else
- afterTestCallback(curTest);
- }
-
- //*********************************************************************/
-
- /**
- * This is the callback function used to close the run tests dialog.
- * It is supplied on the initial creation of the dialog.
- */
- private function closeRunTestDialog():void
- {
- PopUpManager.removePopUp(runTestsDialog);
- canRun = true;
- }
-
- /**
- * Add testcaseXML to testXMLStore with a property name from the
- * suiteXML file, then go to the next entry
- */
- public function onTestCaseFileRead(evtObj:Event):void
- {
- testXMLStore[testXMLStore.suiteList.*[testXMLStore.suiteIndex].@suiteName] = XML(evtObj.target.data);
- testXMLStore.suiteIndex++;
- readTestCaseFiles();
- }
-
- /**
- * Add all the tests to the test suite
- */
- public function createSuite(arContainers:Array = null, arWritingDirections:Array = null):TestSuiteExtended
- {
- // In debug builds set extra check flags
- CONFIG::debug {
- // throw if vellum internal asserts occur
- flashx.textLayout.debug.Debugging.tlf_internal::throwOnAssert = true;
- // enables TextFlow.debugCheckTextFlow calls - these are scattered through the code
- flashx.textLayout.debug.Debugging.tlf_internal::debugCheckTextFlow = true;
- }
-
- var ts:TestSuiteExtended = new TestSuiteExtended(this);
- var config:TestConfig = new TestConfig();
- config.baseURL = normalizedURL;
- //config.useEmbeddedFonts = true;
-
- for (var i:int = 0; i < arContainers.length; i++)
- {
- config.containerType = arContainers[i];
- for (var j:int = 0; j < arWritingDirections.length; j++)
- {
- config.writingDirection = arWritingDirections[j];
-
- // Add tests defined in the classes using suite() or suiteFromXML()
-
- AccessibilityMethodsTest.suite(config, ts);
- AllCharAttributeTest.suite(config, ts);
- AllContAttributeTest.suite(config, ts);
- AllEventTest.suiteFromXML(testXMLStore.AllEventTest, config, ts);
- AllParaAttributeTest.suite(config, ts);
- AttributeTest.suite(config, ts); //KJT
- BoundsAndAlignmentTest.suite(config, ts);
- BoxTest.suite(config, ts);
- CompositionTest.suite(config, ts);
- ContainerAttributeTest.suiteFromXML(testXMLStore.ContainerAttributeTest, config, ts);
- ContainerTypeTest.suiteFromXML(testXMLStore.ContainerTypeTest, config, ts);
- CrossContainerTest.suite(config, ts);
- ElementOperationTests.suite(config, ts);
- EventOverrideTest.suiteFromXML(testXMLStore.EventOverrideTest, config, ts);
- FactoryImportTest.suiteFromXML(testXMLStore.FactoryImportTest, config, ts);
- FETest.suiteFromXML(testXMLStore.FETest, config, ts);
- FloatTest.suite(config, ts);
- FlowModelTest.suite(config, ts);
- GeneralFunctionsTest.suite(config, ts);
- HorizontalScrollingTest.suiteFromXML(testXMLStore.HorizontalScrollingTest, config, ts);
- ImportAPITest.suite(config, ts);
- ImportTest.suiteFromXML(testXMLStore.ImportTest, config, ts);
- KeyboardGestureTest.suiteFromXML(testXMLStore.KeyboardGestureTest, config, ts);
- LeadingTest.suite(config, ts);
- LinkTest.suite(config, ts);
- ListTest.suite(config, ts);
- LocaleTests.suiteFromXML(testXMLStore.LocaleTests, config, ts);
- MeasurementGridTest.suite(config, ts);
- MeasurementTest.suiteFromXML(testXMLStore.MeasurementTest, config, ts);
- //MXMLCompilationTest.suiteFromXML(testXMLStore.MXMLCompilationTest,config, ts);
- OperationTest.suiteFromXML(testXMLStore.OperationTest, config, ts);
- ParagraphTest.suiteFromXML(testXMLStore.ParagraphTest, config, ts);
- ScrollToRangeTest.suiteFromXML(testXMLStore.ScrollToRangeTest, config, ts);
- ScrollingTest.suiteFromXML(testXMLStore.ScrollingTest, config, ts);
- SelectionTest.suiteFromXML(testXMLStore.SelectionTest, config, ts);
- SpacingTest.suite(config, ts);
- StyleTest.suiteFromXML(testXMLStore.StyleTest, config, ts);
- SWFTest.suiteFromXML(testXMLStore.SWFTest, config, ts);
- ImpliedParagraphTest.suiteFromXML(testXMLStore.ImpliedParagraphTest, config, ts);
- UndoRedoTest.suiteFromXML(testXMLStore.UndoRedoTest, config, ts);
- TableBackgroundTest.suite(config, ts);
- TableTests.suite(config, ts);
- TabTest.suiteFromXML(testXMLStore.TabTest, config, ts);
- TCYTests.suiteFromXML(testXMLStore.TCYTests, config, ts);
- TextContainerManagerTest.suiteFromXML(testXMLStore.TextContainerManagerTest, config, ts);
- TextFlowEditTest.suite(config, ts); //HBS
- TextFlowTextLineFactoryTest.suiteFromXML(testXMLStore.TextFlowTextLineFactoryTest, config, ts);
- TextLineFilterTest.suiteFromXML(testXMLStore.TextLineFilterTest, config, ts);
- //VerticalScrollingTest.suiteFromXML(testXMLStore.VerticalScrollingTest, config, ts);
- WritingModeTest.suiteFromXML(testXMLStore.WritingModeTest, config, ts);
-
- }
- }
-
- // Add the event listener to listen for the TestComplete event.
- addEventListener("TestComplete",onSuiteDone, false, 0, true);
- return ts;
- }
-
- /**
- * Read through a test suite and return a new suite of tests
- * that have the minimal flag set and are not in the skip list.
- */
- public function createMinimalSuite (fullSuite:TestSuiteExtended):TestSuiteExtended
- {
- // the way we iterate through tests here and in readTestCaseFiles
- // assumes we have only one level of nesting of test suites,
- // which may not always be true.
- var minimalSuite:TestSuiteExtended = new TestSuiteExtended(this);
-
- var suiteList:Array = fullSuite.getTests();
- for (var i1:int = 0; i1 < suiteList.length; i1++)
- {
- if (suiteList[i1].minimal)
- {
- if (skipList)
- {
- if (skipList.indexOf(suiteList[i1].testID) == -1)
- {
- minimalSuite.addTestDescriptor(suiteList[i1]);
- }
- }
- else
- {
- minimalSuite.addTestDescriptor(suiteList[i1]);
- }
- }
- }
- return minimalSuite;
- }
-
- /**
- * The machine name is stored in a file named testMachine.txt
- * This is updated from the init task in the ant build. Once
- * we've retrieved the machine name we generate a file read
- * error to determine where VellumUnit is being run from
- */
- public function readMachineName(event:Event):void
- {
- var fileContents:String = FileRepository.getFile(normalizedURL, "../../test/testMachine.txt");
- if (fileContents)
- {
- var namePattern:RegExp = /testMachineName=(.*)/;
- if (fileContents.match(namePattern))
- {
- var nameLine:String = fileContents.match(namePattern)[0];
- testMachineName = nameLine.replace (namePattern, "$1");
- }
- var typePattern:RegExp = /buildType=(.*)/;
- if (fileContents.match(typePattern))
- {
- var typeLine:String = fileContents.match(typePattern)[0];
- buildType = typeLine.replace (typePattern, "$1");
- }
- var ownerPattern:RegExp = /testOwner=(.*)/;
- if (fileContents.match(ownerPattern))
- {
- var ownerLine:String = fileContents.match(ownerPattern)[0];
- testOwner = ownerLine.replace (ownerPattern, "$1");
- }
- var snapPattern:RegExp = /snapshots=(.*)/;
- if (fileContents.match(snapPattern))
- {
- var snapLine:String = fileContents.match(snapPattern)[0];
- snapshotsOn = snapLine.replace (snapPattern, "$1");
- }
- var genPattern:RegExp = /generateReport=(.*)/;
- if (fileContents.match(genPattern))
- {
- var genLine:String = fileContents.match(genPattern)[0];
- generateReport = genLine.replace (genPattern, "$1");
- }
- var skipFilePattern:RegExp = /antSkipTestFile=(.*)/;
- if (fileContents.match(skipFilePattern))
- {
- var skipLine:String = fileContents.match(skipFilePattern)[0];
- antSkipTestFile = skipLine.replace (skipFilePattern, "$1");
- }
- var startPattern:RegExp = /startTest=(.*)/;
- if (fileContents.match(startPattern))
- {
- var startLine:String = fileContents.match(startPattern)[0];
- testStartIndex = Number(startLine.replace (startPattern, "$1"));
- }
- var endPattern:RegExp = /endTest=(.*)/;
- if (fileContents.match(endPattern))
- {
- var endLine:String = fileContents.match(endPattern)[0];
- testEndIndex = Number(endLine.replace (endPattern, "$1"));
- }
- rangeOfTests = (testStartIndex != 0) && (testEndIndex !=0);
- /* var filePrefixPattern:RegExp = /testOwner=(.*)/;
- if (fileContents.match(filePrefixPattern))
- {
- var filePrefixLine:String = fileContents.match(filePrefixPattern)[0];
- filePrefix = filePrefixLine.replace (filePrefixPattern, "$1");
- } */
- }
- readTestPropertiesFromProject();
- }
-
- public function readTestPropertiesFromProject(event:Event = null):void
- {
- testPropertiesPath = "../../build/test.properties";
- FileRepository.readFile(normalizedURL, testPropertiesPath, getTestProperties, readTestPropertiesFromDist);
- }
-
- public function readTestPropertiesFromDist(event:Event = null):void
- {
- testPropertiesPath = "../../../../../../build/test.properties";
- FileRepository.readFile(normalizedURL, testPropertiesPath, getTestProperties, turnOffSnapshots);
- }
-
- public function turnOffSnapshots(event:Event = null):void
- {
- snapshotsOn = "false";
- chooseTestRunner();
- }
-
- public function getTestProperties(event:Event = null):void
- {
- var testPropContents:String = FileRepository.getFile(normalizedURL, testPropertiesPath);
- if (testPropContents)
- {
-
- }
-
- chooseTestRunner();
- }
-
- /**
- * Use JUnit runner if it has been specified in testMachine.txt
- */
- public function chooseTestRunner(evtObj:IOErrorEvent = null):void
- {
- canRun = true;
-
- // if it was specified in testMachine.txt, run the tests with Junit
- if (generateReport == "true")
- {
- reportXMLResults = true;
-
- // If we haven't read in all the tests, do that first. onSuiteFileRead will also call loadAndRunTests().
- // Else tests have already been read in, we just need to run them.
- if (testXMLStore == null)
- FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError, true);
- else
- loadAndRunTests();
- }
- if (rangeOfTests)
- {
- callLater(startRangeTests);
- }
- }
-
- public function securityHandler(evtObj:SecurityErrorEvent):void
- {
- trace("ERROR",evtObj.toString());
- }
- /**
- * If we've read in a test index range from testMachine.txt, then go
- * right to running that range of tests
- */
- private function startRangeTests():void
- {
- useTestSelectDialog = true; // we select the range in the XML for this dialog
- if (testXMLStore == null)
- FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError, true);
- else
- loadAndRunTests();
- }
-
- private function onSuiteDone(evtObj:Event):void
- {
- if (evtObj)
- {
- evtObj.target.removeEventListener("complete", onSuiteDone);
- }
-
- // Remove the Event Listener because it has fired.
- this.removeEventListener("TestComplete",onSuiteDone);
- canRun = true;
- if (rangeOfTests) testRunner.sendResults();
-
- if (reportXMLResults)
- {
- myLoader.load(new URLRequest("CoverageManagerExit.swf"));
- myLoader.addEventListener(Event.COMPLETE, onLoad_Coverage);
- myLoader.addEventListener(IOErrorEvent.IO_ERROR, onLoad_Flow);
- }
- }
-
- private function onLoad_Flow(ev:IOErrorEvent):void
- {
- myLoader.removeEventListener(IOErrorEvent.IO_ERROR, onLoad_Flow);
- }
-
- private function onLoad_Coverage(ev:Event):void
- {
- loadedSWF.load("CoverageManagerExit.swf");
- }
-
-
- private function onRunTest():void
- {
- /*
- * In the VellumPerformance tests a timer had to be added after the
- * FileRepository.readFile method in order to provide time necessary for loading.
- * This has yet to be a problem in VellumUnit, but may be in the future.
- * Refer to the VellumPerformance.mxml.
- */
- canRun = false;
- useTestSelectDialog = true;
- reportXMLResults = false;
-
- if (testXMLStore == null)
- FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError);
- else
- loadAndRunTests();
- }
-
- private function onRunAllTests():void
- {
- /*
- * In the VellumPerformance tests a timer had to be added after the
- * FileRepository.readFile method in order to provide time necessary for loading.
- * This has yet to be a problem in VellumUnit, but may be in the future.
- * Refer to the VellumPerformance.mxml.
- */
- useTestSelectDialog = true;
- reportXMLResults = false;
- testStartIndex = 0;
- testEndIndex = -1;
- rangeOfTests = true;
-
- if (testXMLStore == null)
- FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError);
- else
- loadAndRunTests();
- }
-
- private function onSuiteFileReadError(o:Object):void
- {
- trace(o.toString());
- }
-
- private function onSuiteFileSecurityError(o:Object):void
- {
- trace(o.toString());
- }
-
- private function onCloseTestWindow():void
- {
- PopUpManager.removePopUp(TestRunnerWindow(curDialog));
- curDialog = null;
- }
- private function createXMLElement(xmlDoc:XMLDocument, nodeName:String, nodeValue:String):XMLNode
- {
- var tmpNode:XMLNode = xmlDoc.createElement(nodeName);
- var tmpNodeText:XMLNode = xmlDoc.createTextNode(nodeValue);
- tmpNode.appendChild(tmpNodeText);
- return (tmpNode);
- }
-
- private function setDebugOrRelease():void
- {
- var e:Error = new Error();
- var s:String = e.getStackTrace();
- debugOrRelease=s;
- try
- {
- var i:int = s.indexOf("setDebugOrRelease");
- if (s.charAt(i + 19) == '[')
- {
- debugOrRelease = "Debug Player";
- }
- else
- {
- debugOrRelease = "Release Player";
- }
- }
- catch (err:Error)
- {
- debugOrRelease = "Release Player";
- }
- if (Configuration.tlf_internal::debugCodeEnabled)
- { vellumDebugOrRelease = "Debug"; }
- else { vellumDebugOrRelease = "Release"; }
- }
-
- //*********************************************************
-
- public function handleCreationComplete(): void
- {
- setDebugOrRelease();
-
- normalizedURL = LoaderUtil.normalizeURL(loaderInfo);
- // if we're in the AIR runtime, we get app:/VellumUnit.swf instead of
- // a file:/// URL. This checks for that and changes it to file:///
- if (normalizedURL.charAt(0) == "a")
- {
- var c:Class = Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File"));
- normalizedURL = new c(new c(normalizedURL)["nativePath"])["url"];
- }
-
- //Security.loadPolicyFile("http://flashqa.macromedia.com/crossdomain.xml");
- for (var i:int = 0; i < XFLFileNameList.length; ++i)
- FileRepository.readFile(normalizedURL, "../../test/testFiles/markup/tlf/" + XFLFileNameList[i]);
-
- // We're going to look for the machine.txt, to fill out default machine name.
- // If we don't find it, go ahead and start the test runner.
- FileRepository.readFile(normalizedURL, "../../test/testMachine.txt", readMachineName, readTestPropertiesFromProject, securityHandler, true);
-
- // Load Arial Font SWF to Embed it in the application.
- loadEmbeddedFont(normalizedURL);
- }
-
- ]]>
+ return menuCollection;
+ }
+
+ private function doJUnitRun(runID:int):void
+ {
+ doSnapshotData.runID = runID;
+ testRunner.startTest();
+ }
+
+ /**
+ * This is the callback function used to run the tests that are selected.
+ * It is supplied on the initial creation of the dialog.
+ */
+ public function runUnitTests(doBeforeAndAfterTest:Boolean = false, iterations:int = 1):void
+ {
+ testRunner.startTest();
+ }
+
+ public function beforeRunTest(testCase:VellumTestCase, callBack:Function):void
+ {
+ beforeTestCallback = callBack;
+ testCase.doBeforeAfterCompare = doBeforeAfterCompare;
+ beforeTestCallback(testCase);
+ }
+
+ /**
+ * This function walks the test data set from the tree to determine
+ * what items are selected to be run.
+ */
+ private function walkTests(data:Object, testsToRun:Array):void
+ {
+ for each (var f:XML in data)
+ {
+ if (f.children().length() > 0)
+ walkTests(f.children(), testsToRun);
+
+ if (f.@selected == true && f.@testID.length() > 0)
+ testsToRun.push(int(f.@testID));
+ }
+ }
+
+ /**
+ * callback function of HandleRunInfo
+ * **/
+ private function finishHandleRunInfo(runID:int):void
+ {
+ doSnapshotData.runID = runID;
+ }
+
+ private function errorWithMachineID(info:Object, token:Object):void
+ {
+ //trace ("could not retrieve machine ID: snapshot tests aborted");
+ Alert.show(info.toString());
+ }
+
+
+ private function handleError(info:Object, token:Object):void
+ {
+ Alert.show(info.toString());
+ }
+
+ private function ioErrorPutBaseline(evtObj:IOErrorEvent):void
+ {
+ // Remove the event listeners to plug up memory leaks.
+ if (evtObj)
+ {
+ evtObj.target.removeEventListener("complete", doSnapShotStoreStack);
+ evtObj.target.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorPutBaseline);
+ evtObj.target.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
+ }
+ trace("Error trying to put the baseline.");
+ // Continue doing the snapshots.
+ doSnapShotStoreStack(null);
+ }
+
+ private function doSnapShotStoreStack(evtObj:Event):void
+ {
+ if (evtObj)
+ {
+ evtObj.target.removeEventListener("complete", doSnapShotStoreStack);
+ evtObj.target.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorPutBaseline);
+ evtObj.target.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatus);
+ }
+ var snapshotType:String = snapshotStack.shift();
+ if (snapshotType != null)
+ {
+ //store result after test
+
+ }
+ else
+ afterTestCallback(curTest);
+ }
+
+ //*********************************************************************/
+
+ /**
+ * Add testcaseXML to testXMLStore with a property name from the
+ * suiteXML file, then go to the next entry
+ */
+ public function onTestCaseFileRead(evtObj:Event):void
+ {
+ testXMLStore[testXMLStore.suiteList.*[testXMLStore.suiteIndex].@suiteName] = XML(evtObj.target.data);
+ testXMLStore.suiteIndex++;
+ readTestCaseFiles();
+ }
+
+ /**
+ * Read through a test suite and return a new suite of tests
+ * that have the minimal flag set and are not in the skip list.
+ */
+ public function createMinimalSuite(fullSuite:TestSuiteExtended):TestSuiteExtended
+ {
+ // the way we iterate through tests here and in readTestCaseFiles
+ // assumes we have only one level of nesting of test suites,
+ // which may not always be true.
+ var minimalSuite:TestSuiteExtended = new TestSuiteExtended(this);
+
+ var suiteList:Array = fullSuite.getTests();
+ for (var i1:int = 0; i1 < suiteList.length; i1++)
+ {
+ if (suiteList[i1].minimal)
+ {
+ if (skipList)
+ {
+ if (skipList.indexOf(suiteList[i1].testID) == -1)
+ {
+ minimalSuite.addTestDescriptor(suiteList[i1]);
+ }
+ }
+ else
+ {
+ minimalSuite.addTestDescriptor(suiteList[i1]);
+ }
+ }
+ }
+ return minimalSuite;
+ }
+
+ /**
+ * The machine name is stored in a file named testMachine.txt
+ * This is updated from the init task in the ant build. Once
+ * we've retrieved the machine name we generate a file read
+ * error to determine where VellumUnit is being run from
+ */
+ public function readMachineName(event:Event):void
+ {
+ var fileContents:String = FileRepository.getFile(normalizedURL, "../../test/testMachine.txt");
+ if (fileContents)
+ {
+ var namePattern:RegExp = /testMachineName=(.*)/;
+ if (fileContents.match(namePattern))
+ {
+ var nameLine:String = fileContents.match(namePattern)[0];
+ testMachineName = nameLine.replace(namePattern, "$1");
+ }
+ var typePattern:RegExp = /buildType=(.*)/;
+ if (fileContents.match(typePattern))
+ {
+ var typeLine:String = fileContents.match(typePattern)[0];
+ buildType = typeLine.replace(typePattern, "$1");
+ }
+ var ownerPattern:RegExp = /testOwner=(.*)/;
+ if (fileContents.match(ownerPattern))
+ {
+ var ownerLine:String = fileContents.match(ownerPattern)[0];
+ testOwner = ownerLine.replace(ownerPattern, "$1");
+ }
+ var snapPattern:RegExp = /snapshots=(.*)/;
+ if (fileContents.match(snapPattern))
+ {
+ var snapLine:String = fileContents.match(snapPattern)[0];
+ snapshotsOn = snapLine.replace(snapPattern, "$1");
+ }
+ var genPattern:RegExp = /generateReport=(.*)/;
+ if (fileContents.match(genPattern))
+ {
+ var genLine:String = fileContents.match(genPattern)[0];
+ generateReport = genLine.replace(genPattern, "$1");
+ }
+ var skipFilePattern:RegExp = /antSkipTestFile=(.*)/;
+ if (fileContents.match(skipFilePattern))
+ {
+ var skipLine:String = fileContents.match(skipFilePattern)[0];
+ antSkipTestFile = skipLine.replace(skipFilePattern, "$1");
+ }
+ var startPattern:RegExp = /startTest=(.*)/;
+ if (fileContents.match(startPattern))
+ {
+ var startLine:String = fileContents.match(startPattern)[0];
+ testStartIndex = Number(startLine.replace(startPattern, "$1"));
+ }
+ var endPattern:RegExp = /endTest=(.*)/;
+ if (fileContents.match(endPattern))
+ {
+ var endLine:String = fileContents.match(endPattern)[0];
+ testEndIndex = Number(endLine.replace(endPattern, "$1"));
+ }
+ rangeOfTests = (testStartIndex != 0) && (testEndIndex != 0);
+ /* var filePrefixPattern:RegExp = /testOwner=(.*)/;
+ if (fileContents.match(filePrefixPattern))
+ {
+ var filePrefixLine:String = fileContents.match(filePrefixPattern)[0];
+ filePrefix = filePrefixLine.replace (filePrefixPattern, "$1");
+ } */
+ }
+ readTestPropertiesFromProject();
+ }
+
+ public function readTestPropertiesFromProject(event:Event = null):void
+ {
+ testPropertiesPath = "../../build/test.properties";
+ FileRepository.readFile(normalizedURL, testPropertiesPath, getTestProperties, readTestPropertiesFromDist);
+ }
+
+ public function readTestPropertiesFromDist(event:Event = null):void
+ {
+ testPropertiesPath = "../../../../../../build/test.properties";
+ FileRepository.readFile(normalizedURL, testPropertiesPath, getTestProperties, turnOffSnapshots);
+ }
+
+ public function turnOffSnapshots(event:Event = null):void
+ {
+ snapshotsOn = "false";
+ chooseTestRunner();
+ }
+
+ public function getTestProperties(event:Event = null):void
+ {
+ var testPropContents:String = FileRepository.getFile(normalizedURL, testPropertiesPath);
+ if (testPropContents)
+ {
+
+ }
+
+ chooseTestRunner();
+ }
+
+ /**
+ * Use JUnit runner if it has been specified in testMachine.txt
+ */
+ public function chooseTestRunner(evtObj:IOErrorEvent = null):void
+ {
+ canRun = true;
+
+ // if it was specified in testMachine.txt, run the tests with Junit
+ if (generateReport == "true")
+ {
+ reportXMLResults = true;
+
+ // If we haven't read in all the tests, do that first. onSuiteFileRead will also call loadAndRunTests().
+ // Else tests have already been read in, we just need to run them.
+ /* if (testXMLStore == null)
+ FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError, true);
+ else */
+ loadAndRunTests();
+ }
+ if (rangeOfTests)
+ {
+ callLater(startRangeTests);
+ }
+ }
+
+ public function securityHandler(evtObj:SecurityErrorEvent):void
+ {
+ trace("ERROR", evtObj.toString());
+ }
+
+ /**
+ * If we've read in a test index range from testMachine.txt, then go
+ * right to running that range of tests
+ */
+ private function startRangeTests():void
+ {
+ useTestSelectDialog = true; // we select the range in the XML for this dialog
+ /* if (testXMLStore == null)
+ FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError, true);
+ else */
+ loadAndRunTests();
+ }
+
+ private function onSuiteDone(evtObj:Event):void
+ {
+ if (evtObj)
+ {
+ evtObj.target.removeEventListener("complete", onSuiteDone);
+ }
+
+ // Remove the Event Listener because it has fired.
+ this.removeEventListener("TestComplete", onSuiteDone);
+ canRun = true;
+ //if (rangeOfTests) testRunner.sendResults();
+
+ if (reportXMLResults)
+ {
+ myLoader.load(new URLRequest("CoverageManagerExit.swf"));
+ myLoader.addEventListener(Event.COMPLETE, onLoad_Coverage);
+ myLoader.addEventListener(IOErrorEvent.IO_ERROR, onLoad_Flow);
+ }
+ }
+
+ private function onLoad_Flow(ev:IOErrorEvent):void
+ {
+ myLoader.removeEventListener(IOErrorEvent.IO_ERROR, onLoad_Flow);
+ }
+
+ private function onLoad_Coverage(ev:Event):void
+ {
+ loadedSWF.load("CoverageManagerExit.swf");
+ }
+
+
+ private function onRunAllTests():void
+ {
+ /*
+ * In the VellumPerformance tests a timer had to be added after the
+ * FileRepository.readFile method in order to provide time necessary for loading.
+ * This has yet to be a problem in VellumUnit, but may be in the future.
+ * Refer to the VellumPerformance.mxml.
+ */
+ canRun = false;
+ useTestSelectDialog = true;
+ reportXMLResults = false;
+
+ /* if (testXMLStore == null)
+ FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError);
+ else */
+ loadAndRunTests();
+ }
+
+ private function onRunMinimalTests():void
+ {
+ /*
+ * In the VellumPerformance tests a timer had to be added after the
+ * FileRepository.readFile method in order to provide time necessary for loading.
+ * This has yet to be a problem in VellumUnit, but may be in the future.
+ * Refer to the VellumPerformance.mxml.
+ */
+ useTestSelectDialog = true;
+ reportXMLResults = false;
+ testStartIndex = 0;
+ testEndIndex = -1;
+ rangeOfTests = true;
+
+ /* if (testXMLStore == null)
+ FileRepository.readFile(normalizedURL, "../../test/testSuites.xml", onSuiteFileRead, onSuiteFileReadError, onSuiteFileSecurityError);
+ else */
+ loadAndRunTests(true);
+ }
+
+ private function onCloseTestWindow():void
+ {
+ PopUpManager.removePopUp(TestRunnerWindow(curDialog));
+ curDialog = null;
+ }
+
+ private function createXMLElement(xmlDoc:XMLDocument, nodeName:String, nodeValue:String):XMLNode
+ {
+ var tmpNode:XMLNode = xmlDoc.createElement(nodeName);
+ var tmpNodeText:XMLNode = xmlDoc.createTextNode(nodeValue);
+ tmpNode.appendChild(tmpNodeText);
+ return (tmpNode);
+ }
+
+ private function setDebugOrRelease():void
+ {
+ var e:Error = new Error();
+ var s:String = e.getStackTrace();
+ debugOrRelease = s;
+ try
+ {
+ var i:int = s.indexOf("setDebugOrRelease");
+ if (s.charAt(i + 19) == '[')
+ {
+ debugOrRelease = "Debug Player";
+ }
+ else
+ {
+ debugOrRelease = "Release Player";
+ }
+ }
+ catch (err:Error)
+ {
+ debugOrRelease = "Release Player";
+ }
+ if (Configuration.tlf_internal::debugCodeEnabled)
+ {
+ vellumDebugOrRelease = "Debug";
+ }
+ else
+ {
+ vellumDebugOrRelease = "Release";
+ }
+ }
+
+ //*********************************************************
+
+ public function handleCreationComplete():void
+ {
+ setDebugOrRelease();
+
+ normalizedURL = LoaderUtil.normalizeURL(loaderInfo);
+ // if we're in the AIR runtime, we get app:/VellumUnit.swf instead of
+ // a file:/// URL. This checks for that and changes it to file:///
+ if (normalizedURL.charAt(0) == "a")
+ {
+ var c:Class = Class(ApplicationDomain.currentDomain.getDefinition("flash.filesystem.File"));
+ normalizedURL = new c(new c(normalizedURL)["nativePath"])["url"];
+ }
+
+ //Security.loadPolicyFile("http://flashqa.macromedia.com/crossdomain.xml");
+ for (var i:int = 0; i < XFLFileNameList.length; ++i)
+ FileRepository.readFile(normalizedURL, "../../test/testFiles/markup/tlf/" + XFLFileNameList[i]);
+
+ // We're going to look for the machine.txt, to fill out default machine name.
+ // If we don't find it, go ahead and start the test runner.
+ FileRepository.readFile(normalizedURL, "../../test/testMachine.txt", readMachineName, readTestPropertiesFromProject, securityHandler, true);
+
+ // Load Arial Font SWF to Embed it in the application.
+ loadEmbeddedFont(normalizedURL);
+ }
+ ]]>
</Script>
-
- <mx:VBox height="100%" width="100%">
- <mx:HBox>
- <mx:Button label="Run Tests" id="cmdRunTests" click="onRunTest()" enabled="{canRun}"/>
- <mx:Button label="Run Minimal Tests" id="cmdRunAllTests" click="onRunAllTests()" enabled="{canRun}"/>
- <!-- <mx:Button label="Run Selected Tests" id="cmdRunSelectedTests" click="onRunTest()" enabled="{canRun}"/> -->
- <mx:Label text="memory usage:"/>
- <mx:Text text="{currentlyUsedMemory}" width="71" height="20"/>
- </mx:HBox>
- <local:TestDescriptorRunner id="testRunner" height = "30%" width="100%"/>
- <mx:SWFLoader id = "loadedSWF" source="../../testApps/bin/Flow.swf" height="536" width="1100"/>
- </mx:VBox>
-
+
+ <s:VGroup height="100%" width="100%">
+ <s:HGroup>
+ <s:Button label="Run Tests" id="cmdRunTests" click="onRunAllTests()" enabled="{canRun}"/>
+ <s:Button label="Run Minimal Tests" id="cmdRunAllTests" click="onRunMinimalTests()" enabled="{canRun}"/>
+ <!-- <mx:Button label="Run Selected Tests" id="cmdRunSelectedTests" click="onRunTest()" enabled="{canRun}"/> -->
+ <s:Label text="memory usage:"/>
+ <s:TextInput text="{currentlyUsedMemory}" width="71" height="20"/>
+ </s:HGroup>
+ <local:TestDescriptorRunner id="testRunner" height="30%" width="100%"/>
+ <s:SWFLoader id="loadedSWF" source="Flow.swf" height="536" width="1100" />
+ </s:VGroup>
+
</s:Application>
http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/libs/flexunit.swc
----------------------------------------------------------------------
diff --git a/automation_core/libs/flexunit.swc b/automation_core/libs/flexunit.swc
new file mode 100644
index 0000000..0722885
Binary files /dev/null and b/automation_core/libs/flexunit.swc differ
http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/AutomationCoreClasses.as
----------------------------------------------------------------------
diff --git a/automation_core/src/AutomationCoreClasses.as b/automation_core/src/AutomationCoreClasses.as
index 5c5affd..f2da5aa 100644
--- a/automation_core/src/AutomationCoreClasses.as
+++ b/automation_core/src/AutomationCoreClasses.as
@@ -20,27 +20,31 @@ package
{
internal class AutomationCoreClasses
{
- import UnitTest.ExtendedClasses.TestDescriptor; TestDescriptor;
+ import UnitTest.ExtendedClasses.VellumTestCase; VellumTestCase;
+ import UnitTest.Validation.BoundsChecker; BoundsChecker;
+ import UnitTest.Validation.CompositionResults; CompositionResults;
+ import UnitTest.Validation.SelectionEventValidator; SelectionEventValidator;
+ import UnitTest.Validation.DamageEventValidator; DamageEventValidator;
+ import UnitTest.Validation.StatusChangeEventValidator; StatusChangeEventValidator;
+ import UnitTest.Validation.FlowOperationEventValidator; FlowOperationEventValidator;
+ import UnitTest.Validation.CompositionCompleteEventValidator; CompositionCompleteEventValidator;
+ import UnitTest.Validation.FlowElementMouseEventValidator; FlowElementMouseEventValidator;
+ import UnitTest.Validation.EventValidator; EventValidator;
+ import UnitTest.Validation.UpdateCompleteEventValidator; UpdateCompleteEventValidator;
+
+ /*import UnitTest.ExtendedClasses.TestDescriptor; TestDescriptor;
import UnitTest.ExtendedClasses.TestSuiteExtended; TestSuiteExtended;
import UnitTest.ExtendedClasses.VellumPerformanceCase; VellumPerformanceCase;
- import UnitTest.ExtendedClasses.VellumTestCase; VellumTestCase;
+
import UnitTest.Fixtures.FileRepository; FileRepository;
import UnitTest.Fixtures.TestApp; TestApp;
import UnitTest.Fixtures.TestConfig; TestConfig;
import UnitTest.Fixtures.TestEditManager; TestEditManager;
- import UnitTest.Validation.BoundsChecker; BoundsChecker;
- import UnitTest.Validation.CompositionCompleteEventValidator; CompositionCompleteEventValidator;
- import UnitTest.Validation.CompositionResults; CompositionResults;
- import UnitTest.Validation.DamageEventValidator; DamageEventValidator;
- import UnitTest.Validation.EventValidator; EventValidator;
- import UnitTest.Validation.FlowElementMouseEventValidator; FlowElementMouseEventValidator;
- import UnitTest.Validation.FlowOperationEventValidator; FlowOperationEventValidator;
+
import UnitTest.Validation.LineSnapshot; LineSnapshot;
- import UnitTest.Validation.SelectionEventValidator; SelectionEventValidator;
- import UnitTest.Validation.StatusChangeEventValidator; StatusChangeEventValidator;
- import UnitTest.Validation.UpdateCompleteEventValidator; UpdateCompleteEventValidator;
- import UnitTest.Validation.XMLSnapshot; XMLSnapshot;
+
+ import UnitTest.Validation.XMLSnapshot; XMLSnapshot; */
// Alphabetical list of classes to be included as part of vellum.swc.
// This should mirror what's in the .flexLibProperties
}
http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/ExtendedClasses/TestCaseBase.as
----------------------------------------------------------------------
diff --git a/automation_core/src/UnitTest/ExtendedClasses/TestCaseBase.as b/automation_core/src/UnitTest/ExtendedClasses/TestCaseBase.as
new file mode 100644
index 0000000..ff6ff8b
--- /dev/null
+++ b/automation_core/src/UnitTest/ExtendedClasses/TestCaseBase.as
@@ -0,0 +1,35 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: piotr.zarzycki
+ * Date: 24.03.14
+ * Time: 20:49
+ * To change this template use File | Settings | File Templates.
+ */
+package UnitTest.ExtendedClasses
+{
+ public class TestCaseBase
+ {
+ public var setUpDuration:Number;
+ public var setUpMemInitial:Object;
+ public var setUpMemFinal:Object;
+ public var middleDuration:Number;
+ public var middleMemInitial:Object;
+ public var middleMemFinal:Object;
+ public var tearDownDuration:Number;
+ public var tearDownMemInitial:Object;
+ public var tearDownMemFinal:Object;
+ public var metaData:Object;
+
+ public var methodName:String;
+
+ public function TestCaseBase(methodName:String = null)
+ {
+ this.methodName = methodName;
+ }
+
+ public function toString():String
+ {
+ return methodName;
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/ExtendedClasses/TestSuiteExtended.as
----------------------------------------------------------------------
diff --git a/automation_core/src/UnitTest/ExtendedClasses/TestSuiteExtended.as b/automation_core/src/UnitTest/ExtendedClasses/TestSuiteExtended.as
index bc6e763..81137a3 100644
--- a/automation_core/src/UnitTest/ExtendedClasses/TestSuiteExtended.as
+++ b/automation_core/src/UnitTest/ExtendedClasses/TestSuiteExtended.as
@@ -16,131 +16,128 @@
// limitations under the License.
//
////////////////////////////////////////////////////////////////////////////////
-package UnitTest.ExtendedClasses
-{
- import flash.events.Event;
- import flash.system.System;
- import flash.utils.*;
-
- import flexunit.flexui.*;
- import flexunit.framework.*;
- import flexunit.runner.*;
- import flexunit.textui.*;
- import flexunit.utils.*;
-
- public class TestSuiteExtended extends TestSuite
- {
- public var _parent:Object;
- public var currentTest:Test;
- public var testDescArrayList : Collection;
- private var runDescIter:Iterator;
- private var listener : TestSuiteTestListener;
-
- public function TestSuiteExtended(parent:Object=null)
- {
- super(null);
- testDescArrayList = Collection( new ArrayList());
- _parent = parent;
- }
-
- override public function runWithResult( result:TestResult ):void
- {
- runDescIter = testDescArrayList.iterator();
- listener = new TestSuiteTestListener(this, result);
- runNext(result);
- }
+package UnitTest.ExtendedClasses {
+
+ import UnitTest.ExtendedClasses.*;
+
+ import flash.events.Event;
+
+ import flexunit.framework.*;
+ import flexunit.utils.*;
- private static const _a:uint = 1664525;
- private static const _c:uint = 1013904223;
- private static var _rand:uint = 47;
-
- // random from 0 to 1 inclusive I think
- private static function getRandom():Number
- {
- _rand = _a*_rand+_c;
- return Number(_rand)/uint.MAX_VALUE;
- }
-
- private function chooseRandomTest():Object
- {
- _rand = _a*_rand+_c;
- var index:int = getRandom() * (testDescArrayList.length()+1)
- if (index >= testDescArrayList.length())
- index = testDescArrayList.length()-1;
- return testDescArrayList.getItemAt(index);
- }
-
- private var __testCount:int = 0;
- private var _maxDeltaMemory:int = -1;
- private var _maxDeltaTest:int = -1;
-
- private var repeatForever:Boolean = false;
- private var useRandomTest:Boolean = false;
-
- override public function runNext( result : TestResult) : void
+ public dynamic class TestSuiteExtended extends TestSuite
{
- currentTest = null;
- if (!runDescIter.hasNext() && repeatForever)
- runDescIter = testDescArrayList.iterator();
- if ( runDescIter.hasNext() )
+ public var _parent:Object;
+ public var currentTest:Test;
+ public var testDescArrayList:Collection;
+ private var runDescIter:Iterator;
+ private var listener:TestSuiteTestListener;
+
+ public function TestSuiteExtended(parent:Object = null)
+ {
+ super(null);
+ testDescArrayList = Collection(new ArrayList());
+ _parent = parent;
+ }
+
+ override public function runWithResult(result:TestResult):void
+ {
+ runDescIter = testDescArrayList.iterator();
+ listener = new TestSuiteTestListener(this, result);
+ runNext(result);
+ }
+
+ private static const _a:uint = 1664525;
+ private static const _c:uint = 1013904223;
+ private static var _rand:uint = 47;
+
+ // random from 0 to 1 inclusive I think
+ private static function getRandom():Number
+ {
+ _rand = _a * _rand + _c;
+ return Number(_rand) / uint.MAX_VALUE;
+ }
+
+ private function chooseRandomTest():Object
+ {
+ _rand = _a * _rand + _c;
+ var index:int = getRandom() * (testDescArrayList.length() + 1)
+ if (index >= testDescArrayList.length())
+ index = testDescArrayList.length() - 1;
+ return testDescArrayList.getItemAt(index);
+ }
+
+ private var __testCount:int = 0;
+ private var _maxDeltaMemory:int = -1;
+ private var _maxDeltaTest:int = -1;
+
+ private var repeatForever:Boolean = false;
+ private var useRandomTest:Boolean = false;
+
+ override public function runNext(result:TestResult):void
{
- if ( result.shouldStop() )
+ currentTest = null;
+ if (!runDescIter.hasNext() && repeatForever)
+ runDescIter = testDescArrayList.iterator();
+ if (runDescIter.hasNext())
{
+ if (result.shouldStop())
+ {
+ listener.pop();
+ return;
+ }
+
+ currentTest = useRandomTest ? chooseRandomTest().makeTest() : runDescIter.next().makeTest();
+
+ /*var curMemory:int = System.totalMemory;
+ __testCount++;
+ trace(__testCount,_maxDeltaTest,_maxDeltaMemory,currentTest.toString());*/
+
+ runTest(currentTest, result);
+
+ /*System.gc();System.gc();
+ var aftMemory:int = System.totalMemory;
+ var deltaMemory:int = aftMemory-curMemory;
+ if (deltaMemory > _maxDeltaMemory)
+ {
+ _maxDeltaMemory = deltaMemory;
+ _maxDeltaTest = __testCount;
+ }*/
+ }
+ else
+ {
+ if (_parent != null)
+ _parent.dispatchEvent(new Event("TestComplete"));
listener.pop();
- return;
}
+ }
- currentTest = useRandomTest ? chooseRandomTest().makeTest() : runDescIter.next().makeTest();
+ private function runTest(test:Test, result:TestResult):void
+ {
+ test.runWithResult(result);
+ }
- /*var curMemory:int = System.totalMemory;
- __testCount++;
- trace(__testCount,_maxDeltaTest,_maxDeltaMemory,currentTest.toString());*/
+ override public function testCount():Number
+ {
+ return testDescArrayList.length();
+ }
- runTest( currentTest, result );
+ override public function getTests():Array
+ {
+ var tempArray:Array = testDescArrayList.toArray();
+ return testDescArrayList.toArray();
+ }
- /*System.gc();System.gc();
- var aftMemory:int = System.totalMemory;
- var deltaMemory:int = aftMemory-curMemory;
- if (deltaMemory > _maxDeltaMemory)
- {
- _maxDeltaMemory = deltaMemory;
- _maxDeltaTest = __testCount;
- }*/
+ public function addTestDescriptor(descriptor:TestDescriptor):void
+ {
+ testDescArrayList.addItem(descriptor);
}
- else
+
+ override public function countTestCases():Number
{
- if (_parent != null)
- _parent.dispatchEvent(new Event("TestComplete"));
- listener.pop();
+ return testCount(); // currently it's a flat list.
}
- }
- private function runTest( test:Test, result:TestResult ):void
- {
- test.runWithResult( result );
- }
-
- override public function testCount() : Number
- {
- return testDescArrayList.length();
- }
-
- override public function getTests() : Array
- {
- var tempArray:Array = testDescArrayList.toArray();
- return testDescArrayList.toArray();
- }
-
- public function addTestDescriptor ( descriptor:TestDescriptor ) : void
- {
- testDescArrayList.addItem (descriptor);
- }
-
- override public function countTestCases() : Number
- {
- return testCount(); // currently it's a flat list.
- }
-
- }
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-tlf/blob/cad064e0/automation_core/src/UnitTest/ExtendedClasses/VellumPerformanceCase.as
----------------------------------------------------------------------
diff --git a/automation_core/src/UnitTest/ExtendedClasses/VellumPerformanceCase.as b/automation_core/src/UnitTest/ExtendedClasses/VellumPerformanceCase.as
index 2f032c8..a914729 100644
--- a/automation_core/src/UnitTest/ExtendedClasses/VellumPerformanceCase.as
+++ b/automation_core/src/UnitTest/ExtendedClasses/VellumPerformanceCase.as
@@ -19,15 +19,16 @@
package UnitTest.ExtendedClasses
{
import flash.events.Event;
+ import flash.utils.getQualifiedClassName;
- import flexunit.framework.TestCase;
+ import flexunit.framework.TestCase;
import flexunit.framework.TestSuite;
import mx.collections.ArrayCollection;
import mx.controls.ComboBox;
import mx.containers.Canvas;
- public class VellumPerformanceCase extends TestCase
+ public class VellumPerformanceCase extends TestCaseBase
{
private static const standardTimeout:int = 1000000;
public static var testApp:Canvas;
@@ -48,7 +49,8 @@ package UnitTest.ExtendedClasses
}
// always add className to the TestID
- TestID = className.substr(className.lastIndexOf(':')+1) + '.';
+ var className:String = getQualifiedClassName(this);
+ TestID = className.substr(className.lastIndexOf(':')+1) + '.';
TestID = TestID + ((TestData.id) ? TestData.id : methodName);
super(methodName);
@@ -56,7 +58,7 @@ package UnitTest.ExtendedClasses
override public function toString():String
{
- return TestID + " (" + className + ")";
+ return TestID + " (" + getQualifiedClassName(this) + ")";
}
public static function suiteFromXML(testCaseClass:Class, testListXML:XML):TestSuite
@@ -69,14 +71,15 @@ package UnitTest.ExtendedClasses
return ts;
}
- override public function tearDown() : void
+ public function tearDown() : void
{
TestData = null;
}
public function addAsyncForTestComplete (timeout:int = standardTimeout):void
{
- testApp.addEventListener(Event.COMPLETE, addAsync(testComplete, timeout, null));
+ //TODO: Add Support for addSync PZ
+ //testApp.addEventListener(Event.COMPLETE, addAsync(testComplete, timeout, null));
}
/** empty testComplete to call once the performance app sends