17db96d56Sopenharmony_ci"""Support functions for testing scripts in the Tools directory.""" 27db96d56Sopenharmony_ciimport contextlib 37db96d56Sopenharmony_ciimport importlib 47db96d56Sopenharmony_ciimport os.path 57db96d56Sopenharmony_ciimport unittest 67db96d56Sopenharmony_cifrom test import support 77db96d56Sopenharmony_cifrom test.support import import_helper 87db96d56Sopenharmony_ci 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ciif support.check_sanitizer(address=True, memory=True): 117db96d56Sopenharmony_ci # bpo-46633: Skip the test because it is too slow when Python is built 127db96d56Sopenharmony_ci # with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions. 137db96d56Sopenharmony_ci raise unittest.SkipTest("test too slow on ASAN/MSAN build") 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ci 167db96d56Sopenharmony_ciif not support.has_subprocess_support: 177db96d56Sopenharmony_ci raise unittest.SkipTest("test module requires subprocess") 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci 207db96d56Sopenharmony_cibasepath = os.path.normpath( 217db96d56Sopenharmony_ci os.path.dirname( # <src/install dir> 227db96d56Sopenharmony_ci os.path.dirname( # Lib 237db96d56Sopenharmony_ci os.path.dirname( # test 247db96d56Sopenharmony_ci os.path.dirname(__file__))))) # test_tools 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_citoolsdir = os.path.join(basepath, 'Tools') 277db96d56Sopenharmony_ciscriptsdir = os.path.join(toolsdir, 'scripts') 287db96d56Sopenharmony_ci 297db96d56Sopenharmony_cidef skip_if_missing(tool=None): 307db96d56Sopenharmony_ci if tool: 317db96d56Sopenharmony_ci tooldir = os.path.join(toolsdir, tool) 327db96d56Sopenharmony_ci else: 337db96d56Sopenharmony_ci tool = 'scripts' 347db96d56Sopenharmony_ci tooldir = scriptsdir 357db96d56Sopenharmony_ci if not os.path.isdir(tooldir): 367db96d56Sopenharmony_ci raise unittest.SkipTest(f'{tool} directory could not be found') 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci@contextlib.contextmanager 397db96d56Sopenharmony_cidef imports_under_tool(name, *subdirs): 407db96d56Sopenharmony_ci tooldir = os.path.join(toolsdir, name, *subdirs) 417db96d56Sopenharmony_ci with import_helper.DirsOnSysPath(tooldir) as cm: 427db96d56Sopenharmony_ci yield cm 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_cidef import_tool(toolname): 457db96d56Sopenharmony_ci with import_helper.DirsOnSysPath(scriptsdir): 467db96d56Sopenharmony_ci return importlib.import_module(toolname) 477db96d56Sopenharmony_ci 487db96d56Sopenharmony_cidef load_tests(*args): 497db96d56Sopenharmony_ci return support.load_package_tests(os.path.dirname(__file__), *args) 50