Catch problems when using dcp_file() and getting more than one answer.
[dcpomatic.git] / test / test.cc
index 3a6d7d17467f17e2dccdf07502acf3764840dfaf..e94a4541336be02de12dccf528f748ee3de645d4 100644 (file)
@@ -110,7 +110,6 @@ setup_test_config ()
        Config::instance()->set_master_encoding_threads (boost::thread::hardware_concurrency() / 2);
        Config::instance()->set_server_encoding_threads (1);
        Config::instance()->set_server_port_base (61921);
-       Config::instance()->set_default_container (Ratio::from_id ("185"));
        Config::instance()->set_default_dcp_content_type (static_cast<DCPContentType*> (0));
        Config::instance()->set_default_audio_delay (0);
        Config::instance()->set_default_j2k_bandwidth (100000000);
@@ -825,13 +824,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;
+
+       vector<directory_entry> matches;
+       std::copy_if(directory_iterator(film->dir(film->dcp_name())), directory_iterator(), std::back_inserter(matches), [&prefix](directory_entry const& entry) {
+               return boost::algorithm::starts_with(entry.path().leaf().string(), prefix);
+       });
 
-       BOOST_REQUIRE_MESSAGE(i != boost::filesystem::recursive_directory_iterator(), "Could not find file with prefix " << prefix);
-       return i->path();
+       BOOST_REQUIRE_MESSAGE(matches.size() == 1, "Found " << matches.size() << " files with prefix " << prefix);
+       return matches[0].path();
 }
 
 boost::filesystem::path