Source code for mlx.warnings.robot_checker

import sys

from junitparser import Error, Failure

from .junit_checker import JUnitChecker
from .warnings_checker import WarningsChecker


[docs]class RobotChecker(WarningsChecker): name = 'robot' checkers = [] @property def counted_warnings(self): ''' List: list of counted warnings (str) ''' all_counted_warnings = [] for checker in self.checkers: all_counted_warnings.extend(checker.counted_warnings) return all_counted_warnings
[docs] def get_minimum(self): ''' Gets the lowest minimum amount of warnings Returns: int: the lowest minimum for warnings ''' if self.checkers: return min(x.get_minimum() for x in self.checkers) return 0
[docs] def set_minimum(self, minimum): ''' Setter function for the minimum amount of warnings Args: minimum (int): minimum amount of warnings allowed ''' for checker in self.checkers: checker.set_minimum(minimum)
[docs] def get_maximum(self): ''' Gets the highest minimum amount of warnings Returns: int: the highest maximum for warnings ''' if self.checkers: return max(x.get_maximum() for x in self.checkers) return 0
[docs] def set_maximum(self, maximum): ''' Setter function for the maximum amount of warnings Args: maximum (int): maximum amount of warnings allowed ''' for checker in self.checkers: checker.set_maximum(maximum)
[docs] def check(self, content): ''' Function for counting the number of failures in a specific Robot Framework test suite Args: content (str): The content to parse ''' for checker in self.checkers: checker.check(content)
[docs] def return_count(self): ''' Getter function for the amount of warnings found Returns: int: Number of warnings found ''' self.count = 0 for checker in self.checkers: self.count += checker.return_count() return self.count
[docs] def return_check_limits(self): ''' Function for checking whether the warning count is within the configured limits Returns: int: 0 if the amount of warnings is within limits, the count of warnings otherwise (or 1 in case of a count of 0 warnings) ''' count = 0 for checker in self.checkers: if checker.name: print('Counted failures for test suite {!r}.'.format(checker.name)) else: print('Counted failures for all test suites.') count += checker.return_check_limits() return count
[docs] def parse_config(self, config): self.checkers = [] check_suite_name = config.get('check_suite_names', True) for suite_config in config['suites']: checker = RobotSuiteChecker(suite_config['name'], check_suite_name=check_suite_name, verbose=self.verbose) checker.parse_config(suite_config) self.checkers.append(checker)
[docs]class RobotSuiteChecker(JUnitChecker): def __init__(self, name, check_suite_name=False, **kwargs): ''' Constructor Args: name (str): Name of the test suite to check the results of check_suite_name (bool): Whether to raise an error when no test in suite with given name is found ''' super().__init__(**kwargs) self.name = name self.check_suite_name = check_suite_name self.is_valid_suite_name = False
[docs] def return_count(self): ''' Getter function for the amount of warnings found Returns: int: Number of warnings found ''' msg = "{} warnings found".format(self.count) if self.name: msg = "Suite {!r}: {}".format(self.name, msg) print(msg) return self.count
def _check_testcase(self, testcase): """ Handles the check of a test case element by checking if the result is a failure/error. If it is to be excluded by a configured regex, or the test case does not belong to the suite, 1 is returned. Otherwise, when in verbose mode, the suite name and test case name are printed. Args: testcase (junitparser.TestCase): Test case element to check for failure or error Returns: int: 1 if a failure/error is to be subtracted from the final count, 0 otherwise """ if testcase.classname.endswith(self.name): self.is_valid_suite_name = True return super()._check_testcase(testcase) return int(self.name and isinstance(testcase.result, (Failure, Error)))
[docs] def check(self, content): """ Function for counting the number of JUnit failures in a specific text The test cases with a ``classname`` that does not end with the ``name`` class attribute are ignored. Args: content (str): The content to parse Raises: SystemExit: No suite with name ``self.name`` found. Returning error code -1. """ super().check(content) if not self.is_valid_suite_name and self.check_suite_name: print('ERROR: No suite with name {!r} found. Returning error code -1.'.format(self.name)) sys.exit(-1)