def visit(prefix, dir, names): """Visitor function for os.path.walk(path, visit, arg).""" dir_components = set(dir.split(os.sep)) excluded_components = set(['.svn', '.git']) if dir_components.intersection(excluded_components): return # Gather all the Python test file names that follow the Test*.py pattern. python_test_files = [ name for name in names if name.endswith('.py') and name.startswith(prefix) ] # Visit all the python test files. for name in python_test_files: try: # Ensure we error out if we have multiple tests with the same # base name. # Future improvement: find all the places where we work with base # names and convert to full paths. We have directory structure # to disambiguate these, so we shouldn't need this constraint. if name in configuration.all_tests: raise Exception("Found multiple tests with the name %s" % name) configuration.all_tests.add(name) # Run the relevant tests in the python file. visit_file(dir, name) except Exception as ex: # Convert this exception to a test event error for the file. test_filename = os.path.abspath(os.path.join(dir, name)) if configuration.results_formatter_object is not None: # Grab the backtrace for the exception. import traceback backtrace = traceback.format_exc() # Generate the test event. configuration.results_formatter_object.handle_event( EventBuilder.event_for_job_test_add_error( test_filename, ex, backtrace)) raise
def visit(prefix, dir, names): """Visitor function for os.path.walk(path, visit, arg).""" dir_components = set(dir.split(os.sep)) excluded_components = set(['.svn', '.git']) if dir_components.intersection(excluded_components): return # Gather all the Python test file names that follow the Test*.py pattern. python_test_files = [ name for name in names if name.endswith('.py') and name.startswith(prefix)] # Visit all the python test files. for name in python_test_files: try: # Ensure we error out if we have multiple tests with the same # base name. # Future improvement: find all the places where we work with base # names and convert to full paths. We have directory structure # to disambiguate these, so we shouldn't need this constraint. if name in configuration.all_tests: raise Exception("Found multiple tests with the name %s" % name) configuration.all_tests.add(name) # Run the relevant tests in the python file. visit_file(dir, name) except Exception as ex: # Convert this exception to a test event error for the file. test_filename = os.path.abspath(os.path.join(dir, name)) if configuration.results_formatter_object is not None: # Grab the backtrace for the exception. import traceback backtrace = traceback.format_exc() # Generate the test event. configuration.results_formatter_object.handle_event( EventBuilder.event_for_job_test_add_error( test_filename, ex, backtrace)) raise