# Copyright 2022 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.

import("//cobalt/bindings/bindings_templates.gni")
import("//cobalt/script/v8c/v8c_variables.gni")

##########################################################
# Configuration variables for bindings generation scripts.
##########################################################

_bindings_output_dir = "$root_gen_dir/bindings/testing"
_bindings_scripts_output_dir = "$_bindings_output_dir/scripts"

# Blink interface info is calculated in two stages. First at a per-component level
# (in Blink this is core or modules) and then these are combined. While Cobalt
# currently does not and may not need to distinguish between components, we adhere to
# Blink's process for simplicity.
_component_info_pickle = "$_bindings_scripts_output_dir/component_info.pickle"
_interfaces_info_individual_pickle =
    "$_bindings_scripts_output_dir/interfaces_info_individual.pickle"
_interfaces_info_combined_pickle =
    "$_bindings_scripts_output_dir/interfaces_info_overall.pickle"
_global_objects_pickle = "$_bindings_scripts_output_dir/GlobalObjects.pickle"

# Base directory into which generated bindings source files will be
# generated. Directory structure will mirror the directory structure
# that the .idl files came from.
_generated_source_output_dir = "$_bindings_output_dir/source"

# Directory containing generated IDL files.
_generated_idls_output_dir = "$_bindings_output_dir/idl"

# Array of all interfaces that need global constructors.
_global_constructor_interfaces = [ "Window" ]

###################################################
# IDL files to be compiled to bindings source code.
###################################################

# Testing IDL files.
_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",
  "bytestring_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",
  "convert_simple_object_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",
  "global_interface_parent.idl",
  "implemented_as_interface.idl",
  "indexed_getter_interface.idl",
  "interface_with_any.idl",
  "interface_with_any_dictionary.idl",
  "interface_with_date.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",
  "serialize_script_value_interface.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 = [
  "derived_dictionary.idl",
  "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" ]

#########################
# Bindings tests targets.
#########################

