chromium/chromecast/media/api/test/mock_cma_backend.h

// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMECAST_MEDIA_API_TEST_MOCK_CMA_BACKEND_H_
#define CHROMECAST_MEDIA_API_TEST_MOCK_CMA_BACKEND_H_

#include <string>

#include "base/memory/ref_counted.h"
#include "chromecast/media/api/cma_backend.h"
#include "chromecast/media/api/decoder_buffer_base.h"
#include "chromecast/public/graphics_types.h"
#include "testing/gmock/include/gmock/gmock.h"

namespace chromecast {
namespace media {

class MockCmaBackend : public CmaBackend {
 public:
  class DecoderDelegate : public CmaBackend::Decoder::Delegate {
   public:
    DecoderDelegate();
    ~DecoderDelegate() override;
    MOCK_METHOD1(OnPushBufferComplete, void(BufferStatus));
    MOCK_METHOD0(OnEndOfStream, void());
    MOCK_METHOD0(OnDecoderError, void());
    MOCK_METHOD3(OnKeyStatusChanged,
                 void(const std::string&, CastKeyStatus, uint32_t));
    MOCK_METHOD1(OnVideoResolutionChanged, void(const Size&));
  };

  class AudioDecoder : public CmaBackend::AudioDecoder {
   public:
    AudioDecoder();
    ~AudioDecoder() override;
    MOCK_METHOD1(SetDelegate, void(Delegate*));
    MOCK_METHOD1(PushBuffer, BufferStatus(scoped_refptr<DecoderBufferBase>));
    MOCK_METHOD1(SetConfig, bool(const AudioConfig&));
    MOCK_METHOD1(SetVolume, bool(float));
    MOCK_METHOD0(GetRenderingDelay, RenderingDelay());
    MOCK_METHOD1(GetStatistics, void(Statistics*));
    MOCK_METHOD0(GetAudioTrackTimestamp, AudioTrackTimestamp());
    MOCK_METHOD0(GetStartThresholdInFrames, int());
    MOCK_METHOD0(RequiresDecryption, bool());
  };

  class VideoDecoder : public CmaBackend::VideoDecoder {
   public:
    VideoDecoder();
    ~VideoDecoder() override;
    MOCK_METHOD1(SetDelegate, void(Delegate*));
    MOCK_METHOD1(PushBuffer, BufferStatus(scoped_refptr<DecoderBufferBase>));
    MOCK_METHOD1(SetConfig, bool(const VideoConfig&));
    MOCK_METHOD1(GetStatistics, void(Statistics*));
  };

  MockCmaBackend();
  ~MockCmaBackend() override;
  MOCK_METHOD0(CreateAudioDecoder, AudioDecoder*());
  MOCK_METHOD0(CreateVideoDecoder, VideoDecoder*());
  MOCK_METHOD0(Initialize, bool());
  MOCK_METHOD1(Start, bool(int64_t));
  MOCK_METHOD0(Stop, void());
  MOCK_METHOD0(Pause, bool());
  MOCK_METHOD0(Resume, bool());
  MOCK_METHOD0(GetCurrentPts, int64_t());
  MOCK_METHOD1(SetPlaybackRate, bool(float));
  MOCK_METHOD0(LogicalPause, void());
  MOCK_METHOD0(LogicalResume, void());
};

}  // namespace media
}  // namespace chromecast

#endif  // CHROMECAST_MEDIA_API_TEST_MOCK_CMA_BACKEND_H_