shared_connection_block_test.cpp 2.8 KB

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