1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
#include <glibmm/fileutils.h>
#include <glibmm/miscutils.h>
#include <stdexcept>
#include "midi++/manager.h"
#include "pbd/textreceiver.h"
#include "pbd/file_utils.h"
#include "ardour/session.h"
#include "ardour/audioengine.h"
#include "ardour/smf_source.h"
#include "ardour/midi_model.h"
#include "test_common.h"
#include "session_test.h"
CPPUNIT_TEST_SUITE_REGISTRATION (SessionTest);
using namespace std;
using namespace ARDOUR;
using namespace PBD;
static TextReceiver text_receiver ("test");
void
SessionTest::setUp ()
{
SessionEvent::create_per_thread_pool ("session_test", 512);
text_receiver.listen_to (error);
text_receiver.listen_to (info);
text_receiver.listen_to (fatal);
text_receiver.listen_to (warning);
// this is not a good singleton constructor pattern
AudioEngine* engine = 0;
try {
engine = new AudioEngine ("session_test", "");
} catch (const AudioEngine::NoBackendAvailable& engine_exception) {
cerr << engine_exception.what ();
}
CPPUNIT_ASSERT (engine);
init_post_engine ();
CPPUNIT_ASSERT (engine->start () == 0);
}
void
SessionTest::tearDown ()
{
// this is needed or there is a crash in MIDI::Manager::destroy
AudioEngine::instance()->stop (true);
MIDI::Manager::destroy ();
AudioEngine::destroy ();
}
void
SessionTest::new_session ()
{
const string session_name("test_session");
std::string new_session_dir = Glib::build_filename (new_test_output_dir(), session_name);
CPPUNIT_ASSERT (!Glib::file_test (new_session_dir, Glib::FILE_TEST_EXISTS));
Session* new_session = 0;
new_session = new Session (*AudioEngine::instance (), new_session_dir, session_name);
CPPUNIT_ASSERT (new_session);
// shouldn't need to do this as it is done in Session constructor
// via Session::when_engine_running
//AudioEngine::instance->set_session (new_session);
new_session->save_state ("");
delete new_session;
}
void
SessionTest::new_session_from_template ()
{
const string session_name("two_tracks");
const string session_template_dir_name("2 Track-template");
std::string new_session_dir = Glib::build_filename (new_test_output_dir(), session_name);
CPPUNIT_ASSERT (!Glib::file_test (new_session_dir, Glib::FILE_TEST_EXISTS));
std::string session_template_dir = test_search_path ().front ();
session_template_dir = Glib::build_filename (session_template_dir, "2 Track-template");
CPPUNIT_ASSERT (Glib::file_test (session_template_dir, Glib::FILE_TEST_IS_DIR));
Session* new_session = 0;
BusProfile* bus_profile = 0;
// create a new session based on session template
new_session = new Session (*AudioEngine::instance (), new_session_dir, session_name,
bus_profile, session_template_dir);
CPPUNIT_ASSERT (new_session);
new_session->save_state ("");
delete new_session;
Session* template_session = 0;
// reopen same session to check that it opens without error
template_session = new Session (*AudioEngine::instance (), new_session_dir, session_name);
CPPUNIT_ASSERT (template_session);
delete template_session;
}
|