package tests
{
    import mx.rpc.remoting.RemoteObject;
     import mx.controls.Alert;
    import mx.rpc.events.ResultEvent
    import mx.rpc.events.FaultEvent

    import mx.controls.List;

    public class ArrayOfPrimitivesTest
    {
        private var summaryObj:Array;
        private var remotePrimitiveTest:RemoteObject;
        private var application:Object;
        private var arrayObj:Array;
        
        public function ArrayOfPrimitivesTest(application:Object)
        {
            this.summaryObj = new Array();
            this.application = application;
            remotePrimitiveTest = new RemoteObject();
               remotePrimitiveTest.destination = "PrimitiveArrayTest";
               remotePrimitiveTest.addEventListener("fault", onFault);
               
               remotePrimitiveTest.echoIntArray.addEventListener("result", echoIntArray_Result);
               remotePrimitiveTest.echoLongArray.addEventListener("result", echoLongArray_Result);
               remotePrimitiveTest.echoShortArray.addEventListener("result", echoShortArray_Result);
               remotePrimitiveTest.echoDoubleArray.addEventListener("result", echoDoubleArray_Result);
               remotePrimitiveTest.echoByteArray.addEventListener("result", echoByteArray_Result);
               remotePrimitiveTest.echoBooleanArray.addEventListener("result", echoBooleanArray_Result);
               remotePrimitiveTest.echoFloatArray.addEventListener("result", echoFloatArray_Result);
               remotePrimitiveTest.echoEmptyArray.addEventListener("result", echoEmptyArray_Result);
               remotePrimitiveTest.echoNullArray.addEventListener("result", echoNullArray_Result);
               remotePrimitiveTest.getArrayObject.addEventListener("result", getArrayObject_Result);
        }
        
        public function onFault (event:FaultEvent):void 
        {
            Alert.show(event.fault.faultString, 'Error');
        }
        
        public function runPrimitiveArraysTests():void
        {
            summaryObj = new Array();
            
            arrayObj = ComplexType.getArray( 2 );
            remotePrimitiveTest.echoIntArray( arrayObj );
            remotePrimitiveTest.echoLongArray( arrayObj );
            remotePrimitiveTest.echoShortArray( arrayObj );
            remotePrimitiveTest.echoDoubleArray( arrayObj );
            remotePrimitiveTest.echoByteArray( arrayObj );    
            remotePrimitiveTest.echoBooleanArray( arrayObj ); 
            remotePrimitiveTest.echoFloatArray( arrayObj );
            remotePrimitiveTest.echoEmptyArray( new Array() );
            remotePrimitiveTest.echoNullArray( null );
            remotePrimitiveTest.getArrayObject( arrayObj );
        }
        
    private function echoIntArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoIntArray");
        /*
        var resultArray:Array = Array(event.result);
        var outcome:Boolean = resultArray.length == arrayObj.length;
        
        if( !outcome )
        {
          summaryObj.push( "failure: primitive array test - echoIntArray, arrays different length" );
          return;
        }
        
        for( var i:Number = 0; i < resultArray.length; i++ )
        {
            if( resultArray[i] != arrayObj[i] )
                outcome = false;
        }
        
        if( outcome )
          summaryObj.push( "success: primitive array test - echoIntArray" );
        else
            summaryObj.push( "failure: primitive array test - echoIntArray" );
            
          */
    }
    
    private function echoLongArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoLongArray");
        /*
        if( ObjectComparator.equals( event.result, arrayObj  ) )
          summaryObj.push( "success: primitive array test - echoLongArray" );
        else
            summaryObj.push( "failure: primitive array test - echoLongArray" );    
            */    
    }
    
    private function echoShortArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoShortArray");
        /*
        if( ObjectComparator.equals( event.result, arrayObj  ) )
          summaryObj.push( "success: primitive array test - echoShortArray" );
        else
            summaryObj.push( "failure: primitive array test - echoShortArray" );        
            */
    }
    
    private function echoDoubleArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoDoubleArray");
        /*
        if( ObjectComparator.equals( event.result, arrayObj  ) )
          summaryObj.push( "success: primitive array test - echoDoubleArray" );
        else
            summaryObj.push( "failure: primitive array test - echoDoubleArray" );        
            */
    }
    
    private function echoByteArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoByteArray");
        /*
        if( ObjectComparator.equals( event.result, arrayObj  ) )
          summaryObj.push( "success: primitive array test - echoByteArray" );
        else
            summaryObj.push( "failure: primitive array test - echoByteArray" );    
            */    
    }
    
    private function echoBooleanArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoBooleanArray");
        /*
        if( event.result.length == arrayObj.length )
          summaryObj.push( "success: primitive array test - echoBooleanArray" );
        else
            summaryObj.push( "failure: primitive array test - echoBooleanArray" );    
            */    
    }
    
    private function echoFloatArray_Result( event:ResultEvent ):void
    {
        testArray(event, "echoFloatArray");
        /*
        if( ObjectComparator.equals( event.result, arrayObj  ) )
          summaryObj.push( "success: primitive array test - echoFloatArray" );
        else
            summaryObj.push( "failure: primitive array test - echoFloatArray" );        
            */
    }

    private function getArrayObject_Result( event:ResultEvent ):void
    {
        testArray(event, "getArrayObject");
        /*
        if( ObjectComparator.equals( event.result, arrayObj  ) )
          summaryObj.push( "success: primitive array test - echoFloatArray" );
        else
            summaryObj.push( "failure: primitive array test - echoFloatArray" );        
            */
    }
    
    private function echoEmptyArray_Result( event:ResultEvent ):void
    {
        var resultArray:Array = event.result as Array;
        
        if(resultArray != null && resultArray.length == 0 )
          summaryObj.push( "success: primitive array test - echoEmptyArray" );
        else
            summaryObj.push( "failure: primitive array test - echoEmptyArray" );        
    
    }
    
    private function echoNullArray_Result( event:ResultEvent ):void
    {
        if( event.result == null )
          summaryObj.push( "success: primitive array test - echoNullArray" );
        else
            summaryObj.push( "failure: primitive array test - echoNullArray" );
            
          application.setSummary( summaryObj );        
    }
    
    public function testArray( event:ResultEvent, test:String ):void
    {
        var resultArray:Array = event.result as Array;
        var outcome:Boolean = resultArray.length == arrayObj.length;
        
        if( !outcome )
        {
          summaryObj.push( "failure: " + test + ", arrays different length, sent: " + arrayObj.length.toString() + " received: " + resultArray.length.toString() );
          return;
        }
        
        for( var i:Number = 0; i < resultArray.length; i++ )
        {
            if( resultArray[i] != arrayObj[i] )
                outcome = false;
        }
        
        if( outcome )
          summaryObj.push( "success: primitive array test - " + test  );
        else
            summaryObj.push( "failure: primitive array test - " + test );
    }
    
    }
}