# Copyright 2014 Google Inc. 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.

{
  'includes': [
    '../bindings.gypi',
  ],
  'variables': {
    # Base directory into which generated sources and intermediate files should
    # be generated.
    'bindings_output_dir': '<(SHARED_INTERMEDIATE_DIR)/bindings/testing',

    # Bindings for the interfaces in this list will be generated, and there must
    # be an implementation declared in a header that lives in the same
    # directory of each IDL.
    'source_idl_files': [
        'anonymous_indexed_getter_interface.idl',
        'anonymous_named_getter_interface.idl',
        'anonymous_named_indexed_getter_interface.idl',
        'arbitrary_interface.idl',
        'base_interface.idl',
        'boolean_type_test_interface.idl',
        'callback_function_interface.idl',
        'callback_interface_interface.idl',
        'conditional_interface.idl',
        'constants_interface.idl',
        'constructor_interface.idl',
        'constructor_with_arguments_interface.idl',
        'derived_getter_setter_interface.idl',
        'derived_interface.idl',
        'dictionary_interface.idl',
        'disabled_interface.idl',
        'dom_string_test_interface.idl',
        'enumeration_interface.idl',
        'exception_object_interface.idl',
        'exceptions_interface.idl',
        'extended_idl_attributes_interface.idl',
        'garbage_collection_test_interface.idl',
        'get_opaque_root_interface.idl',
        'global_interface_parent.idl',
        'indexed_getter_interface.idl',
        'interface_with_any.idl',
        'interface_with_unsupported_properties.idl',
        'named_constructor_interface.idl',
        'named_getter_interface.idl',
        'named_indexed_getter_interface.idl',
        'nested_put_forwards_interface.idl',
        'no_constructor_interface.idl',
        'no_interface_object_interface.idl',
        'nullable_types_test_interface.idl',
        'numeric_types_test_interface.idl',
        'object_type_bindings_interface.idl',
        'operations_test_interface.idl',
        'promise_interface.idl',
        'put_forwards_interface.idl',
        'sequence_user.idl',
        'single_operation_interface.idl',
        'static_properties_interface.idl',
        'stringifier_anonymous_operation_interface.idl',
        'stringifier_attribute_interface.idl',
        'stringifier_operation_interface.idl',
        'target_interface.idl',
        'union_types_interface.idl',
        'window.idl',
    ],

    'generated_header_idl_files': [
        'dictionary_with_dictionary_member.idl',
        'test_dictionary.idl',
        'test_enum.idl'
    ],

    # Partial interfaces and the right-side of "implements"
    # Code will not get generated for these interfaces; they are used to add
    # functionality to other interfaces.
    'dependency_idl_files': [
        'implemented_interface.idl',
        'partial_interface.idl',
        'interface_with_unsupported_properties_partial.idl',
    ],

    'unsupported_interface_idl_files': [
      'unsupported_interface.idl',
    ],

    # Specify component for generated window IDL.
    'window_component': 'testing',

    'bindings_dependencies': ['<(DEPTH)/testing/gmock.gyp:gmock'],

    'bindings_defines': [
      'ENABLE_CONDITIONAL_INTERFACE',
      'ENABLE_CONDITIONAL_PROPERTY',
    ],
  },

  'targets': [
    {
      'target_name': 'bindings',
      'type': 'static_library',
      'dependencies': [
        # The generated_bindings target comes from bindings.gypi.
        'generated_bindings',
      ],
    },
    {
      'target_name': 'bindings_test_implementation',
      'type': 'static_library',
      'sources': [
        'constants_interface.cc',
        'constructor_interface.cc',
        'exceptions_interface.cc',
        'garbage_collection_test_interface.cc',
        'named_constructor_interface.cc',
        'operations_test_interface.cc',
        'put_forwards_interface.cc',
        'static_properties_interface.cc',
      ],
      'defines': [ '<@(bindings_defines)'],
      'dependencies': [
        'generated_types',
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/testing/gmock.gyp:gmock',
        '<(DEPTH)/testing/gtest.gyp:gtest',
      ],
      'export_dependent_settings': [
        'generated_types',
      ],
    },
    {
      'target_name': 'bindings_test',
      'type': '<(gtest_target_type)',
      'sources': [
        'any_bindings_test.cc',
        'boolean_type_bindings_test.cc',
        'callback_function_test.cc',
        'callback_interface_test.cc',
        'conditional_attribute_test.cc',
        'constants_bindings_test.cc',
        'constructor_bindings_test.cc',
        'dependent_interface_test.cc',
        'dictionary_test.cc',
        'dom_string_bindings_test.cc',
        'enumeration_bindings_test.cc',
        'evaluate_script_test.cc',
        'exceptions_bindings_test.cc',
        'extended_attributes_test.cc',
        'garbage_collection_test.cc',
        'get_opaque_root_test.cc',
        'get_own_property_descriptor.cc',
        'getter_setter_test.cc',
        'global_interface_bindings_test.cc',
        'interface_object_test.cc',
        'nullable_types_bindings_test.cc',
        'numeric_type_bindings_test.cc',
        'object_type_bindings_test.cc',
        'operations_bindings_test.cc',
        'optional_arguments_bindings_test.cc',
        'promise_test.cc',
        'put_forwards_test.cc',
        'sequence_bindings_test.cc',
        'stack_trace_test.cc',
        'static_properties_bindings_test.cc',
        'stringifier_bindings_test.cc',
        'union_type_bindings_test.cc',
        'unsupported_test.cc',
        'variadic_arguments_bindings_test.cc',
      ],
      'defines': [ '<@(bindings_defines)'],
      'dependencies': [
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/cobalt/script/engine.gyp:engine',
        '<(DEPTH)/cobalt/test/test.gyp:run_all_unittests',
        '<(DEPTH)/testing/gmock.gyp:gmock',
        '<(DEPTH)/testing/gtest.gyp:gtest',
        'bindings',
        'bindings_test_implementation',
      ],
    },

    {
      'target_name': 'bindings_test_deploy',
      'type': 'none',
      'dependencies': [
        'bindings_test',
      ],
      'variables': {
        'executable_name': 'bindings_test',
      },
      'includes': [ '../../../starboard/build/deploy.gypi' ],
    },

    {
      'target_name': 'bindings_sandbox',
      'type': '<(final_executable_type)',
      'sources': [
        'bindings_sandbox_main.cc',
      ],
      'dependencies': [
        '<(DEPTH)/cobalt/base/base.gyp:base',
        '<(DEPTH)/cobalt/script/script.gyp:standalone_javascript_runner',
        '<(DEPTH)/cobalt/script/engine.gyp:engine',
        'bindings',
        'bindings_test_implementation',
      ]
    },

    {
      'target_name': 'bindings_sandbox_deploy',
      'type': 'none',
      'dependencies': [
        'bindings_sandbox',
      ],
      'variables': {
        'executable_name': 'bindings_sandbox',
      },
      'includes': [ '../../../starboard/build/deploy.gypi' ],
    },
  ],
}
