| #!/usr/bin/python2 |
| # Copyright 2014 The Cobalt Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| """Run bindings pipeline on test files and compare results with reference files. |
| |
| Please execute the script whenever changes are made to the compiler |
| (this is automatically done as a presubmit script), |
| and submit changes to the test results in the same patch. |
| This makes it easier to track and review changes in generated code. |
| Options: |
| --reset-results: Overwrites reference files with the generated results. |
| --verbose: Show output on success and logging messages (not just failure) |
| """ |
| import argparse |
| import os |
| import sys |
| import _env # pylint: disable=unused-import |
| |
| from cobalt.bindings.idl_compiler_cobalt import IdlCompilerCobalt |
| from cobalt.bindings.mozjs45.code_generator_mozjs45 import CodeGeneratorMozjs45 |
| from cobalt.bindings.v8c.code_generator_v8c import CodeGeneratorV8c |
| from webkitpy.bindings.bindings_tests import run_bindings_tests |
| |
| |
| def main(argv): |
| parser = argparse.ArgumentParser() |
| parser.add_argument('-r', '--reset-results', action='store_true') |
| parser.add_argument('-v', '--verbose', action='store_true') |
| parser.add_argument('engine') |
| args = parser.parse_args(argv[1:]) |
| |
| if args.engine.lower() == 'mozjs45': |
| generator = CodeGeneratorMozjs45 |
| elif args.engine.lower() == 'v8c': |
| generator = CodeGeneratorV8c |
| else: |
| raise RuntimeError('Unsupported JavaScript engine: ' + args.engine) |
| |
| cobalt_bindings_dir, _ = os.path.split(os.path.realpath(__file__)) |
| cobalt_src_root = os.path.normpath( |
| os.path.join(cobalt_bindings_dir, os.pardir)) |
| test_input_directory = os.path.normpath(os.path.join(cobalt_bindings_dir)) |
| reference_directory = os.path.normpath( |
| os.path.join(cobalt_bindings_dir, 'generated', args.engine)) |
| |
| extended_attributes_path = os.path.join(cobalt_bindings_dir, |
| 'IDLExtendedAttributes.txt') |
| test_args = { |
| 'idl_compiler_constructor': |
| IdlCompilerCobalt, |
| 'code_generator_constructor': |
| generator, |
| |
| # Directory that contains IDL files for the bindings tests |
| 'test_input_directory': |
| test_input_directory, |
| # Directory that contains reference generated files |
| 'reference_directory': |
| reference_directory, |
| # Top-level directories containing IDL files. In blink, there are 'core' |
| # and 'modules'. These correspond to the subdirectories under Source/core |
| # and Source/modules in the blink repository. These are separated to |
| # enforce dependency restrictions. For example, for interface X and |
| # partial interface Y that extends X, the following are valid: |
| # X and Y are both in core |
| # X and Y are both in modules |
| # X is in core and Y is in modules |
| # The following is invalid |
| # X is in modules and Y is in core |
| # TODO: Evaluate the usefulness of this distinction in Cobalt. |
| # This promotes modularity, but necessarily introduces complexity. |
| 'component_directories': |
| frozenset(['testing']), |
| # These are IDL files that aren't built directly, but are used by their |
| # dependent IDLs. In blink this includes: |
| # interfaces with the NoInterfaceObject extended attributes |
| # partial interfaces |
| # This should be kept in sync with the list of dependency IDLS in |
| # testing.gyp. |
| 'dependency_idl_files': |
| frozenset([ |
| 'implemented_interface.idl', |
| 'partial_interface.idl', |
| 'interface_with_unsupported_properties_partial.idl', |
| # unsupported_interface is not actually a dependency IDL, but |
| # this will prevent code from being generated for it. |
| 'unsupported_interface.idl', |
| ]), |
| # .idl files that are not valid blink IDLs |
| 'ignore_idl_files': |
| frozenset([]), |
| # Use as the base for constructing relative paths for includes, etc. |
| 'root_directory': |
| cobalt_src_root, |
| # Text file containing whitelisted extended attributes. |
| 'extended_attributes_path': |
| extended_attributes_path, |
| # We implement union types differently than blink, so don't generate |
| # Blink union classes. |
| 'generate_union_containers': |
| False, |
| } |
| return run_bindings_tests(args.reset_results, args.verbose, test_args) |
| |
| |
| if __name__ == '__main__': |
| sys.exit(main(sys.argv)) |