Add dcpomatic2_map tool (#2445).
[dcpomatic.git] / test / test.cc
index b2a0cd5acfcaad18aaca3c13bcae9b13e46202e9..06ec23dbcb6c4daadd5399cba6058fcb87197ed4 100644 (file)
@@ -94,7 +94,13 @@ TestPaths::TestPaths::private_data ()
                return boost::filesystem::path(env);
        }
 
-       return boost::filesystem::canonical(boost::filesystem::path ("..") / boost::filesystem::path ("dcpomatic-test-private"));
+       auto relative = boost::filesystem::path ("..") / boost::filesystem::path ("dcpomatic-test-private");
+       if (!boost::filesystem::exists(relative)) {
+               std::cerr << "No private test data found! Tests may fail.\n";
+               return relative;
+       }
+
+       return boost::filesystem::canonical(relative);
 }
 
 
@@ -126,6 +132,7 @@ setup_test_config ()
        auto decryption = make_shared<dcp::CertificateChain>(dcp::file_to_string("test/data/decryption_chain"));
        decryption->set_key(dcp::file_to_string("test/data/decryption_key"));
        Config::instance()->set_decryption_chain (decryption);
+       Config::instance()->set_dcp_asset_filename_format(dcp::NameFormat("%t"));
 }
 
 
@@ -824,13 +831,15 @@ check_one_frame (boost::filesystem::path dcp_dir, int64_t index, boost::filesyst
 boost::filesystem::path
 dcp_file (shared_ptr<const Film> film, string prefix)
 {
-       auto i = boost::filesystem::recursive_directory_iterator(film->dir(film->dcp_name()));
-       while (i != boost::filesystem::recursive_directory_iterator() && !boost::algorithm::starts_with(i->path().leaf().string(), prefix)) {
-               ++i;
-       }
+       using namespace boost::filesystem;
 
-       BOOST_REQUIRE_MESSAGE(i != boost::filesystem::recursive_directory_iterator(), "Could not find file with prefix " << prefix);
-       return i->path();
+       vector<directory_entry> matches;
+       std::copy_if(recursive_directory_iterator(film->dir(film->dcp_name())), recursive_directory_iterator(), std::back_inserter(matches), [&prefix](directory_entry const& entry) {
+               return boost::algorithm::starts_with(entry.path().leaf().string(), prefix);
+       });
+
+       BOOST_REQUIRE_MESSAGE(matches.size() == 1, "Found " << matches.size() << " files with prefix " << prefix);
+       return matches[0].path();
 }
 
 boost::filesystem::path
@@ -929,12 +938,9 @@ void progress (float) {}
 
 
 void
-make_and_verify_dcp (shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore)
+verify_dcp(boost::filesystem::path dir, vector<dcp::VerificationNote::Code> ignore)
 {
-       film->write_metadata ();
-       make_dcp (film, TranscodeJob::ChangedBehaviour::IGNORE);
-       BOOST_REQUIRE (!wait_for_jobs());
-       auto notes = dcp::verify ({film->dir(film->dcp_name())}, &stage, &progress, TestPaths::xsd());
+       auto notes = dcp::verify({dir}, &stage, &progress, {}, TestPaths::xsd());
        bool ok = true;
        for (auto i: notes) {
                if (find(ignore.begin(), ignore.end(), i.code()) == ignore.end()) {
@@ -946,6 +952,16 @@ make_and_verify_dcp (shared_ptr<Film> film, vector<dcp::VerificationNote::Code>
 }
 
 
+void
+make_and_verify_dcp (shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore)
+{
+       film->write_metadata ();
+       make_dcp (film, TranscodeJob::ChangedBehaviour::IGNORE);
+       BOOST_REQUIRE (!wait_for_jobs());
+       verify_dcp({film->dir(film->dcp_name())}, ignore);
+}
+
+
 void
 check_int_close (int a, int b, int d)
 {