|
From: <luk...@us...> - 2007-12-04 19:41:17
|
Revision: 181
http://asunit.svn.sourceforge.net/asunit/?rev=181&view=rev
Author: lukebayes
Date: 2007-12-04 11:41:20 -0800 (Tue, 04 Dec 2007)
Log Message:
-----------
Added RemotingTestCase contributed by Jens Krause
Added Paths:
-----------
trunk/framework/as3/asunit/framework/RemotingTestCase.as
Added: trunk/framework/as3/asunit/framework/RemotingTestCase.as
===================================================================
--- trunk/framework/as3/asunit/framework/RemotingTestCase.as (rev 0)
+++ trunk/framework/as3/asunit/framework/RemotingTestCase.as 2007-12-04 19:41:20 UTC (rev 181)
@@ -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);
+ }
+
+
+ };
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|