// Copyright (c) 2012 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.

#include "chaps/object_policy.h"

#include <gmock/gmock.h>

namespace chaps {

class ObjectPolicyMock : public ObjectPolicy {
 public:
  ObjectPolicyMock();
  virtual ~ObjectPolicyMock();
  MOCK_METHOD1(Init,
      void(Object* object));
  MOCK_METHOD1(IsReadAllowed,
      bool(CK_ATTRIBUTE_TYPE type));
  MOCK_METHOD2(IsModifyAllowed,
      bool(CK_ATTRIBUTE_TYPE type, const std::string& value));
  MOCK_METHOD0(IsObjectComplete,
      bool());
  MOCK_METHOD0(SetDefaultAttributes,
      void());
};

}  // namespace chaps
