# Copyright (c) 2014 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("//build/config/ui.gni")
import("../webrtc.gni")
if (is_android) {
  import("//build/config/android/rules.gni")
}

group("test") {
  testonly = true

  deps = [
    ":copy_to_file_audio_capturer",
    ":rtp_test_utils",
    ":test_common",
    ":test_renderer",
    ":test_support",
    ":video_test_common",
    "pc/e2e",
    "pc/e2e/api:peer_connection_quality_test_fixture_api",
  ]

  if (rtc_include_tests) {
    deps += [
      ":test_main",
      ":test_support_unittests",
      "scenario/scenario_tests",
    ]
  }
}

rtc_source_set("video_test_common") {
  visibility = [ "*" ]
  testonly = true
  sources = [
    "fake_texture_frame.cc",
    "fake_texture_frame.h",
    "frame_generator.cc",
    "frame_generator.h",
    "frame_generator_capturer.cc",
    "frame_generator_capturer.h",
    "frame_utils.cc",
    "frame_utils.h",
    "test_video_capturer.cc",
    "test_video_capturer.h",
    "video_codec_settings.h",
  ]

  deps = [
    "..:webrtc_common",
    "../api:libjingle_peerconnection_api",
    "../api:scoped_refptr",
    "../api/task_queue",
    "../api/task_queue:global_task_queue_factory",
    "../api/video:video_frame",
    "../api/video:video_frame_i010",
    "../api/video:video_frame_i420",
    "../api/video_codecs:video_codecs_api",
    "../call:video_stream_api",
    "../common_video",
    "../media:rtc_media_base",
    "../rtc_base:checks",
    "../rtc_base:rtc_base",
    "../rtc_base:rtc_task_queue",
    "../rtc_base/task_utils:repeating_task",
    "../system_wrappers",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

if (!build_with_chromium) {
  if (is_mac || is_ios) {
    rtc_source_set("video_test_mac") {
      testonly = true
      sources = [
        "mac_capturer.h",
        "mac_capturer.mm",
      ]
      deps = [
        ":video_test_common",
        "../api:libjingle_peerconnection_api",
        "../api:scoped_refptr",
        "../modules/video_capture:video_capture_module",
        "../rtc_base:rtc_base",
        "../sdk:base_objc",
        "../sdk:native_api",
        "../sdk:native_video",
        "../sdk:videocapture_objc",
      ]
    }
  }

  rtc_source_set("platform_video_capturer") {
    testonly = true
    sources = [
      "platform_video_capturer.cc",
      "platform_video_capturer.h",
    ]
    deps = [
      ":video_test_common",
      "//third_party/abseil-cpp/absl/memory",
    ]
    if (is_mac || is_ios) {
      deps += [ ":video_test_mac" ]
    } else {
      sources += [
        "vcm_capturer.cc",
        "vcm_capturer.h",
      ]
      deps += [
        "../api:scoped_refptr",
        "../modules/video_capture:video_capture_module",
        "../rtc_base:checks",
        "../rtc_base:logging",
      ]
    }
  }
}

rtc_source_set("rtp_test_utils") {
  testonly = true
  sources = [
    "rtcp_packet_parser.cc",
    "rtcp_packet_parser.h",
    "rtp_file_reader.cc",
    "rtp_file_reader.h",
    "rtp_file_writer.cc",
    "rtp_file_writer.h",
  ]

  deps = [
    "..:webrtc_common",
    "../api:array_view",
    "../modules/rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../rtc_base/system:arch",
    "//testing/gtest",
  ]
}

rtc_source_set("field_trial") {
  visibility = [ "*" ]
  testonly = true
  sources = [
    "field_trial.cc",
    "field_trial.h",
  ]

  deps = [
    "..:webrtc_common",
    "../system_wrappers:field_trial",
  ]
}

rtc_source_set("perf_test") {
  visibility = [ "*" ]
  sources = [
    "testsupport/perf_test.cc",
    "testsupport/perf_test.h",
  ]
  deps = [
    "..:webrtc_common",
    "../api:array_view",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
  ]
}

if (is_ios) {
  rtc_source_set("test_support_objc") {
    testonly = true
    visibility = [ ":test_support" ]
    sources = [
      "ios/coverage_util_ios.h",
      "ios/coverage_util_ios.mm",
      "ios/test_support.h",
      "ios/test_support.mm",
    ]
    deps = [
      ":perf_test",
      "../sdk:helpers_objc",
    ]
    configs += [ ":test_support_objc_config" ]
  }

  config("test_support_objc_config") {
    defines = []

    if (use_clang_coverage) {
      defines += [ "WEBRTC_IOS_ENABLE_COVERAGE" ]
    }
  }
}

config("suppress_warning_4373") {
  if (is_win) {
    cflags = [
      # MSVC has a bug which generates this warning when using mocks; see the
      # section on warning 4373 in he googlemock FAQ. This warning isn't the
      # least relevant for us, anyway.
      "/wd4373",
    ]
  }
}

config("test_main_direct_config") {
  visibility = [ ":*" ]
  defines = [ "UNIT_TEST" ]
}
rtc_source_set("test_support") {
  visibility = [ "*" ]
  testonly = true

  all_dependent_configs = [
    ":suppress_warning_4373",
    "//third_party/googletest:gmock_config",
    "//third_party/googletest:gtest_config",
  ]

  sources = [
    "gmock.h",
    "gtest.h",
  ]

  public_deps = []  # no-presubmit-check TODO(webrtc:8603)
  if (is_ios) {
    public_deps += [ ":test_support_objc" ]  # no-presubmit-check TODO(webrtc:8603)
  }

  public_configs = [ ":test_main_direct_config" ]
  deps = [
    "../rtc_base:rtc_base_approved",
    "//testing/gmock",
    "//testing/gtest",
  ]
}

if (rtc_include_tests) {
  rtc_source_set("test_main_lib") {
    visibility = [ "*" ]
    testonly = true
    sources = [
      "test_main_lib.cc",
      "test_main_lib.h",
    ]

    deps = [
      ":field_trial",
      ":perf_test",
      ":test_support",
      "../rtc_base:checks",
      "../rtc_base:rtc_base",
      "../system_wrappers:field_trial",
      "../system_wrappers:metrics",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/memory",

      # TODO(bugs.webrtc.org/9792): This is needed for downstream projects on
      # Android, where it's replaced by an internal version of fileutils that
      # has a certain flag. Remove this once the internal fileutils has been
      # eliminated.
      "../test:fileutils",
    ]
  }

  rtc_source_set("test_main") {
    visibility = [ "*" ]
    testonly = true
    sources = [
      "test_main.cc",
    ]

    deps = [
      ":test_main_lib",
    ]
  }

  rtc_source_set("video_test_support") {
    testonly = true

    sources = [
      "testsupport/frame_reader.h",
      "testsupport/frame_writer.h",
      "testsupport/mock/mock_frame_reader.h",
      "testsupport/video_frame_writer.cc",
      "testsupport/video_frame_writer.h",
      "testsupport/y4m_frame_reader.cc",
      "testsupport/y4m_frame_writer.cc",
      "testsupport/yuv_frame_reader.cc",
      "testsupport/yuv_frame_writer.cc",
    ]

    deps = [
      ":fileutils",
      ":test_support",
      ":video_test_common",
      "..:webrtc_common",
      "../api:scoped_refptr",
      "../api/video:video_frame",
      "../api/video:video_frame_i420",
      "../common_video",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../system_wrappers",
      "//third_party/abseil-cpp/absl/memory:memory",
      "//third_party/libyuv",
    ]

    if (!is_ios) {
      deps += [ "//third_party:jpeg" ]
      sources += [ "testsupport/jpeg_frame_writer.cc" ]
    } else {
      sources += [ "testsupport/jpeg_frame_writer_ios.cc" ]
    }

    if (is_android) {
      deps += [ "//base:base" ]
    }
  }

  rtc_source_set("test_support_test_artifacts") {
    testonly = true
    sources = [
      "testsupport/test_artifacts.cc",
      "testsupport/test_artifacts.h",
    ]
    deps = [
      ":fileutils",
      "../rtc_base:rtc_base_approved",
      "../rtc_base/system:file_wrapper",
    ]
  }

  test_support_unittests_resources = [
    "../resources/foreman_cif_short.yuv",
    "../resources/video_coding/frame-ethernet-ii.pcap",
    "../resources/video_coding/frame-loopback.pcap",
    "../resources/video_coding/pltype103.rtp",
    "../resources/video_coding/pltype103_header_only.rtp",
    "../resources/video_coding/ssrcs-2.pcap",
    "../resources/video_coding/ssrcs-3.pcap",
  ]

  if (is_ios) {
    bundle_data("test_support_unittests_bundle_data") {
      testonly = true
      sources = test_support_unittests_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  rtc_test("test_support_unittests") {
    deps = [
      ":call_config_utils",
      ":copy_to_file_audio_capturer_unittest",
      ":direct_transport",
      ":fake_video_codecs",
      ":fileutils",
      ":fileutils_unittests",
      ":perf_test",
      ":rtp_test_utils",
      ":test_common",
      ":test_main",
      ":test_support",
      ":test_support_test_artifacts",
      ":video_test_common",
      ":video_test_support",
      "../api:create_simulcast_test_fixture_api",
      "../api:scoped_refptr",
      "../api:simulcast_test_fixture_api",
      "../api/test/video:function_video_factory",
      "../api/video:builtin_video_bitrate_allocator_factory",
      "../api/video:video_frame",
      "../api/video:video_frame_i420",
      "../call:video_stream_api",
      "../modules/rtp_rtcp:rtp_rtcp",
      "../modules/video_capture",
      "../modules/video_coding:simulcast_test_fixture_impl",
      "../rtc_base:rtc_base_approved",
      "../rtc_base/system:file_wrapper",
      "../test:single_threaded_task_queue",
      "pc/e2e:e2e_unittests",
      "scenario:scenario_unittests",
      "//testing/gmock",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/abseil-cpp/absl/strings",
    ]
    sources = [
      "call_config_utils_unittest.cc",
      "direct_transport_unittest.cc",
      "fake_vp8_encoder_unittest.cc",
      "frame_generator_unittest.cc",
      "rtp_file_reader_unittest.cc",
      "rtp_file_writer_unittest.cc",
      "single_threaded_task_queue_unittest.cc",
      "testsupport/perf_test_unittest.cc",
      "testsupport/test_artifacts_unittest.cc",
      "testsupport/video_frame_writer_unittest.cc",
      "testsupport/y4m_frame_reader_unittest.cc",
      "testsupport/y4m_frame_writer_unittest.cc",
      "testsupport/yuv_frame_reader_unittest.cc",
      "testsupport/yuv_frame_writer_unittest.cc",
    ]

    data = test_support_unittests_resources
    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]
      shard_timeout = 900
    }

    if (is_ios) {
      deps += [ ":test_support_unittests_bundle_data" ]
    }

    if (!is_android && !build_with_chromium) {
      # This is needed in order to avoid:
      # undefined symbol: webrtc::videocapturemodule::VideoCaptureImpl::Create
      deps += [ "../modules/video_capture:video_capture_internal_impl" ]
    }
  }
}

if (is_ios) {
  rtc_source_set("fileutils_ios_objc") {
    visibility = [
      ":fileutils",
      ":fileutils_override_impl",
    ]
    sources = [
      "testsupport/ios_file_utils.h",
      "testsupport/ios_file_utils.mm",
    ]
    deps = [
      "..:webrtc_common",
      "../rtc_base:checks",
      "../rtc_base:rtc_base_approved",
      "../sdk:helpers_objc",
    ]
  }
}

if (is_mac) {
  rtc_source_set("fileutils_mac_objc") {
    visibility = [
      ":fileutils",
      ":fileutils_override_impl",
    ]
    sources = [
      "testsupport/mac_file_utils.h",
      "testsupport/mac_file_utils.mm",
    ]
    deps = [
      "../rtc_base:checks",
    ]
  }
}

rtc_source_set("fileutils") {
  testonly = true
  visibility = [ "*" ]
  sources = [
    "testsupport/file_utils.cc",
    "testsupport/file_utils.h",
  ]
  deps = [
    ":fileutils_override_api",
    ":fileutils_override_impl",
    "..:webrtc_common",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../rtc_base/system:arch",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
  if (is_ios) {
    deps += [ ":fileutils_ios_objc" ]
  }
  if (is_mac) {
    deps += [ ":fileutils_mac_objc" ]
  }
  if (is_win) {
    deps += [ "../rtc_base:rtc_base" ]
  }
}

# We separate header into own target to make it possible for downstream
# projects to override implementation.
rtc_source_set("fileutils_override_api") {
  testonly = true
  sources = [
    "testsupport/file_utils_override.h",
  ]
}

rtc_source_set("fileutils_override_impl") {
  testonly = true
  visibility = [ ":fileutils" ]
  sources = [
    "testsupport/file_utils_override.cc",
  ]
  deps = [
    ":fileutils_override_api",
    "..:webrtc_common",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../rtc_base/system:arch",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
  if (is_ios) {
    deps += [ ":fileutils_ios_objc" ]
  }
  if (is_mac) {
    deps += [ ":fileutils_mac_objc" ]
  }
  if (is_win) {
    deps += [ "../rtc_base:rtc_base" ]
  }
}

rtc_source_set("run_test") {
  testonly = true
  if (is_mac) {
    public_deps = [  # no-presubmit-check TODO(webrtc:8603)
      ":run_test_objc",
    ]
  } else {
    public_deps = [  # no-presubmit-check TODO(webrtc:8603)
      ":run_test_generic",
    ]
  }
}

rtc_source_set("run_test_interface") {
  sources = [
    "run_test.h",
  ]
}

if (is_mac) {
  rtc_source_set("run_test_objc") {
    testonly = true
    visibility = [ ":run_test" ]
    sources = [
      "mac/run_test.mm",
    ]
    deps = [
      ":run_test_interface",
    ]
  }
}

rtc_source_set("run_test_generic") {
  testonly = true
  visibility = [ ":run_test" ]
  sources = [
    "run_test.cc",
  ]
  deps = [
    ":run_test_interface",
  ]
}

rtc_source_set("fileutils_unittests") {
  testonly = true
  visibility = [ ":*" ]  # Only targets in this file can depend on this.
  sources = [
    "testsupport/file_utils_unittest.cc",
  ]
  deps = [
    ":fileutils",
    ":test_support",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "//testing/gtest",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("direct_transport") {
  visibility = [ "*" ]
  testonly = true
  sources = [
    "direct_transport.cc",
    "direct_transport.h",
  ]
  deps = [
    "..:webrtc_common",
    "../api:simulated_network_api",
    "../api:transport_api",
    "../call:call_interfaces",
    "../call:simulated_packet_receiver",
    "../modules/rtp_rtcp",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:sequenced_task_checker",
    "../system_wrappers",
    "//third_party/abseil-cpp/absl/memory",
  ]
  public_deps = [  # no-presubmit-check TODO(webrtc:8603)
    ":single_threaded_task_queue",
    "../call:fake_network",
  ]
}

rtc_source_set("single_threaded_task_queue") {
  testonly = true
  sources = [
    "single_threaded_task_queue.cc",
    "single_threaded_task_queue.h",
  ]
  deps = [
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("fake_video_codecs") {
  allow_poison = [ "software_video_codecs" ]
  visibility = [ "*" ]
  sources = [
    "configurable_frame_size_encoder.cc",
    "configurable_frame_size_encoder.h",
    "fake_decoder.cc",
    "fake_decoder.h",
    "fake_encoder.cc",
    "fake_encoder.h",
    "fake_vp8_decoder.cc",
    "fake_vp8_decoder.h",
    "fake_vp8_encoder.cc",
    "fake_vp8_encoder.h",
  ]
  deps = [
    "..:webrtc_common",
    "../api:scoped_refptr",
    "../api/task_queue",
    "../api/video:encoded_image",
    "../api/video:video_bitrate_allocation",
    "../api/video:video_frame",
    "../api/video:video_frame_i420",
    "../api/video_codecs:create_vp8_temporal_layers",
    "../api/video_codecs:video_codecs_api",
    "../common_video:common_video",
    "../modules:module_api",
    "../modules/video_coding:codec_globals_headers",
    "../modules/video_coding:video_codec_interface",
    "../modules/video_coding:video_coding_utility",
    "../modules/video_coding:webrtc_h264",
    "../modules/video_coding:webrtc_vp8",
    "../modules/video_coding:webrtc_vp9",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../rtc_base:rtc_task_queue",
    "../rtc_base:sequenced_task_checker",
    "../system_wrappers",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("test_common") {
  testonly = true
  sources = [
    "call_test.cc",
    "call_test.h",
    "drifting_clock.cc",
    "drifting_clock.h",
    "encoder_settings.cc",
    "encoder_settings.h",
    "fake_videorenderer.h",
    "layer_filtering_transport.cc",
    "layer_filtering_transport.h",
    "mock_transport.cc",
    "mock_transport.h",
    "null_transport.cc",
    "null_transport.h",
    "rtp_rtcp_observer.h",
    "statistics.cc",
    "statistics.h",
    "video_decoder_proxy_factory.h",
    "video_encoder_proxy_factory.h",
  ]
  if (current_os != "winuwp") {
    # The filtering of *_win.cc is not done for WinUWP (intentionally) as
    # most _win.cc files are compatible with WinUWP. However, the
    # peek/dispatch Win32 runloops are entirely WinUWP incompatible thus
    # WinUWP uses the generic runloop as defined for non-Windows targets.
    sources += [ "win/run_loop_win.cc" ]
  }
  if (!is_win || current_os == "winuwp") {
    sources += [
      "run_loop.cc",
      "run_loop.h",
    ]
  }

  deps = [
    ":direct_transport",
    ":fake_video_codecs",
    ":fileutils",
    ":rtp_test_utils",
    ":test_support",
    ":video_test_common",
    "../:webrtc_common",
    "../api:libjingle_peerconnection_api",
    "../api:scoped_refptr",
    "../api:simulated_network_api",
    "../api:transport_api",
    "../api/audio_codecs:builtin_audio_decoder_factory",
    "../api/audio_codecs:builtin_audio_encoder_factory",
    "../api/test/video:function_video_factory",
    "../api/video:builtin_video_bitrate_allocator_factory",
    "../api/video:video_bitrate_allocator_factory",
    "../api/video:video_frame",
    "../api/video_codecs:video_codecs_api",
    "../audio",
    "../call",
    "../call:call_interfaces",
    "../call:fake_network",
    "../call:rtp_interfaces",
    "../call:rtp_sender",
    "../call:simulated_network",
    "../call:simulated_packet_receiver",
    "../call:video_stream_api",
    "../logging:rtc_event_log_api",
    "../logging:rtc_event_log_impl_base",
    "../media:rtc_internal_video_codecs",
    "../media:rtc_media_base",
    "../modules/audio_device",
    "../modules/audio_device:audio_device_impl",
    "../modules/audio_device:mock_audio_device",
    "../modules/audio_mixer:audio_mixer_impl",
    "../modules/audio_processing",
    "../modules/rtp_rtcp",
    "../modules/rtp_rtcp:mock_rtp_rtcp",
    "../modules/rtp_rtcp:rtp_rtcp_format",
    "../modules/rtp_rtcp:rtp_video_header",
    "../modules/video_coding:codec_globals_headers",
    "../modules/video_coding:video_coding_utility",
    "../modules/video_coding:webrtc_h264",
    "../modules/video_coding:webrtc_multiplex",
    "../modules/video_coding:webrtc_vp8",
    "../modules/video_coding:webrtc_vp9",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../system_wrappers",
    "../system_wrappers:field_trial",
    "../video",
    "//testing/gtest",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
  if (!is_android && !build_with_chromium) {
    deps += [ "../modules/video_capture:video_capture_internal_impl" ]
  }
}

rtc_source_set("test_renderer") {
  public_deps = [  # no-presubmit-check TODO(webrtc:8603)
    ":test_renderer_generic",
  ]
  testonly = true
  if (is_mac) {
    public_deps += [ ":test_renderer_objc" ]  # no-presubmit-check TODO(webrtc:8603)
  }
}

if (is_mac) {
  rtc_source_set("test_renderer_objc") {
    testonly = true
    visibility = [ ":test_renderer" ]
    sources = [
      "mac/video_renderer_mac.h",
      "mac/video_renderer_mac.mm",
    ]
    deps = [
      ":test_renderer_generic",
      "../rtc_base:rtc_base_approved",
    ]
    libs = [
      "Cocoa.framework",
      "OpenGL.framework",
      "CoreVideo.framework",
    ]
  }
}

rtc_source_set("test_renderer_generic") {
  testonly = true
  visibility = [
    ":test_renderer",
    ":test_renderer_objc",
  ]
  libs = []
  sources = [
    "video_renderer.cc",
    "video_renderer.h",
    "win/d3d_renderer.cc",
    "win/d3d_renderer.h",
  ]
  deps = [
    ":test_support",
    "..:webrtc_common",
    "../api:scoped_refptr",
    "../api/video:video_frame",
    "../common_video",
    "../media:rtc_media_base",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "//testing/gtest",
  ]
  if (!(is_linux && rtc_use_x11) && !is_mac && !is_win) {
    sources += [ "null_platform_renderer.cc" ]
  }
  if ((is_linux && rtc_use_x11) || is_mac) {
    sources += [
      "gl/gl_renderer.cc",
      "gl/gl_renderer.h",
    ]
  }

  if (is_linux && rtc_use_x11) {
    sources += [
      "linux/glx_renderer.cc",
      "linux/glx_renderer.h",
      "linux/video_renderer_linux.cc",
    ]
    libs += [
      "Xext",
      "X11",
      "GL",
    ]
  }
  if (is_android) {
    libs += [
      "GLESv2",
      "log",
    ]
  }
}

rtc_source_set("audio_codec_mocks") {
  testonly = true
  sources = [
    # TODO(nisse): Move these factories to their own target, to avoid
    # unnecessary dependencies on gmock and gtest.
    "audio_decoder_proxy_factory.h",
    "function_audio_decoder_factory.h",
    "mock_audio_decoder.cc",
    "mock_audio_decoder.h",
    "mock_audio_decoder_factory.h",
    "mock_audio_encoder.cc",
    "mock_audio_encoder.h",
    "mock_audio_encoder_factory.h",
  ]

  deps = [
    ":test_support",
    "../api:array_view",
    "../api:scoped_refptr",
    "../api/audio_codecs:audio_codecs_api",
    "../api/audio_codecs:builtin_audio_decoder_factory",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

rtc_source_set("copy_to_file_audio_capturer") {
  testonly = true
  sources = [
    "testsupport/copy_to_file_audio_capturer.cc",
    "testsupport/copy_to_file_audio_capturer.h",
  ]
  deps = [
    "../api:array_view",
    "../common_audio:common_audio",
    "../modules/audio_device:audio_device_impl",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/memory",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_source_set("copy_to_file_audio_capturer_unittest") {
  testonly = true
  sources = [
    "testsupport/copy_to_file_audio_capturer_unittest.cc",
  ]
  deps = [
    ":copy_to_file_audio_capturer",
    ":fileutils",
    ":test_support",
    "../modules/audio_device:audio_device_impl",
    "//third_party/abseil-cpp/absl/memory",
  ]
}

if (!build_with_chromium && is_android) {
  rtc_android_library("native_test_java") {
    testonly = true
    java_files = [
      "android/org/webrtc/native_test/RTCNativeUnitTest.java",
      "android/org/webrtc/native_test/RTCNativeUnitTestActivity.java",
    ]
    deps = [
      "../rtc_base:base_java",
      "//testing/android/native_test:native_test_java",
    ]
  }
}

rtc_source_set("call_config_utils") {
  sources = [
    "call_config_utils.cc",
    "call_config_utils.h",
  ]
  deps = [
    "../call:call_interfaces",
    "../call:video_stream_api",
    "../rtc_base:rtc_json",
  ]
}
