connection_test.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Signals2 library
  2. // tests for connection class
  3. // Copyright Frank Mori Hess 2008
  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. // For more information, see http://www.boost.org
  9. #include <boost/test/minimal.hpp>
  10. #include <boost/signals2.hpp>
  11. namespace bs2 = boost::signals2;
  12. typedef bs2::signal<void ()> sig_type;
  13. void myslot()
  14. {}
  15. void swap_test()
  16. {
  17. sig_type sig;
  18. {
  19. bs2::connection conn1 = sig.connect(&myslot);
  20. BOOST_CHECK(conn1.connected());
  21. bs2::connection conn2;
  22. BOOST_CHECK(conn2.connected() == false);
  23. conn1.swap(conn2);
  24. BOOST_CHECK(conn2.connected());
  25. BOOST_CHECK(conn1.connected() == false);
  26. swap(conn1, conn2);
  27. BOOST_CHECK(conn1.connected());
  28. BOOST_CHECK(conn2.connected() == false);
  29. }
  30. {
  31. bs2::scoped_connection conn1;
  32. conn1 = sig.connect(&myslot);
  33. BOOST_CHECK(conn1.connected());
  34. bs2::scoped_connection conn2;
  35. BOOST_CHECK(conn2.connected() == false);
  36. conn1.swap(conn2);
  37. BOOST_CHECK(conn2.connected());
  38. BOOST_CHECK(conn1.connected() == false);
  39. swap(conn1, conn2);
  40. BOOST_CHECK(conn1.connected());
  41. BOOST_CHECK(conn2.connected() == false);
  42. }
  43. }
  44. void release_test()
  45. {
  46. sig_type sig;
  47. bs2::connection conn;
  48. {
  49. bs2::scoped_connection scoped(sig.connect(&myslot));
  50. BOOST_CHECK(scoped.connected());
  51. conn = scoped.release();
  52. }
  53. BOOST_CHECK(conn.connected());
  54. bs2::connection conn2;
  55. {
  56. bs2::scoped_connection scoped(conn);
  57. BOOST_CHECK(scoped.connected());
  58. conn = scoped.release();
  59. BOOST_CHECK(conn.connected());
  60. BOOST_CHECK(scoped.connected() == false);
  61. conn.disconnect();
  62. // earlier release shouldn't affect new connection
  63. conn2 = sig.connect(&myslot);
  64. scoped = conn2;
  65. }
  66. BOOST_CHECK(conn2.connected() == false);
  67. }
  68. void move_test()
  69. {
  70. #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
  71. sig_type sig;
  72. bs2::connection conn;
  73. // test move assignment from scoped_connection to connection
  74. {
  75. bs2::scoped_connection scoped(sig.connect(&myslot));
  76. BOOST_CHECK(scoped.connected());
  77. conn = std::move(scoped);
  78. BOOST_CHECK(scoped.connected() == false);
  79. }
  80. BOOST_CHECK(conn.connected());
  81. // test move construction from scoped to scoped
  82. {
  83. bs2::scoped_connection scoped2(conn);
  84. BOOST_CHECK(scoped2.connected());
  85. bs2::scoped_connection scoped3(std::move(scoped2));
  86. BOOST_CHECK(scoped2.connected() == false);
  87. BOOST_CHECK(scoped3.connected() == true);
  88. BOOST_CHECK(conn.connected() == true);
  89. }
  90. BOOST_CHECK(conn.connected() == false);
  91. // test move assignment from scoped to scoped
  92. conn = sig.connect(&myslot);
  93. {
  94. bs2::scoped_connection scoped3;
  95. bs2::scoped_connection scoped2(conn);
  96. BOOST_CHECK(scoped2.connected());
  97. scoped3 = std::move(scoped2);
  98. BOOST_CHECK(scoped2.connected() == false);
  99. BOOST_CHECK(scoped3.connected() == true);
  100. BOOST_CHECK(conn.connected() == true);
  101. }
  102. BOOST_CHECK(conn.connected() == false);
  103. #endif // !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
  104. }
  105. int test_main(int, char*[])
  106. {
  107. release_test();
  108. swap_test();
  109. move_test();
  110. return 0;
  111. }