static_library("bindings_test_implementation") {
  testonly = true

  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",
  ]

  deps = [
    ":generated_types_test_support",
    "//cobalt/base",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

target(gtest_target_type, "bindings_test") {
  testonly = true

  sources = [
    "any_bindings_test.cc",
    "any_dictionary_bindings_test.cc",
    "array_buffers_test.cc",
    "boolean_type_bindings_test.cc",
    "bytestring_type_bindings_test.cc",
    "callback_function_test.cc",
    "callback_interface_test.cc",
    "conditional_attribute_test.cc",
    "constants_bindings_test.cc",
    "constructor_bindings_test.cc",
    "convert_simple_object_test.cc",
    "date_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_own_property_descriptor.cc",
    "getter_setter_test.cc",
    "global_interface_bindings_test.cc",
    "implemented_as_interface_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",
    "serialize_script_value_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",
  ]

  configs += [ ":enable_conditional_interface" ]

  deps = [
    ":bindings_test_implementation",
    ":bindings_test_support",
    "//cobalt/base",
    "//cobalt/script",
    "//cobalt/script/v8c:engine",
    "//cobalt/test:run_all_unittests",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

###################
# Bindings sandbox.
###################

target(final_executable_type, "bindings_sandbox") {
  testonly = true
  sources = [ "bindings_sandbox_main.cc" ]
  deps = [
    ":bindings_test_implementation",
    ":bindings_test_support",
    "//cobalt/base",
    "//cobalt/script:engine",
    "//cobalt/script:standalone_javascript_runner",
  ]
}

##############################
# Bindings generation targets.
##############################

group("bindings_test_support") {
  testonly = true
  public_deps = [
    ":generated_bindings_sources_test_support",
    ":generated_types_sources_test_support",
  ]
}

config("enable_conditional_interface") {
  defines = [
    "ENABLE_CONDITIONAL_INTERFACE",
    "ENABLE_CONDITIONAL_PROPERTY",
  ]
}

config("generated_test_support_sources_includes") {
  include_dirs = [ _generated_source_output_dir ]
}

idl_compile("generated_bindings_test_support") {
  testonly = true
  sources = _source_idl_files

  cache_directory = _bindings_scripts_output_dir
  component_info = _component_info_pickle
  interfaces_info = _interfaces_info_combined_pickle
  output_directory = _generated_source_output_dir
  header_prefix = "${generated_bindings_prefix}"

  # TODO(b/211055528): Missing deps from generated sources.
  deps = [
    ":cached_jinja_templates_test_support",
    ":cached_lex_yacc_tables_test_support",
    ":generated_type_conversion_test_support",
    ":generated_types_test_support",
    ":global_constructors_idls_test_support",
    ":interfaces_info_individual_test_support",
    ":interfaces_info_overall_test_support",
    "//cobalt/script:engine",
  ]
  public_deps = engine_dependencies + [ "//testing/gmock" ]

  public_configs = [ ":generated_test_support_sources_includes" ]
}

source_set("generated_bindings_sources_test_support") {
  testonly = true
  sources = get_target_outputs(":generated_bindings_test_support")
  configs += [ ":enable_conditional_interface" ]
  public_deps = [ ":generated_bindings_test_support" ]
  deps = [
    # Ensure that all the files have been generated before trying to compile.
    ":generated_types_test_support",
  ]
}

idl_compile("generated_types_test_support") {
  sources = _generated_header_idl_files

  cache_directory = _bindings_scripts_output_dir
  component_info = _component_info_pickle
  interfaces_info = _interfaces_info_combined_pickle
  output_directory = _generated_source_output_dir

  # TODO(b/211055528): Missing deps from generated sources.
  deps = [
    ":cached_jinja_templates_test_support",
    ":cached_lex_yacc_tables_test_support",
    ":global_constructors_idls_test_support",
    ":interfaces_info_individual_test_support",
    ":interfaces_info_overall_test_support",
  ]
  public_deps = engine_dependencies

  public_configs = [ ":generated_test_support_sources_includes" ]
}

source_set("generated_types_sources_test_support") {
  testonly = true
  sources = get_target_outputs(":generated_types_test_support")
  public_deps = [ ":generated_types_test_support" ]
  deps = [
    # Ensure that all the files have been generated before trying to compile.
    ":generated_bindings_test_support",
  ]
}

generate_type_conversion("generated_type_conversion_test_support") {
  # TODO(b/211055528): Missing deps from generated sources.
  deps = [
    ":cached_jinja_templates_test_support",
    ":cached_lex_yacc_tables_test_support",
    ":global_constructors_idls_test_support",
    ":interfaces_info_overall_test_support",
  ]

  # Generated IDL files that define all the constructors that are on the global
  # scope objects.
  global_names_idl_path = "$_generated_idls_output_dir"
  interfaces = _global_constructor_interfaces

  inputs = [ _interfaces_info_combined_pickle ]
  inputs += _source_idl_files
  inputs += _generated_header_idl_files

  cache_directory = _bindings_scripts_output_dir
  output_dir = _generated_source_output_dir
  interfaces_info = _interfaces_info_combined_pickle
  component_info = _component_info_pickle
}

compute_global_objects("global_objects_test_support") {
  idl_files = _source_idl_files + _generated_header_idl_files

  global_objects_file = _global_objects_pickle
}

compute_global_constructors_idls("global_constructors_idls_test_support") {
  idl_files = _source_idl_files + _unsupported_interface_idl_files
  global_objects_file = _global_objects_pickle

  # Generated IDL files that will define all the constructors that should be
  # on the global scope objects.
  global_names_idl_path = "$_generated_idls_output_dir"
  interfaces = _global_constructor_interfaces
  deps = [ ":global_objects_test_support" ]
}

compute_interfaces_info_individual("interfaces_info_individual_test_support") {
  idl_files = _source_idl_files + _generated_header_idl_files +
              _dependency_idl_files + _unsupported_interface_idl_files

  # Generated IDL files that define all the constructors that are on the global
  # scope objects.
  global_names_idl_path = "$_generated_idls_output_dir"
  interfaces = _global_constructor_interfaces
  component_info_file = _component_info_pickle
  interfaces_info_file = _interfaces_info_individual_pickle
  cache_directory = _bindings_scripts_output_dir
  dependency_idl_files = _dependency_idl_files

  deps = [
    ":cached_lex_yacc_tables_test_support",
    ":global_constructors_idls_test_support",
  ]
}

generate_interfaces_info_overall("interfaces_info_overall_test_support") {
  individual_interfaces_file = _interfaces_info_individual_pickle
  combined_interfaces_file = _interfaces_info_combined_pickle
  deps = [ ":interfaces_info_individual_test_support" ]
}

cache_lex_tables("cached_lex_yacc_tables_test_support") {
  output_dir = _bindings_scripts_output_dir
}

cache_templates("cached_jinja_templates_test_support") {
  output_dir = _bindings_scripts_output_dir
}
