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

    import mx.collections.ArrayCollection;

    public class PrimitiveTest
    {
        private var summaryObj:ArrayCollection;
        private var remotePrimitiveTest:RemoteObject;
        private var application:Object;
        
        private var date:Date = new Date();
        
        public function PrimitiveTest(application:Object)
        {
            this.application = application;
            remotePrimitiveTest = new RemoteObject();
               remotePrimitiveTest.destination = "PrimitiveTest";
               remotePrimitiveTest.addEventListener("fault", onFault);

               remotePrimitiveTest.unknownMethod.addEventListener("fault", unknownMethod_Fault);               
               remotePrimitiveTest.echoInt.addEventListener("result", echoInt_Result);
               remotePrimitiveTest.echoLong.addEventListener("result", echoLong_Result);
               remotePrimitiveTest.echoShort.addEventListener("result", echoShort_Result);
               remotePrimitiveTest.echoByte.addEventListener("result", echoByte_Result);
               remotePrimitiveTest.echoDouble.addEventListener("result", echoDouble_Result);
               remotePrimitiveTest.echoChar.addEventListener("result", echoChar_Result);
               remotePrimitiveTest.echoBoolean.addEventListener("result", echoBoolean_Result);
               remotePrimitiveTest.echoDate.addEventListener("result", echoDate_Result);
               remotePrimitiveTest.echoNull.addEventListener("result", echoNull_Result);
               remotePrimitiveTest.getDateTime.addEventListener("result", echoDateTime_Result);
        }
        
        public function onFault (event:FaultEvent):void 
        {
            Alert.show(event.fault.faultString, 'Error');
        }
        
        public function unknownMethod_Fault( event:FaultEvent ):void
        {
            summaryObj.addItem( "success: primitives test - expected unknownMethod fault" );        
        }
        
        public function runPrimitiveTests(log:ArrayCollection):void
        {
            summaryObj = log;
            

            remotePrimitiveTest.echoInt( 7 );
            remotePrimitiveTest.echoLong( 7777777 );
            remotePrimitiveTest.echoShort( 7 );
            remotePrimitiveTest.echoByte( 7 ); 
            remotePrimitiveTest.echoDouble( 7777.7777 );
            remotePrimitiveTest.echoChar( 'a' );
            remotePrimitiveTest.echoBoolean( true );
            remotePrimitiveTest.echoDate( new Date( 2004, 1, 1, 1, 1, 1, 1  ) );
            //remotePrimitiveTest.echoNullableDate( new Date( 2004, 1, 1, 1, 1, 1, 1  ) );
            remotePrimitiveTest.echoNull( null );
            remotePrimitiveTest.getDateTime(date);//"2004-05-15 03:45:12"); 
            remotePrimitiveTest.unknownMethod();
        }

    private function echoDateTime_Result( event:ResultEvent ):void
    {
//        var date:Date = event.result as Date;
        var resultDate:Date = event.result as Date;
        if( resultDate.fullYear == date.fullYear && resultDate.month == date.month && resultDate.date == date.date && resultDate.hours == date.hours && resultDate.minutes == date.minutes && resultDate.seconds == date.seconds)
          summaryObj.addItem( "success: primitives test - echoDateTime" );
        else
            summaryObj.addItem( "failure: primitives test - echoDateTime" );
    }        

    private function echoInt_Result( event:ResultEvent ):void
    {
        if( event.result == 7 )
          summaryObj.addItem( "success: primitives test - echoInt" );
        else
            summaryObj.addItem( "failure: primitives test - echoInt" );
    }
    
    private function echoLong_Result( event:ResultEvent ):void
    {
        if( event.result == 7777777 )
          summaryObj.addItem( "success: primitives test - echoLong" );
        else
            summaryObj.addItem( "failure: primitives test - echoLong" );        
    }
    
    private function echoShort_Result( event:ResultEvent ):void
    {
        if( event.result == 7 )
          summaryObj.addItem( "success: primitives test - echoShort" );
        else
            summaryObj.addItem( "failure: primitives test - echoShort" );        
    }
    
    private function echoByte_Result( event:ResultEvent ):void
    {
        if( event.result == 7 )
          summaryObj.addItem( "success: primitives test - echoByte" );
        else
            summaryObj.addItem( "failure: primitives test - echoByte" );        
    }
    
    private function echoDouble_Result( event:ResultEvent ):void
    {
        if( event.result == 7777.7777 )
          summaryObj.addItem( "success: primitives test - echoDouble" );
        else
            summaryObj.addItem( "failure: primitives test - echoDouble" );        
        
    }
    
    private function echoChar_Result( event:ResultEvent ):void
    {
        if( event.result == 'a' )
          summaryObj.addItem( "success: primitives test - echoChar" );
        else
            summaryObj.addItem( "failure: primitives test - echoChar" );        
    }
    
    private function echoBoolean_Result( event:ResultEvent ):void
    {
        if( event.result )
          summaryObj.addItem( "success: primitives test - echoBoolean" );
        else
            summaryObj.addItem( "failure: primitives test - echoBoolean" );        
    }
    
    private function echoDate_Result( event:ResultEvent ):void
    {
        var dateObj:Date = new Date( 2004, 1, 1, 1, 1, 1, 1 );
        trace( event.result.getTime() );
        trace( dateObj.getTime() );
        
        
        if( event.result.getTime() == dateObj.getTime() )
          summaryObj.addItem( "success: primitives test - echoDate" );
        else
            summaryObj.addItem( "failure: primitives test - echoDate" );                
    }
    
    private function echoNullableDate_Result( event:ResultEvent ):void
    {
        var dateObj:Date = new Date( 2004, 1, 1, 1, 1, 1, 1 );
        trace( event.result.getTime() );
        trace( dateObj.getTime() );
        
        
        if( event.result.getTime() == dateObj.getTime() )
          summaryObj.addItem( "success: primitives test - echoNullableDate" );
        else
            summaryObj.addItem( "failure: primitives test - echoNullableDate " + event.result.getTime() + "   " +  dateObj.getTime() );                
    }    
    
    private function echoNull_Result( event:ResultEvent ):void
    {
        if( event.result == null )
          summaryObj.addItem( "success: primitives test - echoNull" );
        else
            summaryObj.addItem( "failure: primitives test - echoNull" );    
            
    }
    }
}