# Copyright 2021 The Cobalt Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

target(gtest_target_type, "player_filter_tests") {
  testonly = true

  sources = [
    "//starboard/common/test_main.cc",
    "//starboard/testing/fake_graphics_context_provider.cc",
    "//starboard/testing/fake_graphics_context_provider.h",
    "adaptive_audio_decoder_test.cc",
    "audio_channel_layout_mixer_test.cc",
    "audio_decoder_test.cc",
    "audio_renderer_internal_test.cc",
    "file_cache_reader_test.cc",
    "media_time_provider_impl_test.cc",
    "player_components_test.cc",
    "video_decoder_test.cc",
    "video_decoder_test_fixture.cc",
    "video_decoder_test_fixture.h",
    "video_frame_cadence_pattern_generator_test.cc",
    "video_frame_rate_estimator_test.cc",
  ]

  public_deps = [
    ":test_util",
    "//starboard/shared/starboard/media:media_util",
    "//testing/gmock",
  ]

  deps = cobalt_platform_dependencies

  data_deps =
      [ "//starboard/shared/starboard/player:player_download_test_data" ]
}

if (host_os != "win") {
  target(final_executable_type, "player_filter_benchmarks") {
    testonly = true

    sources = [
      "//starboard/common/benchmark_main.cc",
      "audio_decoder_benchmark.cc",
    ]

    public_deps = [
      ":test_util",
      "//third_party/google_benchmark",
    ]

    deps = cobalt_platform_dependencies
  }
}

static_library("test_util") {
  testonly = true

  sources = [
    "test_util.cc",
    "test_util.h",
  ]

  public_configs = [ "//starboard/build/config:starboard_implementation" ]

  public_deps = [
    "//starboard",
    "//starboard/shared/starboard/player:player_download_test_data",
    "//starboard/shared/starboard/player:video_dmp",
    "//testing/gtest",
  ]
  if (gl_type != "none") {
    public_deps += [ "//starboard/egl_and_gles" ]
  }
}
