Hi Chris, Just thought I would chase you up with this. Were you going to make the changes suggested by Julian - or were you happy for him to "tidy it up" and commit it?
Gavin "Beau" Baumanis On 04/01/2010, at 9:15 PM, Julian Foad wrote: > On Wed, 2009-12-09, Chris Foote wrote: >> I have incorporated both of Bert and Daniels suggestions into the >> patch (attached). > > Thanks Chris. Functionally it looks good. Just some mainly cosmetic > comments below. (One's actually bug but evidently in a bit of code that > doesn't matter much in practice.) > > I can make those changes myself and commit it if you like. Would that be > OK? > > >> This version of the patch adds the ability to specify one or more >> tests (and test numbers) to run on Windows. >> >> The --test option takes the name of the test executable (with or >> without the "-test.exe"/"_tests.py" part). It can also take test >> number(s) to be run in those tests by appending #NUM to the test >> name. >> >> e.g. win-tests.py --release --test=basic_tests.py -t client >> win-tests.py --release --test=basic_tests.py#4 -t client#2,4-6 >> >> 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 888785) >> +++ 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,31 @@ >> if daemon: >> daemon.start() >> >> +# If selected tests specified, only run them > > The block of code introduced by this comment is not deciding which tests > to run, it is finding the full path and filename to any tests that were > specified as just a base name. (It took me a little while to read > through it and discover that, which shows how helpful a comment could > be.) So maybe: > > # 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 (len(t) < 9 or >> + (t[-9] != '-test.exe' and t[-9] != '_tests.py')): > > That "t[-9] != ..." will always be true. I think you meant "t[-9:] ! > = ...". But why not lose all the "9"s and just write > > if not test and not t.endswith('-test.exe') and not > t.endswith('_tests.py'): > > instead? > >> + test = [x for x in all_tests if x.split('/')[-1][:-9] == t] > > I can't think of a really simple way to lose the "-9" here, so comment > it: > > # The lengths of '-test.exe' and of '_tests.py' are both 9. > >> + >> + 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 +643,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 888785) >> +++ build/run_tests.py (working copy) >> @@ -216,12 +216,22 @@ >> 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))) >> + if test_nums: >> + p = [x for x in ',-:' if x in test_nums] and 's' or '' >> + sys.stdout.write('Running test%s %s in %s' % (p, test_nums, >> test_info)) >> + sys.stdout.write('.'*(44 - len(p) - len(test_info) - >> len(test_nums))) >> + test_nums = test_nums.split(',') >> + else: >> + sys.stdout.write('Running all tests in %s' % (test_info, )) >> + sys.stdout.write('.'*(40 - len(test_info))) > > I don't think we need all this effort to try to print a neat one-line > summary that fits in a fixed-width column. It will still overflow, > depending on what list of test numbers I specify. Let's just change the > original "Running all tests in ..." to "Running tests in ..." and leave > it at that. > >> log.write('START: %s\n' % progbase) >> log.flush() >> @@ -268,6 +278,9 @@ >> if self.fsfs_packing is not None: >> cmdline.append('--fsfs-packing') >> >> + if test_nums: >> + cmdline.extend(test_nums) >> + >> old_cwd = os.getcwd() >> try: >> os.chdir(progdir) > > - Julian > >