Mercurial > hg > audiodb
diff bindings/as3/ext/asunit/framework/RemotingTestCase.as @ 732:3a0b9700b3d2
* Initial AS3 commit
author | mas01mj |
---|---|
date | Tue, 14 Sep 2010 16:47:10 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bindings/as3/ext/asunit/framework/RemotingTestCase.as Tue Sep 14 16:47:10 2010 +0000 @@ -0,0 +1,186 @@ +package asunit.framework +{ + import flash.errors.IllegalOperationError; + import flash.events.IOErrorEvent; + import flash.events.NetStatusEvent; + import flash.events.SecurityErrorEvent; + import flash.net.NetConnection; + import flash.net.ObjectEncoding; + import flash.net.Responder; + + import asunit.framework.TestCase; + import asunit.util.ArrayIterator; + + /** + * RemotingTestCase + * @author Jens Krause [www.websector.de] + * @date 11/29/07 + * + */ + public class RemotingTestCase extends TestCase + { + + protected var connection: NetConnection; + /** + * Constructor + * @param testMethod String Name of the test case + * + */ + public function RemotingTestCase(testMethod: String = null) + { + super(testMethod); + } + + /** + * Inits a netConnection instance and add all necessary event listeners + * + */ + protected function initConnection():void + { + if (connection == null) + { + connection = new NetConnection(); + + connection.addEventListener(NetStatusEvent.NET_STATUS, connectionStatusHandler); + connection.addEventListener(IOErrorEvent.IO_ERROR, connectionIOErrorHandler); + connection.addEventListener(SecurityErrorEvent.SECURITY_ERROR , connectionSecurityErrorHandler); + } + } + + /** + * Dispose the netConnection instance + * + */ + protected function disposeConnection():void + { + if (connection != null) + { + connection.removeEventListener(NetStatusEvent.NET_STATUS, connectionStatusHandler); + connection.removeEventListener(IOErrorEvent.IO_ERROR, connectionIOErrorHandler); + connection.removeEventListener(SecurityErrorEvent.SECURITY_ERROR , connectionSecurityErrorHandler); + + connection = null; + } + } + + /** + * Callback handler for receiving SecurityErrorEvent + * @param event SecurityErrorEvent + * + */ + protected function connectionSecurityErrorHandler(event: SecurityErrorEvent): void + { + result.addError(this, new IllegalOperationError(event.toString())); + isComplete = true; + } + + /** + * Callback handler for receiving IOErrorEvent + * @param event IOErrorEvent + * + */ + protected function connectionIOErrorHandler(event: IOErrorEvent): void + { + result.addError(this, new IllegalOperationError(event.toString())); + isComplete = true; + } + + /** + * Callback handler for receiving NetStatusEvent + * @param event NetStatusEvent + * + */ + protected function connectionStatusHandler(event: NetStatusEvent): void + { + + } + + /** + * Connects the gateway + * + * @param $gateway String Remote gateway + * @param $encoding uint Object encoding using either AMF0 or AMF3 + * + */ + protected function connect ($gateway: String = null, $encoding: uint = 0): void + { + initConnection(); + + connection.objectEncoding = ($encoding > ObjectEncoding.AMF0) ? $encoding : ObjectEncoding.AMF0; + + try { + connection.connect($gateway); + } + catch(error: Error) + { + result.addError(this, error); + } + }; + + /** + * Calls a remote service method and test it + * + * @param $method String Remote service + * @param $responder Responder Responder to handle remoting calls + * @param $arguments Array Rest paramaters (optional) + * + */ + protected function call ($method: String = null, $responder: Responder = null, ...$arguments): void + { + var hasReferenceError: Boolean = false; + + // parameters for calling connection.call(); + // To avoid using the type unsafe ...rest operator I decided to use type safe parameters within RemotingTestCase.call() + // and apply these later to connection.call(); + var params: Array = []; + + // check remote method + if ($method != null) + { + params.push($method); + } + else + { + result.addError(this, new ReferenceError("RemotingTestCase.call() has to defined a remote method.")); + hasReferenceError = true; + } + + // check responder + if ($responder != null) + { + params.push($responder); + } + else + { + result.addError(this, new ReferenceError("RemotingTestCase.call() has to defined a responder to handling its results.")); + hasReferenceError = true; + } + + // In case of a reference error invoke test running instantly + // to show the errors created above and return + if (hasReferenceError) + { + super.run(); + return; + } + + + var arrIterator: ArrayIterator = new ArrayIterator($arguments); + while (arrIterator.hasNext()) + { + params.push(arrIterator.next()); + } + + // call remote service + try { + connection.call.apply(null, params); + } + catch(error: Error) + { + result.addError(this, error); + } + + + }; + } +}