testsuite.py

changeset 17
327da5d00360
parent 16
09cc89622262
child 18
672ebc45685a
equal deleted inserted replaced
16:09cc89622262 17:327da5d00360
6 'object': bad_object, 6 'object': bad_object,
7 'name': error_name, 7 'name': error_name,
8 'args': args, 8 'args': args,
9 } 9 }
10 10
11 def warning(bad_object, error_name, *args): 11 def warning(bad_object, error_name, **args):
12 return report_element(bad_object, 'warning', error_name, args) 12 return report_element(bad_object, 'warning', error_name, args)
13 13
14 def error(bad_object, error_name, *args): 14 def error(bad_object, error_name, **args):
15 return report_element(bad_object, 'error', error_name, args) 15 return report_element(bad_object, 'error', error_name, args)
16 16
17 def test_discovery(): 17 def test_discovery():
18 ''' 18 '''
19 Finds all test modules and yields their names. 19 Finds all test modules and yields their names.
65 test_suite[key].update(module.manifest[key]) 65 test_suite[key].update(module.manifest[key])
66 else: 66 else:
67 warn(str.format('Module {} does not have a manifest', module_name)) 67 warn(str.format('Module {} does not have a manifest', module_name))
68 return test_suite 68 return test_suite
69 69
70 def check_model(model, test_suite = None):
71 if not test_suite:
72 test_suite = load_tests()
73 report = []
74 line_numbers = {
75 element: (i, i + 1 + model.body_offset)
76 for i, element in enumerate(model.body)
77 }
78 for test_name, test_function in test_suite['tests'].items():
79 problems = test_function(model)
80 for problem in problems:
81 problem['body-index'], problem['line-number'] \
82 = line_numbers[problem['object']]
83 del problem['object']
84 report.append(problem)
85 return report
86
87 def format_report(report, model, test_suite):
88 result = []
89 for problem in report:
90 problem_text = test_suite['messages'][problem['name']]
91 if callable(problem_text):
92 problem_text = problem_text(**problem['args'])
93 message = str.format(
94 'Line {}: {}\n\t{}',
95 problem['line-number'],
96 problem_text,
97 model.body[problem['body-index']].original_code
98 )
99 result.append((problem['line-number'], message))
100 return '\n'.join(
101 problem[1]
102 for problem in sorted(result)
103 )
104
70 if __name__ == '__main__': 105 if __name__ == '__main__':
71 from pprint import pprint 106 from pprint import pprint
72 pprint(load_tests()) 107 pprint(load_tests())

mercurial