Mercurial > repos > nick > allele_counts
diff tests/run-tests.py @ 8:411adeff1eec draft
Handle "." sample columns, update tests to work with BIAS column.
author | nick |
---|---|
date | Tue, 23 Aug 2016 02:30:56 -0400 |
parents | 31361191d2d2 |
children | 6cc488e11544 |
line wrap: on
line diff
--- a/tests/run-tests.py Wed Dec 09 11:37:02 2015 -0500 +++ b/tests/run-tests.py Tue Aug 23 02:30:56 2016 -0400 @@ -3,6 +3,7 @@ import sys import subprocess +SCRIPT_NAME = 'allele-counts.py' DATASETS = [ 'artificial', 'artificial-samples', @@ -16,15 +17,52 @@ OUT_EXT = '.csv.out' ARGS_KEY = '##comment="ARGS=' +XML = { + 'tests_start':' <tests>', + 'test_start': ' <test>', + 'input': ' <param name="input" value="tests/%s" />', + 'param': ' <param name="%s" value="%s" />', + 'output': ' <output name="output" file="tests/%s" />', + 'test_end': ' </test>', + 'tests_end': ' </tests>', +} +PARAMS = { + '-f':'freq', + '-c':'covg', + '-H':'header', + '-s':'stranded', + '-n':'nofilt', + '-r':'seed', +} +PARAM_ARG = { + '-f':True, + '-c':True, + '-H':False, + '-s':False, + '-n':False, + '-r':True, +} + def main(): - test_dir = os.path.dirname(os.path.relpath(sys.argv[0])) - if test_dir: - test_dir += os.sep + do_print_xml = False + if len(sys.argv) > 1: + if sys.argv[1] == '-x': + do_print_xml = True + else: + sys.stderr.write("Error: unrecognized option '"+sys.argv[1]+"'\n") + sys.exit(1) + + test_dir = os.path.dirname(os.path.realpath(__file__)) + script_dir = os.path.relpath(os.path.dirname(test_dir)) + test_dir = os.path.relpath(test_dir) + + if do_print_xml: + print XML.get('tests_start') for dataset in DATASETS: - infile = test_dir+dataset+IN_EXT - outfile = test_dir+dataset+OUT_EXT + infile = os.path.join(test_dir, dataset+IN_EXT) + outfile = os.path.join(test_dir, dataset+OUT_EXT) if not os.path.exists(infile): sys.stderr.write("Error: file not found: "+infile+"\n") @@ -34,11 +72,51 @@ continue options = read_options(infile) - script_cmd = 'allele-counts.py '+options+' -i '+infile - bash_cmd = 'diff '+outfile+' <('+script_cmd+')' - # print infile+":" - print script_cmd - subprocess.call(['bash', '-c', bash_cmd]) + if do_print_xml: + print_xml(infile, outfile, options, XML, PARAMS, PARAM_ARG) + else: + run_tests(infile, outfile, options, script_dir) + + if do_print_xml: + print XML.get('tests_end') + + +def run_tests(infile, outfile, options, script_dir): + script_cmd = os.path.join(script_dir, SCRIPT_NAME)+' '+options+' -i '+infile + bash_cmd = 'diff '+outfile+' <('+script_cmd+')' + print script_cmd + subprocess.call(['bash', '-c', bash_cmd]) + + +def print_xml(infile, outfile, options_str, xml, params, param_arg): + infile = os.path.basename(infile) + outfile = os.path.basename(outfile) + + options = options_str.split() # on whitespace + + print xml.get('test_start') + print xml.get('input') % infile + + # read in options one at a time, print <param> line + i = 0 + while i < len(options): + opt = options[i] + if not params.has_key(opt) or not param_arg.has_key(opt): + sys.stderr.write("Error: unknown option '"+opt+"' in ARGS list in file " + +infile+"\n") + sys.exit(1) + # takes argument + if param_arg[opt]: + i+=1 + arg = options[i] + print xml.get('param') % (params[opt], arg) + # no argument (boolean) + else: + print xml.get('param') % (params[opt], 'true') + i+=1 + + print xml.get('output') % outfile + print xml.get('test_end') def read_options(infile):