Hi Julian,
I've made the changes as you suggested.
Regards,
Chris
[[[
Make it easy to (re)run specific tests on windows by adding a --test/-t
option. The tests can also specify specific test number(s) to run.
* win-tests.py
(_usage_exit): Add the --test/-t option to the help.
(tests_to_run): New. List of tests to be run by the TestHarness.
* build/run_tests.py
(_run_test): Break the progname at a '#' and use the rhs as a list of
test numbers to run.
]]]
Index: win-tests.py
===================================================================
--- win-tests.py (revision 897802)
+++ win-tests.py (working copy)
@@ -61,6 +61,9 @@
print(" -v, --verbose : talk more")
print(" -f, --fs-type=type : filesystem type to use (fsfs is default)")
print(" -c, --cleanup : cleanup after running a test")
+ print(" -t, --test=TEST : Run the TEST test (all is default); use")
+ print(" TEST#n to run a particular test number,")
+ print(" multiples also accepted e.g. '2,4-7'")
print(" --svnserve-args=list : comma-separated list of arguments for")
print(" svnserve")
@@ -107,9 +110,9 @@
dll_basename = section.name + "-" + str(gen_obj.version) + ".dll"
svn_dlls.append(os.path.join("subversion", section.name, dll_basename))
-opts, args = my_getopt(sys.argv[1:], 'hrdvcpu:f:',
- ['release', 'debug', 'verbose', 'cleanup', 'url=',
- 'svnserve-args=', 'fs-type=', 'asp.net-hack',
+opts, args = my_getopt(sys.argv[1:], 'hrdvct:pu:f:',
+ ['release', 'debug', 'verbose', 'cleanup', 'test=',
+ 'url=', 'svnserve-args=', 'fs-type=', 'asp.net-hack',
'httpd-dir=', 'httpd-port=', 'httpd-daemon',
'httpd-server', 'http-library=', 'help',
'fsfs-packing', 'fsfs-sharding=',
@@ -137,6 +140,7 @@
fsfs_packing = None
server_minor_version = None
config_file = None
+tests_to_run = []
for opt, val in opts:
if opt in ('-h', '--help'):
@@ -149,6 +153,8 @@
verbose = 1
elif opt in ('-c', '--cleanup'):
cleanup = 1
+ elif opt in ('-t', '--test'):
+ tests_to_run.append(val)
elif opt in ['-r', '--release']:
objdir = 'Release'
elif opt in ['-d', '--debug']:
@@ -599,6 +605,32 @@
if daemon:
daemon.start()
+# Find the full path and filename of any test that is specified just by
+# its base name.
+if len(tests_to_run) != 0:
+ tests = []
+ for t in tests_to_run:
+ tns = None
+ if '#' in t:
+ t, tns = t.split('#')
+
+ test = [x for x in all_tests if x.split('/')[-1] == t]
+ if not test and not (t.endswith('-test.exe') or t.endswith('_tests.py')):
+ # The lengths of '-test.exe' and of '_tests.py' are both 9.
+ test = [x for x in all_tests if x.split('/')[-1][:-9] == t]
+
+ if not test:
+ print("Skipping test '%s', test not found." % t)
+ elif tns:
+ tests.append('%s#%s' % (test[0], tns))
+ else:
+ tests.extend(test)
+
+ tests_to_run = tests
+else:
+ tests_to_run = all_tests
+
+
print('Testing %s configuration on %s' % (objdir, repo_loc))
sys.path.insert(0, os.path.join(abs_srcdir, 'build'))
import run_tests
@@ -612,7 +644,7 @@
old_cwd = os.getcwd()
try:
os.chdir(abs_builddir)
- failed = th.run(all_tests)
+ failed = th.run(tests_to_run)
except:
os.chdir(old_cwd)
raise
Index: build/run_tests.py
===================================================================
--- build/run_tests.py (revision 897802)
+++ build/run_tests.py (working copy)
@@ -216,12 +216,16 @@
else:
log = sys.stdout
+ test_nums = None
+ if '#' in prog:
+ prog, test_nums = prog.split('#')
+
progdir, progbase = os.path.split(prog)
if self.log:
# Using write here because we don't want even a trailing space
test_info = '%s [%d/%d]' % (progbase, test_nr + 1, total_tests)
- sys.stdout.write('Running all tests in %s' % (test_info, ))
- sys.stdout.write('.'*(35 - len(test_info)))
+ sys.stdout.write('Running tests in %s' % (test_info, ))
+ sys.stdout.write('.'*(40 - len(test_info)))
log.write('START: %s\n' % progbase)
log.flush()
@@ -268,6 +272,10 @@
if self.fsfs_packing is not None:
cmdline.append('--fsfs-packing')
+ if test_nums:
+ test_nums = test_nums.split(',')
+ cmdline.extend(test_nums)
+
old_cwd = os.getcwd()
try:
os.chdir(progdir)