X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=test%2Ftest.cc;h=c91701e558ce1302c4fd32c60d54848c780f674d;hp=f1fd40fb791597c4bf5da7e960a05b523b5878cb;hb=4063260e52dafe5a75a321ff273dba182fd2f6a9;hpb=dc5e11944a30a9d381dc0e67cf657c5f2cb65845 diff --git a/test/test.cc b/test/test.cc index f1fd40fb7..c91701e55 100644 --- a/test/test.cc +++ b/test/test.cc @@ -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); } @@ -110,7 +116,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 (0)); Config::instance()->set_default_audio_delay (0); Config::instance()->set_default_j2k_bandwidth (100000000); @@ -283,7 +288,7 @@ check_mxf_audio_file (boost::filesystem::path ref, boost::filesystem::path check for (size_t i = 0; i < ref_desc.ContainerDuration; ++i) { ref_reader.ReadFrame (i, ref_buffer, 0); check_reader.ReadFrame (i, check_buffer, 0); - BOOST_REQUIRE (memcmp(ref_buffer.RoData(), check_buffer.RoData(), ref_buffer.Size()) == 0); + BOOST_REQUIRE_MESSAGE(memcmp(ref_buffer.RoData(), check_buffer.RoData(), ref_buffer.Size()) == 0, "Audio MXF differs in frame " << i); } } @@ -552,6 +557,7 @@ check_dcp (boost::filesystem::path ref, boost::filesystem::path check) options.reel_annotation_texts_can_differ = true; options.reel_hashes_can_differ = true; options.issue_dates_can_differ = true; + options.max_subtitle_vertical_position_error = 0.001; BOOST_CHECK (ref_dcp.equals (check_dcp, options, boost::bind (note, _1, _2))); } @@ -824,13 +830,15 @@ check_one_frame (boost::filesystem::path dcp_dir, int64_t index, boost::filesyst boost::filesystem::path dcp_file (shared_ptr 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 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(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 @@ -934,7 +942,7 @@ make_and_verify_dcp (shared_ptr film, vector 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({film->dir(film->dcp_name())}, &stage, &progress, {}, TestPaths::xsd()); bool ok = true; for (auto i: notes) { if (find(ignore.begin(), ignore.end(), i.code()) == ignore.end()) { @@ -980,3 +988,27 @@ find_file (boost::filesystem::path dir, string filename_part) BOOST_REQUIRE (found); return *found; } + + +Editor::Editor(boost::filesystem::path path) + : _path(path) + , _content(dcp::file_to_string(path)) +{ + +} + +Editor::~Editor() +{ + auto f = fopen(_path.string().c_str(), "w"); + BOOST_REQUIRE(f); + fwrite(_content.c_str(), _content.length(), 1, f); + fclose(f); +} + +void +Editor::replace(string a, string b) +{ + auto old_content = _content; + boost::algorithm::replace_all(_content, a, b); + BOOST_REQUIRE(_content != old_content); +}