manual_test.py
Go to the documentation of this file.
1 import argparse
2 import inspect
3 import os.path
4 
5 import click
6 
7 from ros_introspection.package import Package
8 from roscompile import get_functions
9 from roscompile.diff import prepare_diff_lines
10 from roscompile.zipfile_interface import get_test_cases
11 
12 
13 def compare(pkg_in, pkg_out, debug=True):
14  matches, missed_deletes, missed_generations = pkg_in.compare_filesets(pkg_out)
15 
16  success = True
17 
18  for fn in missed_deletes:
19  if debug:
20  click.secho('Should have deleted %s' % fn, fg='yellow')
21  success = False
22  for fn in missed_generations:
23  if debug:
24  click.secho('Failed to generate %s' % fn, fg='yellow')
25  success = False
26  for filename in matches:
27  generated_contents = pkg_in.get_contents(filename).replace('\r\n', '\n')
28  canonical_contents = pkg_out.get_contents(filename).replace('\r\n', '\n')
29  if generated_contents.strip() == canonical_contents.strip():
30  continue
31  success = False
32  if debug:
33  for gen_line, can_line in prepare_diff_lines(generated_contents, canonical_contents):
34  if gen_line == can_line:
35  click.echo(repr(gen_line))
36  else:
37  click.secho(repr(gen_line) + ' should be ' + repr(can_line), fg='yellow')
38  return success
39 
40 
41 if __name__ == '__main__':
42  parser = argparse.ArgumentParser()
43  parser.add_argument('zipfile')
44  parser.add_argument('-f', '--fail_once', action='store_true')
45  parser.add_argument('-l', '--last', action='store_true')
46  args = parser.parse_args()
47  config, cases = get_test_cases(args.zipfile)
48  roscompile_functions = get_functions()
49  successes = 0
50  total = 0
51 
52  for test_config in config:
53  if args.last and test_config != config[-1]:
54  continue
55 
56  with cases[test_config['in']] as pkg_in:
57  try:
58  total += 1
59  if test_config['in'] == test_config['out']:
60  pkg_out = pkg_in.copy()
61  else:
62  pkg_out = cases[test_config['out']]
63 
64  click.secho('{:25} >> {:25} {}'.format(test_config['in'], test_config['out'],
65  ','.join(test_config['functions'])),
66  bold=True, fg='white')
67  root = pkg_in.root
68  if 'subpkg' in test_config:
69  root = os.path.join(root, test_config['subpkg'])
70  pp = Package(root)
71  local_config = test_config.get('config', {})
72  for function_name in test_config['functions']:
73  fne = roscompile_functions[function_name]
74  if 'config' in inspect.getargspec(fne).args:
75  fne(pp, config=local_config)
76  else:
77  fne(pp)
78  pp.write()
79  if compare(pkg_in, pkg_out):
80  click.secho(' SUCCESS', fg='green')
81  successes += 1
82  else:
83  click.secho(' FAIL', fg='red')
84  if args.fail_once:
85  break
86  except Exception as e:
87  click.secho(' EXCEPTION ' + str(e), fg='red')
88  if args.last:
89  raise
90  if args.fail_once:
91  break
92  if not args.last:
93  click.secho('{}/{}'.format(successes, total), bold=True, fg='white')
roscompile.zipfile_interface.get_test_cases
def get_test_cases(zip_filename)
Definition: zipfile_interface.py:87
manual_test.compare
def compare(pkg_in, pkg_out, debug=True)
Definition: manual_test.py:13
ros_introspection::package::Package
ros_introspection::package
roscompile.get_functions
def get_functions()
Definition: __init__.py:11
roscompile.diff.prepare_diff_lines
def prepare_diff_lines(string_a, string_b)
Definition: diff.py:97
roscompile.diff
Definition: diff.py:1
roscompile.zipfile_interface
Definition: zipfile_interface.py:1
manual_test.fne
fne
Definition: manual_test.py:73


roscompile
Author(s):
autogenerated on Tue Jun 21 2022 03:01:39