From 99e9382cdba60884b0e2f870a54dda70ac3c5b3b Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Tue, 11 Oct 2016 00:00:52 +0200 Subject: Unit-tests to check Lua session+DSP scripts --- libs/ardour/test/lua_script_test.cc | 81 +++++++++++++++++++++++++++++++++++++ libs/ardour/test/lua_script_test.h | 14 +++++++ 2 files changed, 95 insertions(+) create mode 100644 libs/ardour/test/lua_script_test.cc create mode 100644 libs/ardour/test/lua_script_test.h (limited to 'libs/ardour/test') diff --git a/libs/ardour/test/lua_script_test.cc b/libs/ardour/test/lua_script_test.cc new file mode 100644 index 0000000000..8369519ce6 --- /dev/null +++ b/libs/ardour/test/lua_script_test.cc @@ -0,0 +1,81 @@ +#include +#include + +#include "ardour/audio_track.h" +#include "ardour/audioengine.h" +#include "ardour/luascripting.h" +#include "ardour/lua_script_params.h" +#include "ardour/plugin_manager.h" +#include "ardour/plugin_insert.h" +#include "ardour/session.h" + +#include "lua_script_test.h" + +using namespace ARDOUR; + +CPPUNIT_TEST_SUITE_REGISTRATION(LuaScriptTest); + +void +LuaScriptTest::session_script_test () +{ + LuaScriptList scripts (LuaScripting::instance ().scripts (LuaScriptInfo::Session)); + printf("\n * Testing %ld Lua session scripts\n", scripts.size()); + + for (LuaScriptList::const_iterator s = scripts.begin(); s != scripts.end(); ++s) { + const LuaScriptInfoPtr& spi (*s); + + std::string script = ""; + + try { + script = Glib::file_get_contents (spi->path); + } catch (Glib::FileError e) { + CPPUNIT_FAIL ("Cannot read script file"); + continue; + } + + try { + LuaScriptParamList lsp = LuaScriptParams::script_params (spi, "sess_params"); + _session->register_lua_function ("test", script, lsp); + } catch (SessionException e) { + CPPUNIT_FAIL ("Cannot add script to session"); + continue; + } + CPPUNIT_ASSERT (!_session->registered_lua_functions ().empty()); + Glib::usleep(200000); // wait to script to execute during process() + // if the script fails, it'll be removed. + CPPUNIT_ASSERT (!_session->registered_lua_functions ().empty()); + _session->unregister_lua_function ("test"); + CPPUNIT_ASSERT (_session->registered_lua_functions ().empty()); + } +} + +void +LuaScriptTest::dsp_script_test () +{ + PluginManager& pm = PluginManager::instance (); + std::list > tracks; + + tracks = _session->new_audio_track (2, 2, NULL, 1, "", PresentationInfo::max_order); + CPPUNIT_ASSERT (tracks.size() == 1); + boost::shared_ptr r = tracks.front (); + + std::cout << "\n"; + const PluginInfoList& plugs = pm.lua_plugin_info(); + for (PluginInfoList::const_iterator i = plugs.begin(); i != plugs.end(); ++i) { + std::cout << "LuaProc: " <<(*i)->name << "\n"; + + PluginPtr p = (*i)->load (*_session); + CPPUNIT_ASSERT (p); + + boost::shared_ptr processor (new PluginInsert (*_session, p)); + processor->enable (true); + + int rv = r->add_processor (processor, boost::shared_ptr(), 0); + CPPUNIT_ASSERT (rv == 0); + processor->enable (true); + Glib::usleep(200000); // run process, failing plugins will be deactivated. + CPPUNIT_ASSERT (processor->active()); + rv = r->remove_processor (processor, NULL, true); + CPPUNIT_ASSERT (rv == 0); + } +} diff --git a/libs/ardour/test/lua_script_test.h b/libs/ardour/test/lua_script_test.h new file mode 100644 index 0000000000..ab9d51f464 --- /dev/null +++ b/libs/ardour/test/lua_script_test.h @@ -0,0 +1,14 @@ +#include +#include "test_needing_session.h" + +class LuaScriptTest : public TestNeedingSession +{ + CPPUNIT_TEST_SUITE (LuaScriptTest); + CPPUNIT_TEST (session_script_test); + CPPUNIT_TEST (dsp_script_test); + CPPUNIT_TEST_SUITE_END (); + +public: + void session_script_test (); + void dsp_script_test (); +}; -- cgit v1.2.3