# Copyright 2018 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/test/test_package.gni")
import("//build/testing/environments.gni")

group("test") {
  testonly = true
  deps = [
    ":audio_device_tests_bin",
    ":audio_fidl_tests",
    ":audio_loopback_tests_bin",
  ]
}

test_package("audio_device_tests") {
  deps = [
    ":audio_device_tests_bin",
  ]

  tests = [
    {
      name = "audio_device_tests"
      environments = basic_envs
    },
  ]
}

executable("audio_device_tests_bin") {
  testonly = true
  output_name = "audio_device_tests"

  sources = [
    "audio_device_main.cc",
    "audio_device_test.cc",
    "audio_device_test.h",
    "audio_tests_shared.h",
    "virtual_audio_device_test.cc",
    "virtual_audio_device_test.h",
    "virtual_audio_system_gain_test.cc",
  ]

  deps = [
    "//garnet/public/lib/component/cpp/testing",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.virtualaudio",
  ]
}

test_package("audio_fidl_tests") {
  deps = [
    ":audio_fidl_tests_bin",
  ]

  tests = [
    {
      name = "audio_fidl_tests"
      environments = basic_envs
    },
  ]
}

executable("audio_fidl_tests_bin") {
  testonly = true
  output_name = "audio_fidl_tests"

  sources = [
    "audio_capturer_test.cc",
    "audio_fidl_main.cc",
    "audio_renderer_sync_test.cc",
    "audio_renderer_test.cc",
    "audio_sync_test.cc",
    "audio_test.cc",
    "audio_tests_shared.h",
    "gain_control_test.cc",
    "gain_control_test.h",
  ]

  deps = [
    "//garnet/public/lib/component/cpp/testing",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.media",
  ]
}

executable("audio_loopback_tests_bin") {
  testonly = true
  output_name = "audio_loopback_tests"

  sources = [
    "audio_loopback_test.cc",
    "audio_tests_shared.h",
  ]

  deps = [
    "//garnet/public/lib/component/cpp/testing",
    "//garnet/public/lib/gtest",
    "//sdk/fidl/fuchsia.media",
    "//sdk/fidl/fuchsia.virtualaudio",
    "//src/lib/fxl",
  ]
}
