# Copyright 2016 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")

config("internal") {
  include_dirs = [
    ".",
    "$root_gen_dir/peridot",
  ]
}

package("maxwell_agents") {
  testonly = true
  deprecated_system_image = true

  deps = [
    "//peridot/bin/acquirers",
    "//peridot/bin/agents",
    "//peridot/bin/agents:carmen_sandiego",
    "//peridot/bin/agents:ideas",
  ]

  binaries = [
    {
      name = "acquirers/story_info_main"
    },
    {
      name = "agents/carmen_sandiego"
    },
    {
      name = "agents/clipboard"
    },
    {
      name = "agents/ideas"
    },
    {
      name = "agents/basic_text_listener"
      dest = "agents/maxwell_btl"
    },
    {
      name = "agents/maxwell_entity_selector"
    },
    {
      name = "agents/maxwell_proposal_maker"
    },
  ]
}

executable("maxwell_unittests") {
  testonly = true

  deps = [
    "//garnet/public/lib/test_runner/cpp:gtest_main",
    "//peridot/bin/context_engine:unittests",
    "//peridot/bin/module_resolver:unittests",
    "//peridot/bin/suggestion_engine:unittests",
  ]
}

package("maxwell_tests") {
  testonly = true
  deprecated_system_image = true

  deps = [
    ":maxwell_unittests",
    "//peridot/tests/maxwell_integration",
  ]

  tests = [
    {
      name = "maxwell_unittests"
      dest = "modular_tests/maxwell_unittests"
    },
    {
      name = "context_engine_test"
      dest = "maxwell/context_engine_test"
    },
    {
      name = "suggestion_engine_test"
      dest = "maxwell/suggestion_engine_test"
    },
  ]
}

# This target allows building just the Modular files. It's intended to be
# used as the build target before calling push-package.py to perform an
# incremental update on the device. See
# https://fuchsia.googlesource.com/scripts/+/HEAD/README.md for instructions.
group("modular_all") {
  testonly = true

  deps = [
    ":modular_unittests",
    "bin/device_runner",
    "bin/device_runner:dev_device_shell",
    "bin/device_runner_monitor",
    "bin/story_runner:dev_story_shell",
    "bin/user_runner",
    "bin/user_runner:dev_user_shell",
    "examples:modular_examples",
    "tests:modular_tests",
    "tests/benchmark:modular_benchmarks",
  ]
}

executable("modular_unittests_bin") {
  testonly = true
  output_name = "modular_unittests"

  deps = [
    "//third_party/googletest:gtest_main",
    "//peridot/bin/agent_runner:unittests",
    "//peridot/bin/agents/clipboard:unittests",
    "//peridot/bin/device_runner:unittests",
    "//peridot/bin/entity:unittests",
    "//peridot/bin/story_runner:unittests",
    "//peridot/examples/counter_cpp:unittests",
    "//peridot/public/lib/entity/cpp:json_unittest",
  ]
}

package("modular_unittests") {
  testonly = true
  deprecated_system_image = true

  deps = [
    ":modular_unittests_bin",
  ]

  tests = [
    {
      name = "modular_unittests"
    },
  ]
}
