mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Merge 98e61a5d9b into deb00fc0d1
This commit is contained in:
commit
8662e93ceb
9 changed files with 330 additions and 62 deletions
93
test/test_async.cpp
Normal file
93
test/test_async.cpp
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
// http://turtle.sourceforge.net
|
||||
//
|
||||
// Copyright Mathieu Champlon 2009
|
||||
//
|
||||
// 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 "mock_error.hpp"
|
||||
#include <turtle/mock.hpp>
|
||||
#include <boost/test/auto_unit_test.hpp>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
#if defined(MOCK_HDR_MUTEX)
|
||||
#include <thread>
|
||||
#else
|
||||
#include <boost/thread.hpp>
|
||||
#endif
|
||||
|
||||
namespace
|
||||
{
|
||||
MOCK_CLASS( mock_class )
|
||||
{
|
||||
MOCK_METHOD_EXT( my_method, 1, void( const std::string& ), my_tag )
|
||||
MOCK_METHOD_EXT( my_method2, 1, void( const std::string& ), my_tag2 )
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( mock_object_asynchonous_call_expectation, mock_error_fixture )
|
||||
{
|
||||
#if defined(MOCK_ASYNC)
|
||||
const mock_class m{};
|
||||
MOCK_EXPECT( m.my_tag ).async(MOCK_THREAD_NAMESPACE::chrono::milliseconds(50)).once().with( "some parameter" );
|
||||
MOCK_THREAD_NAMESPACE::thread context([&](){
|
||||
MOCK_THREAD_NAMESPACE::this_thread::sleep_for(MOCK_THREAD_NAMESPACE::chrono::milliseconds(10));
|
||||
m.my_method("some parameter");
|
||||
});
|
||||
mock::verify();
|
||||
CHECK_CALLS( 1 );
|
||||
context.join();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
BOOST_FIXTURE_TEST_CASE( mock_object_asynchonous_call_expectation_in_sequence, mock_error_fixture )
|
||||
{
|
||||
#if defined(MOCK_ASYNC)
|
||||
const mock_class m{};
|
||||
mock::sequence s;
|
||||
MOCK_EXPECT( m.my_tag ).async(MOCK_THREAD_NAMESPACE::chrono::milliseconds(50)).once().in(s).with( "some parameter" );
|
||||
MOCK_EXPECT( m.my_tag ).async(MOCK_THREAD_NAMESPACE::chrono::milliseconds(150)).once().in(s).with( "some parameter2" );
|
||||
MOCK_THREAD_NAMESPACE::thread context([&](){
|
||||
MOCK_THREAD_NAMESPACE::this_thread::sleep_for(MOCK_THREAD_NAMESPACE::chrono::milliseconds(10));
|
||||
m.my_method("some parameter");
|
||||
MOCK_THREAD_NAMESPACE::this_thread::sleep_for(MOCK_THREAD_NAMESPACE::chrono::milliseconds(20));
|
||||
m.my_method("some parameter2");
|
||||
});
|
||||
mock::verify();
|
||||
CHECK_CALLS( 2 );
|
||||
context.join();
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE( mock_object_asynchonous_call_expectation_fails )
|
||||
{
|
||||
#if defined(MOCK_ASYNC)
|
||||
mock::reset();
|
||||
mock_error_data.reset();
|
||||
const mock_class m{};
|
||||
bool unexpected_call_received = false;
|
||||
MOCK_EXPECT( m.my_tag ).async(MOCK_THREAD_NAMESPACE::chrono::milliseconds(50)).once().with( "some parameter" );
|
||||
MOCK_THREAD_NAMESPACE::thread context([&](){
|
||||
MOCK_THREAD_NAMESPACE::this_thread::sleep_for(MOCK_THREAD_NAMESPACE::chrono::milliseconds(100));
|
||||
try{
|
||||
m.my_method("some parameter");
|
||||
}
|
||||
catch (std::exception &)
|
||||
{
|
||||
unexpected_call_received = true;
|
||||
}
|
||||
});
|
||||
CHECK_ERROR(
|
||||
BOOST_CHECK(!mock::verify()),
|
||||
"verification failed", 0, "m.mock_class::my_tag\n. once().with( \"some parameter\" )");
|
||||
context.join();
|
||||
BOOST_CHECK(unexpected_call_received == true);
|
||||
#endif
|
||||
}
|
||||
|
|
@ -367,7 +367,7 @@ namespace
|
|||
|
||||
MOCK_BASE_CLASS( variadic, base )
|
||||
{
|
||||
MOCK_METHOD( m1, 0 )
|
||||
MOCK_METHOD( m1, 0, void() )
|
||||
MOCK_METHOD( m2, 0, void() )
|
||||
MOCK_METHOD( m3, 0, void(), m3 )
|
||||
MOCK_CONST_METHOD( m4, 0, void() )
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue