# Copyright (c) 2018 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_cc_test("color_space_unittest") {
    sources = [ "color_space_unittest.cc" ]
    deps = [
      "..:video_rtp_headers",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("i210_buffer_unittest") {
    sources = [ "i210_buffer_unittest.cc" ]
    deps = [
      "..:video_frame",
      "..:video_frame_i010",
      "../..:scoped_refptr",
      "../../../test:frame_utils",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("i410_buffer_unittest") {
    sources = [ "i410_buffer_unittest.cc" ]
    deps = [
      "..:video_frame",
      "..:video_frame_i010",
      "../..:scoped_refptr",
      "../../../test:frame_utils",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("i422_buffer_unittest") {
    sources = [ "i422_buffer_unittest.cc" ]
    deps = [
      "..:video_frame",
      "../..:scoped_refptr",
      "../../../test:frame_utils",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("i444_buffer_unittest") {
    sources = [ "i444_buffer_unittest.cc" ]
    deps = [
      "..:video_frame",
      "../..:scoped_refptr",
      "../../../test:frame_utils",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("nv12_buffer_unittest") {
    sources = [ "nv12_buffer_unittest.cc" ]
    deps = [
      "..:video_frame",
      "../..:scoped_refptr",
      "../../../test:frame_utils",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("video_adaptation_counters_unittest") {
    sources = [ "video_adaptation_counters_unittest.cc" ]
    deps = [
      "..:video_adaptation",
      "../../../test:test_support",
    ]
  }

  rtc_cc_test("video_bitrate_allocation_unittest") {
    sources = [ "video_bitrate_allocation_unittest.cc" ]
    deps = [
      "..:video_bitrate_allocation",
      "../../../test:test_support",
    ]
  }
}

rtc_source_set("mock_recordable_encoded_frame") {
  testonly = true
  visibility = [ "*" ]
  sources = [ "mock_recordable_encoded_frame.h" ]

  deps = [
    "..:encoded_image",
    "..:recordable_encoded_frame",
    "..:video_frame",
    "..:video_rtp_headers",
    "../..:scoped_refptr",
    "../../../test:test_support",
    "../../units:timestamp",
  ]
}

rtc_source_set("video_frame_matchers") {
  testonly = true
  visibility = [ "*" ]
  sources = [ "video_frame_matchers.h" ]

  deps = [ "../../../test:test_support" ]
}
