forked from mhammond/pywin32
-
Notifications
You must be signed in to change notification settings - Fork 0
/
pywin32_testall.py
80 lines (67 loc) · 3.17 KB
/
pywin32_testall.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
"""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...")