#include "SMFTest.hpp"
-#ifdef WIN32
-#include <io.h> // for R_OK
-#endif
+#include <glibmm/fileutils.h>
+#include <glibmm/miscutils.h>
+
+#include "pbd/file_utils.h"
using namespace std;
SMFTest::createNewFileTest ()
{
TestSMF smf;
- smf.create("NewFile.mid");
+
+ string output_dir_path = PBD::tmp_writable_directory (PACKAGE, "createNewFileTest");
+ string new_file_path = Glib::build_filename (output_dir_path, "NewFile.mid");
+ smf.create(new_file_path);
smf.close();
- CPPUNIT_ASSERT(access("NewFile.mid", R_OK) == 0);
- unlink(smf.path().c_str());
+ CPPUNIT_ASSERT(Glib::file_test (new_file_path, Glib::FILE_TEST_IS_REGULAR));
+}
+
+PBD::Searchpath
+test_search_path ()
+{
+#ifdef PLATFORM_WINDOWS
+ if (!getenv("EVORAL_TEST_PATH")) {
+ string wsp(g_win32_get_package_installation_directory_of_module(NULL));
+ return Glib::build_filename (wsp, "evoral_testdata");
+ }
+#endif
+ return Glib::getenv("EVORAL_TEST_PATH");
}
void
SMFTest::takeFiveTest ()
{
TestSMF smf;
- smf.open("./test/testdata/TakeFive.mid");
+ string testdata_path;
+ CPPUNIT_ASSERT (find_file (test_search_path (), "TakeFive.mid", testdata_path));
+ smf.open(testdata_path);
CPPUNIT_ASSERT(!smf.is_empty());
seq->start_write();
smf.seek_to_start();
uint64_t time = 0; /* in SMF ticks */
- Evoral::Event<double> ev;
-
- const double frames_per_beat = 100.0;
+ Evoral::Event<Evoral::Beats> ev;
uint32_t delta_t = 0;
uint32_t size = 0;
uint8_t* buf = NULL;
int ret;
while ((ret = smf.read_event(&delta_t, &size, &buf)) >= 0) {
- ev.set(buf, size, 0.0);
+ ev.set(buf, size, Evoral::Beats());
time += delta_t;
if (ret > 0) { // didn't skip (meta) event
//cerr << "read smf event type " << hex << int(buf[0]) << endl;
- // make ev.time absolute time in frames
- ev.set_time(time * frames_per_beat / (double)smf.ppqn());
+ ev.set_time(Evoral::Beats::ticks_at_rate(time, smf.ppqn()));
ev.set_event_type(type_map->midi_event_type(buf[0]));
seq->append(ev, next_event_id ());
}
}
- seq->end_write (Sequence<Time>::Relax, false);
+ seq->end_write (Sequence<Time>::Relax,
+ Evoral::Beats::ticks_at_rate(time, smf.ppqn()));
CPPUNIT_ASSERT(!seq->empty());
}