xref: /aosp_15_r20/external/libvpx/test/android/scrape_gtest_log.py (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
1*fb1b10abSAndroid Build Coastguard Worker# Copyright (c) 2014 The WebM project authors. All Rights Reserved.
2*fb1b10abSAndroid Build Coastguard Worker#
3*fb1b10abSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license
4*fb1b10abSAndroid Build Coastguard Worker# that can be found in the LICENSE file in the root of the source
5*fb1b10abSAndroid Build Coastguard Worker# tree. An additional intellectual property rights grant can be found
6*fb1b10abSAndroid Build Coastguard Worker# in the file PATENTS.  All contributing project authors may
7*fb1b10abSAndroid Build Coastguard Worker# be found in the AUTHORS file in the root of the source tree.
8*fb1b10abSAndroid Build Coastguard Worker
9*fb1b10abSAndroid Build Coastguard Worker"""Standalone script which parses a gtest log for json.
10*fb1b10abSAndroid Build Coastguard Worker
11*fb1b10abSAndroid Build Coastguard WorkerJson is returned returns as an array.  This script is used by the libvpx
12*fb1b10abSAndroid Build Coastguard Workerwaterfall to gather json results mixed in with gtest logs.  This is
13*fb1b10abSAndroid Build Coastguard Workerdubious software engineering.
14*fb1b10abSAndroid Build Coastguard Worker"""
15*fb1b10abSAndroid Build Coastguard Worker
16*fb1b10abSAndroid Build Coastguard Workerimport getopt
17*fb1b10abSAndroid Build Coastguard Workerimport json
18*fb1b10abSAndroid Build Coastguard Workerimport os
19*fb1b10abSAndroid Build Coastguard Workerimport re
20*fb1b10abSAndroid Build Coastguard Workerimport sys
21*fb1b10abSAndroid Build Coastguard Worker
22*fb1b10abSAndroid Build Coastguard Worker
23*fb1b10abSAndroid Build Coastguard Workerdef main():
24*fb1b10abSAndroid Build Coastguard Worker  if len(sys.argv) != 3:
25*fb1b10abSAndroid Build Coastguard Worker    print "Expects a file to write json to!"
26*fb1b10abSAndroid Build Coastguard Worker    exit(1)
27*fb1b10abSAndroid Build Coastguard Worker
28*fb1b10abSAndroid Build Coastguard Worker  try:
29*fb1b10abSAndroid Build Coastguard Worker    opts, _ = \
30*fb1b10abSAndroid Build Coastguard Worker        getopt.getopt(sys.argv[1:], \
31*fb1b10abSAndroid Build Coastguard Worker                      'o:', ['output-json='])
32*fb1b10abSAndroid Build Coastguard Worker  except getopt.GetOptError:
33*fb1b10abSAndroid Build Coastguard Worker    print 'scrape_gtest_log.py -o <output_json>'
34*fb1b10abSAndroid Build Coastguard Worker    sys.exit(2)
35*fb1b10abSAndroid Build Coastguard Worker
36*fb1b10abSAndroid Build Coastguard Worker  output_json = ''
37*fb1b10abSAndroid Build Coastguard Worker  for opt, arg in opts:
38*fb1b10abSAndroid Build Coastguard Worker    if opt in ('-o', '--output-json'):
39*fb1b10abSAndroid Build Coastguard Worker      output_json = os.path.join(arg)
40*fb1b10abSAndroid Build Coastguard Worker
41*fb1b10abSAndroid Build Coastguard Worker  blob = sys.stdin.read()
42*fb1b10abSAndroid Build Coastguard Worker  json_string = '[' + ','.join('{' + x + '}' for x in
43*fb1b10abSAndroid Build Coastguard Worker                               re.findall(r'{([^}]*.?)}', blob)) + ']'
44*fb1b10abSAndroid Build Coastguard Worker  print blob
45*fb1b10abSAndroid Build Coastguard Worker
46*fb1b10abSAndroid Build Coastguard Worker  output = json.dumps(json.loads(json_string), indent=4, sort_keys=True)
47*fb1b10abSAndroid Build Coastguard Worker  print output
48*fb1b10abSAndroid Build Coastguard Worker
49*fb1b10abSAndroid Build Coastguard Worker  path = os.path.dirname(output_json)
50*fb1b10abSAndroid Build Coastguard Worker  if path and not os.path.exists(path):
51*fb1b10abSAndroid Build Coastguard Worker    os.makedirs(path)
52*fb1b10abSAndroid Build Coastguard Worker
53*fb1b10abSAndroid Build Coastguard Worker  outfile = open(output_json, 'w')
54*fb1b10abSAndroid Build Coastguard Worker  outfile.write(output)
55*fb1b10abSAndroid Build Coastguard Worker
56*fb1b10abSAndroid Build Coastguard Workerif __name__ == '__main__':
57*fb1b10abSAndroid Build Coastguard Worker  sys.exit(main())
58