Use PBD::tmp_writable_directory to write evoral test file into
[ardour.git] / libs / evoral / test / SMFTest.cpp
1 #include "SMFTest.hpp"
2
3 #include <glibmm/fileutils.h>
4 #include <glibmm/miscutils.h>
5
6 #include "pbd/file_utils.h"
7
8 using namespace std;
9
10 CPPUNIT_TEST_SUITE_REGISTRATION( SMFTest );
11
12 void
13 SMFTest::createNewFileTest ()
14 {
15         TestSMF smf;
16
17         string output_dir_path = PBD::tmp_writable_directory (PACKAGE, "createNewFileTest");
18         string new_file_path = Glib::build_filename (output_dir_path, "NewFile.mid");
19         smf.create(new_file_path);
20         smf.close();
21         CPPUNIT_ASSERT(Glib::file_test (new_file_path, Glib::FILE_TEST_IS_REGULAR));
22 }
23
24 void
25 SMFTest::takeFiveTest ()
26 {
27         TestSMF smf;
28         smf.open("./test/testdata/TakeFive.mid");
29         CPPUNIT_ASSERT(!smf.is_empty());
30
31         seq->start_write();
32         smf.seek_to_start();
33
34         uint64_t time = 0; /* in SMF ticks */
35         Evoral::Event<Evoral::MusicalTime> ev;
36
37         uint32_t delta_t = 0;
38         uint32_t size    = 0;
39         uint8_t* buf     = NULL;
40         int ret;
41         while ((ret = smf.read_event(&delta_t, &size, &buf)) >= 0) {
42                 ev.set(buf, size, Evoral::MusicalTime());
43                 time += delta_t;
44
45                 if (ret > 0) { // didn't skip (meta) event
46                         //cerr << "read smf event type " << hex << int(buf[0]) << endl;
47                         ev.set_time(Evoral::MusicalTime::ticks_at_rate(time, smf.ppqn()));
48                         ev.set_event_type(type_map->midi_event_type(buf[0]));
49                         seq->append(ev, next_event_id ());
50                 }
51         }
52
53         seq->end_write (Sequence<Time>::Relax,
54                         Evoral::MusicalTime::ticks_at_rate(time, smf.ppqn()));
55         CPPUNIT_ASSERT(!seq->empty());
56 }