# 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/components.gni")
import("//build/test.gni")

group("tests") {
  testonly = true
  deps = [ ":as370-audio-lib-tests" ]
}

test("syn-audio-in-test-bin") {
  if (is_fuchsia) {
    configs += [
      "//build/unification/config:zircon-migrated",
      "//build/config:all_source",
    ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "syn-audio-in-test"
  sources = [
    "../syn-audio-in.cc",
    "syn-audio-in-test.cc",
  ]
  deps = [
    "//sdk/banjo/fuchsia.hardware.shareddma",
    "//sdk/banjo/fuchsia.hardware.shareddma:fuchsia.hardware.shareddma_mock",
    "//src/devices/lib/as370",
    "//src/devices/lib/mmio",
    "//src/devices/testing/mock-mmio-reg",
    "//src/devices/testing/no_ddk",
    "//src/lib/ddk",
    "//src/lib/ddktl",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/mock-function",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/fzl",
  ]
}

test("audio-dsp-test-bin") {
  if (is_fuchsia) {
    configs += [ "//build/unification/config:zircon-migrated" ]
  }
  if (is_fuchsia) {
    fdio_config = [ "//build/config/fuchsia:fdio_config" ]
    if (configs + fdio_config - fdio_config != configs) {
      configs -= fdio_config
    }
  }
  output_name = "audio-dsp-test"
  sources = [
    "../audio-dsp.cc",
    "audio-dsp-test.cc",
  ]
  deps = [
    "//sdk/lib/fdio",
    "//src/devices/lib/as370",
    "//zircon/public/lib/fbl",
    "//zircon/public/lib/hwreg",
    "//zircon/public/lib/mock-function",
    "//zircon/public/lib/pretty",
    "//zircon/public/lib/zx",
    "//zircon/public/lib/zxtest",
    "//zircon/system/ulib/fzl",
  ]
}

fuchsia_unittest_component("audio-dsp-test") {
  deps = [ ":audio-dsp-test-bin" ]
}

fuchsia_unittest_component("syn-audio-in-test") {
  deps = [ ":syn-audio-in-test-bin" ]
}

fuchsia_test_package("as370-audio-lib-tests") {
  test_components = [
    ":audio-dsp-test",
    ":syn-audio-in-test",
  ]
}
