# HG changeset patch # User Oleg Oshmyan # Date 1264189704 0 # Node ID bddcc05aba59ba79168f40f8dccc021392299bfa # Parent 43ec211e2c597b3708bf2854bc60fdc66f9ccbef Finished path portability improvements diff -r 43ec211e2c59 -r bddcc05aba59 test.py --- a/test.py Fri Jan 22 19:27:20 2010 +0000 +++ b/test.py Fri Jan 22 19:48:24 2010 +0000 @@ -3,7 +3,7 @@ import os, sys, shutil, time, subprocess, filecmp, optparse, signal, tempfile, tarfile, zipfile -parser = optparse.OptionParser(version='test.py 1.20.0', usage='usage: %prog [options] [problem names] [[path/to/]solution-app] [test case numbers]\n\nTest case numbers can be specified in plain text or as a Python expression\nif there is only one positional argument.\n\nOnly problem names listed in testconf.py are recognized.') +parser = optparse.OptionParser(version='test.py 1.21.0 (SVN)', usage='usage: %prog [options] [problem names] [[path' + os.path.sep + 'to' + os.path.sep + ']solution-app] [test case numbers]\n\nTest case numbers can be specified in plain text or as a Python expression\nif there is only one positional argument.\n\nOnly problem names listed in testconf.py are recognized.') parser.add_option('-e', '--exclude', dest='exclude', action='append', help='test case number(s) to exclude, as a Python expression; multiple -e options can be supplied') parser.add_option('-c', '--cleanup', dest='clean', action='store_true', default=False, help='delete the copies of input/output files and exit') parser.add_option('-s', '--save-io', dest='erase', action='store_false', default=True, help='do not delete the copies of input/output files after the last test case; create copies of input files and store output in files even if the solution uses standard I/O; delete the stored input/output files if the solution uses standard I/O and the -c/--cleanup option is specified') @@ -19,7 +19,7 @@ globals1 = set(globals()) # Initialize some configuration variables with default values -tasknames = (os.curdir,) +tasknames = (os.path.curdir,) maxtime = 0 tests = () dummies = () @@ -88,7 +88,7 @@ except IOError, error: exc_info = sys.exc_info()[2] try: - execfile('tests/testconf.py') + execfile(os.path.join('tests', 'testconf.py')) except IOError: if not exectestconf_helper('testconf.py'): raise IOError, (error.errno, 'The configuration file is missing', error.filename), exc_info @@ -115,7 +115,7 @@ scoremaxoveralltasks = 0 ntasks = 0 nfulltasks = 0 -cwd = '' # At any time this is either '' or taskname + '/' +cwd = '' # At any time this is either '' or taskname if options.autotime: c = time.clock() @@ -185,15 +185,15 @@ return False def existstestcase(name): - if os.path.isfile('tests/' + taskname + '/' + name) or os.path.isfile('tests/' + name): + if os.path.isfile(os.path.join('tests', taskname, name)) or os.path.isfile(os.path.join('tests', name)): return True - if cwd and (os.path.isfile(oldcwd + '/tests/' + cwd + name) or os.path.isfile(oldcwd + '/tests/' + name)): + if cwd and (os.path.isfile(os.path.join(oldcwd, 'tests', cwd, name)) or os.path.isfile(os.path.join(oldcwd, 'tests', name))): return True - if existstestcase_helper(taskname + '/' + name) or existstestcase_helper(name): + if existstestcase_helper(os.path.join(taskname, name)) or existstestcase_helper(name): return True if cwd: os.chdir(oldcwd) - if existstestcase_helper(cwd + name) or existstestcase_helper(name): + if existstestcase_helper(os.path.join(cwd, name)) or existstestcase_helper(name): os.chdir(cwd) return True os.chdir(cwd) @@ -246,22 +246,22 @@ return None def opentestcase(name): - if os.path.isfile('tests/' + taskname + '/' + name): - return open('tests/' + taskname + '/' + name, 'rU') - elif os.path.isfile('tests/' + name): - return open('tests/' + name, 'rU') - f = opentestcase_helper(taskname + '/' + name) + if os.path.isfile(os.path.join('tests', taskname, name)): + return open(os.path.join('tests', taskname, name), 'rU') + elif os.path.isfile(os.path.join('tests', name)): + return open(os.path.join('tests', name), 'rU') + f = opentestcase_helper(os.path.join(taskname, name)) if not f: f = opentestcase_helper(name) if f: return f if cwd: - if os.path.isfile(oldcwd + '/tests/' + cwd + name): - return open(oldcwd + '/tests/' + cwd + name, 'rU') - elif os.path.isfile(oldcwd + '/tests/' + name): - return open(oldcwd + '/tests/' + name, 'rU') + if os.path.isfile(os.path.join(oldcwd, 'tests', cwd, name): + return open(os.path.join(oldcwd, 'tests', cwd, name), 'rU') + elif os.path.isfile(os.path.join(oldcwd, 'tests', name)): + return open(os.path.join(oldcwd, 'tests', name), 'rU') os.chdir(oldcwd) - f = opentestcase_helper(cwd + name) + f = opentestcase_helper(os.path.join(cwd, name)) if not f: f = opentestcase_helper(name) os.chdir(cwd) @@ -281,7 +281,7 @@ except KeyError: f.close() if os.path.isfile('tests.zip'): - if not target.startswith('/'): + if not os.path.isabs(target): f = zipfile.ZipFile('tests.zip') m = f.getinfo(name) try: @@ -293,8 +293,8 @@ f.close() else: oldcwd = os.getcwdu() - os.chdir('/') - f = zipfile.ZipFile(oldcwd + '/tests.zip') + os.chdir('/') # FIXME: portability? + f = zipfile.ZipFile(os.path.join(oldcwd, 'tests.zip')) try: m = f.getinfo(name) m.filename = target[1:] @@ -348,23 +348,23 @@ return False def copytestcase(name, target): - if os.path.isfile('tests/' + taskname + '/' + name): - shutil.copyfile('tests/' + taskname + '/' + name, target) + if os.path.isfile(os.path.join('tests', taskname, name)): + shutil.copyfile(os.path.join('tests', taskname, name), target) return - elif os.path.isfile('tests/' + name): - shutil.copyfile('tests/' + name, target) + elif os.path.isfile(os.path.join('tests', name)): + shutil.copyfile(os.path.join('tests', name), target) return - if copytestcase_helper(taskname + '/' + name, target) or copytestcase_helper(name, target): + if copytestcase_helper(os.path.join(taskname, name), target) or copytestcase_helper(name, target): return if cwd: - if os.path.isfile(oldcwd + '/tests/' + cwd + name): - shutil.copyfile(oldcwd + '/tests/' + cwd + name, target) + if os.path.isfile(os.path.join(oldcwd, 'tests', cwd, name)): + shutil.copyfile(os.path.join(oldcwd, 'tests', cwd, name), target) return - elif os.path.isfile(oldcwd + '/tests/' + name): - shutil.copyfile(oldcwd + '/tests/' + name, target) + elif os.path.isfile(os.path.join(oldcwd, 'tests', name)): + shutil.copyfile(os.path.join(oldcwd, 'tests', name), target) return os.chdir(oldcwd) - if copytestcase_helper(cwd + name, target) or copytestcase_helper(name, target): + if copytestcase_helper(os.path.join(cwd, name), target) or copytestcase_helper(name, target): os.chdir(cwd) return os.chdir(cwd) @@ -377,32 +377,32 @@ if os.path.isdir(taskname): os.chdir(taskname) if taskname != : - cwd = taskname + '/' + cwd = taskname try: execfile('testconf.py', globals()) return except IOError: pass if not cwd: - if os.path.isfile('tests/' + taskname + '/testconf.py'): - execfile('tests/' + taskname + '/testconf.py', globals()) + if os.path.isfile(os.path.join('tests', taskname, 'testconf.py')): + execfile(os.path.join('tests', taskname, 'testconf.py'), globals()) return - if os.path.isfile('tests/testconf.py'): - execfile('tests/testconf.py', globals()) + if os.path.isfile(os.path.join('tests', 'testconf.py')): + execfile(os.path.join('tests', 'testconf.py'), globals()) return - if exectestconf_helper(taskname + '/testconf.py') or exectestconf_helper('testconf.py'): + if exectestconf_helper(os.path.join(taskname, 'testconf.py')) or exectestconf_helper('testconf.py'): return if cwd: os.chdir(oldcwd) - if os.path.isfile('tests/' + cwd + 'testconf.py'): - execfile('tests/' + cwd + 'testconf.py', globals()) + if os.path.isfile(os.path.join('tests', cwd, 'testconf.py')): + execfile(os.path.join('tests', cwd, 'testconf.py'), globals()) os.chdir(cwd) return - if os.path.isfile('tests/testconf.py'): - execfile('tests/testconf.py', globals()) + if os.path.isfile(os.path.join('tests', 'testconf.py')): + execfile(os.path.join('tests', 'testconf.py'), globals()) os.chdir(cwd) return - if exectestconf_helper(cwd + 'testconf.py') or exectestconf_helper('testconf.py'): + if exectestconf_helper(os.path.join(cwd, 'testconf.py')) or exectestconf_helper('testconf.py'): os.chdir(cwd) return if os.path.isfile('testconf.py'): @@ -429,7 +429,7 @@ if len(tasknames) > 1: print taskname except Exception: - if taskname != os.curdir or ntasks: + if taskname != os.path.curdir or ntasks: print taskname try: del inname @@ -439,8 +439,8 @@ try: del ansname except NameError: pass - if not namedefined and taskname != os.curdir: - name = os.path + os.sep + taskname + if not namedefined and taskname != os.path.curdir: + name = os.path.join(os.path.curdir, taskname) for k in shared: g[k] = shared[k] @@ -603,7 +603,7 @@ # Windows doesn't like paths beginning with .\ and not ending with an extension name = os.path.normcase(name) - if name.startswith('.\\'): + if os.name == 'nt' and name.startswith('.\\'): name = name[2:] newpointmap = {}