Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: Tools/Scripts/webkitpy/bindings/main.py

Issue 112463002: Add check to run-bindings-tests for excess files (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2011 Google Inc. All rights reserved. 1 # Copyright (C) 2011 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions 4 # modification, are permitted provided that the following conditions
5 # are met: 5 # are met:
6 # 1. Redistributions of source code must retain the above copyright 6 # 1. Redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer. 7 # notice, this list of conditions and the following disclaimer.
8 # 2. Redistributions in binary form must reproduce the above copyright 8 # 2. Redistributions in binary form must reproduce the above copyright
9 # notice, this list of conditions and the following disclaimer in the 9 # notice, this list of conditions and the following disclaimer in the
10 # documentation and/or other materials provided with the distribution. 10 # documentation and/or other materials provided with the distribution.
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 89
90 90
91 class BindingsTests(object): 91 class BindingsTests(object):
92 def __init__(self, reset_results, test_python, verbose, executive): 92 def __init__(self, reset_results, test_python, verbose, executive):
93 self.reset_results = reset_results 93 self.reset_results = reset_results
94 self.test_python = test_python 94 self.test_python = test_python
95 self.verbose = verbose 95 self.verbose = verbose
96 self.executive = executive 96 self.executive = executive
97 _, self.interface_dependencies_filename = provider.newtempfile() 97 _, self.interface_dependencies_filename = provider.newtempfile()
98 _, self.derived_sources_list_filename = provider.newtempfile() 98 _, self.derived_sources_list_filename = provider.newtempfile()
99 # Generate output into the reference directory if resetting results, or
100 # a temp directory if not.
99 if reset_results: 101 if reset_results:
100 self.event_names_filename = os.path.join(reference_directory, 'Event Interfaces.in') 102 self.output_directory = reference_directory
101 else: 103 else:
102 _, self.event_names_filename = provider.newtempfile() 104 self.output_directory = provider.newtempdir()
105 self.event_names_filename = os.path.join(self.output_directory, 'EventIn terfaces.in')
103 106
104 def run_command(self, cmd): 107 def run_command(self, cmd):
105 output = self.executive.run_command(cmd) 108 output = self.executive.run_command(cmd)
106 if output: 109 if output:
107 print output 110 print output
108 111
109 def generate_from_idl_pl(self, idl_file, output_directory): 112 def generate_from_idl_pl(self, idl_file):
110 cmd = ['perl', '-w', 113 cmd = ['perl', '-w',
111 '-Ibindings/scripts', 114 '-Ibindings/scripts',
112 '-Ibuild/scripts', 115 '-Ibuild/scripts',
113 '-Icore/scripts', 116 '-Icore/scripts',
114 '-I../../JSON/out/lib/perl5', 117 '-I../../JSON/out/lib/perl5',
115 'bindings/scripts/generate_bindings.pl', 118 'bindings/scripts/generate_bindings.pl',
116 # idl include directories (path relative to generate-bindings.pl) 119 # idl include directories (path relative to generate-bindings.pl)
117 '--include', '.', 120 '--include', '.',
118 '--outputDir', output_directory, 121 '--outputDir', self.output_directory,
119 '--interfaceDependenciesFile', self.interface_dependencies_filena me, 122 '--interfaceDependenciesFile', self.interface_dependencies_filena me,
120 '--idlAttributesFile', 'bindings/IDLExtendedAttributes.txt', 123 '--idlAttributesFile', 'bindings/IDLExtendedAttributes.txt',
121 idl_file] 124 idl_file]
122 try: 125 try:
123 self.run_command(cmd) 126 self.run_command(cmd)
124 except ScriptError, e: 127 except ScriptError, e:
125 print 'ERROR: generate_bindings.pl: ' + os.path.basename(idl_file) 128 print 'ERROR: generate_bindings.pl: ' + os.path.basename(idl_file)
126 print e.output 129 print e.output
127 return e.exit_code 130 return e.exit_code
128 return 0 131 return 0
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 if self.reset_results and self.verbose: 186 if self.reset_results and self.verbose:
184 print 'Reset results: EventInterfaces.in' 187 print 'Reset results: EventInterfaces.in'
185 try: 188 try:
186 self.run_command(cmd) 189 self.run_command(cmd)
187 except ScriptError, e: 190 except ScriptError, e:
188 print 'ERROR: compute_dependencies.py' 191 print 'ERROR: compute_dependencies.py'
189 print e.output 192 print e.output
190 return e.exit_code 193 return e.exit_code
191 return 0 194 return 0
192 195
193 def identical_file(self, reference_filename, work_filename): 196 def identical_file(self, reference_filename, output_filename):
194 reference_basename = os.path.basename(reference_filename) 197 reference_basename = os.path.basename(reference_filename)
195 cmd = ['diff', 198 cmd = ['diff',
196 '-u', 199 '-u',
197 '-N', 200 '-N',
198 reference_filename, 201 reference_filename,
199 work_filename] 202 output_filename]
200 try: 203 try:
201 self.run_command(cmd) 204 self.run_command(cmd)
202 except ScriptError, e: 205 except ScriptError, e:
203 # run_command throws an exception on diff (b/c non-zero exit code) 206 # run_command throws an exception on diff (b/c non-zero exit code)
204 print 'FAIL: %s' % reference_basename 207 print 'FAIL: %s' % reference_basename
205 print e.output 208 print e.output
206 return False 209 return False
207 210
208 if self.verbose: 211 if self.verbose:
209 print 'PASS: %s' % reference_basename 212 print 'PASS: %s' % reference_basename
210 return True 213 return True
211 214
212 def identical_output_directory(self, work_directory): 215 def identical_output_files(self, output_directory):
213 file_pairs = [(os.path.join(reference_directory, output_file), 216 file_pairs = [(os.path.join(reference_directory, output_file),
214 os.path.join(work_directory, output_file)) 217 os.path.join(output_directory, output_file))
215 for output_file in os.listdir(work_directory) 218 for output_file in os.listdir(output_directory)
216 # FIXME: add option to compiler to not generate tables 219 # FIXME: add option to compiler to not generate tables
217 if output_file != 'parsetab.py'] 220 if output_file != 'parsetab.py']
218 return all([self.identical_file(reference_filename, work_filename) 221 return all([self.identical_file(reference_filename, output_filename)
219 for (reference_filename, work_filename) in file_pairs]) 222 for (reference_filename, output_filename) in file_pairs])
223
224 def no_excess_files(self):
225 generated_files = set(os.listdir(self.output_directory))
226 excess_files = [output_file
227 for output_file in os.listdir(reference_directory)
228 if output_file not in generated_files]
229 if excess_files:
230 print ('Excess reference files! '
231 '(probably cruft from renaming or deleting):\n' +
232 '\n'.join(excess_files))
233 return False
234 return True
220 235
221 def run_tests(self): 236 def run_tests(self):
222 def generate_and_check_output_pl(idl_filename, directory): 237 def generate_and_check_output_pl(idl_filename, directory):
223 # Generate output into the reference directory if resetting
224 # results, or a temp directory if not.
225 if self.reset_results:
226 work_directory = reference_directory
227 else:
228 work_directory = provider.newtempdir()
229 idl_path = os.path.join(directory, idl_filename) 238 idl_path = os.path.join(directory, idl_filename)
230 if self.generate_from_idl_pl(idl_path, work_directory): 239 if self.generate_from_idl_pl(idl_path):
231 return False 240 return False
232 if self.reset_results: 241 if self.reset_results:
233 if self.verbose: 242 if self.verbose:
234 print 'Reset results: %s' % input_file 243 print 'Reset results: %s' % input_file
235 return True 244 return True
236 return self.identical_output_directory(work_directory) 245 return self.identical_output_files(self.output_directory)
237 246
238 def generate_and_check_output_py(idl_filename): 247 def generate_and_check_output_py(idl_filename):
239 if idl_filename in SKIP_PYTHON: 248 if idl_filename in SKIP_PYTHON:
240 if self.verbose: 249 if self.verbose:
241 print 'SKIP: %s' % idl_filename 250 print 'SKIP: %s' % idl_filename
242 return True 251 return True
243 work_directory = provider.newtempdir() 252 output_directory_py = provider.newtempdir()
244 idl_path = os.path.join(input_directory, idl_filename) 253 idl_path = os.path.join(input_directory, idl_filename)
245 if self.generate_from_idl_py(idl_path, work_directory): 254 if self.generate_from_idl_py(idl_path, output_directory_py):
246 return False 255 return False
247 # Detect changes 256 # Detect changes
248 return self.identical_output_directory(work_directory) 257 return self.identical_output_files(output_directory_py)
249 258
250 if self.reset_results: 259 if self.reset_results:
251 passed = True 260 passed = True
252 else: 261 else:
253 passed = self.identical_file(reference_event_names_filename, 262 passed = self.identical_file(reference_event_names_filename,
254 self.event_names_filename) 263 self.event_names_filename)
255 for directory in [input_directory, support_input_directory]: 264 for directory in [input_directory, support_input_directory]:
256 passed &= all([generate_and_check_output_pl(input_file, directory) 265 passed &= all([generate_and_check_output_pl(input_file, directory)
257 for input_file in os.listdir(directory) 266 for input_file in os.listdir(directory)
258 if input_file.endswith('.idl')]) 267 if input_file.endswith('.idl')])
268 passed &= self.no_excess_files()
259 if self.test_python: 269 if self.test_python:
260 if self.verbose: 270 if self.verbose:
261 print 271 print
262 print 'Python:' 272 print 'Python:'
263 passed &= all([generate_and_check_output_py(input_file) 273 passed &= all([generate_and_check_output_py(input_file)
264 for input_file in os.listdir(input_directory) 274 for input_file in os.listdir(input_directory)
265 if input_file.endswith('.idl')]) 275 if input_file.endswith('.idl')])
266 return passed 276 return passed
267 277
268 def main(self): 278 def main(self):
269 current_scm = detect_scm_system(os.curdir) 279 current_scm = detect_scm_system(os.curdir)
270 os.chdir(os.path.join(current_scm.checkout_root, 'Source')) 280 os.chdir(os.path.join(current_scm.checkout_root, 'Source'))
271 281
272 if self.generate_interface_dependencies(): 282 if self.generate_interface_dependencies():
273 print 'Failed to generate interface dependencies file.' 283 print 'Failed to generate interface dependencies file.'
274 return -1 284 return -1
275 285
276 all_tests_passed = self.run_tests() 286 all_tests_passed = self.run_tests()
277 if all_tests_passed: 287 if all_tests_passed:
278 if self.verbose: 288 if self.verbose:
279 print 289 print
280 print PASS_MESSAGE 290 print PASS_MESSAGE
281 return 0 291 return 0
282 print 292 print
283 print FAIL_MESSAGE 293 print FAIL_MESSAGE
284 return -1 294 return -1
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698