# Copyright 2017 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/package.gni")
import("//peridot/build/module_manifest.gni")

group("common") {
  testonly = true

  public_deps = [
    ":common_active_module_bin",
    ":common_null_module_bin",
  ]
}

executable("common_null_module_bin") {
  testonly = true

  output_name = "common_null_module"

  sources = [
    "common_null_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

package("common_null_module") {
  testonly = true

  deps = [
    ":common_null_module_bin",
  ]

  binary = "common_null_module"

  meta = [
    {

      path = "common_null_module.cmx"
      dest = "common_null_module.cmx"
    },
  ]
}

executable("common_active_module_bin") {
  testonly = true

  output_name = "common_active_module"

  sources = [
    "common_active_module.cc",
  ]

  deps = [
    ":defs",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//peridot/public/lib/integration_testing/cpp",
    "//peridot/public/fidl/fuchsia.modular",
    "//peridot/public/lib/app_driver/cpp:module_driver",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

package("common_active_module") {
  testonly = true

  deps = [
    ":common_active_module_bin",
  ]

  binary = "common_active_module"

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

initial_module_packages("common_module_index") {
  packages = [
    "common_active_module",
    "common_null_module",
  ]
}

source_set("defs") {
  testonly = true

  sources = [
    "defs.h",
  ]
}
