X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fevoral%2Ftest%2FSMFTest.cpp;h=d42ee26dff2f707187147299fd87597c19454fe8;hb=cb3961d9534d3bd86cc2c1c2be72b8eb33717e77;hp=fe9efa479f49731aa58c14730e5019ac35026e4a;hpb=15cee60021eada542b2dae0fafbb3150fcaa5010;p=ardour.git diff --git a/libs/evoral/test/SMFTest.cpp b/libs/evoral/test/SMFTest.cpp index fe9efa479f..d42ee26dff 100644 --- a/libs/evoral/test/SMFTest.cpp +++ b/libs/evoral/test/SMFTest.cpp @@ -1,8 +1,9 @@ #include "SMFTest.hpp" -#ifdef WIN32 -#include // for R_OK -#endif +#include +#include + +#include "pbd/file_utils.h" using namespace std; @@ -12,44 +13,57 @@ void 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 + string wsp(g_win32_get_package_installation_directory_of_module(NULL)); + return Glib::build_filename (wsp, "evoral_testdata"); +#else + return Glib::getenv("EVORAL_TEST_PATH"); +#endif } 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 ev; - - const double frames_per_beat = 100.0; + Evoral::Event 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