Blame view

3rdparty/jsoncpp-1.9.5/test/rununittests.py 2.85 KB
09c2d08c   Hu Chunming   arm交付版
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  # Copyright 2009 Baptiste Lepilleur and The JsonCpp Authors
  # Distributed under MIT license, or public domain if desired and
  # recognized in your jurisdiction.
  # See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
  
  from __future__ import print_function
  from __future__ import unicode_literals
  from io import open
  from glob import glob
  import sys
  import os
  import os.path
  import subprocess
  import optparse
  
  VALGRIND_CMD = 'valgrind --tool=memcheck --leak-check=yes --undef-value-errors=yes'
  
  class TestProxy(object):
      def __init__(self, test_exe_path, use_valgrind=False):
          self.test_exe_path = os.path.normpath(os.path.abspath(test_exe_path))
          self.use_valgrind = use_valgrind
  
      def run(self, options):
          if self.use_valgrind:
              cmd = VALGRIND_CMD.split()
          else:
              cmd = []
          cmd.extend([self.test_exe_path, '--test-auto'] + options)
          try:
              process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
          except:
              print(cmd)
              raise
          stdout = process.communicate()[0]
          if process.returncode:
              return False, stdout
          return True, stdout
  
  def runAllTests(exe_path, use_valgrind=False):
      test_proxy = TestProxy(exe_path, use_valgrind=use_valgrind)
      status, test_names = test_proxy.run(['--list-tests'])
      if not status:
          print("Failed to obtain unit tests list:\n" + test_names, file=sys.stderr)
          return 1
      test_names = [name.strip() for name in test_names.decode('utf-8').strip().split('\n')]
      failures = []
      for name in test_names:
          print('TESTING %s:' % name, end=' ')
          succeed, result = test_proxy.run(['--test', name])
          if succeed:
              print('OK')
          else:
              failures.append((name, result))
              print('FAILED')
      failed_count = len(failures)
      pass_count = len(test_names) - failed_count
      if failed_count:
          print()
          for name, result in failures:
              print(result)
          print('%d/%d tests passed (%d failure(s))' % (            pass_count, len(test_names), failed_count))
          return 1
      else:
          print('All %d tests passed' % len(test_names))
          return 0
  
  def main():
      from optparse import OptionParser
      parser = OptionParser(usage="%prog [options] <path to test_lib_json.exe>")
      parser.add_option("--valgrind",
                    action="store_true", dest="valgrind", default=False,
                    help="run all the tests using valgrind to detect memory leaks")
      parser.enable_interspersed_args()
      options, args = parser.parse_args()
  
      if len(args) != 1:
          parser.error('Must provides at least path to test_lib_json executable.')
          sys.exit(1)
  
      exit_code = runAllTests(args[0], use_valgrind=options.valgrind)
      sys.exit(exit_code)
  
  if __name__ == '__main__':
      main()