Supporters update.
[dcpomatic.git] / test / test.cc
index d9ab2d60bcbedd48ce5868845dd3326266f8c641..fc5d9dc83b9d2263f47eccae4cb8e6d02a928d2f 100644 (file)
 #include <dcp/cpl.h>
 #include <dcp/dcp.h>
 #include <dcp/equality_options.h>
+#include <dcp/filesystem.h>
 #include <dcp/mono_picture_asset.h>
 #include <dcp/mono_picture_frame.h>
 #include <dcp/openjpeg_image.h>
 #include <dcp/reel.h>
 #include <dcp/reel_picture_asset.h>
+#include <dcp/scope_guard.h>
 #include <dcp/warnings.h>
 #include <asdcp/AS_DCP.h>
 #include <png.h>
@@ -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<const Film> film, string prefix)
 
        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);
+               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> 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<dcp::VerificationNote::Code> 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<dcp::VerificationNote::Code> igno
 
 
 void
-make_and_verify_dcp (shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore)
+#ifdef  DCPOMATIC_LINUX
+make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> ignore, bool dcp_inspect, bool clairmeta)
+#else
+make_and_verify_dcp(shared_ptr<Film> film, vector<dcp::VerificationNote::Code> 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
 }