|  | #!/usr/bin/env python3 | 
|  | # Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file | 
|  | # for details. All rights reserved. Use of this source code is governed by a | 
|  | # BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | import argparse | 
|  | import sys | 
|  |  | 
|  |  | 
|  | def ParseOptions(): | 
|  | parser = argparse.ArgumentParser( | 
|  | description = 'Find tests started but not done from bot stdout.') | 
|  | return parser.parse_known_args() | 
|  |  | 
|  | def get_started(stdout): | 
|  | # Lines look like: | 
|  | # Start executing test runBigInteger_ZERO_A01 [com.android.tools.r8.x.r8cf.math.BigInteger.ZERO.BigInteger_ZERO_A01] | 
|  | start_lines = [] | 
|  | for line in stdout: | 
|  | if line.startswith('Start executing test'): | 
|  | split = line.split(' ') | 
|  | start_lines.append('%s %s' % (split[3], split[4].strip())) | 
|  | return start_lines | 
|  |  | 
|  | def get_ended(stdout): | 
|  | # Lines look like: | 
|  | # Done executing test runBigInteger_subtract_A01 [com.android.tools.r8.x.r8cf.math.BigInteger.subtractLjava_math_BigInteger.BigInteger_subtract_A01] with result: SUCCESS | 
|  | done_lines = [] | 
|  | for line in stdout: | 
|  | if line.startswith('Done executing test'): | 
|  | split = line.split(' ') | 
|  | done_lines.append('%s %s' % (split[3], split[4].strip())) | 
|  | return done_lines | 
|  |  | 
|  | def Main(): | 
|  | (options, args) = ParseOptions() | 
|  | if len(args) != 1: | 
|  | raise "fail" | 
|  |  | 
|  | with open(args[0], 'r') as f: | 
|  | lines = f.readlines() | 
|  | started = get_started(lines) | 
|  | ended = get_ended(lines) | 
|  | for test in started: | 
|  | if not test in ended: | 
|  | print 'Test %s started but did not end' % test | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(Main()) |