# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/fidl/toolchain.gni")
import("//build/json/validate_json.gni")
import("//build/python/python_host_test.gni")
import("//build/toolchain/basic_toolchain.gni")

basic_toolchain("fidling") {
  expected_label = fidl_toolchain
}

# A generated file that lists fidl sdk files
generated_file("sdk_fidl") {
  deps = [ "//sdk/fidl" ]
  outputs = [ "$root_build_dir/sdk_fidl_json.json" ]
  data_keys = [ "sdk_fidl_json_data" ]
  output_conversion = "json"
}

# A generated file that lists all of the .fidl.json files.
generated_file("all_fidl_json") {
  testonly = true
  deps = [ "//:default" ]

  outputs = [ "$root_build_dir/all_fidl_json.txt" ]
  data_keys = [ "fidl_json" ]
}

# Generates a fidl_project.json file.
# fidl_project.json is a declarative file that lists FIDL libraries and their
# constituent files, dependencies, and build artifacts. It is used by the FIDL
# LSP Language Server to compile FIDL libraries.
action("gen_fidl_project") {
  testonly = true
  script = "//scripts/generate-fidl-project.py"
  deps = [ "//:generated_sources" ]

  inputs = [ "$root_build_dir/generated_sources.json" ]
  outputs = [ "$root_build_dir/fidl_project.json" ]

  args = [
    rebase_path("//"),
    rebase_path("$root_build_dir/generated_sources.json"),
    rebase_path("$root_build_dir/fidl_project.json"),
  ]
}

validate_json("validate_fidl_project_json") {
  testonly = true
  data = "$root_build_dir/fidl_project.json"
  schema = "//scripts/fidl_project_schema.json"
  deps = [ ":gen_fidl_project" ]
}

normalize_test_stamp = "$target_gen_dir/normalize_unittest.stamp"
action("normalize_unittest") {
  testonly = true
  script = "normalize_unittest.py"
  inputs = [ "normalize.py" ]
  outputs = [ normalize_test_stamp ]
  args = [
    "--stamp",
    rebase_path(normalize_test_stamp, root_build_dir),
  ]
}

if (is_host) {
  python_host_test("gen_fidldocs_test") {
    main_source = "gen_fidldocs_test.py"
    sources = [ "gen_fidldocs.py" ]
  }
}

group("tests") {
  testonly = true
  deps = [
    ":gen_fidldocs_test($host_toolchain)",
    ":normalize_unittest",
  ]
}
