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

group("test") {
  testonly = true
  deps = [
    ":chunk_input_stream_tests",
    ":mpsc_queue_tests",
    ":output_sink_tests",
    ":raw_frames",
    ":raw_frames_test",
    ":raw_frames_test_bin",
    ":sbc_encoder_test",
    ":timestamp_extrapolator_tests",
  ]
}

source_set("raw_frames") {
  testonly = true

  sources = [
    "raw_frames.cc",
  ]

  public = [
    "raw_frames.h",
  ]

  public_deps = [
    "//garnet/lib/media/codec_impl:fourcc",
    "//sdk/fidl/fuchsia.images",
    "//sdk/fidl/fuchsia.mediacodec",
    "//zircon/public/lib/fzl",
  ]
}

source_set("frame_encoder") {
  testonly = true

  sources = [
    "frame_encoder.cc",
  ]

  public = [
    "frame_encoder.h",
  ]

  public_deps = [
    ":raw_frames",
    "//garnet/lib/media/test:codec_client",
    "//garnet/public/lib/component/cpp",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

source_set("raw_audio") {
  testonly = true

  sources = [
    "raw_audio.cc",
  ]

  public = [
    "raw_audio.h",
  ]

  public_deps = [
    "//garnet/public/lib/fxl",
    "//sdk/fidl/fuchsia.mediacodec",
    "//zircon/public/lib/fzl",
  ]
}

executable("sbc_encoder_test_bin") {
  output_name = "sbc_encoder_test"

  testonly = true

  sources = [
    "sbc_encoder_test.cc",
  ]

  deps = [
    ":frame_encoder",
    ":raw_audio",
  ]
}

test_package("sbc_encoder_test") {
  deps = [
    ":sbc_encoder_test_bin",
  ]

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

  resources = [
    {
      path = rebase_path("test_data/third_party/sfx_s16be.au")
      dest = "sfx_s16be.au"
    },
    {
      path = rebase_path("test_data/third_party/sfx_s16be.au.sbc")
      dest = "sfx_s16be.au.sbc"
    },
  ]
}

executable("raw_frames_test_bin") {
  output_name = "raw_frames_test"

  testonly = true

  sources = [
    "test/raw_frames_test.cc",
  ]

  deps = [
    ":raw_frames",
    "//garnet/lib/media/test:frame_sink",
    "//garnet/public/lib/component/cpp",
    "//src/lib/fxl",
    "//third_party/boringssl:crypto",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

test_package("raw_frames_test") {
  deps = [
    ":raw_frames_test_bin",
  ]

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

  resources = [
    {
      path = rebase_path(
              "../../../../test_data/media/third_party/chromium_media_test_data/bear_320x192_40frames.yuv")
      dest = "bear_320x192_40frames.yuv"
    },
  ]
}

executable("timestamp_extrapolator_test_bin") {
  output_name = "timestamp_extrapolator_tests"

  testonly = true

  sources = [
    "timestamp_extrapolator_tests.cc",
  ]

  deps = [
    "//garnet/bin/media/codecs:timestamp_extrapolator",
    "//src/lib/fxl/test:gtest_main",
  ]
}

test_package("timestamp_extrapolator_tests") {
  deps = [
    ":timestamp_extrapolator_test_bin",
  ]

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

executable("mpsc_queue_test_bin") {
  output_name = "mpsc_queue_tests"

  testonly = true

  sources = [
    "mpsc_queue_tests.cc",
  ]

  deps = [
    "//garnet/bin/media/codecs:mpsc_queue",
    "//garnet/public/lib/fsl",
    "//src/lib/fxl/test:gtest_main",
    "//zircon/public/lib/async-loop-cpp",
  ]
}

test_package("mpsc_queue_tests") {
  deps = [
    ":mpsc_queue_test_bin",
  ]

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

source_set("test_codec_packets") {
  testonly = true
  public = [
    "test_codec_packets.h",
  ]
  public_deps = [
    "//garnet/lib/media/codec_impl",
    "//zircon/public/lib/fzl",
  ]
}

executable("chunk_input_stream_test_bin") {
  output_name = "chunk_input_stream_tests"

  testonly = true

  sources = [
    "chunk_input_stream_tests.cc",
  ]

  deps = [
    ":test_codec_packets",
    "//garnet/bin/media/codecs:chunk_input_stream",
    "//src/lib/fxl",
    "//src/lib/fxl/test:gtest_main",
  ]
}

test_package("chunk_input_stream_tests") {
  deps = [
    ":chunk_input_stream_test_bin",
  ]

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

executable("output_sink_test_bin") {
  output_name = "output_sink_tests"

  testonly = true

  sources = [
    "output_sink_tests.cc",
  ]

  deps = [
    ":test_codec_packets",
    "//garnet/bin/media/codecs:output_sink",
    "//src/lib/fxl",
    "//third_party/googletest:gtest_main",
  ]
}

test_package("output_sink_tests") {
  deps = [
    ":output_sink_test_bin",
  ]

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