def test_check_extraction_from_commandline_arguments_has_help_two_checkers_one_invalid( tmpdir ): """Ensure that checker finding and help extraction works for a provided checker.""" testargs = [os.getcwd()] with patch.object(sys, "argv", testargs): checker_file = tmpdir.mkdir("internal_checkers").join("check_testing.py") # this must be valid Python code because it will be loaded by pluginbase checker_file.write('"' 'a checker"' "") checker_directory = ( tmpdir.dirname + "/" + tmpdir.basename + "/" + "internal_checkers" ) checker = "check_CountCommits" assert len(tmpdir.listdir()) == 1 commandline_arguments = ["--checkerdir", checker_directory, checker] gg_arguments, remaining_arguments = arguments.parse(commandline_arguments) args_verified = arguments.verify(gg_arguments) assert args_verified is True found_check = checkers.get_chosen_check(gg_arguments) assert found_check == checker # ensure that get_checks_help does not try to create a help # message for an invalid check that does not have a get_parser function checker_source = checkers.get_source([checker_directory]) check_helps = checkers.get_checks_help(checker_source) assert check_helps != "" assert "CountCommits" in check_helps counted_newlines = check_helps.count("\n") assert counted_newlines > 0
def test_check_extraction_from_commandline_arguments_has_help_single_checker_filtered( ): """Ensure that checker finding and help extraction works for a single filtered check.""" testargs = [os.getcwd()] with patch.object(sys, "argv", testargs): checker = "ListChecks" commandline_arguments = [ "--checkerdir", "./gator/checks", "ListChecks", "--namecontains", "Exec", ] gg_arguments, remaining_arguments = arguments.parse( commandline_arguments) args_verified = arguments.verify(gg_arguments) assert args_verified is True found_check = checkers.get_chosen_check(gg_arguments) assert found_check == checker checker_source = checkers.get_source() check_helps = checkers.get_checks_help(checker_source, namecontains="Exec") assert check_helps != "" assert "Exec" in check_helps counted_newlines = check_helps.count("\n") assert counted_newlines > 0
def act(main_parsed_arguments, check_remaining_arguments): """Perform the action for this check.""" check_parsed_arguments = parse(check_remaining_arguments) # get the source of all the checkers available from either: # --> the internal directory of checkers (e.g., "./gator/checks") # --> the directory specified on the command-line external_checker_directory = checkers.get_checker_dir( main_parsed_arguments) checker_source = checkers.get_source([external_checker_directory]) # must filter the names of checks with check_parsed_arguments.namecontains filter # verification of the arguments is necessary because --namecontains is optional # and there is no suitable default value for this command-line argument if checkers.verify_arguments_not_none( [check_parsed_arguments, check_parsed_arguments.namecontains]): help_messages = checkers.get_checks_help( checker_source, namecontains=check_parsed_arguments.namecontains) # no need to filter the help menus based on name containment else: help_messages = checkers.get_checks_help(checker_source) # create a label that explains the meaning of the check label = "Find the available checks that match an optional pattern" # there were no checks that matched, which means: # --> only the label is display, without any help messages # --> the diagnostic should indicate that the search failed # --> the check "failed", ensuring that the diagnostic appears if help_messages is constants.markers.Nothing: help_messages = label diagnostic = "Could not find any matching checks" did_check_pass = False # there were checks that matched, which means: # --> the label is display, then newlines, and then all matching help messages # --> the diagnostic should not appear since the search succeeded else: # add a label to the first line of the help messages # then add a blank line and then add the messages themselves help_messages = (label + constants.markers.Newline + constants.markers.Newline + help_messages) # there is no diagnostic message because this check passed diagnostic = constants.markers.Nothing did_check_pass = True # use invoke to create a report that can be returned as output invoke.report_result(did_check_pass, help_messages, diagnostic) return [did_check_pass]
def print_help(self, status=1, message=None): """Print the standard help message and then list the checkers.""" # display the standard help message super().print_help() # Get all of the checks available through pluginbase. # Note that the "--checkdir" is not available because # when argparse recognizes "--help" the parse is not # completed. This means that this function can only # display those internal checks through pluginbase. checker_source = checkers.get_source() help_messages = checkers.get_checks_help( checker_source, indent=constants.markers.Indent) # display a blank line, a label, and then the collected # help messages from the internal checks through pluginbase display.line() display.line("internal checks:") display.line(help_messages)
def test_check_extraction_from_commandline_arguments_has_help_single_checker(): """Ensure that checker finding and help extraction works for a provided checker.""" testargs = [os.getcwd()] with patch.object(sys, "argv", testargs): checker = "check_CountCommits" commandline_arguments = [checker] gg_arguments, remaining_arguments = arguments.parse(commandline_arguments) args_verified = arguments.verify(gg_arguments) assert args_verified is True found_check = checkers.get_chosen_check(gg_arguments) assert found_check == checker checker_source = checkers.get_source() check_helps = checkers.get_checks_help(checker_source) assert check_helps != "" assert "CountCommits" in check_helps counted_newlines = check_helps.count("\n") assert counted_newlines > 0