# 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/cpp/sdk_source_set.gni")
import("//build/fidl/fidl.gni")
import("//build/package.gni")
import("//build/test/test_package.gni")

group("unittests") {
  testonly = true

  deps = [ ":test_harness_impl_unittest" ]
}

source_set("test_harness_fixture") {
  testonly = true

  public_configs = [ "//sdk/config" ]

  sources = [
    "fake_graphical_presenter.cc",
    "fake_graphical_presenter.h",
    "fake_module.cc",
    "fake_module.h",
    "fake_session_launcher_component.cc",
    "fake_session_launcher_component.h",
    "fake_session_shell.cc",
    "fake_session_shell.h",
    "fake_settings_intl.cc",
    "fake_settings_intl.h",
    "fake_story_shell.cc",
    "fake_story_shell.h",
    "test_harness_fixture.cc",
    "test_harness_fixture.h",
  ]

  public_deps = [ "//sdk/lib/modular/testing/cpp" ]

  deps = [
    "//garnet/public/lib/svc/cpp",
    "//sdk/fidl/fuchsia.element",
    "//sdk/fidl/fuchsia.intl",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/fidl/fuchsia.settings",
    "//sdk/lib/modular/cpp",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:integration",
    "//sdk/lib/syslog/cpp",
    "//src/modular/lib/testing:session_shell_impl",
    "//third_party/googletest:gtest",
  ]
}

executable("test_harness_fixture_test_bin") {
  testonly = true

  sources = [ "test_harness_fixture_test.cc" ]

  deps = [
    ":test_harness_fixture",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/sys/cpp",
    "//sdk/lib/sys/cpp/testing:integration",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//third_party/googletest:gmock",
  ]
}

test_package("test_harness_fixture_test") {
  tests = [
    {
      name = "test_harness_fixture_test_bin"
      environments = basic_envs
    },
  ]

  deps = [ ":test_harness_fixture_test_bin" ]
}

source_set("test_harness_impl") {
  testonly = true

  sources = [
    "test_harness_impl.cc",
    "test_harness_impl.h",
  ]

  public_deps = [
    "//sdk/fidl/fuchsia.cobalt",
    "//sdk/fidl/fuchsia.devicesettings",
    "//sdk/fidl/fuchsia.identity.account",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/fidl/fuchsia.settings",
    "//sdk/fidl/fuchsia.stash",
    "//sdk/fidl/fuchsia.sys",
    "//sdk/lib/modular/cpp",
    "//sdk/lib/sys/cpp/testing:enclosing_environment",
    "//src/lib/fsl",
    "//src/modular/lib/lifecycle/cpp",
    "//src/modular/lib/modular_config",
    "//zircon/system/ulib/async-loop:async-loop-cpp",
    "//zircon/system/ulib/async-loop:async-loop-default",
  ]

  deps = [
    "//src/modular/lib/fidl:json_xdr",
    "//src/modular/lib/modular_config:json_xdr",
    "//src/modular/lib/pseudo_dir:pseudo_dir_utils",
  ]
}

source_set("test_harness_impl_unittest") {
  testonly = true

  sources = [ "test_harness_impl_unittest.cc" ]

  deps = [
    ":test_harness_impl",
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.modular.testing",
    "//sdk/lib/sys/cpp/testing:integration",
    "//sdk/lib/sys/cpp/testing:unit",
    "//src/lib/fxl/test:gtest_main",
    "//src/modular/lib/modular_config",
    "//src/modular/lib/pseudo_dir:pseudo_dir_server",
    "//zircon/public/lib/fidl",
  ]
}
