mas01mj@732: package asunit.framework { mas01mj@732: import asunit.errors.AssertionFailedError; mas01mj@732: import flash.errors.IllegalOperationError; mas01mj@732: import flash.events.Event; mas01mj@732: import flash.events.TimerEvent; mas01mj@732: import flash.utils.Timer; mas01mj@732: mas01mj@732: public class AsyncOperation{ mas01mj@732: mas01mj@732: private var timeout:Timer; mas01mj@732: private var testCase:TestCase; mas01mj@732: private var callback:Function; mas01mj@732: private var duration:Number; mas01mj@732: private var failureHandler:Function; mas01mj@732: mas01mj@732: public function AsyncOperation(testCase:TestCase, handler:Function, duration:Number, failureHandler:Function=null){ mas01mj@732: this.testCase = testCase; mas01mj@732: this.duration = duration; mas01mj@732: timeout = new Timer(duration, 1); mas01mj@732: timeout.addEventListener(TimerEvent.TIMER_COMPLETE, onTimeoutComplete); mas01mj@732: timeout.start(); mas01mj@732: if(handler == null) { mas01mj@732: handler = function(args:*):* {return;}; mas01mj@732: } mas01mj@732: this.failureHandler = failureHandler; mas01mj@732: var context:AsyncOperation = this; mas01mj@732: callback = function(args:*):* { mas01mj@732: timeout.stop(); mas01mj@732: try { mas01mj@732: handler.apply(testCase, arguments); mas01mj@732: } mas01mj@732: catch(e:AssertionFailedError) { mas01mj@732: testCase.getResult().addFailure(testCase, e); mas01mj@732: } mas01mj@732: catch(ioe:IllegalOperationError) { mas01mj@732: testCase.getResult().addError(testCase, ioe); mas01mj@732: } mas01mj@732: catch(unknownError:Error) { mas01mj@732: testCase.getResult().addError(testCase, unknownError); mas01mj@732: } mas01mj@732: finally { mas01mj@732: testCase.asyncOperationComplete(context); mas01mj@732: } mas01mj@732: return; mas01mj@732: }; mas01mj@732: } mas01mj@732: mas01mj@732: public function getCallback():Function{ mas01mj@732: return callback; mas01mj@732: } mas01mj@732: mas01mj@732: private function onTimeoutComplete(event:TimerEvent):void { mas01mj@732: if(null != failureHandler) { mas01mj@732: failureHandler(new Event('async timeout')); mas01mj@732: } mas01mj@732: testCase.asyncOperationTimeout(this, duration, null==failureHandler); mas01mj@732: } mas01mj@732: } mas01mj@732: mas01mj@732: }