⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testrunner.as

📁 flash as编程的库和源代码
💻 AS
字号:
package test.de.alex_uhlmann.animationpackage {
	
	import de.alex_uhlmann.animationpackage.animation.AnimationEvent;
	
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.text.TextField;
	import flash.text.TextFieldAutoSize;
	import flash.text.TextFormat;
	import flash.utils.Timer;
	import flash.utils.describeType;
	import flash.utils.getQualifiedClassName;
	
	public class TestRunner {
		
		private var root:Sprite;
		private var tests:Array;
		private var currentTestClass:TestClass;
		private var currentTestClassIndex:int;
		private var testClassLabel:TextField;
		private var testMethodLabel:TextField;
		
		public function TestRunner(root:Sprite) {		
			this.root = root;
			tests = new Array();
			drawTestTextFields();
		}
		
		public function addTestSuite(clazz:Class):void {
			var testClass:TestClass = new TestClass();
			testClass.testInstance = new clazz(root);
			testClass.methods = getTestMethods(testClass.testInstance);		
			tests.push(testClass);
		}
		
		public function run(index:int):void {
			currentTestClassIndex = index;
			currentTestClass = tests[index];
			if(currentTestClass == null) {
				trace("TestSuite is complete");
				//testMethodLabel.text += "           COMPLETE";
				testMethodLabel.appendText( "           COMPLETE" );
				return;
			}
			runTestClass(currentTestClass);
		}		
		
		private function drawTestTextFields():void {
         var format:TextFormat = new TextFormat();
         format.size = 8;
			testClassLabel = new TextField();
			testClassLabel.defaultTextFormat = format;
			testClassLabel.autoSize = TextFieldAutoSize.LEFT;
			testMethodLabel = new TextField();
			testMethodLabel.defaultTextFormat = format;
			testMethodLabel.autoSize = TextFieldAutoSize.LEFT;
			testMethodLabel.y = 10;
         root.addChild(testClassLabel);
         root.addChild(testMethodLabel);            
		}
		
		private function printTestAction(testInstance:*, method:String):void {
			testClassLabel.text = getQualifiedClassName(testInstance);
			testMethodLabel.text = method;
		}
		
		private function getTestMethods(test:*):Array {
			var testMethods:Array = new Array();
			var classInfo:XML = describeType(test)
			for each(var m:XML in classInfo..method) {				
				var method:String = m.@name.toString();
				var isTestMethod:Boolean = (method.substring(0, 4) == "test");
				if(isTestMethod)
					testMethods.push(method);				
			}
			return testMethods;
		}
		
		private function runTestClass(testClass:TestClass):void {				
			var testInstance:* = testClass.testInstance;	
			var method:String = testClass.methods.pop();
			//a testShort method does not use an instance variable to monitor it's state			
			if(method.substring(0,9) == "testShort")
				method = testClass.methods.pop();
			printTestAction(testInstance, method);
			testInstance[method]();
			var timer:Timer = new Timer(testInstance.duration + 2100,1);
			timer.addEventListener(TimerEvent.TIMER, handleSuccessor);
			timer.start();
		}	
		
		private function handleSuccessor(event:TimerEvent):void {
			if(currentTestClass.methods.length > 1) {
				if(currentTestClass.testInstance.tearDownMethod != null)
					currentTestClass.testInstance.tearDownMethod();
				runTestClass(currentTestClass);
			} else if(currentTestClass.methods.length == 1) {
				if(currentTestClass.methods[0].substring(0,9) == "testShort") {
					currentTestClass.methods.pop();
				}
				nextClass();
			} else {
				nextClass();
			}		
		}	
		
		private function nextClass():void {
			if(currentTestClass.testInstance.tearDownMethod != null)
				currentTestClass.testInstance.tearDownMethod();
			currentTestClassIndex++;
			run(currentTestClassIndex);		
		}		
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -