// http://turtle.sourceforge.net // // Copyright Mathieu Champlon 2012 // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include namespace { struct base { void method_1(); float method_2(int); // Using templates in result and argument types std::map method_3(std::map, short); // Qualified methods float qual_1(int) &; float qual_2(int) &&; float qual_3(int) const; float qual_4(int) const&; float qual_5(int) const&&; float qual_6(int) volatile; float qual_7(int) volatile&; float qual_8(int) volatile&&; float qual_9(int) const volatile; float qual_10(int) const volatile&; float qual_11(int) const volatile&&; }; } // namespace BOOST_AUTO_TEST_CASE(signature_traits_return_correct_values) { using function1 = void(); static_assert(std::is_same, void>::value, "!"); static_assert(mock::detail::function_arity_t::value == 0, "!"); using function2 = float(int); static_assert(std::is_same, float>::value, "!"); static_assert(mock::detail::function_arity_t::value == 1, "!"); static_assert(std::is_same, int>::value, "!"); using function3 = unsigned(short&, int, const char*, float, double, char, unsigned char, std::map); static_assert(std::is_same, unsigned>::value, "!"); static_assert(mock::detail::function_arity_t::value == 8, "!"); static_assert(std::is_same, short&>::value, "!"); static_assert(std::is_same, int>::value, "!"); static_assert(std::is_same, const char*>::value, "!"); static_assert(std::is_same, float>::value, "!"); static_assert(std::is_same, double>::value, "!"); static_assert(std::is_same, char>::value, "!"); static_assert(std::is_same, unsigned char>::value, "!"); static_assert(std::is_same, std::map>::value, "!"); } BOOST_AUTO_TEST_CASE(MOCK_SIGNATURE_generates_signature) { using base_type = base; // MOCK_SIGNATURE requires a visible base_type typedef in the current scope static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same(std::map, short), MOCK_SIGNATURE(method_3)>::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); } BOOST_AUTO_TEST_CASE(MOCK_PROTECT_SIGNATURE_keeps_signature) { // MOCK_PROTECT_SIGNATURE is basically a no-op regarding its argument // and only required to get it through a VAR_ARGS macro // clang-format off static_assert(std::is_same::value, "!"); static_assert(std::is_same::value, "!"); static_assert(std::is_same(std::map, short), MOCK_PROTECT_SIGNATURE( std::map(std::map, short))>::value, "!"); // clang-format on }