File indexing completed on 2024-06-16 05:02:04
0001 /* 0002 * SPDX-FileCopyrightText: 2008 Trevor Pounds 0003 * SPDX-License-Identifier: MIT 0004 */ 0005 0006 #ifndef __MOCKITOPP_MOCK_OBJECT_HPP__ 0007 #define __MOCKITOPP_MOCK_OBJECT_HPP__ 0008 0009 #include <mockitopp/detail/stubbing/dynamic_object.hpp> 0010 0011 /** 0012 * helper macro to make mocking of overloaded functions less verbose 0013 */ 0014 #define overloaded_method(return_type, type, method, ...) \ 0015 static_cast<return_type (type::*)(__VA_ARGS__)>(&type::method) 0016 0017 namespace mockitopp 0018 { 0019 /** 0020 * provides a base implementation of a mock object 0021 * 0022 * @author Trevor Pounds 0023 */ 0024 template <typename T> 0025 struct mock_object : protected detail::dynamic_object 0026 { 0027 /** 0028 * returns a mock object of the given abstract base class/interface 0029 * 0030 * @return mock object 0031 */ 0032 T& getInstance() 0033 { return reinterpret_cast<T&>(*this); } 0034 0035 /** 0036 * stub functionality for a given method 0037 * 0038 * @param ptr2member method to be stubbed 0039 */ 0040 template <typename M> 0041 detail::dynamic_vfunction<typename detail::remove_member_function_pointer_cv<M>::type>& expect(M ptr2member) 0042 { return define_function(ptr2member); } 0043 0044 template <typename M> 0045 detail::dynamic_vfunction<typename detail::remove_member_function_pointer_cv<M>::type>& operator() (M ptr2member) 0046 { return expect(ptr2member); } 0047 }; 0048 } // namespace mockitopp 0049 0050 #endif //__MOCKITOPP_MOCK_OBJECT_HPP__