summaryrefslogtreecommitdiff
path: root/libs/ardour/test/test_util.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/test/test_util.cc')
-rw-r--r--libs/ardour/test/test_util.cc69
1 files changed, 68 insertions, 1 deletions
diff --git a/libs/ardour/test/test_util.cc b/libs/ardour/test/test_util.cc
index f1237f72df..35b9e588f9 100644
--- a/libs/ardour/test/test_util.cc
+++ b/libs/ardour/test/test_util.cc
@@ -1,9 +1,14 @@
#include <fstream>
#include <sstream>
#include "pbd/xml++.h"
+#include "pbd/textreceiver.h"
+#include "ardour/session.h"
+#include "ardour/audioengine.h"
#include <cppunit/extensions/HelperMacros.h>
using namespace std;
+using namespace ARDOUR;
+using namespace PBD;
void
check_xml (XMLNode* node, string ref_file)
@@ -17,4 +22,66 @@ check_xml (XMLNode* node, string ref_file)
cmd << "diff -u libs/ardour/test/test.xml " << ref_file;
CPPUNIT_ASSERT_EQUAL (0, system (cmd.str().c_str ()));
}
-
+
+class TestReceiver : public Receiver
+{
+protected:
+ void receive (Transmitter::Channel chn, const char * str) {
+ const char *prefix = "";
+
+ switch (chn) {
+ case Transmitter::Error:
+ prefix = ": [ERROR]: ";
+ break;
+ case Transmitter::Info:
+ /* ignore */
+ return;
+ case Transmitter::Warning:
+ prefix = ": [WARNING]: ";
+ break;
+ case Transmitter::Fatal:
+ prefix = ": [FATAL]: ";
+ break;
+ case Transmitter::Throw:
+ /* this isn't supposed to happen */
+ abort ();
+ }
+
+ /* note: iostreams are already thread-safe: no external
+ lock required.
+ */
+
+ cout << prefix << str << endl;
+
+ if (chn == Transmitter::Fatal) {
+ exit (9);
+ }
+ }
+};
+
+TestReceiver test_receiver;
+
+Session *
+load_session (string dir, string state)
+{
+ SessionEvent::create_per_thread_pool ("test", 512);
+
+ test_receiver.listen_to (error);
+ test_receiver.listen_to (info);
+ test_receiver.listen_to (fatal);
+ test_receiver.listen_to (warning);
+
+ /* We can't use VSTs here as we have a stub instead of the
+ required bits in gtk2_ardour.
+ */
+ Config->set_use_lxvst (false);
+
+ AudioEngine* engine = new AudioEngine ("test", "");
+ init_post_engine ();
+
+ CPPUNIT_ASSERT (engine->start () == 0);
+
+ Session* session = new Session (*engine, dir, state);
+ engine->set_session (session);
+ return session;
+}