// Copyright 2019 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.

#include "media/gpu/chromeos/mailbox_video_frame_converter.h"

#include "base/bind.h"
#include "base/test/task_environment.h"
#include "base/threading/thread_task_runner_handle.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"

using ::testing::_;

namespace media {

namespace {

VideoFrame* UnwrapVideoFrame(const VideoFrame& frame) {
  return const_cast<VideoFrame*>(&frame);
}

base::WeakPtr<gpu::GpuChannel> GetGpuChannel() {
  return nullptr;
}

}  // anonymous namespace

class MailboxVideoFrameConverterTest : public testing::Test {
 public:
  MailboxVideoFrameConverterTest()
      : converter_(new MailboxVideoFrameConverter(
            base::BindRepeating(&UnwrapVideoFrame),
            base::ThreadTaskRunnerHandle::Get(),
            base::BindRepeating(&GetGpuChannel))) {}

  MailboxVideoFrameConverterTest(const MailboxVideoFrameConverterTest&) =
      delete;
  MailboxVideoFrameConverterTest& operator=(
      const MailboxVideoFrameConverterTest&) = delete;

  ~MailboxVideoFrameConverterTest() override = default;

  void TearDown() override {
    // |converter_| might have created resources that need to be cleaned up.
    converter_.reset();
    task_environment_.RunUntilIdle();
  }

  MOCK_METHOD1(OutputCB, void(scoped_refptr<VideoFrame>));

  base::test::TaskEnvironment task_environment_;

  std::unique_ptr<VideoFrameConverter> converter_;
};

TEST_F(MailboxVideoFrameConverterTest, Initialize) {
  EXPECT_CALL(*this, OutputCB(_)).Times(0);
  converter_->Initialize(
      base::ThreadTaskRunnerHandle::Get(),
      base::BindRepeating(&MailboxVideoFrameConverterTest::OutputCB,
                          base::Unretained(this)));
  EXPECT_FALSE(converter_->HasPendingFrames());
}

}  // namespace media
