# Copyright 2016 The Fuchsia 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("//build/package.gni")
import("//build/test/test_package.gni")

package("mediaplayer") {
  deps = [
    ":mediaplayer_bin",
  ]

  binary = "mediaplayer"

  meta = [
    {
      path = rebase_path("meta/mediaplayer.cmx")
      dest = "mediaplayer.cmx"
    },
  ]
}

executable("mediaplayer_bin") {
  output_name = "mediaplayer"

  sources = [
    "main.cc",
    "player_impl.cc",
    "player_impl.h",
    "source_impl.cc",
    "source_impl.h",
  ]

  deps = [
    "//garnet/bin/mediaplayer/core",
    "//garnet/bin/mediaplayer/decode",
    "//garnet/bin/mediaplayer/demux",
    "//garnet/bin/mediaplayer/fidl",
    "//garnet/bin/mediaplayer/graph",
    "//garnet/bin/mediaplayer/graph_create",
    "//garnet/bin/mediaplayer/render",
    "//garnet/bin/mediaplayer/util",
    "//garnet/public/fidl/fuchsia.media",
    "//garnet/public/fidl/fuchsia.mediaplayer",
    "//garnet/public/fidl/fuchsia.ui.viewsv1",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/fxl",
    "//garnet/public/lib/media/timeline",
    "//garnet/public/lib/ui/base_view/cpp",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/trace-provider",
    "//zircon/public/lib/zx",
  ]
}

executable("mediaplayer_test_util_bin") {
  output_name = "mediaplayer_test_util"

  sources = [
    "test/command_queue.cc",
    "test/command_queue.h",
    "test/test_util_main.cc",
    "test/mediaplayer_test_util_params.cc",
    "test/mediaplayer_test_util_params.h",
    "test/mediaplayer_test_util_view.cc",
    "test/mediaplayer_test_util_view.h",
  ]

  deps = [
    ":mediaplayer_bin",
    "//garnet/bin/mediaplayer/graph",
    "//garnet/public/fidl/fuchsia.mediaplayer",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/ui/base_view/cpp",
    "//garnet/public/lib/url",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/zx",
  ]
}

package("mediaplayer_test_util") {
  binary = "mediaplayer_test_util"

  testonly = true

  deps = [
    ":mediaplayer_test_util_bin",
  ]

  meta = [
    {
      path = rebase_path("meta/mediaplayer_test_util.cmx")
      dest = "mediaplayer_test_util.cmx"
    },
  ]
}

executable("tests") {
  output_name = "mediaplayer_tests"

  testonly = true

  sources = [
    "test/command_queue.cc",
    "test/command_queue.h",
    "test/fakes/fake_audio.h",
    "test/fakes/fake_audio_renderer.cc",
    "test/fakes/fake_audio_renderer.h",
    "test/fakes/fake_image_pipe.cc",
    "test/fakes/fake_image_pipe.h",
    "test/fakes/fake_scenic.cc",
    "test/fakes/fake_scenic.h",
    "test/fakes/fake_session.cc",
    "test/fakes/fake_session.h",
    "test/fakes/fake_view.cc",
    "test/fakes/fake_view.h",
    "test/fakes/fake_view_manager.cc",
    "test/fakes/fake_view_manager.h",
    "test/fakes/fake_wav_reader.cc",
    "test/fakes/fake_wav_reader.h",
    "test/fakes/packet_info.cc",
    "test/fakes/packet_info.h",
    "test/mediaplayer_tests.cc",
    "test/sink_feeder.cc",
    "test/sink_feeder.h",
  ]

  deps = [
    ":mediaplayer_bin",
    "//garnet/bin/mediaplayer/graph",
    "//garnet/public/fidl/fuchsia.mediaplayer",
    "//garnet/public/lib/component/cpp",
    "//garnet/public/lib/component/cpp/testing",
    "//garnet/public/lib/fsl",
    "//garnet/public/lib/gtest",
    "//garnet/public/lib/ui/base_view/cpp",
    "//garnet/public/lib/url",
    "//third_party/googletest:gtest_main",
    "//zircon/public/lib/async-loop-cpp",
    "//zircon/public/lib/hid",
    "//zircon/public/lib/zx",
  ]
}

test_package("mediaplayer_tests") {
  deps = [
    ":tests",
    "//garnet/bin/mediaplayer/core:tests",
    "//garnet/bin/mediaplayer/demux:tests",
    "//garnet/bin/mediaplayer/util:tests",
  ]

  tests = [
    {
      name = "mediaplayer_demux_tests"
    },

    {
      name = "mediaplayer_tests"
    },

    {
      name = "mediaplayer_util_tests"
    },

    {
      name = "mediaplayer_core_tests"
    },
  ]

  resources = [
    {
      path = rebase_path(
              "../../test_data/media/third_party/chromium_media_test_data/bear-1280x720.mp4")
      dest = "media_test_data/bear.mp4"
    },
  ]
}
