mas01mj@732: package asunit.textui {
mas01mj@732:
mas01mj@732: import asunit.errors.AssertionFailedError;
mas01mj@732: import asunit.framework.Test;
mas01mj@732: import asunit.framework.TestListener;
mas01mj@732: import asunit.framework.TestResult;
mas01mj@732: import flash.utils.setTimeout;
mas01mj@732: import flash.utils.Dictionary;
mas01mj@732:
mas01mj@732: /**
mas01mj@732: * The XMLResultPrinter
is used to transform AsUnit test results
mas01mj@732: * to JUnit-compatible XML content.
mas01mj@732: *
mas01mj@732: * This printer will send JUnit-compatible XML content to trace output. The XML content
mas01mj@732: * will be enclosed by '<XMLResultPrinter/>' tags.
mas01mj@732: *
mas01mj@732: * @includeExample XMLResultPrinterExample.as
mas01mj@732: * @includeExample XMLResultPrinterExample.xml
mas01mj@732: **/
mas01mj@732: public class XMLResultPrinter extends ResultPrinter {
mas01mj@732:
mas01mj@732: protected var results:Dictionary;
mas01mj@732:
mas01mj@732: public function XMLResultPrinter() {
mas01mj@732: results = new Dictionary();
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function startTest(test:Test):void {
mas01mj@732: super.startTest(test);
mas01mj@732: var result:TestListener = new XMLTestResult(test);
mas01mj@732: results[test.getName()] = result;
mas01mj@732: result.startTest(test);
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function endTest(test:Test):void {
mas01mj@732: super.endTest(test);
mas01mj@732: results[test.getName()].endTest(test);
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function startTestMethod(test:Test, methodName:String):void {
mas01mj@732: super.startTestMethod(test, methodName);
mas01mj@732: results[test.getName()].startTestMethod(test, methodName);
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function endTestMethod(test:Test, methodName:String):void {
mas01mj@732: super.endTestMethod(test, methodName);
mas01mj@732: results[test.getName()].endTestMethod(test, methodName);
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function addFailure(test:Test, t:AssertionFailedError):void {
mas01mj@732: super.addFailure(test, t);
mas01mj@732: results[test.getName()].addFailure(test, t);
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function addError(test:Test, t:Error):void {
mas01mj@732: super.addError(test, t);
mas01mj@732: results[test.getName()].addError(test, t);
mas01mj@732: }
mas01mj@732:
mas01mj@732: override public function printResult(result:TestResult, runTime:Number):void {
mas01mj@732: super.printResult(result, runTime);
mas01mj@732: trace("");
mas01mj@732: trace("");
mas01mj@732: trace("");
mas01mj@732: trace("");
mas01mj@732: var xmlTestResult:XMLTestResult;
mas01mj@732: for each(xmlTestResult in results) {
mas01mj@732: trace(xmlTestResult.toString());
mas01mj@732: }
mas01mj@732: trace("");
mas01mj@732: trace("");
mas01mj@732: trace("");
mas01mj@732: }
mas01mj@732: }
mas01mj@732: }
mas01mj@732:
mas01mj@732: import asunit.framework.Test;
mas01mj@732: import asunit.framework.TestFailure;
mas01mj@732: import flash.utils.getQualifiedClassName;
mas01mj@732: import flash.utils.getTimer;
mas01mj@732: import asunit.framework.TestListener;
mas01mj@732: import asunit.errors.AssertionFailedError;
mas01mj@732: import asunit.framework.TestMethod;
mas01mj@732: import flash.utils.Dictionary;
mas01mj@732:
mas01mj@732: class XMLTestResult implements TestListener {
mas01mj@732:
mas01mj@732: private var _duration:Number;
mas01mj@732: private var start:Number;
mas01mj@732: private var test:Test;
mas01mj@732: private var testName:String;
mas01mj@732: private var failureHash:Dictionary;
mas01mj@732: private var failures:Array;
mas01mj@732: private var errorHash:Dictionary;
mas01mj@732: private var errors:Array;
mas01mj@732: private var methodHash:Dictionary;
mas01mj@732: private var methods:Array;
mas01mj@732:
mas01mj@732: public function XMLTestResult(test:Test) {
mas01mj@732: this.test = test;
mas01mj@732: testName = test.getName().split("::").join(".");
mas01mj@732: failures = new Array();
mas01mj@732: errors = new Array();
mas01mj@732: methods = new Array();
mas01mj@732:
mas01mj@732: failureHash = new Dictionary();
mas01mj@732: errorHash = new Dictionary();
mas01mj@732: methodHash = new Dictionary();
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function startTest(test:Test):void {
mas01mj@732: start = getTimer();
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function run(test:Test):void {
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function addError(test:Test, t:Error):void {
mas01mj@732: var failure:TestFailure = new TestFailure(test, t);
mas01mj@732: errors.push(failure);
mas01mj@732: errorHash[failure.failedMethod()] = failure;
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function addFailure(test:Test, t:AssertionFailedError):void {
mas01mj@732: var failure:TestFailure = new TestFailure(test, t);
mas01mj@732: failures.push(failure);
mas01mj@732: failureHash[failure.failedMethod()] = failure;
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function startTestMethod(test:Test, methodName:String):void {
mas01mj@732: var method:TestMethod = new TestMethod(test, methodName);
mas01mj@732: methods.push(method);
mas01mj@732: methodHash[method.getName()] = method;
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function endTestMethod(test:Test, methodName:String):void {
mas01mj@732: methodHash[methodName].endTest(test);
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function endTest(test:Test):void {
mas01mj@732: _duration = (getTimer() - start) * .001;
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function errorCount():int {
mas01mj@732: return errors.length;
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function failureCount():int {
mas01mj@732: return failures.length;
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function duration():Number {
mas01mj@732: return _duration;
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderSuiteOpener():String {
mas01mj@732: return "\n";
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderTestOpener(methodName:String):String {
mas01mj@732: return "\n";
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderTestBody(method:String):String {
mas01mj@732: if(errorHash[method]) {
mas01mj@732: return renderError(errorHash[method]);
mas01mj@732: }
mas01mj@732: else if(failureHash[method]) {
mas01mj@732: return renderFailure(failureHash[method]);
mas01mj@732: }
mas01mj@732: else {
mas01mj@732: return "";
mas01mj@732: }
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderError(failure:TestFailure):String {
mas01mj@732: return "\n";
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderFailure(failure:TestFailure):String {
mas01mj@732: return "\n";
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderTestCloser():String {
mas01mj@732: return '\n';
mas01mj@732: }
mas01mj@732:
mas01mj@732: private function renderSuiteCloser():String {
mas01mj@732: return '\n';
mas01mj@732: }
mas01mj@732:
mas01mj@732: public function toString():String {
mas01mj@732: var str:String = '';
mas01mj@732: str += renderSuiteOpener();
mas01mj@732: for(var name:String in methodHash) {
mas01mj@732: str += renderTestOpener(name);
mas01mj@732: str += renderTestBody(name);
mas01mj@732: str += renderTestCloser();
mas01mj@732: }
mas01mj@732: str += renderSuiteCloser();
mas01mj@732: return str;
mas01mj@732: }
mas01mj@732: }
mas01mj@732: