diff options
Diffstat (limited to 'src/boost/libs/signals2/test/connection_test.cpp')
-rw-r--r-- | src/boost/libs/signals2/test/connection_test.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/boost/libs/signals2/test/connection_test.cpp b/src/boost/libs/signals2/test/connection_test.cpp new file mode 100644 index 000000000..bfe0894bc --- /dev/null +++ b/src/boost/libs/signals2/test/connection_test.cpp @@ -0,0 +1,130 @@ +// Signals2 library +// tests for connection class + +// Copyright Frank Mori Hess 2008 +// Use, modification and +// distribution is subject to 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) + +// For more information, see http://www.boost.org +#include <boost/signals2.hpp> +#define BOOST_TEST_MODULE connection_test +#include <boost/test/included/unit_test.hpp> + +namespace bs2 = boost::signals2; + +typedef bs2::signal<void ()> sig_type; + +void myslot() +{} + +void swap_test() +{ + sig_type sig; + + { + bs2::connection conn1 = sig.connect(&myslot); + BOOST_CHECK(conn1.connected()); + bs2::connection conn2; + BOOST_CHECK(conn2.connected() == false); + + conn1.swap(conn2); + BOOST_CHECK(conn2.connected()); + BOOST_CHECK(conn1.connected() == false); + + swap(conn1, conn2); + BOOST_CHECK(conn1.connected()); + BOOST_CHECK(conn2.connected() == false); + } + + { + bs2::scoped_connection conn1; + conn1 = sig.connect(&myslot); + BOOST_CHECK(conn1.connected()); + bs2::scoped_connection conn2; + BOOST_CHECK(conn2.connected() == false); + + conn1.swap(conn2); + BOOST_CHECK(conn2.connected()); + BOOST_CHECK(conn1.connected() == false); + + swap(conn1, conn2); + BOOST_CHECK(conn1.connected()); + BOOST_CHECK(conn2.connected() == false); + } +} + +void release_test() +{ + sig_type sig; + bs2::connection conn; + { + bs2::scoped_connection scoped(sig.connect(&myslot)); + BOOST_CHECK(scoped.connected()); + conn = scoped.release(); + } + BOOST_CHECK(conn.connected()); + + bs2::connection conn2; + { + bs2::scoped_connection scoped(conn); + BOOST_CHECK(scoped.connected()); + conn = scoped.release(); + BOOST_CHECK(conn.connected()); + BOOST_CHECK(scoped.connected() == false); + conn.disconnect(); + + // earlier release shouldn't affect new connection + conn2 = sig.connect(&myslot); + scoped = conn2; + } + BOOST_CHECK(conn2.connected() == false); +} + +void move_test() +{ +#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) + sig_type sig; + bs2::connection conn; + // test move assignment from scoped_connection to connection + { + bs2::scoped_connection scoped(sig.connect(&myslot)); + BOOST_CHECK(scoped.connected()); + conn = std::move(scoped); + BOOST_CHECK(scoped.connected() == false); + } + BOOST_CHECK(conn.connected()); + + // test move construction from scoped to scoped + { + bs2::scoped_connection scoped2(conn); + BOOST_CHECK(scoped2.connected()); + bs2::scoped_connection scoped3(std::move(scoped2)); + BOOST_CHECK(scoped2.connected() == false); + BOOST_CHECK(scoped3.connected() == true); + BOOST_CHECK(conn.connected() == true); + } + BOOST_CHECK(conn.connected() == false); + + // test move assignment from scoped to scoped + conn = sig.connect(&myslot); + { + bs2::scoped_connection scoped3; + bs2::scoped_connection scoped2(conn); + BOOST_CHECK(scoped2.connected()); + scoped3 = std::move(scoped2); + BOOST_CHECK(scoped2.connected() == false); + BOOST_CHECK(scoped3.connected() == true); + BOOST_CHECK(conn.connected() == true); + } + BOOST_CHECK(conn.connected() == false); +#endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) +} + +BOOST_AUTO_TEST_CASE(test_main) +{ + release_test(); + swap_test(); + move_test(); +} |