+
+#include "lib/video_frame_type.h"
+#include <dcp/types.h>
+#include <dcp/verify.h>
+#include <boost/filesystem.hpp>
+#include <vector>
+
+
+class Content;
+class Film;
+class Image;
+class Log;
+
+
+class TestPaths
+{
+public:
+ static boost::filesystem::path private_data();
+ static boost::filesystem::path xsd();
+};
+
+
+class Cleanup
+{
+public:
+ void add (boost::filesystem::path path);
+
+ /* Remove everything passed to add(). We don't do this
+ * in a destructor so that results of failed tests aren't
+ * deleted.
+ */
+ void run ();
+
+private:
+ std::vector<boost::filesystem::path> _paths;
+};
+
+
+extern bool wait_for_jobs ();
+extern std::shared_ptr<Film> new_test_film (std::string);
+extern std::shared_ptr<Film> new_test_film2 (std::string, std::vector<std::shared_ptr<Content>> content = {}, Cleanup* cleanup = nullptr);
+extern void check_dcp (boost::filesystem::path, boost::filesystem::path);
+extern void check_dcp (boost::filesystem::path, std::shared_ptr<const Film>);
+extern void check_file (boost::filesystem::path ref, boost::filesystem::path check);
+extern void check_text_file (boost::filesystem::path ref, boost::filesystem::path check);
+extern void check_wav_file (boost::filesystem::path ref, boost::filesystem::path check);
+extern void check_mxf_audio_file (boost::filesystem::path ref, boost::filesystem::path check);
+extern bool mxf_atmos_files_same (boost::filesystem::path ref, boost::filesystem::path check, bool verbose = false);
+extern void check_xml (boost::filesystem::path, boost::filesystem::path, std::list<std::string>);
+extern void check_ffmpeg (boost::filesystem::path, boost::filesystem::path, int audio_tolerance);
+extern void check_image (boost::filesystem::path, boost::filesystem::path, double threshold = 4);