/*
 *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef WEBRTC_MODULES_AUDIO_CODING_AUDIO_NETWORK_ADAPTOR_MOCK_MOCK_DEBUG_DUMP_WRITER_H_
#define WEBRTC_MODULES_AUDIO_CODING_AUDIO_NETWORK_ADAPTOR_MOCK_MOCK_DEBUG_DUMP_WRITER_H_

#include "testing/gmock/include/gmock/gmock.h"
#include "webrtc/modules/audio_coding/audio_network_adaptor/debug_dump_writer.h"

namespace webrtc {

class MockDebugDumpWriter : public DebugDumpWriter {
 public:
  virtual ~MockDebugDumpWriter() { Die(); }
  MOCK_METHOD0(Die, void());

  MOCK_METHOD2(DumpEncoderRuntimeConfig,
               void(const AudioNetworkAdaptor::EncoderRuntimeConfig& config,
                    int64_t timestamp));
  MOCK_METHOD2(DumpNetworkMetrics,
               void(const Controller::NetworkMetrics& metrics,
                    int64_t timestamp));
};

}  // namespace webrtc

#endif  // WEBRTC_MODULES_AUDIO_CODING_AUDIO_NETWORK_ADAPTOR_MOCK_MOCK_DEBUG_DUMP_WRITER_H_
