Mac VST-2.x support
[ardour.git] / libs / ardour / test / lua_script_test.cc
1 #include <list>
2 #include <glibmm.h>
3
4 #include "ardour/audio_track.h"
5 #include "ardour/audioengine.h"
6 #include "ardour/luascripting.h"
7 #include "ardour/lua_script_params.h"
8 #include "ardour/plugin_manager.h"
9 #include "ardour/plugin_insert.h"
10 #include "ardour/session.h"
11
12 #include "lua_script_test.h"
13
14 using namespace ARDOUR;
15
16 CPPUNIT_TEST_SUITE_REGISTRATION(LuaScriptTest);
17
18 void
19 LuaScriptTest::session_script_test ()
20 {
21         LuaScriptList scripts (LuaScripting::instance ().scripts (LuaScriptInfo::Session));
22         printf("\n * Testing %ld Lua session scripts\n", scripts.size());
23
24         for (LuaScriptList::const_iterator s = scripts.begin(); s != scripts.end(); ++s) {
25                 const LuaScriptInfoPtr& spi (*s);
26
27                 std::string script = "";
28
29                 try {
30                         script = Glib::file_get_contents (spi->path);
31                 } catch (Glib::FileError e) {
32                         CPPUNIT_FAIL ("Cannot read script file");
33                         continue;
34                 }
35
36                 try {
37                         LuaScriptParamList lsp = LuaScriptParams::script_params (spi, "sess_params");
38                         _session->register_lua_function ("test", script, lsp);
39                 } catch (SessionException e) {
40                         CPPUNIT_FAIL ("Cannot add script to session");
41                         continue;
42                 }
43                 CPPUNIT_ASSERT (!_session->registered_lua_functions ().empty());
44                 Glib::usleep(200000); // wait to script to execute during process()
45                 // if the script fails, it'll be removed.
46                 CPPUNIT_ASSERT (!_session->registered_lua_functions ().empty());
47                 _session->unregister_lua_function ("test");
48                 CPPUNIT_ASSERT (_session->registered_lua_functions ().empty());
49         }
50 }
51
52 void
53 LuaScriptTest::dsp_script_test ()
54 {
55         PluginManager& pm = PluginManager::instance ();
56         std::list<boost::shared_ptr<AudioTrack> > tracks;
57
58         tracks = _session->new_audio_track (2, 2, NULL, 1, "", PresentationInfo::max_order);
59         CPPUNIT_ASSERT (tracks.size() == 1);
60         boost::shared_ptr<Route> r = tracks.front ();
61
62         std::cout << "\n";
63         const PluginInfoList& plugs = pm.lua_plugin_info();
64         for (PluginInfoList::const_iterator i = plugs.begin(); i != plugs.end(); ++i) {
65                 std::cout << "LuaProc: " <<(*i)->name << "\n";
66
67                 PluginPtr p = (*i)->load (*_session);
68                 CPPUNIT_ASSERT (p);
69
70                 boost::shared_ptr<Processor> processor (new PluginInsert (*_session, p));
71                 processor->enable (true);
72
73                 int rv = r->add_processor (processor, boost::shared_ptr<Processor>(), 0);
74                 CPPUNIT_ASSERT (rv == 0);
75                 processor->enable (true);
76                 Glib::usleep(200000); // run process, failing plugins will be deactivated.
77                 CPPUNIT_ASSERT (processor->active());
78                 rv = r->remove_processor (processor, NULL, true);
79                 CPPUNIT_ASSERT (rv == 0);
80         }
81 }