// Copyright 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 LIBBRILLO_POLICY_MOCK_LIBPOLICY_H_
#define LIBBRILLO_POLICY_MOCK_LIBPOLICY_H_

#include <gmock/gmock.h>
#include <set>

#include "policy/libpolicy.h"

#pragma GCC visibility push(default)

namespace policy {

// This is a generic mock of the PolicyProvider class.
class MockPolicyProvider : public PolicyProvider {
 public:
  MockPolicyProvider() = default;
  ~MockPolicyProvider() override = default;

  MOCK_METHOD0(Reload, bool(void));
  MOCK_CONST_METHOD0(device_policy_is_loaded, bool(void));
  MOCK_CONST_METHOD0(GetDevicePolicy, const DevicePolicy&(void));
  MOCK_CONST_METHOD0(IsConsumerDevice, bool(void));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockPolicyProvider);
};

}  // namespace policy

#pragma GCC visibility pop

#endif  // LIBBRILLO_POLICY_MOCK_LIBPOLICY_H_
