1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- """A test runner for pywin32"""
- import sys
- import os
- import site
- import subprocess
- # locate the dirs based on where this script is - it may be either in the
- # source tree, or in an installed Python 'Scripts' tree.
- this_dir = os.path.dirname(__file__)
- site_packages = [site.getusersitepackages(), ] + site.getsitepackages()
- # Run a test using subprocess and wait for the result.
- # If we get an returncode != 0, we know that there was an error.
- def run_test(script, cmdline_rest=""):
- dirname, scriptname = os.path.split(script)
- # some tests prefer to be run from their directory.
- cmd = [sys.executable, "-u", scriptname] + cmdline_rest.split()
- print(script)
- popen = subprocess.Popen(cmd, shell=True, cwd=dirname,
- stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
- data = popen.communicate()[0]
- if sys.version_info > (3,):
- sys.stdout.write(data.decode('latin-1'))
- else:
- sys.stdout.write(data)
- sys.stdout.flush()
- if popen.returncode:
- print("****** %s failed: %s" % (script, popen.returncode))
- sys.exit(popen.returncode)
- def find_and_run(possible_locations, script, cmdline_rest=""):
- for maybe in possible_locations:
- if os.path.isfile(os.path.join(maybe, script)):
- run_test(os.path.abspath(os.path.join(maybe, script)), cmdline_rest)
- break
- else:
- raise RuntimeError("Failed to locate the test script '%s' in one of %s"
- % (script, possible_locations))
- if __name__ == '__main__':
- import argparse
- code_directories = [this_dir] + site_packages
- parser = argparse.ArgumentParser(description="A script to trigger tests in all subprojects of PyWin32.")
- parser.add_argument("-no-user-interaction",
- default=False,
- action='store_true',
- help="Run all tests without user interaction")
- parser.add_argument("-skip-adodbapi",
- default=False,
- action='store_true',
- help="Skip the adodbapi tests; useful for CI where there's no provider")
- args = parser.parse_args()
- # win32
- maybes = [os.path.join(directory, "win32", "test") for directory in code_directories]
- command = ('testall.py', )
- if args.no_user_interaction:
- command += ("-no-user-interaction", )
- find_and_run(maybes, *command)
- # win32com
- maybes = [os.path.join(directory, "win32com", "test") for directory in [os.path.join(this_dir, "com"), ] + site_packages]
- find_and_run(maybes, 'testall.py', "2")
- # adodbapi
- if not args.skip_adodbapi:
- maybes = [os.path.join(directory, "adodbapi", "test") for directory in code_directories]
- find_and_run(maybes, 'adodbapitest.py')
- # This script has a hard-coded sql server name in it, (and markh typically
- # doesn't have a different server to test on) but there is now supposed to be a server out there on the Internet
- # just to run these tests, so try it...
- find_and_run(maybes, 'test_adodbapi_dbapi20.py')
- if sys.version_info > (3,):
- print("** The tests have some issues on py3k - not all failures are a problem...")
|