# Copyright 2014 The Chromium 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("//media/media_options.gni")
import("//testing/libfuzzer/fuzzer_test.gni")

source_set("run_all_unittests") {
  testonly = true
  sources = [
    "run_all_unittests.cc",
  ]

  deps = [
    "//base",
    "//base/test:test_support",
    "//media",
    "//media/base:test_support",
    "//mojo/edk/system",
  ]

  if (is_android) {
    deps += [ "//ui/gl" ]
  }
}

source_set("pipeline_integration_test_base") {
  testonly = true

  if (media_use_ffmpeg) {
    sources = [
      "fake_encrypted_media.cc",
      "fake_encrypted_media.h",
      "mock_media_source.cc",
      "mock_media_source.h",
      "pipeline_integration_test_base.cc",
      "pipeline_integration_test_base.h",
    ]

    public_deps = [
      "//media",
    ]

    deps = [
      "//base",
      "//base/test:test_support",
      "//media:test_support",
      "//media/audio:test_support",
      "//media/base:test_support",
      "//testing/gmock",
      "//testing/gtest",
    ]
  }
}

source_set("pipeline_integration_tests") {
  testonly = true

  # Even if FFmpeg is enabled on Android we don't want these.
  # TODO(watk): Refactor tests that could be made to run on Android. See
  # http://crbug.com/570762
  if (media_use_ffmpeg && !is_android) {
    sources = [
      "pipeline_integration_test.cc",
    ]

    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    deps = [
      ":pipeline_integration_test_base",
      "//base",
      "//media:test_support",
      "//media/base:test_support",
      "//media/mojo/clients",
      "//services/service_manager/public/cpp:service_test_support",

      # Needed for the opus_config
      "//third_party/opus",
      "//url",

      # TODO(dalecurtis): Required since the gmock header is included in the
      # header for pipeline_integration_test_base.h.  This should be moved into
      # the .cc file to avoid the extra dependency here.
      "//testing/gmock",
    ]
  }
}

source_set("pipeline_integration_perftests") {
  testonly = true

  if (media_use_ffmpeg) {
    sources = [
      "pipeline_integration_perftest.cc",
    ]

    deps = [
      ":pipeline_integration_test_base",
      "//media/base:test_support",
      "//testing/gtest",
      "//testing/perf",

      # TODO(dalecurtis): Required since the gmock header is included in the
      # header for pipeline_integration_test_base.h.  This should be moved into
      # the .cc file to avoid the extra dependency here.
      "//testing/gmock",
    ]
  }
}

source_set("mojo_pipeline_integration_tests") {
  testonly = true

  if (media_use_ffmpeg && !is_android) {
    sources = [
      "pipeline_integration_test.cc",
    ]

    defines = [ "MOJO_RENDERER" ]

    configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]

    deps = [
      ":pipeline_integration_test_base",
      "//base",
      "//base/test:test_support",
      "//media:test_support",
      "//media/audio:test_support",
      "//media/base:test_support",
      "//media/mojo/clients",
      "//media/mojo/interfaces",
      "//media/mojo/services",
      "//services/service_manager/public/cpp:service_test_support",
      "//testing/gtest",
      "//ui/gfx:test_support",
      "//ui/gfx/geometry",

      # TODO(dalecurtis): Required since the gmock header is included in the
      # header for pipeline_integration_test_base.h.  This should be moved
      # into the .cc file to avoid the extra dependency here.
      "//testing/gmock",
    ]
  }
}

fuzzer_test("media_pipeline_integration_fuzzer") {
  sources = [
    "pipeline_integration_fuzzertest.cc",
  ]
  deps = [
    ":pipeline_integration_test_base",
    "//base",
    "//media",

    # TODO(dalecurtis): Required since the gmock header is included in the
    # header for pipeline_integration_test_base.h.  This should be
    # moved into the .cc file to avoid the extra dependency here.
    "//testing/gmock",
    "//ui/gfx:test_support",
  ]

  libfuzzer_options = [
    # This is done to avoid DEATH of ASan with "Thread limit exceeded" error.
    "runs=500000",

    # This is done to suppress tons of log messages generated by gmock asserts.
    "close_fd_mask=1",
  ]

  seed_corpus = "media/test/data/"
}
