#include "MidnamTest.hpp"
#include <glibmm/fileutils.h>
+#include <glibmm/miscutils.h>
#include "pbd/xml++.h"
#include "pbd/file_utils.h"
#include "midi++/midnam_patch.h"
using namespace std;
+using namespace PBD;
using namespace MIDI::Name;
CPPUNIT_TEST_SUITE_REGISTRATION( MidnamTest );
-static string const prefix = "../../../patchfiles/";
+PBD::Searchpath
+test_search_path ()
+{
+#ifdef PLATFORM_WINDOWS
+ if (!getenv("MIDIPP_TEST_PATH")) {
+ std::vector<std::string> path_tok;
+ path_tok.push_back (g_win32_get_package_installation_directory_of_module(NULL));
+ path_tok.push_back ("share");
+ path_tok.push_back ("ardour3");
+ path_tok.push_back ("patchfiles");
+ return Glib::build_filename (path_tok);
+ }
+#endif
+ return Glib::getenv("MIDIPP_TEST_PATH");
+}
void
MidnamTest::protools_patchfile_test()
{
- XMLTree xmldoc(prefix + "Roland_SC-88_Pro.midnam");
+ std::string test_file_path;
+
+ CPPUNIT_ASSERT(find_file (test_search_path (), "Roland_SC-88_Pro.midnam", test_file_path));
+ XMLTree xmldoc(test_file_path);
boost::shared_ptr<XMLSharedNodeList> result = xmldoc.find(
"//MIDINameDocument");
CPPUNIT_ASSERT(result->size() == 1);
result = xmldoc.find("//ChannelNameSet");
CPPUNIT_ASSERT(result->size() == 2);
- MIDINameDocument doc(prefix + "Roland_SC-88_Pro.midnam");
+ MIDINameDocument doc(test_file_path);
CPPUNIT_ASSERT(doc.all_models().size() == 1);
CPPUNIT_ASSERT(doc.author().find("Mark of the Unicorn") == 0);
void
MidnamTest::yamaha_PSRS900_patchfile_test()
{
- XMLTree xmldoc(prefix + "Yamaha_PSR-S900.midnam");
+ std::string test_file_path;
+
+ CPPUNIT_ASSERT(find_file (test_search_path (), "Yamaha_PSR-S900.midnam", test_file_path));
+ XMLTree xmldoc(test_file_path);
boost::shared_ptr<XMLSharedNodeList> result = xmldoc.find(
"//MIDINameDocument");
CPPUNIT_ASSERT(result->size() == 1);
result = xmldoc.find("//ChannelNameSet");
CPPUNIT_ASSERT(result->size() == 3);
- MIDINameDocument doc(prefix + "Yamaha_PSR-S900.midnam");
+ MIDINameDocument doc(test_file_path);
CPPUNIT_ASSERT(doc.all_models().size() == 1);
CPPUNIT_ASSERT(doc.author().find("Hans Baier") == 0);
for(PatchNameList::const_iterator p = list.begin(); p != list.end(); ++p) {
if (ns == string("GM+XG")) {
- cerr << "got Patch with name " << (*p)->name() << " bank " << (*p)->bank_number() << " program " << (int)(*p)->program_number() << endl;
uint8_t msb = (((*p)->bank_number()) >> 7) & 0x7f;
CPPUNIT_ASSERT( msb == 0 || msb == 64);
}
if (ns == string("GM2")) {
- cerr << "got Patch with name " << (*p)->name() << " bank " << (*p)->bank_number() << " program " << (int)(*p)->program_number() << endl;
CPPUNIT_ASSERT((*p)->bank_number() >= (uint16_t(120) << 7));
}
}
}
}
-void
+void
MidnamTest::load_all_midnams_test ()
{
- assert (Glib::file_test (prefix, Glib::FILE_TEST_IS_DIR));
-
- Glib::PatternSpec pattern(string("*.midnam"));
vector<std::string> result;
- PBD::find_files_matching_pattern (result, prefix, pattern);
+ PBD::find_files_matching_pattern (result, test_search_path (), "*.midnam");
- cout << "Loading " << result.size() << " MIDI patches from " << prefix << endl;
+ CPPUNIT_ASSERT(!result.empty());
+
+ cout << "Loading " << result.size() << " MIDI patches from " << test_search_path ().to_string () << endl;
for (vector<std::string>::iterator i = result.begin(); i != result.end(); ++i) {
- cout << "Processing file " << *i << endl;
+ cout << "Processing file " << Glib::path_get_basename(*i) << endl;
boost::shared_ptr<MIDINameDocument> document(new MIDINameDocument(*i));
XMLTree xmldoc(*i);
result = xmldoc.find("//MasterDeviceNames");
CPPUNIT_ASSERT(result->size() == 1);
- result = xmldoc.find("//ChannelNameSet");
- CPPUNIT_ASSERT(result->size() >= 1);
-
result = xmldoc.find("//PatchBank");
//int banks = result->size();
document->master_device_names_by_model().begin();
string modename = device->second->custom_device_mode_names().front();
- cerr << "modename:" << modename << endl;
boost::shared_ptr<CustomDeviceMode> mode = device->second->custom_device_mode_by_name(modename);
CPPUNIT_ASSERT_EQUAL(deviceModeName, mode->name());