| #!/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:]) |