From e2687dea1a0e5569d28b66bd450c56e1322d053b Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Wed, 9 Feb 2022 14:59:46 +0100 Subject: [PATCH] Add missing test cases for the invocation class - error case where between was called with a min>max - Corner case for `between(x, x)` - Human readable output via stream operator of the base class --- test/detail/test_invocation.cpp | 118 ++++++++++++++++++++++---------- 1 file changed, 81 insertions(+), 37 deletions(-) diff --git a/test/detail/test_invocation.cpp b/test/detail/test_invocation.cpp index be9957e..ad7421e 100644 --- a/test/detail/test_invocation.cpp +++ b/test/detail/test_invocation.cpp @@ -8,69 +8,113 @@ #include #include +#include + +/// Serialize using the base class as done by e.g. the expectation class +std::string to_string(const mock::detail::invocation& invocation) +{ + std::ostringstream s; + s << invocation; + return s.str(); +} BOOST_AUTO_TEST_CASE(unlimited) { mock::detail::unlimited invocation; - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(to_string(invocation) == "unlimited()"); } BOOST_AUTO_TEST_CASE(once) { mock::detail::once invocation; - BOOST_CHECK(!invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "once()"); } BOOST_AUTO_TEST_CASE(never) { mock::detail::never invocation; - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "never()"); } BOOST_AUTO_TEST_CASE(at_most) { mock::detail::at_most invocation(1); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_most( 0/1 )"); + BOOST_TEST(invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_most( 1/1 )"); + BOOST_TEST(invocation.verify()); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_most( 1/1 )"); } BOOST_AUTO_TEST_CASE(at_least) { mock::detail::at_least invocation(1); - BOOST_CHECK(!invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); + BOOST_TEST(to_string(invocation) == "at_least( 0/1 )"); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "at_least( 1/1 )"); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "at_least( 2/1 )"); } BOOST_AUTO_TEST_CASE(between) { - mock::detail::between invocation(1, 2); - BOOST_CHECK(!invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(!invocation.exhausted()); - BOOST_CHECK(invocation.invoke()); - BOOST_CHECK(invocation.verify()); - BOOST_CHECK(invocation.exhausted()); - BOOST_CHECK(!invocation.invoke()); + { + mock::detail::between invocation(1, 2); + BOOST_TEST(to_string(invocation) == "between( 0/[1,2] )"); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 1/[1,2] )"); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 2/[1,2] )"); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "between( 2/[1,2] )"); + } + { + mock::detail::between invocation(2, 2); + BOOST_TEST(to_string(invocation) == "between( 0/[2,2] )"); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(!invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 1/[2,2] )"); + BOOST_TEST(!invocation.exhausted()); + BOOST_TEST(invocation.invoke()); + BOOST_TEST(invocation.verify()); + BOOST_TEST(to_string(invocation) == "between( 2/[2,2] )"); + BOOST_TEST(invocation.exhausted()); + BOOST_TEST(!invocation.invoke()); + BOOST_TEST(to_string(invocation) == "between( 2/[2,2] )"); + } + + // First must be equal or less than 2nd + BOOST_CHECK_THROW(mock::detail::between invalid(2, 1), std::invalid_argument); }