package unit; import haxe.remoting.SocketProtocol; #if flash import haxe.remoting.SocketWrapper; #end class TestRemoting extends Test { static var HOST = "dev.unit-tests"; static var PORT = 1999; static var _ : Dynamic = init(); static var ecnx : haxe.remoting.ExternalConnection; static var ecnx2 : haxe.remoting.ExternalConnection; static var ecnx3 : haxe.remoting.ExternalConnection; static var lcnx : haxe.remoting.LocalConnection; static var fjscnx : haxe.remoting.FlashJsConnection; static function staticMethod( a : Int, b : Int ) { return a + b; } static function init() { var ctx = RemotingApi.context(); #if flash if( !flash.external.ExternalInterface.available ) return; ecnx = haxe.remoting.ExternalConnection.jsConnect("cnx",ctx); ecnx3 = haxe.remoting.ExternalConnection.jsConnect("unknown",ctx); lcnx = haxe.remoting.LocalConnection.connect("local",ctx,[HOST]); fjscnx = haxe.remoting.FlashJsConnection.connect("cnx",#if flash9 "haxeFlash8" #else "haxeFlash9" #end,ctx); #elseif js ecnx = haxe.remoting.ExternalConnection.flashConnect("cnx","haxeFlash8",ctx); ecnx2 = haxe.remoting.ExternalConnection.flashConnect("cnx","haxeFlash9",ctx); ecnx3 = haxe.remoting.ExternalConnection.flashConnect("nothing","haxeFlash8",ctx); #end } public function test() { #if flash if( !flash.external.ExternalInterface.available ) return; #end // external connection #if (flash || js) doTestConnection(ecnx); #end #if !php // accessing the properties of a null object generates a fatal error in php exc(function() ecnx3.api.add.call([1,3])); #end #if js doTestConnection(ecnx2); #end #if flash // local connection doTestAsyncConnection(lcnx); // flash-flash through-js connection doTestAsyncConnection(fjscnx); #end #if (js || neko || php) // http sync connection var hcnx = haxe.remoting.HttpConnection.urlConnect("http://"+HOST+"/remoting.n"); doTestConnection(hcnx); // test wrappers var dcnx = haxe.remoting.AsyncDebugConnection.create(haxe.remoting.AsyncAdapter.create(hcnx)); dcnx.setErrorDebug(function(path,args,e) {}); dcnx.setResultDebug(function(path,args,ret) {}); dcnx.setCallDebug(function(path,args) {}); doTestAsyncConnection(dcnx); #end // http async connection var hcnx = haxe.remoting.HttpAsyncConnection.urlConnect("http://"+HOST+"/remoting.n"); doTestAsyncConnection(hcnx); var dcnx = haxe.remoting.DelayedConnection.create(); dcnx.connection = hcnx; doTestAsyncConnection(dcnx); // socket connection #if (flash || neko || php) async( doConnect, new Socket(), true ); #elseif js async( doConnect, new Socket("haxeFlash8"), true ); async( doConnect, new Socket("haxeFlash9"), true ); #end #if swf_mark return; #end var actx = new haxe.remoting.ContextAll(); actx.addObject("fake",{ TestRemoting : TestRemoting },true); eq( actx.call(["unit","TestRemoting","staticMethod"],[2,3]), 5 ); exc( function() actx.call(["unit2","TestRemoting","staticMethod"],[2,3]) ); exc( function() actx.call(["unit","TestRemoting2","staticMethod"],[2,3]) ); exc( function() actx.call(["unit","TestRemoting","staticMethod2"],[2,3]) ); eq( actx.call(["fake","TestRemoting","staticMethod"],[2,3]), 5 ); } function doConnect( s : Socket, onResult : Bool -> Void ) { var me = this; #if flash9 var connected = false; s.addEventListener(flash.events.Event.CONNECT,function(e) { connected = true; me.doTestSocket(s); onResult(true); }); s.addEventListener(flash.events.SecurityErrorEvent.SECURITY_ERROR,function(e) { onResult(false); }); s.addEventListener(flash.events.Event.CLOSE,function(e) { if( !connected ) onResult(false); }); s.connect(HOST,PORT); #elseif (flash || js) s.onConnect = function(success) { if( success ) me.doTestSocket(s); onResult(success); }; s.connect(HOST,PORT); #elseif neko var ret = try { s.connect(new neko.net.Host(HOST),PORT); true; } catch( e : Dynamic ) false; if( ret ) doTestSocket(s); onResult(ret); #elseif php var ret = try { s.connect(new php.net.Host(HOST),PORT); true; } catch( e : Dynamic ) false; if( ret ) doTestSocket(s); onResult(ret); #end } function doTestSocket( s : Socket ) { #if (neko || php) var scnx = haxe.remoting.SyncSocketConnection.create(s,new haxe.remoting.Context()); doTestConnection(scnx); #else var scnx = haxe.remoting.SocketConnection.create(s,new haxe.remoting.Context()); doTestAsyncConnection(scnx); #end } function doTestConnection( cnx : haxe.remoting.Connection ) { eq( cnx.api.add.call([1,2]), 3 ); var strings = ["bla","\n","\r","\n\r","\t"," "," ","&","<",">"," ",">","
"]; for( s in strings ) { infos("using "+s); eq( cnx.api.id.call([s]), s ); eq( cnx.api.arr.call([[s,s,s]]), [s,s,s].join("#") ); } infos(null); eq( cnx.api.exc.call([null]), null ); exc( function() cnx.api.exc.call([5]) ); exc( function() cnx.api.call([]) ); exc( function() cnx.call([]) ); exc( function() cnx.api.unknown.call([]) ); exc( function() cnx.api.sub.add.call([1,2]) ); eq( cnx.apirec.sub.add.call([1,2]), 3 ); } function doTestAsyncConnection( cnx : haxe.remoting.AsyncConnection ) { var asyncExc = callback(asyncExc,cnx.setErrorHandler); async( cnx.api.add.call, [1,2], 3 ); var strings = ["bla","\n","\r","\n\r","\t"," "," ","&","<",">"," ",">","
"]; for( s in strings ) { async( cnx.api.id.call, [s], s ); async( cnx.api.arr.call, [[s,s,s]], [s,s,s].join("#") ); } async( cnx.api.exc.call, [null], null ); asyncExc( cnx.api.exc.call, [5] ); asyncExc( cnx.api.call, [] ); asyncExc( cnx.call, [] ); asyncExc( cnx.api.unknown.call, [] ); asyncExc( cnx.api.sub.add.call, [1,2] ); async( cnx.apirec.sub.add.call, [1,2], 3 ); } }