2012-07-28 09:08:29 +00:00
|
|
|
#include <glibmm/thread.h>
|
|
|
|
|
|
2011-03-04 17:35:39 +00:00
|
|
|
#include "signals_test.h"
|
|
|
|
|
#include "pbd/signals.h"
|
|
|
|
|
|
2012-05-14 17:18:48 +00:00
|
|
|
using namespace std;
|
|
|
|
|
|
2011-03-04 17:35:39 +00:00
|
|
|
CPPUNIT_TEST_SUITE_REGISTRATION (SignalsTest);
|
|
|
|
|
|
2012-05-16 23:11:16 +00:00
|
|
|
void
|
|
|
|
|
SignalsTest::setUp ()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2011-03-04 17:35:39 +00:00
|
|
|
class Emitter {
|
|
|
|
|
public:
|
|
|
|
|
void emit () {
|
|
|
|
|
Fred ();
|
|
|
|
|
}
|
2015-10-05 16:17:49 +02:00
|
|
|
|
2024-10-18 18:01:28 +02:00
|
|
|
PBD::Signal<void()> Fred;
|
2011-03-04 17:35:39 +00:00
|
|
|
};
|
|
|
|
|
|
2012-05-14 17:18:48 +00:00
|
|
|
static int N = 0;
|
|
|
|
|
|
2011-03-04 17:35:39 +00:00
|
|
|
void
|
|
|
|
|
receiver ()
|
|
|
|
|
{
|
2012-05-14 17:18:48 +00:00
|
|
|
++N;
|
|
|
|
|
}
|
2011-03-04 17:35:39 +00:00
|
|
|
|
2012-05-14 17:18:48 +00:00
|
|
|
void
|
|
|
|
|
SignalsTest::testEmission ()
|
|
|
|
|
{
|
|
|
|
|
Emitter* e = new Emitter;
|
|
|
|
|
PBD::ScopedConnection c;
|
2024-10-19 01:51:44 +02:00
|
|
|
e->Fred.connect_same_thread (c, std::bind (&receiver));
|
2012-05-14 17:18:48 +00:00
|
|
|
|
|
|
|
|
N = 0;
|
|
|
|
|
e->emit ();
|
|
|
|
|
e->emit ();
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL (2, N);
|
|
|
|
|
|
2012-05-23 16:22:51 +00:00
|
|
|
PBD::ScopedConnection d;
|
2024-10-19 01:51:44 +02:00
|
|
|
e->Fred.connect_same_thread (d, std::bind (&receiver));
|
2012-05-14 17:18:48 +00:00
|
|
|
N = 0;
|
|
|
|
|
e->emit ();
|
|
|
|
|
CPPUNIT_ASSERT_EQUAL (2, N);
|
2011-03-04 17:35:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
SignalsTest::testDestruction ()
|
|
|
|
|
{
|
|
|
|
|
Emitter* e = new Emitter;
|
|
|
|
|
PBD::ScopedConnection c;
|
2024-10-19 01:51:44 +02:00
|
|
|
e->Fred.connect_same_thread (c, std::bind (&receiver));
|
2011-03-04 17:35:39 +00:00
|
|
|
e->emit ();
|
|
|
|
|
delete e;
|
|
|
|
|
c.disconnect ();
|
|
|
|
|
|
|
|
|
|
CPPUNIT_ASSERT (true);
|
|
|
|
|
}
|
|
|
|
|
|
2014-06-25 22:41:31 +10:00
|
|
|
class AReceiver : public PBD::ScopedConnectionList
|
2012-05-14 17:18:48 +00:00
|
|
|
{
|
|
|
|
|
public:
|
2014-06-25 22:41:31 +10:00
|
|
|
AReceiver (Emitter* e) {
|
2024-10-19 01:51:44 +02:00
|
|
|
e->Fred.connect_same_thread (*this, std::bind (&AReceiver::receiver, this));
|
2012-05-14 17:18:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void receiver () {
|
|
|
|
|
++N;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
SignalsTest::testScopedConnectionList ()
|
|
|
|
|
{
|
|
|
|
|
Emitter* e = new Emitter;
|
2014-06-25 22:41:31 +10:00
|
|
|
AReceiver* r = new AReceiver (e);
|
2012-05-14 17:18:48 +00:00
|
|
|
|
|
|
|
|
N = 0;
|
|
|
|
|
e->emit ();
|
|
|
|
|
delete r;
|
|
|
|
|
e->emit ();
|
2015-10-05 16:17:49 +02:00
|
|
|
|
2012-05-14 17:18:48 +00:00
|
|
|
CPPUNIT_ASSERT_EQUAL (1, N);
|
|
|
|
|
}
|