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
|
|