# 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/testing/environments.gni")
import("//src/modular/build/executable_package.gni")
import("//src/modular/build/tests_package.gni")

executable("basemgr_launcher_bin") {
  output_name = "basemgr_launcher"
  sources = [ "main.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.modular.internal",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/syslog/cpp",
    "//src/lib/files",
    "//src/lib/fxl",
    "//src/modular/lib/modular_config",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]
  public_deps = [
    "//sdk/fidl/fuchsia.modular.session",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/fdio",
    "//sdk/lib/fidl/cpp",
    "//sdk/lib/sys/cpp",
    "//zircon/system/ulib/async-default",
  ]
}

package("basemgr_launcher") {
  deps = [ ":basemgr_launcher_bin" ]
  binaries = [
    {
      name = "basemgr_launcher"
      shell = true
    },
  ]

  meta = [
    {
      path = "meta/basemgr_launcher.cmx"
      dest = "basemgr_launcher.cmx"
    },
  ]
}

executable("basemgr_launcher_test") {
  testonly = true

  sources = [ "basemgr_launcher_test.cc" ]

  deps = [
    "//sdk/fidl/fuchsia.devicesettings",
    "//sdk/fidl/fuchsia.identity.account",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/fidl/fuchsia.testing.runner",
    "//sdk/lib/sys/cpp/testing:integration",
    "//src/lib/fxl/test:gtest_main",
    "//src/ui/scenic/lib/scenic:scenic",
    "//third_party/googletest:gtest",
    "//zircon/public/lib/zxc",
  ]
}

hermetic_tests_package("basemgr_launcher_tests") {
  deps = [ ":basemgr_launcher_test" ]
}

group("tests") {
  testonly = true

  # basemgr_launcher_test requires framework and tools packages to be available.
  public_deps = [
    ":basemgr_launcher_tests",
    "//src/modular/bundles:framework",
    "//src/modular/bundles:testing",
    "//src/modular/bundles:tools",
  ]
}
