|  | #!/usr/bin/env python3 | 
|  | import sys, getopt | 
|  | from junit_xml import * | 
|  |  | 
|  |  | 
|  | def main(argv): | 
|  | inputfile = '' | 
|  | outputfile = '' | 
|  |  | 
|  | try: | 
|  | opts, args = getopt.getopt(argv,"hi:o:",["ifile=","ofile="]) | 
|  | except getopt.GetoptError: | 
|  | print ('openocd-to-junit.py -i <inputfile> -o <outputfile>') | 
|  | sys.exit(2) | 
|  | for opt, arg in opts: | 
|  | if opt == '-h': | 
|  | print ('openocd-to-junit.py -i <inputfile> -o <outputfile>') | 
|  | sys.exit() | 
|  | elif opt in ("-i", "--ifile"): | 
|  | inputfile = arg | 
|  | elif opt in ("-o", "--ofile"): | 
|  | outputfile = arg | 
|  |  | 
|  | test_strings = defaultdict(list) | 
|  | test_timestamps = {} | 
|  | current_testname = '' | 
|  |  | 
|  | test_cases = [] | 
|  | current_test_case = None | 
|  |  | 
|  | ocd_stdout = '' | 
|  |  | 
|  | with open(inputfile, 'r') as infile: | 
|  | for line in infile: | 
|  | if 'Info' in line and 'riscv013_test_compliance()' in line: | 
|  | print(line.split(' ')) | 
|  | current_testname = ' '.join(line.split(' ')[7:]) | 
|  | test_strings[current_testname].append(line) | 
|  | test_timestamps[current_testname] = line.split(' ')[3] | 
|  |  | 
|  | ocd_stdout += line | 
|  |  | 
|  | for k,v in test_strings.items(): | 
|  | current_test_case = TestCase(k, stdout=''.join(v), | 
|  | timestamp=test_timestamps[k]) | 
|  | error_msg = "" | 
|  | for line in v: | 
|  | if 'FAILED' in line: | 
|  | error_msg += line; | 
|  |  | 
|  | if error_msg: | 
|  | current_test_case.add_error_info(error_msg) | 
|  |  | 
|  | test_cases.append(current_test_case) | 
|  |  | 
|  | ts = TestSuite("openocd-compliance", test_cases, stdout=ocd_stdout) | 
|  | # pretty printing is on by default but can be disabled using prettyprint=False | 
|  | with open(outputfile, 'w') as outfile: | 
|  | TestSuite.to_file(outfile, [ts]) | 
|  |  | 
|  | if __name__ == "__main__": | 
|  | main(sys.argv[1:]) |