# Copyright 2019 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/dist/distribution_manifest.gni")
import("//build/package.gni")
import("//build/test.gni")
import("//build/test/test_package.gni")

# Generate a manifest providing all of the .fidl.json files exported by the
# core SDK (and any other FIDL files we might want).
action("generate_fidl_json") {
  script = "generate_fidl_json.py"
  generated_output = "$target_gen_dir/sdk_fidl_json.manifest"
  inputs = [ "$root_gen_dir/sdk/core.fidl_json.txt" ]
  outputs = [ "$generated_output" ]
  depfile = "$target_gen_dir/$target_name.d"
  testonly = true
  deps = [
    "//sdk:core",
    "//sdk:core_fidl_json",
    "//sdk/fidl/fuchsia.boot",
    "//sdk/fidl/fuchsia.device.manager",
    "//sdk/fidl/fuchsia.kernel",
    "//sdk/fidl/fuchsia.power",
    "//third_party/quickjs:qjs($host_toolchain)",
  ]
  args = [
    "--out-file",
    rebase_path("$generated_output", root_build_dir),
    "--dep-file",
    rebase_path(depfile, root_build_dir),
    "@" + rebase_path("$root_gen_dir/sdk/core.fidl_json.txt", root_build_dir),
    rebase_path(
        "$root_build_dir/fidling/gen/sdk/fidl/fuchsia.device.manager/fuchsia.device.manager.fidl.json",
        root_build_dir),
    rebase_path(
        "$root_build_dir/fidling/gen/sdk/fidl/fuchsia.power/fuchsia.power.fidl.json",
        root_build_dir),
    rebase_path(
        "$root_build_dir/fidling/gen/sdk/fidl/fuchsia.kernel/fuchsia.kernel.fidl.json",
        root_build_dir),
    rebase_path(
        "$root_build_dir/fidling/gen/sdk/fidl/fuchsia.boot/fuchsia.boot.fidl.json",
        root_build_dir),
  ]
  metadata = {
    # Don't pick up resources from SDK deps
    distribution_entries_barrier = []
  }
}

distribution_entries_file("fidl_json") {
  testonly = true
  deps = [ ":generate_fidl_json" ]
  file = get_target_outputs(deps[0])
  file = file[0]
}

test_package("josh-tests") {
  deps = [
    "//src/developer/shell/josh:bin",
    "//src/developer/shell/josh:josh_tests_bin",
    "//src/developer/shell/josh/lib:spawn_child_test_util",
  ]
  resource_deps = [
    ":fidl_json",
    "josh/lib:js_libs",
  ]

  binaries = [
    {
      name = "spawn_child_test_util"
    },
    {
      name = "josh"
    },
  ]

  tests = [
    {
      name = "josh_tests_bin"
      environments = basic_envs
    },
  ]
}

group("tests") {
  testonly = true

  deps = [
    ":josh-tests",
    "console:shell-console-unittests",
    "interpreter:shell_server",
    "interpreter:tests",
    "mirror:shell-mirror-tests",
    "parser:shell-parser-unittests",
  ]
}

# "josh" is Javascript Object SHell.
package("josh") {
  # TODO(jeremymanson): This is only testonly because sdk:core is.  We should undo that.
  testonly = true
  deps = [ "//src/developer/shell/josh:bin" ]
  resource_deps = [
    ":fidl_json",
    "josh/lib:js_libs",
  ]
  binaries = [
    {
      name = "josh"
      shell = true
    },
  ]
}

# "cliff" is the CLI For Fuchsia.  Need a better name.
package("cliff") {
  # TODO(jeremymanson): This is only testonly because sdk:core is.  We should undo that.
  testonly = true
  deps = [ "//src/developer/shell/console:bin" ]
  binaries = [
    {
      name = "cliff"
      shell = true
    },
  ]
  resource_deps = [ ":fidl_json" ]
}
