Index: tools/isolate/list_test_cases.py |
diff --git a/tools/isolate/list_test_cases.py b/tools/isolate/list_test_cases.py |
new file mode 100755 |
index 0000000000000000000000000000000000000000..6c1cf491bd016ab2c1a71905d8719d2668f96a2e |
--- /dev/null |
+++ b/tools/isolate/list_test_cases.py |
@@ -0,0 +1,102 @@ |
+#!/usr/bin/env python |
+# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+"""List all the test cases for a google test. |
+ |
+See more info at http://code.google.com/p/googletest/. |
+""" |
+ |
+import optparse |
+import subprocess |
+import sys |
+ |
+ |
+class Failure(Exception): |
+ pass |
+ |
+ |
+def gtest_list_tests(executable): |
+ cmd = [executable, '--gtest_list_tests'] |
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) |
+ out, err = p.communicate() |
+ if p.returncode: |
+ raise Failure('Failed to run %s\n%s' % (executable, err), p.returncode) |
+ # pylint: disable=E1103 |
+ if err and not err.startswith('Xlib: extension "RANDR" missing on display '): |
+ raise Failure('Unexpected spew:\n%s' % err, 1) |
+ return out |
+ |
+ |
+def _starts_with(a, b, prefix): |
+ return a.startswith(prefix) or b.startswith(prefix) |
+ |
+ |
+def parse_gtest_cases(out, disabled=False, fails=False, flaky=False): |
+ """Expected format is a concatenation of this: |
+ TestFixture1 |
+ TestCase1 |
+ TestCase2 |
+ """ |
+ tests = [] |
+ fixture = None |
+ lines = out.splitlines() |
+ while lines: |
+ line = lines.pop(0) |
+ if not line: |
+ break |
+ if not line.startswith(' '): |
+ fixture = line |
+ else: |
+ case = line[2:] |
+ if case.startswith('YOU HAVE'): |
+ # It's a 'YOU HAVE foo bar' line. We're done. |
+ break |
+ assert ' ' not in case |
+ |
+ if not disabled and _starts_with(fixture, case, 'DISABLED_'): |
+ continue |
+ if not fails and _starts_with(fixture, case, 'FAILS_'): |
+ continue |
+ if not flaky and _starts_with(fixture, case, 'FLAKY_'): |
+ continue |
+ |
+ tests.append(fixture + case) |
+ return tests |
+ |
+ |
+def main(): |
+ """CLI frontend to validate arguments.""" |
+ parser = optparse.OptionParser( |
+ usage='%prog <options> [gtest]') |
+ parser.add_option( |
+ '-d', '--disabled', |
+ action='store_true', |
+ help='Include DISABLED_ tests') |
+ parser.add_option( |
+ '-f', '--fails', |
+ action='store_true', |
+ help='Include FAILS_ tests') |
+ parser.add_option( |
+ '-F', '--flaky', |
+ action='store_true', |
+ help='Include FLAKY_ tests') |
+ options, args = parser.parse_args() |
+ if len(args) != 1: |
+ parser.error('Please provide the executable to run') |
+ |
+ try: |
+ out = gtest_list_tests(args[0]) |
+ tests = parse_gtest_cases( |
+ out, options.disabled, options.fails, options.flaky) |
+ for test in tests: |
+ print test |
+ except Failure, e: |
+ print e.args[0] |
+ return e.args[1] |
+ return 0 |
+ |
+ |
+if __name__ == '__main__': |
+ sys.exit(main()) |