X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Ftest.cc;h=fc5d9dc83b9d2263f47eccae4cb8e6d02a928d2f;hb=HEAD;hp=d9ab2d60bcbedd48ce5868845dd3326266f8c641;hpb=e71e6d33210e4a4c7d7841d0d5d8e906e00bb82f;p=dcpomatic.git diff --git a/test/test.cc b/test/test.cc index d9ab2d60b..fc5d9dc83 100644 --- a/test/test.cc +++ b/test/test.cc @@ -46,11 +46,13 @@ #include #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -80,6 +82,7 @@ using std::min; using std::shared_ptr; using std::string; using std::vector; +using boost::optional; using boost::scoped_array; using std::dynamic_pointer_cast; #if BOOST_VERSION >= 106100 @@ -107,7 +110,7 @@ TestPaths::TestPaths::private_data () boost::filesystem::path TestPaths::xsd () { - return boost::filesystem::canonical(boost::filesystem::path("..") / boost::filesystem::path("libdcp") / boost::filesystem::path("xsd")); + return boost::filesystem::current_path().parent_path() / "libdcp" / "xsd"; } @@ -567,7 +570,7 @@ check_dcp(boost::filesystem::path ref, boost::filesystem::path check, bool sound options.max_subtitle_vertical_position_error = 0.001; options.sound_assets_can_differ = sound_can_differ; - BOOST_CHECK (ref_dcp.equals (check_dcp, options, boost::bind (note, _1, _2))); + BOOST_CHECK_MESSAGE(ref_dcp.equals(check_dcp, options, boost::bind (note, _1, _2)), check << " does not match " << ref); } void @@ -842,7 +845,7 @@ dcp_file (shared_ptr film, string prefix) 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); + return boost::algorithm::starts_with(entry.path().filename().string(), prefix); }); BOOST_REQUIRE_MESSAGE(matches.size() == 1, "Found " << matches.size() << " files with prefix " << prefix); @@ -853,7 +856,7 @@ boost::filesystem::path subtitle_file (shared_ptr film) { for (auto i: boost::filesystem::recursive_directory_iterator(film->directory().get() / film->dcp_name(false))) { - if (boost::algorithm::starts_with(i.path().leaf().string(), "sub_")) { + if (boost::algorithm::starts_with(i.path().filename().string(), "sub_")) { return i.path(); } } @@ -947,7 +950,7 @@ void progress (float) {} void verify_dcp(boost::filesystem::path dir, vector ignore) { - auto notes = dcp::verify({dir}, &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()) { @@ -960,12 +963,52 @@ verify_dcp(boost::filesystem::path dir, vector igno void -make_and_verify_dcp (shared_ptr film, vector ignore) +#ifdef DCPOMATIC_LINUX +make_and_verify_dcp(shared_ptr film, vector ignore, bool dcp_inspect, bool clairmeta) +#else +make_and_verify_dcp(shared_ptr film, vector ignore, bool, bool) +#endif { film->write_metadata (); make_dcp (film, TranscodeJob::ChangedBehaviour::IGNORE); BOOST_REQUIRE (!wait_for_jobs()); verify_dcp({film->dir(film->dcp_name())}, ignore); + +#ifdef DCPOMATIC_LINUX + auto test_tools_path_env = getenv("DCPOMATIC_TEST_TOOLS_PATH"); + string test_tools_path; + if (test_tools_path_env) { + test_tools_path = test_tools_path_env; + } + + auto old_path_env = getenv("PATH"); + string old_path; + if (old_path_env) { + old_path = old_path_env; + } + + dcp::ScopeGuard sg = [old_path]() { setenv("PATH", old_path.c_str(), 1); }; + string new_path = old_path; + if (!new_path.empty()) { + new_path += ":"; + } + new_path += test_tools_path; + setenv("PATH", new_path.c_str(), 1); + + auto dcp_inspect_env = getenv("DCPOMATIC_DCP_INSPECT"); + if (dcp_inspect && dcp_inspect_env) { + boost::filesystem::path dcp_inspect(dcp_inspect_env); + auto cmd = String::compose("%1 %2 > %3 2>&1", dcp_inspect, film->dir(film->dcp_name()), film->file("dcp_inspect.log")); + auto result = system(cmd.c_str()); + BOOST_CHECK_EQUAL(WEXITSTATUS(result), 0); + } + + if (clairmeta && getenv("DCPOMATIC_CLAIRMETA")) { + auto cmd = String::compose("python3 -m clairmeta.cli check -type dcp %1 > %2 2>&1", film->dir(film->dcp_name()), film->file("clairmeta.log")); + auto result = system(cmd.c_str()); + BOOST_CHECK_EQUAL(WEXITSTATUS(result), 0); + } +#endif }