diff --git a/Tools/autotest/autotest.py b/Tools/autotest/autotest.py index a2e16f9acc..55d2dc9a54 100755 --- a/Tools/autotest/autotest.py +++ b/Tools/autotest/autotest.py @@ -609,17 +609,37 @@ def run_tests(steps): return passed -def list_subtests(*args, **kwargs): - for vehicle in sorted(['Sub', 'Copter', 'Plane', 'Tracker', 'Rover', 'QuadPlane', 'BalanceBot', 'Helicopter']): + +vehicle_list = ['Sub', 'Copter', 'Plane', 'Tracker', 'Rover', 'QuadPlane', 'BalanceBot', 'Helicopter'] + + +def list_subtests(): + """Print the list of tests and tests description for each vehicle.""" + for vehicle in sorted(vehicle_list): tester_class = tester_class_map["test.%s" % vehicle] tester = tester_class("/bin/true", None) subtests = tester.tests() print("%s:" % vehicle) - for subtest in sorted(subtests, key=lambda x : x[0]): + for subtest in sorted(subtests, key=lambda x: x[0]): (name, description, function) = subtest print(" %s: %s" % (name, description)) print("") + +def list_subtests_for_vehicle(vehicle_type): + """Print the list of tests for a vehicle.""" + # Check that we aren't in a sub test + if "Test" in vehicle_type: + vehicle_type = re.findall('[A-Z][a-z0-9]*', vehicle_type)[0] + if vehicle_type in vehicle_list: + tester_class = tester_class_map["test.%s" % vehicle_type] + tester = tester_class("/bin/true", None) + subtests = tester.tests() + for subtest in sorted(subtests, key=lambda x: x[0]): + (name, _, _) = subtest + print("%s " % name, end='') + print("") # needed to clear the trailing % + if __name__ == "__main__": ''' main program ''' os.environ['PYTHONUNBUFFERED'] = '1' @@ -744,6 +764,21 @@ if __name__ == "__main__": help="force a specific AHRS type (e.g. 10 for SITL-ekf") parser.add_option_group(group_sim) + group_completion = optparse.OptionGroup(parser, "Completion helpers") + group_completion.add_option("--list-vehicles", + action='store_true', + default=False, + help='list available vehicles') + group_completion.add_option("--list-vehicles-test", + action='store_true', + default=False, + help='list available vehicle tester') + group_completion.add_option("--list-subtests-for-vehicle", + type='string', + default="", + help='list available subtests for a vehicle e.g Copter') + parser.add_option_group(group_completion) + opts, args = parser.parse_args() steps = [ @@ -842,6 +877,18 @@ if __name__ == "__main__": list_subtests() sys.exit(0) + if opts.list_subtests_for_vehicle: + list_subtests_for_vehicle(opts.list_subtests_for_vehicle) + sys.exit(0) + + if opts.list_vehicles_test: + print(' '.join(__bin_names.keys())) + sys.exit(0) + + if opts.list_vehicles: + print(' '.join(vehicle_list)) + sys.exit(0) + util.mkdir_p(buildlogs_dirpath()) lckfile = buildlogs_path('autotest.lck')