You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
3.3 KiB
88 lines
3.3 KiB
6 years ago
|
"""A test runner for pywin32"""
|
||
|
import sys
|
||
|
import os
|
||
|
import distutils.sysconfig
|
||
|
import win32api
|
||
|
|
||
|
# 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 = distutils.sysconfig.get_python_lib(plat_specific=1)
|
||
|
|
||
|
if hasattr(os, 'popen3'):
|
||
|
def run_test(script, cmdline_rest=""):
|
||
|
dirname, scriptname = os.path.split(script)
|
||
|
# some tests prefer to be run from their directory.
|
||
|
cwd = os.getcwd()
|
||
|
os.chdir(dirname)
|
||
|
try:
|
||
|
executable = win32api.GetShortPathName(sys.executable)
|
||
|
cmd = '%s "%s" %s' % (sys.executable, scriptname, cmdline_rest)
|
||
|
print(script)
|
||
|
stdin, stdout, stderr = os.popen3(cmd)
|
||
|
stdin.close()
|
||
|
while 1:
|
||
|
char = stderr.read(1)
|
||
|
if not char:
|
||
|
break
|
||
|
sys.stdout.write(char)
|
||
|
for line in stdout.readlines():
|
||
|
print(line)
|
||
|
stdout.close()
|
||
|
result = stderr.close()
|
||
|
if result is not None:
|
||
|
print("****** %s failed: %s" % (script, result))
|
||
|
finally:
|
||
|
os.chdir(cwd)
|
||
|
else:
|
||
|
# a subprocess version - but we prefer the popen one if we can as we can
|
||
|
# see test results as they are run (whereas this one waits until the test
|
||
|
# is finished...)
|
||
|
import subprocess
|
||
|
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]
|
||
|
sys.stdout.buffer.write(data)
|
||
|
if popen.returncode:
|
||
|
print("****** %s failed: %s" % (script, 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__':
|
||
|
# win32
|
||
|
maybes = [os.path.join(this_dir, "win32", "test"),
|
||
|
os.path.join(site_packages, "win32", "test"),
|
||
|
]
|
||
|
find_and_run(maybes, 'testall.py')
|
||
|
|
||
|
# win32com
|
||
|
maybes = [os.path.join(this_dir, "com", "win32com", "test"),
|
||
|
os.path.join(site_packages, "win32com", "test"),
|
||
|
]
|
||
|
find_and_run(maybes, 'testall.py', "2")
|
||
|
|
||
|
# adodbapi
|
||
|
maybes = [os.path.join(this_dir, "adodbapi", "tests"),
|
||
|
os.path.join(site_packages, "adodbapi", "tests"),
|
||
|
]
|
||
|
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) so don't bother trying to
|
||
|
# run 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...")
|