// Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CRYPTOHOME_MOCK_DBUS_TRANSITION_H_
#define CRYPTOHOME_MOCK_DBUS_TRANSITION_H_

#include "cryptohome/dbus_transition.h"

#include <string>

#include <brillo/secure_blob.h>
#include <gmock/gmock.h>

namespace cryptohome {

class MockDBusReply : public DBusReply {
 public:
  MockDBusReply() : DBusReply(NULL, NULL) { }
  virtual ~MockDBusReply() {}

  MOCK_METHOD0(Run, void(void));
};

class MockDBusErrorReply : public DBusErrorReply {
 public:
  MockDBusErrorReply() : DBusErrorReply(NULL, NULL) { }
  virtual ~MockDBusErrorReply() {}

  MOCK_METHOD0(Run, void(void));
};

class MockDBusReplyFactory : public DBusReplyFactory {
 public:
  MockDBusReplyFactory() { }
  virtual ~MockDBusReplyFactory() { }

  MOCK_METHOD2(NewReply, DBusReply*(DBusGMethodInvocation*, std::string*));
  MOCK_METHOD2(NewErrorReply, DBusErrorReply*(DBusGMethodInvocation*, GError*));
};

}  // namespace cryptohome

#endif  // CRYPTOHOME_MOCK_DBUS_TRANSITION_H_
