 9ce7c52a10
			
		
	
	
		9ce7c52a10
		
	
	
	
	
		
			
			This includes mainly fixes of string literals using f-strings or .format(...), as well as unpacking of list comprehensions.
		
			
				
	
	
		
			76 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import argparse
 | |
| import os
 | |
| import shutil
 | |
| import sys
 | |
| import unittest
 | |
| 
 | |
| import pytest
 | |
| 
 | |
| TOOLS_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 | |
| os.chdir(os.path.dirname(TOOLS_DIR))
 | |
| 
 | |
| 
 | |
| def handle_input_and_run_tests_for_package(package_name, path_list):
 | |
|     parser = argparse.ArgumentParser(description=f"Run tests for {package_name}.")
 | |
|     parser.add_argument(
 | |
|         "--coverage",
 | |
|         nargs="?",
 | |
|         const=True,
 | |
|         default=False,
 | |
|         help="compute test coverage (--coverage combine to combine with previous reports)",
 | |
|     )
 | |
|     parser.add_argument(
 | |
|         "--pytest", "-p", default=False, action="store_true", help="run tests with pytest"
 | |
|     )
 | |
|     parser.add_argument(
 | |
|         "--verbose",
 | |
|         "-v",
 | |
|         default=False,
 | |
|         action="store_true",
 | |
|         help="show verbose output (with pytest)",
 | |
|     )
 | |
|     options = parser.parse_args()
 | |
| 
 | |
|     test_session_title = f" Running tests for {package_name} "
 | |
|     header = test_session_title.center(shutil.get_terminal_size().columns, "#")
 | |
|     print(header)
 | |
| 
 | |
|     if options.coverage:
 | |
|         import coverage
 | |
| 
 | |
|         cov = coverage.Coverage(config_file="tools/.coveragerc")
 | |
|         if options.coverage == "combine":
 | |
|             cov.load()
 | |
|         cov.start()
 | |
| 
 | |
|     if options.pytest:
 | |
|         location_to_run_in = os.path.join(TOOLS_DIR, "..", *path_list)
 | |
|         paths_to_test = ["."]
 | |
|         pytest_options = [
 | |
|             "-s",  # show output from tests; this hides the progress bar though
 | |
|             "-x",  # stop on first test failure
 | |
|             "--ff",  # runs last failure first
 | |
|         ]
 | |
|         pytest_options += ["-v"] if options.verbose else []
 | |
|         os.chdir(location_to_run_in)
 | |
|         result = pytest.main(paths_to_test + pytest_options)
 | |
|         if result != 0:
 | |
|             sys.exit(1)
 | |
|         failures = False
 | |
|     else:
 | |
|         # Codecov seems to work only when using loader.discover. It failed to capture line executions
 | |
|         # for functions like loader.loadTestFromModule or loader.loadTestFromNames.
 | |
|         test_suites = unittest.defaultTestLoader.discover(os.path.join(*path_list))
 | |
|         suite = unittest.TestSuite(test_suites)
 | |
|         runner = unittest.TextTestRunner(verbosity=2)
 | |
|         result = runner.run(suite)
 | |
|         failures = result.failures
 | |
|         if result.failures or result.errors:
 | |
|             sys.exit(1)
 | |
| 
 | |
|     if not failures and options.coverage:
 | |
|         cov.stop()
 | |
|         cov.data_suffix = False  # Disable suffix so that filename is .coverage
 | |
|         cov.save()
 | |
|         cov.html_report()
 | |
|         print("HTML report saved in directory 'htmlcov'.")
 |