| Index: Tools/Scripts/webkitpy/bindings/main.py
|
| diff --git a/Tools/Scripts/webkitpy/bindings/main.py b/Tools/Scripts/webkitpy/bindings/main.py
|
| index 980254e633f848ce69a1ba2c15e3d7fb56efe837..43a644bcc4b142a2307ca1bebdc5687a8b36a751 100644
|
| --- a/Tools/Scripts/webkitpy/bindings/main.py
|
| +++ b/Tools/Scripts/webkitpy/bindings/main.py
|
| @@ -96,17 +96,20 @@ class BindingsTests(object):
|
| self.executive = executive
|
| _, self.interface_dependencies_filename = provider.newtempfile()
|
| _, self.derived_sources_list_filename = provider.newtempfile()
|
| + # Generate output into the reference directory if resetting results, or
|
| + # a temp directory if not.
|
| if reset_results:
|
| - self.event_names_filename = os.path.join(reference_directory, 'EventInterfaces.in')
|
| + self.output_directory = reference_directory
|
| else:
|
| - _, self.event_names_filename = provider.newtempfile()
|
| + self.output_directory = provider.newtempdir()
|
| + self.event_names_filename = os.path.join(self.output_directory, 'EventInterfaces.in')
|
|
|
| def run_command(self, cmd):
|
| output = self.executive.run_command(cmd)
|
| if output:
|
| print output
|
|
|
| - def generate_from_idl_pl(self, idl_file, output_directory):
|
| + def generate_from_idl_pl(self, idl_file):
|
| cmd = ['perl', '-w',
|
| '-Ibindings/scripts',
|
| '-Ibuild/scripts',
|
| @@ -115,7 +118,7 @@ class BindingsTests(object):
|
| 'bindings/scripts/generate_bindings.pl',
|
| # idl include directories (path relative to generate-bindings.pl)
|
| '--include', '.',
|
| - '--outputDir', output_directory,
|
| + '--outputDir', self.output_directory,
|
| '--interfaceDependenciesFile', self.interface_dependencies_filename,
|
| '--idlAttributesFile', 'bindings/IDLExtendedAttributes.txt',
|
| idl_file]
|
| @@ -190,13 +193,13 @@ class BindingsTests(object):
|
| return e.exit_code
|
| return 0
|
|
|
| - def identical_file(self, reference_filename, work_filename):
|
| + def identical_file(self, reference_filename, output_filename):
|
| reference_basename = os.path.basename(reference_filename)
|
| cmd = ['diff',
|
| '-u',
|
| '-N',
|
| reference_filename,
|
| - work_filename]
|
| + output_filename]
|
| try:
|
| self.run_command(cmd)
|
| except ScriptError, e:
|
| @@ -209,43 +212,49 @@ class BindingsTests(object):
|
| print 'PASS: %s' % reference_basename
|
| return True
|
|
|
| - def identical_output_directory(self, work_directory):
|
| + def identical_output_files(self, output_directory):
|
| file_pairs = [(os.path.join(reference_directory, output_file),
|
| - os.path.join(work_directory, output_file))
|
| - for output_file in os.listdir(work_directory)
|
| + os.path.join(output_directory, output_file))
|
| + for output_file in os.listdir(output_directory)
|
| # FIXME: add option to compiler to not generate tables
|
| if output_file != 'parsetab.py']
|
| - return all([self.identical_file(reference_filename, work_filename)
|
| - for (reference_filename, work_filename) in file_pairs])
|
| + return all([self.identical_file(reference_filename, output_filename)
|
| + for (reference_filename, output_filename) in file_pairs])
|
| +
|
| + def no_excess_files(self):
|
| + generated_files = set(os.listdir(self.output_directory))
|
| + excess_files = [output_file
|
| + for output_file in os.listdir(reference_directory)
|
| + if output_file not in generated_files]
|
| + if excess_files:
|
| + print ('Excess reference files! '
|
| + '(probably cruft from renaming or deleting):\n' +
|
| + '\n'.join(excess_files))
|
| + return False
|
| + return True
|
|
|
| def run_tests(self):
|
| def generate_and_check_output_pl(idl_filename, directory):
|
| - # Generate output into the reference directory if resetting
|
| - # results, or a temp directory if not.
|
| - if self.reset_results:
|
| - work_directory = reference_directory
|
| - else:
|
| - work_directory = provider.newtempdir()
|
| idl_path = os.path.join(directory, idl_filename)
|
| - if self.generate_from_idl_pl(idl_path, work_directory):
|
| + if self.generate_from_idl_pl(idl_path):
|
| return False
|
| if self.reset_results:
|
| if self.verbose:
|
| print 'Reset results: %s' % input_file
|
| return True
|
| - return self.identical_output_directory(work_directory)
|
| + return self.identical_output_files(self.output_directory)
|
|
|
| def generate_and_check_output_py(idl_filename):
|
| if idl_filename in SKIP_PYTHON:
|
| if self.verbose:
|
| print 'SKIP: %s' % idl_filename
|
| return True
|
| - work_directory = provider.newtempdir()
|
| + output_directory_py = provider.newtempdir()
|
| idl_path = os.path.join(input_directory, idl_filename)
|
| - if self.generate_from_idl_py(idl_path, work_directory):
|
| + if self.generate_from_idl_py(idl_path, output_directory_py):
|
| return False
|
| # Detect changes
|
| - return self.identical_output_directory(work_directory)
|
| + return self.identical_output_files(output_directory_py)
|
|
|
| if self.reset_results:
|
| passed = True
|
| @@ -256,6 +265,7 @@ class BindingsTests(object):
|
| passed &= all([generate_and_check_output_pl(input_file, directory)
|
| for input_file in os.listdir(directory)
|
| if input_file.endswith('.idl')])
|
| + passed &= self.no_excess_files()
|
| if self.test_python:
|
| if self.verbose:
|
| print
|
|
|