Add TestUI class to properly handle EventLoop invalidation
authorTim Mayberry <mojofunk@gmail.com>
Sun, 15 Feb 2015 05:05:22 +0000 (15:05 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Sun, 15 Feb 2015 05:05:22 +0000 (15:05 +1000)
This fixes the programming error: Session RT event... warnings
while running ardour tests

libs/ardour/test/test_ui.cc [new file with mode: 0644]
libs/ardour/test/test_ui.h [new file with mode: 0644]
libs/ardour/test/test_util.cc
libs/ardour/test/test_util.h
libs/ardour/test/testrunner.cc
libs/ardour/wscript

diff --git a/libs/ardour/test/test_ui.cc b/libs/ardour/test/test_ui.cc
new file mode 100644 (file)
index 0000000..202c19a
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+    Copyright (C) 2015 Tim Mayberry
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "test_ui.h"
+
+#include <glibmm/threads.h>
+
+#include "pbd/error.h"
+
+#include "ardour/session_event.h"
+#include "ardour/rc_configuration.h"
+
+#include "pbd/abstract_ui.cc" // instantiate template
+
+using namespace ARDOUR;
+
+template class AbstractUI<TestUIRequest>;
+
+TestUI::TestUI ()
+       : AbstractUI<TestUIRequest> ("test_ui")
+{
+
+       pthread_set_name ("test_ui_thread");
+
+       run_loop_thread = Glib::Threads::Thread::self ();
+
+       set_event_loop_for_thread (this);
+
+       SessionEvent::create_per_thread_pool ("test", 512);
+
+       m_test_receiver.listen_to (PBD::error);
+       m_test_receiver.listen_to (PBD::info);
+       m_test_receiver.listen_to (PBD::fatal);
+       m_test_receiver.listen_to (PBD::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);
+}
+
+TestUI::~TestUI ()
+{
+       m_test_receiver.hangup ();
+}
+
+void
+TestUI::do_request (TestUIRequest* req)
+{
+
+}
diff --git a/libs/ardour/test/test_ui.h b/libs/ardour/test/test_ui.h
new file mode 100644 (file)
index 0000000..f62dcbc
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+    Copyright (C) 2015 Tim Mayberry
+
+    This program is free software; you can redistribute it and/or modify it
+    under the terms of the GNU General Public License as published by the Free
+    Software Foundation; either version 2 of the License, or (at your option)
+    any later version.
+
+    This program is distributed in the hope that it will be useful, but WITHOUT
+    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+    FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+    for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+//#ifndef ABSTRACT_UI_EXPORTS
+//#define ABSTRACT_UI_EXPORTS
+//#endif
+
+#include "pbd/abstract_ui.h"
+
+#include "test_receiver.h"
+
+class TestUIRequest : public BaseUI::BaseRequestObject
+{
+
+};
+
+class TestUI : public AbstractUI<TestUIRequest>
+{
+public: // ctors
+
+       TestUI ();
+
+       ~TestUI ();
+
+public: // AbstractUI Interface
+
+       virtual void do_request (TestUIRequest*);
+
+private: // member data
+
+       TestReceiver m_test_receiver;
+
+};
index 3b95d1b70850c18c1c8e68512802746e0e1c8f91..9543bf58ae821ecb5bda5fdd2e6f441389fd0ce9 100644 (file)
@@ -29,7 +29,6 @@
 #include "ardour/audioengine.h"
 
 #include "test_util.h"
-#include "test_receiver.h"
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -97,25 +96,6 @@ write_ref (XMLNode* node, string ref_file)
        return rv;
 }
 
-TestReceiver test_receiver;
-
-bool
-test_init ()
-{
-       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);
-       return true;
-}
-
 void
 create_and_start_dummy_backend ()
 {
index fe8e9e93895caa056a383ec1dac645da3a896092..85041f441ad1e12d456e1201fef62e4c1e343b33 100644 (file)
@@ -31,8 +31,6 @@ namespace ARDOUR {
        class Session;
 }
 
-bool test_init ();
-
 PBD::Searchpath test_search_path ();
 
 std::string new_test_output_dir (std::string prefix = "");
index 9fa8c82798ec953b2e540bd812f66828f954bf31..2d9a8fc39e54383d06a1644b5d22de4bf640b72b 100644 (file)
@@ -11,7 +11,7 @@
 
 #include "pbd/debug.h"
 #include "ardour/ardour.h"
-#include "test_util.h"
+#include "test_ui.h"
 
 static const char* localedir = LOCALEDIR;
 
@@ -51,8 +51,8 @@ main(int argc, char* argv[])
 
        CPPUNIT_ASSERT (ARDOUR::init (false, true, localedir));
 
-       CPPUNIT_ASSERT (test_init ());
-       
+       TestUI* test_ui = new TestUI();
+
        CppUnit::TestResult testresult;
        
        CppUnit::TestResultCollector collectedresults;
@@ -68,6 +68,8 @@ main(int argc, char* argv[])
        CppUnit::CompilerOutputter compileroutputter (&collectedresults, std::cerr);
        compileroutputter.write ();
 
+       delete test_ui;
+
        ARDOUR::cleanup ();
        
        return collectedresults.wasSuccessful () ? 0 : 1;
index 474ffdc6c1d0b4e573ae1d1c40f6d78e729ce4f8..9b2e9c4b2c74c7813fa3942762e151ed8eb1fccc 100644 (file)
@@ -421,7 +421,7 @@ def build(bld):
         testcommon              = bld(features = 'cxx')
         testcommon.includes     = obj.includes + ['test', '../pbd', '..']
         testcommon.source       = ['test/testrunner.cc', 'test/test_needing_session.cc',
-                                   'test/dummy_lxvst.cc', 'test/audio_region_test.cc', 'test/test_util.cc']
+                                   'test/dummy_lxvst.cc', 'test/audio_region_test.cc', 'test/test_util.cc', 'test/test_ui.cc']
         testcommon.uselib       = ['CPPUNIT','SIGCPP','GLIBMM','GTHREAD',
                                    'SAMPLERATE','XML','LRDF','COREAUDIO','TAGLIB','VAMPSDK','VAMPHOSTSDK','RUBBERBAND']
         testcommon.use          = ['libpbd','libmidipp','libevoral',