예제 #1
0
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
예제 #2
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
예제 #3
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]
예제 #4
0
 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)
예제 #5
0
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