def test_main_one(self):
 
     print ( '====================run-ways====================' )
     t0 = time.clock()
 
     runWaysDatabase = RunWayDataBase()
     if runWaysDatabase.read():
         print ( 'runways DB correctly read' )
     
     t1 = time.clock()
     print ( 'time spent= {0:.2f} seconds'.format(t1-t0) )
     
     print ( '====================run-ways====================' )
 
     print ( runWaysDatabase.findAirportRunWays('LFPG') )
     t2 = time.clock()
     print ('time spent= {0:.2f} seconds'.format(t2-t1) )
     
 
     print ( '====================run-ways get filtered run ways====================' )
     print ( runWaysDatabase.getFilteredRunWays('LFML') )
     
     print ( '====================run-ways get filtered run ways====================' )
     print ( runWaysDatabase.getFilteredRunWays('LFBO') )
     
     print ( '====================run-ways get filtered run ways====================' )
     print ( runWaysDatabase.findAirportRunWays('LFBO') )
     
     
     print ( '====================run-ways get filtered run ways====================' )
     runway = runWaysDatabase.getFilteredRunWays('EGLL') 
     print ( runway )
     
     print ( '====================run-ways get filtered run ways====================' )
     #print 'number of runways: ' + str(len(runWaysDatabase.getRunWays('LFPG')))
     runway = runWaysDatabase.getFilteredRunWays(airportICAOcode = 'LFPG', runwayName  = '27L')
     print ( runway )
     
     print ( '====================run-ways get filtered run ways====================' )
     runway = runWaysDatabase.getFilteredRunWays(airportICAOcode = 'KJFK', runwayName  = '31L')
     print ( runway )
     
     print ( '====================run-ways get filtered run ways====================' )
 
     runway = runWaysDatabase.getFilteredRunWays(airportICAOcode = 'KLAX', runwayName  = '06L')
     print ( runway )
     
     for ICAOcode in ['LFPG', 'LFPO', 'LFBO', 'LFML', 'LFST', 'KJFK', 'SBGL', 'LFBD']:
         
         print ( '====================run-ways get filtered run ways====================' )
 
         tStart = time.clock()
         print ( runWaysDatabase.findAirportRunWays(ICAOcode) )
         tEnd = time.clock()
         print ( 'icao= {0} - duration= {1:.2f} seconds'.format(ICAOcode, (tEnd-tStart)) )
 #     print '====================run-ways===================='
 #     for runway in runWaysDatabase.getRunWays():
 #         print runway.getAirportICAOcode() + '-' + runway.getName()
         
     print ( '====================run-ways====================' )
 #     for runway in runWaysDatabase.getRunWays():
 #         print runway
 
     print ( '====================run-ways get filtered run ways====================' )
 
     print ( runWaysDatabase.findAirportRunWays('LPPT') )
    def test_route(self):
    
