1 // Boost.Signals2 library 2 3 // Copyright Douglas Gregor 2001-2003. 4 // Use, modification and 5 // distribution is subject to the Boost Software License, Version 6 // 1.0. (See accompanying file LICENSE_1_0.txt or copy at 7 // http://www.boost.org/LICENSE_1_0.txt) 8 9 // For more information, see http://www.boost.org 10 11 #include <boost/array.hpp> 12 #include <boost/signals2/shared_connection_block.hpp> 13 #include <boost/signals2/signal.hpp> 14 #define BOOST_TEST_MODULE shared_connection_block_test 15 #include <boost/test/included/unit_test.hpp> 16 #include <iostream> 17 #include <sstream> 18 #include <string> 19 20 static boost::array<boost::signals2::connection, 4> connections; 21 22 static std::ostringstream test_output; 23 24 struct test_slot { test_slottest_slot25 explicit test_slot(int v = 0) : value(v) 26 {} 27 operator ()test_slot28 void operator()() const { 29 test_output << value; 30 } 31 32 int value; 33 }; 34 BOOST_AUTO_TEST_CASE(test_main)35BOOST_AUTO_TEST_CASE(test_main) 36 { 37 boost::signals2::signal<void ()> s0; 38 39 for(unsigned i = 0; i < connections.size(); ++i) 40 { 41 connections.at(i) = s0.connect(test_slot(i)); 42 } 43 44 45 { 46 // Blocking 2 47 boost::signals2::shared_connection_block block(connections.at(2)); 48 BOOST_CHECK(block.blocking()); 49 test_output.str(""); 50 s0(); 51 BOOST_CHECK(test_output.str() == "013"); 52 } 53 54 // Unblocking 2 55 test_output.str(""); 56 s0(); 57 BOOST_CHECK(test_output.str() == "0123"); 58 59 { 60 // Blocking 1 through const connection 61 const boost::signals2::connection conn = connections.at(1); 62 boost::signals2::shared_connection_block block(conn); 63 test_output.str(""); 64 s0(); 65 std::cout << test_output.str() << std::endl; 66 BOOST_CHECK(test_output.str() == "023"); 67 // Unblocking 1 68 block.unblock(); 69 BOOST_CHECK(block.blocking() == false); 70 test_output.str(""); 71 s0(); 72 BOOST_CHECK(test_output.str() == "0123"); 73 } 74 75 { 76 // initially unblocked 77 boost::signals2::shared_connection_block block(connections.at(3), false); 78 BOOST_CHECK(block.blocking() == false); 79 test_output.str(""); 80 s0(); 81 BOOST_CHECK(test_output.str() == "0123"); 82 // block 83 block.block(); 84 test_output.str(""); 85 s0(); 86 BOOST_CHECK(test_output.str() == "012"); 87 } 88 89 { 90 // test default constructed block 91 boost::signals2::shared_connection_block block; 92 BOOST_CHECK(block.blocking() == true); 93 block.unblock(); 94 BOOST_CHECK(block.blocking() == false); 95 block.block(); 96 BOOST_CHECK(block.blocking() == true); 97 98 // test assignment 99 { 100 block.unblock(); 101 boost::signals2::shared_connection_block block2(connections.at(0)); 102 BOOST_CHECK(block.connection() != block2.connection()); 103 BOOST_CHECK(block.blocking() != block2.blocking()); 104 block = block2; 105 BOOST_CHECK(block.connection() == block2.connection()); 106 BOOST_CHECK(block.blocking() == block2.blocking()); 107 } 108 test_output.str(""); 109 s0(); 110 BOOST_CHECK(test_output.str() == "123"); 111 } 112 } 113