package tests
{
    import mx.rpc.remoting.RemoteObject;
     import mx.controls.Alert;
    import mx.rpc.events.ResultEvent;
    import mx.rpc.events.FaultEvent;
    
    import weborb.tests.Employee;
    import flash.net.registerClassAlias;
    
    public class ComplexTypeTest
    {
        private var summaryObj:Array;
        private var complexType:ComplexType;
        private var remoteObject:RemoteObject;
        private var application:Object;
        
        private var testString:String = "Joe Orbman";
        
        public function ComplexTypeTest(application:Object)
        {
            //flash.net.registerClassAlias( "tests.ComplexType", tests.ComplexType );
            this.summaryObj = new Array();
            this.application = application;
            remoteObject = new RemoteObject();
               remoteObject.destination = "ComplexTypesTest";
               remoteObject.addEventListener("fault", onFault);
               
               remoteObject.echoComplexType.addEventListener("result", echoComplexType_Result);
               remoteObject.echoNullComplexType.addEventListener("result", echoNullComplexType_Result);
               remoteObject.getEmployee.addEventListener("result", getEmployee_Result);
               remoteObject.setEmployee.addEventListener("result", setEmployee_Result);
               remoteObject.getEnumType.addEventListener("result", getEnumType_Result);               
               this.complexType = new ComplexType( 2 );
        }
        
        public function onFault (event:FaultEvent):void 
        {
            Alert.show(event.fault.faultString, 'Error');
        }
        
        // ***************** named type declaration *************************

        public function runComplexTypeTests():void
        {
            summaryObj = new Array();
            remoteObject.echoComplexType( this.complexType );
            remoteObject.echoNullComplexType( null );
            remoteObject.getEmployee( testString );
            var emp:Employee = new Employee();
            emp.employeeName = testString;
            remoteObject.setEmployee( emp );
        }
        
    private function echoComplexType_Result( event:ResultEvent ):void
    {
        if( complexType.equals( event.result ) )
          summaryObj.push( "success: complex type test - echoComplexType" );
        else
            summaryObj.push( "failure: complex type test - echoComplexType" );
          application.setSummary( summaryObj );    
    }
    
    private function echoNullComplexType_Result( event:ResultEvent ):void
    {
        if( event.result == null )
          summaryObj.push( "success: complex type test - echoNullComplexType" );
        else
            summaryObj.push( "failure: complex type test - echoNullComplexType" );        
    }

    public function getEnumType_Result( event:ResultEvent ):void
    {
        Alert.show( event.result.toString() );
    }
    
    public function getEmployee_Result( event:ResultEvent ):void
    {
        //Alert.show(event.result.toString(), 'Debug');
        //var employee:Employee = event.result as Employee;
        
        if( event.result.employeeName == testString )
          summaryObj.push( "success: complex type test - getEmployee" );
        else
            summaryObj.push( "failure: complex type test - getEmployee" );    
            
      application.setSummary( summaryObj );    
    }    
    
    private function setEmployee_Result( event:ResultEvent ):void
    {
        if( event.result )
          summaryObj.push( "success: complex type test - setEmployee" );
        else
            summaryObj.push( "failure: complex type test - setEmployee" );
            
          application.setSummary( summaryObj );        
    }
    }
}