#     import sys
#     temp = sys.stdout #store original stdout object for later
#     sys.stdout = open('log.txt','w') #redirect all prints to this log file

        wayPointsDb = WayPointsDatabase()
        assert wayPointsDb.read()
            
        t0 = time.clock()
        print ' ========== Airports Direct Route testing ======= '
        
        airportsDb = AirportsDatabase()
        assert  airportsDb.read()
        t1 = time.clock()
        print ' time to read airports database= {0:.2f} seconds'.format(t1-t0)
        
        t2 = time.clock()
        runwaysDb = RunWayDataBase()
        assert runwaysDb.read()
        print ' time to read run-way database= {0:.2f} seconds'.format(t2-t1)
        
        print ' ========== Airports Direct Route testing ======= '
        departureCountry = 'Japan'
        departureCountry = 'United Kingdom'
        departureCountry = 'France'
        departureCountry = 'United States'
        arrivalCountry = 'Canada'
        arrivalCountry = 'France' 
        arrivalCountry = 'United States' 
        for departureAirport in  airportsDb.getAirportsFromCountry(Country = departureCountry):
            departureAirportICAOcode = departureAirport.getICAOcode()
            
            departureRunwayName = ''
            departureRunwayFound = False
            
            for runwayName in runwaysDb.findAirportRunWays(airportICAOcode = departureAirportICAOcode, 
                                                           runwayLengthFeet = 11000.0):
                if not(runwaysDb.getFilteredRunWays(
                                                    airportICAOcode = departureAirportICAOcode, 
                                                    runwayName = runwayName) is None):
                    departureRunwayName  = runwayName
                    departureRunwayFound = True
                    break
                
            if departureRunwayFound:
                
                for arrivalAirport in airportsDb.getAirportsFromCountry(Country = arrivalCountry):
                    
                    arrivalRunwayName = ''
                    arrivalRunwayFound = False
                    arrivalAirportICAOcode =  arrivalAirport.getICAOcode()
                    for runwayName in runwaysDb.findAirportRunWays(airportICAOcode = arrivalAirportICAOcode, 
                                                               runwayLengthFeet = 11000.0):
                        if not(runwaysDb.getFilteredRunWays(
                                                        airportICAOcode = arrivalAirportICAOcode, 
                                                        runwayName = runwayName) is None):
                            arrivalRunwayName = runwayName
                            arrivalRunwayFound = True
                            break
                    ''' we have a pair of airports '''
                    
                    if departureRunwayFound and arrivalRunwayFound:
                        distanceMeters = departureAirport.getDistanceMetersTo(arrivalAirport)
                        if  distanceMeters > 300000.0:
                            print ' ========== Airports Direct Route testing ======= '
                            print '{0} - {1} - distance  = {2} meters'.format(departureAirport.getName(), arrivalAirport.getName(), distanceMeters)
                
                            print departureAirport
                            print arrivalAirport
                            routeFinder = RouteFinder()
                            if routeFinder.isConnected():    
                                RFL = 'FL390'
                        
                                if routeFinder.findRoute(departureAirport.getICAOcode(), arrivalAirport.getICAOcode(), RFL):
                                    routeList = routeFinder.getRouteAsList()
                                    print routeList
                                    routeFinder.insertWayPointsInDatabase(wayPointsDb)
                
                                    strRoute = 'ADEP/' + departureAirport.getICAOcode() + '/' + departureRunwayName + '-'
                                    for fix in routeList:    
                                        strRoute += fix['Name'] + '-'
                                    strRoute += 'ADES/' + arrivalAirport.getICAOcode() + '/' + arrivalRunwayName
                                    
                                    print strRoute
                                    
                                    flightPath = FlightPath(route = strRoute, 
                                                                aircraftICAOcode = 'B744',
                                                                RequestedFlightLevel = 390, 
                                                                cruiseMach = 0.92, 
                                                                takeOffMassKilograms = 280000.0)
        
                                
                                    print "=========== Flight Plan compute  =========== " 
                      
                                    t0 = time.clock()
                                    print 'time zero= ' + str(t0)
                                    lengthNauticalMiles = flightPath.computeLengthNauticalMiles()
                                    print 'flight path length= {0:.2f} nautics '.format(lengthNauticalMiles)
                                    flightPath.computeFlight(deltaTimeSeconds = 1.0)
                                    print 'simulation duration= ' + str(time.clock()-t0) + ' seconds'
                                    print "=========== Flight Plan create output files  =========== "
                                    flightPath.createFlightOutputFiles()
     
 print ( ' ========== Airports Direct Route testing ======= ' )
 departureCountry = 'Japan'
 departureCountry = 'United Kingdom'
 departureCountry = 'France'
 departureCountry = 'United States'
 arrivalCountry = 'Canada'
 arrivalCountry = 'France' 
 arrivalCountry = 'United States' 
 for departureAirport in  airportsDb.getAirportsFromCountry(Country = departureCountry):
         departureAirportICAOcode = departureAirport.getICAOcode()
         
         departureRunwayName = ''
         departureRunwayFound = False
         
         for runwayName in runwaysDb.findAirportRunWays(airportICAOcode = departureAirportICAOcode, 
                                                        runwayLengthFeet = 11000.0):
             if not(runwaysDb.getFilteredRunWays(
                                                 airportICAOcode = departureAirportICAOcode, 
                                                 runwayName = runwayName) is None):
                 departureRunwayName  = runwayName
                 departureRunwayFound = True
                 break
             
         if departureRunwayFound:
             
             for arrivalAirport in airportsDb.getAirportsFromCountry(Country = arrivalCountry):
                 
                 arrivalRunwayName = ''
                 arrivalRunwayFound = False
                 arrivalAirportICAOcode =  arrivalAirport.getICAOcode()
                 for runwayName in runwaysDb.findAirportRunWays(airportICAOcode = arrivalAirportICAOcode,