# 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/component/config.gni")
import("//src/sys/build/components.gni")

component_config("component_manager_config") {
  sources = [ "config.json" ]
}

fuchsia_component("component_manager_for_test_cmp") {
  testonly = true
  component_name = "component_manager_for_test"
  deps = [ "//src/sys/component_manager:bin" ]
  manifest = "meta/component_manager_for_test.cmx"
}

resource("component_manager_config_resource") {
  deps = [ ":component_manager_config" ]
  sources = [ "${target_gen_dir}/component_manager_config" ]
  outputs = [ "data/component_manager_config" ]
}

fuchsia_package("component_manager_for_test_pkg") {
  testonly = true
  package_name = "component_manager_for_test"
  deps = [
    ":component_manager_config_resource",
    ":component_manager_for_test_cmp",
  ]
}

group("tests") {
  testonly = true
  deps = [ "tests" ]
}

group("component_manager_for_test") {
  testonly = true
  deps = [
    ":component_manager_for_test_pkg",
    "//src/sys/test_manager",
  ]
}
