# Copyright(c) 2020 The WebRTC project authors.All Rights Reserved.
#
# Use of this source code is governed by a BSD - style license
# that can be found in the LICENSE file in the root of the source
# tree.An additional intellectual property rights grant can be found
# in the file PATENTS.All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("../../../webrtc.gni")

if (rtc_include_tests) {
  rtc_source_set("mock_task_queue") {
    testonly = true
    visibility = [ "*" ]
    sources = [ "mock_task_queue.h" ]
    deps = [
      "../../../api/task_queue",
      "../../../api/task_queue/test:mock_task_queue_base",
      "//third_party/abseil-cpp/absl/strings:string_view",
    ]
  }

  if (!build_with_chromium) {
    rtc_library("voip_core_unittests") {
      testonly = true
      sources = [ "voip_core_unittest.cc" ]
      deps = [
        "..:voip_core",
        "../../../api:make_ref_counted",
        "../../../api:scoped_refptr",
        "../../../api/audio:audio_processing",
        "../../../api/audio_codecs:audio_codecs_api",
        "../../../api/audio_codecs:builtin_audio_decoder_factory",
        "../../../api/audio_codecs:builtin_audio_encoder_factory",
        "../../../api/voip:voip_api",
        "../../../modules/audio_device:mock_audio_device",
        "../../../modules/audio_processing:mocks",
        "../../../test:create_test_environment",
        "../../../test:mock_transport",
        "../../../test:run_loop",
        "../../../test:test_support",
      ]
    }
  }

  rtc_library("audio_channel_unittests") {
    testonly = true
    sources = [ "audio_channel_unittest.cc" ]
    deps = [
      ":mock_task_queue",
      "..:audio_channel",
      "../../../api:make_ref_counted",
      "../../../api:scoped_refptr",
      "../../../api/audio:audio_frame_api",
      "../../../api/audio:audio_mixer_api",
      "../../../api/audio_codecs:audio_codecs_api",
      "../../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../../api/environment",
      "../../../api/environment:environment_factory",
      "../../../api/voip:voip_api",
      "../../../modules/audio_mixer:audio_mixer_impl",
      "../../../modules/audio_mixer:audio_mixer_test_utils",
      "../../../modules/rtp_rtcp:rtp_rtcp_format",
      "../../../system_wrappers",
      "../../../test:create_test_field_trials",
      "../../../test:mock_transport",
      "../../../test:test_support",
      "//third_party/abseil-cpp/absl/functional:any_invocable",
    ]
  }

  rtc_library("audio_ingress_unittests") {
    testonly = true
    sources = [ "audio_ingress_unittest.cc" ]
    deps = [
      "..:audio_egress",
      "..:audio_ingress",
      "../../../api:field_trials",
      "../../../api:rtp_headers",
      "../../../api:scoped_refptr",
      "../../../api/audio:audio_frame_api",
      "../../../api/audio:audio_mixer_api",
      "../../../api/audio_codecs:audio_codecs_api",
      "../../../api/audio_codecs:builtin_audio_decoder_factory",
      "../../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../../api/environment",
      "../../../api/neteq:neteq_api",
      "../../../api/units:time_delta",
      "../../../api/units:timestamp",
      "../../../modules/audio_mixer:audio_mixer_test_utils",
      "../../../modules/rtp_rtcp",
      "../../../rtc_base:rtc_event",
      "../../../test:create_test_environment",
      "../../../test:mock_transport",
      "../../../test:test_support",
      "../../../test/time_controller",
    ]
  }

  rtc_library("audio_egress_unittests") {
    testonly = true
    sources = [ "audio_egress_unittest.cc" ]
    deps = [
      "..:audio_egress",
      "../../../api:rtp_headers",
      "../../../api:scoped_refptr",
      "../../../api:transport_api",
      "../../../api/audio:audio_frame_api",
      "../../../api/audio_codecs:audio_codecs_api",
      "../../../api/audio_codecs:builtin_audio_encoder_factory",
      "../../../api/environment",
      "../../../api/units:time_delta",
      "../../../api/units:timestamp",
      "../../../modules/audio_mixer:audio_mixer_test_utils",
      "../../../modules/rtp_rtcp",
      "../../../modules/rtp_rtcp:rtp_rtcp_format",
      "../../../rtc_base:rtc_event",
      "../../../test:create_test_environment",
      "../../../test:mock_transport",
      "../../../test:test_support",
      "../../../test/time_controller",
    ]
  }
}
