123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // 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/test/minimal.hpp>
- #include <boost/signals2.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)
- }
- int test_main(int, char*[])
- {
- release_test();
- swap_test();
- move_test();
- return 0;
- }
|