]> git.tdb.fi Git - ext/sigc++-2.0.git/blob - tests/test_disconnect_during_emit.cc
Adjust the name of the library to match upstream
[ext/sigc++-2.0.git] / tests / test_disconnect_during_emit.cc
1 /* Copyright 2002, The libsigc++ Development Team
2  *  Assigned to public domain.  Use as you wish without restriction.
3  */
4
5 #include "testutilities.h"
6 #include <sigc++/trackable.h>
7 #include <sigc++/signal.h>
8 #include <sigc++/connection.h>
9 #include <sigc++/functors/ptr_fun.h>
10 #include <sigc++/functors/mem_fun.h>
11 #include <sstream>
12 #include <cstdlib>
13
14 namespace
15 {
16 std::ostringstream result_stream;
17
18 sigc::connection connection;
19
20 class HandlerClass : public sigc::trackable
21 {
22 public:
23   void handler()
24   {
25     result_stream << "handler called";
26     connection.disconnect();
27   }
28 };
29
30 } // end anonymous namespace
31
32 int main(int argc, char* argv[])
33 {
34   auto util = TestUtilities::get_instance();
35
36   if (!util->check_command_args(argc, argv))
37     return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
38
39   HandlerClass instance;
40
41   sigc::signal<void> signal_test;
42   connection = signal_test.connect(sigc::mem_fun(instance, &HandlerClass::handler));
43   result_stream << "Number of signal handlers before signal emission: " << signal_test.size();
44   util->check_result(result_stream, "Number of signal handlers before signal emission: 1");
45   signal_test.emit();
46   util->check_result(result_stream, "handler called");
47   result_stream << "Number of signal handlers after signal emission: " << signal_test.size();
48   util->check_result(result_stream, "Number of signal handlers after signal emission: 0");
49
50   return util->get_result_and_delete_instance() ? EXIT_SUCCESS : EXIT_FAILURE;
51 }