| Index: Tools/Scripts/webkitpy/bindings/main.py
|
| diff --git a/Tools/Scripts/webkitpy/bindings/main.py b/Tools/Scripts/webkitpy/bindings/main.py
|
| index 856a857d2ff75d4ff359c97a3e06a35763857563..6998d7a05b3f8205486c3be7ea2784e0d98e8324 100644
|
| --- a/Tools/Scripts/webkitpy/bindings/main.py
|
| +++ b/Tools/Scripts/webkitpy/bindings/main.py
|
| @@ -24,12 +24,24 @@
|
|
|
| import fnmatch
|
| import os
|
| -import cPickle as pickle
|
| from shutil import rmtree
|
| +import sys
|
| import tempfile
|
| from webkitpy.common.checkout.scm.detection import detect_scm_system
|
| from webkitpy.common.system.executive import ScriptError
|
|
|
| +# Add Source path to PYTHONPATH to support function calls to bindings/scripts
|
| +# for compute_dependencies and idl_compiler
|
| +module_path = os.path.dirname(__file__)
|
| +source_path = os.path.normpath(os.path.join(module_path, os.pardir,
|
| + os.pardir, os.pardir, os.pardir,
|
| + 'Source'))
|
| +sys.path.append(source_path)
|
| +
|
| +from bindings.scripts.compute_dependencies import compute
|
| +from bindings.scripts.unstable.idl_compiler import compile_idl
|
| +
|
| +
|
| PASS_MESSAGE = 'All tests PASS!'
|
| FAIL_MESSAGE = """Some tests FAIL!
|
| To update the reference files, execute:
|
| @@ -54,6 +66,8 @@ DEPENDENCY_IDL_FILES = set([
|
|
|
| SKIP_PYTHON = 'TestSVG.idl' # Not implementing SVG-specific hacks in Python
|
|
|
| +EXTENDED_ATTRIBUTES_FILE = 'bindings/IDLExtendedAttributes.txt'
|
| +
|
| all_input_directory = '.' # Relative to Source/
|
| test_input_directory = os.path.join('bindings', 'tests', 'idls')
|
| reference_directory = os.path.join('bindings', 'tests', 'results')
|
| @@ -86,10 +100,12 @@ provider = ScopedTempFileProvider()
|
|
|
| class BindingsTests(object):
|
| def __init__(self, reset_results, test_python, verbose, executive):
|
| + self.interfaces_info = {} # in-memory interfaces
|
| self.reset_results = reset_results
|
| self.test_python = test_python
|
| self.verbose = verbose
|
| self.executive = executive
|
| + self.reader = None
|
| _, self.interface_dependencies_filename = provider.newtempfile()
|
| _, self.interfaces_info_filename = provider.newtempfile()
|
| # Generate output into the reference directory if resetting results, or
|
| @@ -117,7 +133,7 @@ class BindingsTests(object):
|
| '--include', '.',
|
| '--outputDir', self.output_directory,
|
| '--interfaceDependenciesFile', self.interface_dependencies_filename,
|
| - '--idlAttributesFile', 'bindings/IDLExtendedAttributes.txt',
|
| + '--idlAttributesFile', EXTENDED_ATTRIBUTES_FILE,
|
| idl_file]
|
| try:
|
| self.run_command(cmd)
|
| @@ -128,18 +144,17 @@ class BindingsTests(object):
|
| return 0
|
|
|
| def generate_from_idl_py(self, idl_file):
|
| - cmd = ['python',
|
| - 'bindings/scripts/unstable/idl_compiler.py',
|
| - '--output-dir', self.output_directory_py,
|
| - '--idl-attributes-file', 'bindings/IDLExtendedAttributes.txt',
|
| - '--interfaces-info-file', self.interfaces_info_filename,
|
| - idl_file]
|
| try:
|
| - self.run_command(cmd)
|
| + idl_file_fullpath = os.path.realpath(idl_file)
|
| + self.reader = compile_idl(idl_file_fullpath,
|
| + self.output_directory_py,
|
| + EXTENDED_ATTRIBUTES_FILE,
|
| + self.interfaces_info, self.reader)
|
| except ScriptError, e:
|
| print 'ERROR: idl_compiler.py: ' + os.path.basename(idl_file)
|
| print e.output
|
| return e.exit_code
|
| +
|
| return 0
|
|
|
| def generate_interface_dependencies(self):
|
| @@ -162,38 +177,40 @@ class BindingsTests(object):
|
| os.write(list_file, list_contents)
|
| return list_filename
|
|
|
| - def compute_dependencies(idl_files_list_filename,
|
| - event_names_filename):
|
| + # Faster in-memory file list.
|
| + def list_idl_file(idl_paths):
|
| + idls = []
|
| + for idl_path in idl_paths:
|
| + idls.append(idl_path)
|
| + return idls
|
| +
|
| + def compute_dependencies(idl_files_list, event_names_filename, pickle_name):
|
| # Dummy files, required by compute_dependencies but not checked
|
| _, window_constructors_file = provider.newtempfile()
|
| _, workerglobalscope_constructors_file = provider.newtempfile()
|
| _, sharedworkerglobalscope_constructors_file = provider.newtempfile()
|
| _, dedicatedworkerglobalscope_constructors_file = provider.newtempfile()
|
| _, serviceworkersglobalscope_constructors_file = provider.newtempfile()
|
| - cmd = ['python',
|
| - 'bindings/scripts/compute_dependencies.py',
|
| - '--idl-files-list', idl_files_list_filename,
|
| - '--interface-dependencies-file', self.interface_dependencies_filename,
|
| - '--interfaces-info-file', self.interfaces_info_filename,
|
| - '--window-constructors-file', window_constructors_file,
|
| - '--workerglobalscope-constructors-file', workerglobalscope_constructors_file,
|
| - '--sharedworkerglobalscope-constructors-file', sharedworkerglobalscope_constructors_file,
|
| - '--dedicatedworkerglobalscope-constructors-file', dedicatedworkerglobalscope_constructors_file,
|
| - '--serviceworkerglobalscope-constructors-file', serviceworkersglobalscope_constructors_file,
|
| - '--event-names-file', event_names_filename,
|
| - '--write-file-only-if-changed', '0']
|
| - self.run_command(cmd)
|
|
|
| - test_idl_files_list_filename = write_list_file(idl_paths(test_input_directory))
|
| - all_idl_files_list_filename = write_list_file(idl_paths_recursive(all_input_directory))
|
| + return compute(idl_files_list,
|
| + self.interface_dependencies_filename,
|
| + window_constructors_file,
|
| + workerglobalscope_constructors_file,
|
| + sharedworkerglobalscope_constructors_file,
|
| + dedicatedworkerglobalscope_constructors_file,
|
| + serviceworkersglobalscope_constructors_file,
|
| + event_names_filename, False)
|
| +
|
| + test_idl_files_list = list_idl_file(idl_paths(test_input_directory))
|
| + all_idl_files_list = list_idl_file(idl_paths_recursive(all_input_directory))
|
|
|
| if self.reset_results and self.verbose:
|
| print 'Reset results: EventInterfaces.in'
|
| try:
|
| # We first compute dependencies for testing files only,
|
| # so we can compare EventInterfaces.in.
|
| - compute_dependencies(test_idl_files_list_filename,
|
| - self.event_names_filename)
|
| + compute_dependencies(test_idl_files_list, self.event_names_filename,
|
| + self.interfaces_info_filename)
|
|
|
| # We then compute dependencies for all IDL files, as code generator
|
| # output depends on inheritance (both ancestor chain and inherited
|
| @@ -207,8 +224,9 @@ class BindingsTests(object):
|
| #
|
| # Don't overwrite the event names file generated for testing IDLs
|
| _, dummy_event_names_filename = provider.newtempfile()
|
| - compute_dependencies(all_idl_files_list_filename,
|
| - dummy_event_names_filename)
|
| + self.interfaces_info = compute_dependencies(all_idl_files_list,
|
| + dummy_event_names_filename,
|
| + self.interfaces_info_filename)
|
| except ScriptError, e:
|
| print 'ERROR: compute_dependencies.py'
|
| print e.output
|
|
|