ardour
signals_test.cc
Go to the documentation of this file.
1 #include <glibmm/thread.h>
2 
3 #include "signals_test.h"
4 #include "pbd/signals.h"
5 
6 using namespace std;
7 
9 
10 void
12 {
13  if (!Glib::thread_supported ()) {
14  Glib::thread_init ();
15  }
16 }
17 
18 class Emitter {
19 public:
20  void emit () {
21  Fred ();
22  }
23 
24  PBD::Signal0<void> Fred;
25 };
26 
27 static int N = 0;
28 
29 void
31 {
32  ++N;
33 }
34 
35 void
37 {
38  Emitter* e = new Emitter;
40  e->Fred.connect_same_thread (c, boost::bind (&receiver));
41 
42  N = 0;
43  e->emit ();
44  e->emit ();
45  CPPUNIT_ASSERT_EQUAL (2, N);
46 
48  e->Fred.connect_same_thread (d, boost::bind (&receiver));
49  N = 0;
50  e->emit ();
51  CPPUNIT_ASSERT_EQUAL (2, N);
52 }
53 
54 void
56 {
57  Emitter* e = new Emitter;
59  e->Fred.connect_same_thread (c, boost::bind (&receiver));
60  e->emit ();
61  delete e;
62  c.disconnect ();
63 
64  CPPUNIT_ASSERT (true);
65 }
66 
68 {
69 public:
71  e->Fred.connect_same_thread (*this, boost::bind (&AReceiver::receiver, this));
72  }
73 
74  void receiver () {
75  ++N;
76  }
77 };
78 
79 void
81 {
82  Emitter* e = new Emitter;
83  AReceiver* r = new AReceiver (e);
84 
85  N = 0;
86  e->emit ();
87  delete r;
88  e->emit ();
89 
90  CPPUNIT_ASSERT_EQUAL (1, N);
91 }
CPPUNIT_TEST_SUITE_REGISTRATION(SignalsTest)
void receiver()
Definition: signals_test.cc:30
void testEmission()
Definition: signals_test.cc:36
void testDestruction()
Definition: signals_test.cc:55
void receiver()
Definition: signals_test.cc:74
static int N
Definition: signals_test.cc:27
Definition: Beats.hpp:239
void testScopedConnectionList()
Definition: signals_test.cc:80
void setUp()
Definition: signals_test.cc:11
PBD::Signal0< void > Fred
Definition: signals_test.cc:24
void emit()
Definition: signals_test.cc:20
AReceiver(Emitter *e)
Definition: signals_test.cc:70