summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--test/atmos_test.cc29
-rw-r--r--test/closed_caption_test.cc23
-rw-r--r--test/content_test.cc6
-rw-r--r--test/ffmpeg_encoder_test.cc20
-rw-r--r--test/import_dcp_test.cc56
-rw-r--r--test/silence_padding_test.cc6
-rw-r--r--test/srt_subtitle_test.cc7
-rw-r--r--test/ssa_subtitle_test.cc7
-rw-r--r--test/test.cc21
-rw-r--r--test/test.h20
10 files changed, 138 insertions, 57 deletions
diff --git a/test/atmos_test.cc b/test/atmos_test.cc
index 6689ee8d7..50b642c1f 100644
--- a/test/atmos_test.cc
+++ b/test/atmos_test.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2020-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -31,15 +31,18 @@
using std::string;
using std::vector;
+using std::make_shared;
using boost::optional;
using std::shared_ptr;
BOOST_AUTO_TEST_CASE (atmos_passthrough_test)
{
- shared_ptr<Film> film = new_test_film2 ("atmos_passthrough_test");
- boost::filesystem::path ref = TestPaths::private_data() / "atmos_asset.mxf";
- shared_ptr<Content> content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front();
+ Cleanup cl;
+
+ auto film = new_test_film2 ("atmos_passthrough_test", &cl);
+ auto ref = TestPaths::private_data() / "atmos_asset.mxf";
+ auto content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front();
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
@@ -47,14 +50,18 @@ BOOST_AUTO_TEST_CASE (atmos_passthrough_test)
BOOST_REQUIRE (!wait_for_jobs());
BOOST_REQUIRE (mxf_atmos_files_same(ref, dcp_file(film, "atmos"), true));
+
+ cl.run ();
}
BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test)
{
- shared_ptr<Film> film = new_test_film2 ("atmos_encrypted_passthrough_test");
- boost::filesystem::path ref = TestPaths::private_data() / "atmos_asset.mxf";
- shared_ptr<Content> content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front();
+ Cleanup cl;
+
+ auto film = new_test_film2 ("atmos_encrypted_passthrough_test", &cl);
+ auto ref = TestPaths::private_data() / "atmos_asset.mxf";
+ auto content = content_factory (TestPaths::private_data() / "atmos_asset.mxf").front();
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
@@ -65,7 +72,7 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test)
BOOST_REQUIRE (!mxf_atmos_files_same(ref, dcp_file(film, "atmos")));
- dcp::EncryptedKDM kdm = film->make_kdm (
+ auto kdm = film->make_kdm (
Config::instance()->decryption_chain()->leaf(),
vector<string>(),
dcp_file(film, "cpl"),
@@ -76,8 +83,8 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test)
optional<int>()
);
- shared_ptr<Film> film2 = new_test_film2 ("atmos_encrypted_passthrough_test2");
- shared_ptr<DCPContent> content2 (new DCPContent(film->dir(film->dcp_name())));
+ auto film2 = new_test_film2 ("atmos_encrypted_passthrough_test2", &cl);
+ auto content2 = make_shared<DCPContent>(film->dir(film->dcp_name()));
content2->add_kdm (kdm);
film2->examine_and_add_content (content2);
BOOST_REQUIRE (!wait_for_jobs());
@@ -86,5 +93,7 @@ BOOST_AUTO_TEST_CASE (atmos_encrypted_passthrough_test)
BOOST_REQUIRE (!wait_for_jobs());
BOOST_CHECK (mxf_atmos_files_same(ref, dcp_file(film2, "atmos"), true));
+
+ cl.run ();
}
diff --git a/test/closed_caption_test.cc b/test/closed_caption_test.cc
index 31824b443..cc2dca930 100644
--- a/test/closed_caption_test.cc
+++ b/test/closed_caption_test.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2018 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2018-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -29,13 +29,16 @@
#include <boost/test/unit_test.hpp>
using std::list;
+using std::make_shared;
using std::shared_ptr;
/** Basic test that Interop closed captions are written */
BOOST_AUTO_TEST_CASE (closed_caption_test1)
{
- shared_ptr<Film> film = new_test_film2 ("closed_caption_test1");
- shared_ptr<StringTextFileContent> content (new StringTextFileContent("test/data/subrip.srt"));
+ Cleanup cl;
+
+ auto film = new_test_film2 ("closed_caption_test1", &cl);
+ auto content = make_shared<StringTextFileContent>("test/data/subrip.srt");
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs ());
@@ -54,17 +57,21 @@ BOOST_AUTO_TEST_CASE (closed_caption_test1)
BOOST_REQUIRE_EQUAL (check.cpls().size(), 1U);
BOOST_REQUIRE_EQUAL (check.cpls().front()->reels().size(), 1U);
BOOST_REQUIRE (!check.cpls().front()->reels().front()->closed_captions().empty());
+
+ cl.run ();
}
/** Test multiple closed captions */
BOOST_AUTO_TEST_CASE (closed_caption_test2)
{
- shared_ptr<Film> film = new_test_film2 ("closed_caption_test2");
- shared_ptr<StringTextFileContent> content1 (new StringTextFileContent("test/data/subrip.srt"));
+ Cleanup cl;
+
+ auto film = new_test_film2 ("closed_caption_test2", &cl);
+ auto content1 = make_shared<StringTextFileContent>("test/data/subrip.srt");
film->examine_and_add_content (content1);
- shared_ptr<StringTextFileContent> content2 (new StringTextFileContent("test/data/subrip2.srt"));
+ auto content2 = make_shared<StringTextFileContent>("test/data/subrip2.srt");
film->examine_and_add_content (content2);
- shared_ptr<StringTextFileContent> content3 (new StringTextFileContent("test/data/subrip3.srt"));
+ auto content3 = make_shared<StringTextFileContent>("test/data/subrip3.srt");
film->examine_and_add_content (content3);
BOOST_REQUIRE (!wait_for_jobs ());
@@ -98,4 +105,6 @@ BOOST_AUTO_TEST_CASE (closed_caption_test2)
BOOST_CHECK_EQUAL ((*i)->annotation_text(), "Third track");
BOOST_REQUIRE (static_cast<bool>((*i)->language()));
BOOST_CHECK_EQUAL ((*i)->language().get(), "it-IT");
+
+ cl.run ();
}
diff --git a/test/content_test.cc b/test/content_test.cc
index 0815e16c2..cf34251f5 100644
--- a/test/content_test.cc
+++ b/test/content_test.cc
@@ -156,12 +156,16 @@ BOOST_AUTO_TEST_CASE (content_test5)
/** Sync error #1833 */
BOOST_AUTO_TEST_CASE (content_test6)
{
- shared_ptr<Film> film = new_test_film2 ("content_test6");
+ Cleanup cl;
+
+ auto film = new_test_film2 ("content_test6", &cl);
film->examine_and_add_content (content_factory(TestPaths::private_data() / "fha.mkv").front());
BOOST_REQUIRE (!wait_for_jobs());
film->make_dcp ();
BOOST_REQUIRE (!wait_for_jobs());
check_dcp (TestPaths::private_data() / "fha", film);
+
+ cl.run ();
}
diff --git a/test/ffmpeg_encoder_test.cc b/test/ffmpeg_encoder_test.cc
index 7a967b200..aab3fd8ef 100644
--- a/test/ffmpeg_encoder_test.cc
+++ b/test/ffmpeg_encoder_test.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2017-2019 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2017-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -36,12 +36,15 @@
using std::string;
using std::shared_ptr;
+using std::make_shared;
using boost::optional;
using namespace dcpomatic;
static void
ffmpeg_content_test (int number, boost::filesystem::path content, ExportFormat format)
{
+ Cleanup cl;
+
string name = "ffmpeg_encoder_";
string extension;
switch (format) {
@@ -60,19 +63,22 @@ ffmpeg_content_test (int number, boost::filesystem::path content, ExportFormat f
name = String::compose("%1_test%2", name, number);
- shared_ptr<Film> film = new_test_film (name);
+ shared_ptr<Film> film = new_test_film2 (name, &cl);
film->set_name (name);
- shared_ptr<FFmpegContent> c (new FFmpegContent(content));
- film->set_container (Ratio::from_id ("185"));
+ auto c = make_shared<FFmpegContent>(content);
film->set_audio_channels (6);
film->examine_and_add_content (c);
BOOST_REQUIRE (!wait_for_jobs ());
film->write_metadata ();
- shared_ptr<Job> job (new TranscodeJob (film));
- FFmpegEncoder encoder (film, job, String::compose("build/test/%1.%2", name, extension), format, false, false, false, 23);
+ auto job = make_shared<TranscodeJob>(film);
+ auto file = boost::filesystem::path("build") / "test" / String::compose("%1.%2", name, extension);
+ cl.add (file);
+ FFmpegEncoder encoder (film, job, file, format, false, false, false, 23);
encoder.go ();
+
+ cl.run ();
}
/** Red / green / blue MP4 -> Prores */
@@ -102,7 +108,7 @@ BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_test4)
/** Still image -> Prores */
BOOST_AUTO_TEST_CASE (ffmpeg_encoder_prores_test5)
{
- shared_ptr<Film> film = new_test_film ("ffmpeg_encoder_prores_test5");
+ auto film = new_test_film ("ffmpeg_encoder_prores_test5");
film->set_name ("ffmpeg_encoder_prores_test5");
shared_ptr<ImageContent> c (new ImageContent(TestPaths::private_data() / "bbc405.png"));
film->set_container (Ratio::from_id ("185"));
diff --git a/test/import_dcp_test.cc b/test/import_dcp_test.cc
index 7729cfe5b..44f3c7d44 100644
--- a/test/import_dcp_test.cc
+++ b/test/import_dcp_test.cc
@@ -1,5 +1,5 @@
/*
- Copyright (C) 2014-2020 Carl Hetherington <cth@carlh.net>
+ Copyright (C) 2014-2021 Carl Hetherington <cth@carlh.net>
This file is part of DCP-o-matic.
@@ -18,11 +18,13 @@
*/
+
/** @file test/import_dcp_test.cc
* @brief Test import of encrypted DCPs.
* @ingroup feature
*/
+
#include "test.h"
#include "lib/film.h"
#include "lib/screen.h"
@@ -40,22 +42,25 @@
#include <dcp/cpl.h>
#include <boost/test/unit_test.hpp>
+
using std::vector;
using std::string;
using std::map;
using std::shared_ptr;
using std::dynamic_pointer_cast;
+using std::make_shared;
+
/** Make an encrypted DCP, import it and make a new unencrypted DCP */
BOOST_AUTO_TEST_CASE (import_dcp_test)
{
- shared_ptr<Film> A = new_test_film ("import_dcp_test");
+ auto A = new_test_film ("import_dcp_test");
A->set_container (Ratio::from_id ("185"));
A->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR"));
A->set_name ("frobozz");
A->set_interop (false);
- shared_ptr<FFmpegContent> c (new FFmpegContent("test/data/test.mp4"));
+ auto c = make_shared<FFmpegContent>("test/data/test.mp4");
A->examine_and_add_content (c);
A->set_encrypted (true);
BOOST_CHECK (!wait_for_jobs ());
@@ -66,10 +71,10 @@ BOOST_AUTO_TEST_CASE (import_dcp_test)
dcp::DCP A_dcp ("build/test/import_dcp_test/" + A->dcp_name());
A_dcp.read ();
- Config::instance()->set_decryption_chain (shared_ptr<dcp::CertificateChain> (new dcp::CertificateChain (openssl_path ())));
+ Config::instance()->set_decryption_chain (make_shared<dcp::CertificateChain>(openssl_path()));
/* Dear future-carl: I suck! I thought you wouldn't still be running these tests in 2030! Sorry! */
- dcp::EncryptedKDM kdm = A->make_kdm (
+ auto kdm = A->make_kdm (
Config::instance()->decryption_chain()->leaf (),
vector<string>(),
A_dcp.cpls().front()->file().get(),
@@ -79,17 +84,17 @@ BOOST_AUTO_TEST_CASE (import_dcp_test)
true, 0
);
- shared_ptr<Film> B = new_test_film ("import_dcp_test2");
+ auto B = new_test_film ("import_dcp_test2");
B->set_container (Ratio::from_id ("185"));
B->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR"));
B->set_name ("frobozz");
B->set_interop (false);
- shared_ptr<DCPContent> d (new DCPContent("build/test/import_dcp_test/" + A->dcp_name()));
+ auto d = make_shared<DCPContent>("build/test/import_dcp_test/" + A->dcp_name());
B->examine_and_add_content (d);
BOOST_CHECK (!wait_for_jobs ());
d->add_kdm (kdm);
- JobManager::instance()->add (shared_ptr<Job> (new ExamineContentJob (B, d)));
+ JobManager::instance()->add (make_shared<ExamineContentJob>(B, d));
BOOST_CHECK (!wait_for_jobs ());
B->make_dcp ();
@@ -103,9 +108,11 @@ BOOST_AUTO_TEST_CASE (import_dcp_test)
/** Check that DCP markers are imported correctly */
BOOST_AUTO_TEST_CASE (import_dcp_markers_test)
{
+ Cleanup cl;
+
/* Make a DCP with some markers */
- shared_ptr<Film> film = new_test_film2 ("import_dcp_markers_test");
- shared_ptr<Content> content = content_factory("test/data/flat_red.png").front();
+ auto film = new_test_film2 ("import_dcp_markers_test", &cl);
+ auto content = content_factory("test/data/flat_red.png").front();
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
@@ -119,8 +126,8 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test)
BOOST_REQUIRE (!wait_for_jobs());
/* Import the DCP to a new film and check the markers */
- shared_ptr<Film> film2 = new_test_film2 ("import_dcp_markers_test2");
- shared_ptr<DCPContent> imported (new DCPContent(film->dir(film->dcp_name())));
+ auto film2 = new_test_film2 ("import_dcp_markers_test2", &cl);
+ auto imported = make_shared<DCPContent>(film->dir(film->dcp_name()));
film2->examine_and_add_content (imported);
BOOST_REQUIRE (!wait_for_jobs());
film2->write_metadata ();
@@ -130,7 +137,7 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test)
*/
BOOST_CHECK_EQUAL (imported->markers().size(), 4U);
- map<dcp::Marker, dcpomatic::ContentTime> markers = imported->markers();
+ auto markers = imported->markers();
BOOST_REQUIRE(markers.find(dcp::Marker::FFOC) != markers.end());
BOOST_CHECK(markers[dcp::Marker::FFOC] == dcpomatic::ContentTime(184000));
BOOST_REQUIRE(markers.find(dcp::Marker::FFMC) != markers.end());
@@ -139,7 +146,7 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test)
BOOST_CHECK(markers[dcp::Marker::LFMC] == dcpomatic::ContentTime(960000));
/* Load that film and check that the markers have been loaded */
- shared_ptr<Film> film3(new Film(boost::filesystem::path("build/test/import_dcp_markers_test2")));
+ auto film3 = make_shared<Film>(boost::filesystem::path("build/test/import_dcp_markers_test2"));
film3->read_metadata ();
BOOST_REQUIRE_EQUAL (film3->content().size(), 1U);
shared_ptr<DCPContent> reloaded = dynamic_pointer_cast<DCPContent>(film3->content().front());
@@ -154,6 +161,8 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test)
BOOST_CHECK(markers[dcp::Marker::FFMC] == dcpomatic::ContentTime(904000));
BOOST_REQUIRE(markers.find(dcp::Marker::LFMC) != markers.end());
BOOST_CHECK(markers[dcp::Marker::LFMC] == dcpomatic::ContentTime(960000));
+
+ cl.run ();
}
@@ -161,28 +170,25 @@ BOOST_AUTO_TEST_CASE (import_dcp_markers_test)
BOOST_AUTO_TEST_CASE (import_dcp_metadata_test)
{
/* Make a DCP with some ratings and a content version */
- shared_ptr<Film> film = new_test_film2 ("import_dcp_metadata_test");
- shared_ptr<Content> content = content_factory("test/data/flat_red.png").front();
+ auto film = new_test_film2 ("import_dcp_metadata_test");
+ auto content = content_factory("test/data/flat_red.png").front();
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
content->video->set_length (10);
- std::vector<dcp::Rating> ratings;
- ratings.push_back (dcp::Rating("BBFC", "15"));
- ratings.push_back (dcp::Rating("MPAA", "NC-17"));
+ vector<dcp::Rating> ratings = { {"BBFC", "15"}, {"MPAA", "NC-17"} };
film->set_ratings (ratings);
- vector<string> cv;
- cv.push_back ("Fred");
+ vector<string> cv = { "Fred "};
film->set_content_versions (cv);
film->make_dcp ();
BOOST_REQUIRE (!wait_for_jobs());
/* Import the DCP to a new film and check the metadata */
- shared_ptr<Film> film2 = new_test_film2 ("import_dcp_metadata_test2");
- shared_ptr<DCPContent> imported (new DCPContent(film->dir(film->dcp_name())));
+ auto film2 = new_test_film2 ("import_dcp_metadata_test2");
+ auto imported = make_shared<DCPContent>(film->dir(film->dcp_name()));
film2->examine_and_add_content (imported);
BOOST_REQUIRE (!wait_for_jobs());
film2->write_metadata ();
@@ -191,10 +197,10 @@ BOOST_AUTO_TEST_CASE (import_dcp_metadata_test)
BOOST_CHECK (imported->content_versions() == cv);
/* Load that film and check that the metadata has been loaded */
- shared_ptr<Film> film3(new Film(boost::filesystem::path("build/test/import_dcp_metadata_test2")));
+ auto film3 = make_shared<Film>(boost::filesystem::path("build/test/import_dcp_metadata_test2"));
film3->read_metadata ();
BOOST_REQUIRE_EQUAL (film3->content().size(), 1U);
- shared_ptr<DCPContent> reloaded = dynamic_pointer_cast<DCPContent>(film3->content().front());
+ auto reloaded = dynamic_pointer_cast<DCPContent>(film3->content().front());
BOOST_REQUIRE (reloaded);
BOOST_CHECK (reloaded->ratings() == ratings);
diff --git a/test/silence_padding_test.cc b/test/silence_padding_test.cc
index 11c5bd0d1..d3382f30a 100644
--- a/test/silence_padding_test.cc
+++ b/test/silence_padding_test.cc
@@ -136,7 +136,9 @@ BOOST_AUTO_TEST_CASE (silence_padding_test)
BOOST_AUTO_TEST_CASE (silence_padding_test2)
{
- auto film = new_test_film2 ("silence_padding_test2");
+ Cleanup cl;
+
+ auto film = new_test_film2 ("silence_padding_test2", &cl);
auto content = make_shared<FFmpegContent>(TestPaths::private_data() / "cars.mov");
film->examine_and_add_content (content);
BOOST_REQUIRE (!wait_for_jobs());
@@ -146,4 +148,6 @@ BOOST_AUTO_TEST_CASE (silence_padding_test2)
film->make_dcp ();
BOOST_REQUIRE (!wait_for_jobs());
+
+ cl.run ();
}
diff --git a/test/srt_subtitle_test.cc b/test/srt_subtitle_test.cc
index d07d70ba0..3fe9bc2d2 100644
--- a/test/srt_subtitle_test.cc
+++ b/test/srt_subtitle_test.cc
@@ -98,10 +98,11 @@ check_subtitle_file (shared_ptr<Film> film, boost::filesystem::path ref)
/** Make another DCP with a longer .srt file */
BOOST_AUTO_TEST_CASE (srt_subtitle_test3)
{
- shared_ptr<Film> film = new_test_film ("srt_subtitle_test3");
+ Cleanup cl;
+
+ shared_ptr<Film> film = new_test_film2 ("srt_subtitle_test3", &cl);
film->set_container (Ratio::from_id ("185"));
- film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR"));
film->set_name ("frobozz");
film->set_interop (true);
film->set_audio_channels (6);
@@ -116,6 +117,8 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test3)
BOOST_REQUIRE (!wait_for_jobs());
check_subtitle_file (film, TestPaths::private_data() / "Ankoemmling_short.xml");
+
+ cl.run ();
}
/** Build a small DCP with no picture and a single subtitle overlaid onto it */
diff --git a/test/ssa_subtitle_test.cc b/test/ssa_subtitle_test.cc
index 0756deed9..c7e4c39a6 100644
--- a/test/ssa_subtitle_test.cc
+++ b/test/ssa_subtitle_test.cc
@@ -41,10 +41,11 @@ using std::shared_ptr;
/** Make a DCP with subs from a .ssa file */
BOOST_AUTO_TEST_CASE (ssa_subtitle_test1)
{
- shared_ptr<Film> film = new_test_film ("ssa_subtitle_test1");
+ Cleanup cl;
+
+ shared_ptr<Film> film = new_test_film2 ("ssa_subtitle_test1", &cl);
film->set_container (Ratio::from_id ("185"));
- film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TLR"));
film->set_name ("frobozz");
film->set_interop (true);
shared_ptr<StringTextFileContent> content (new StringTextFileContent(TestPaths::private_data() / "DKH_UT_EN20160601def.ssa"));
@@ -61,4 +62,6 @@ BOOST_AUTO_TEST_CASE (ssa_subtitle_test1)
list<string> ignore;
ignore.push_back ("SubtitleID");
check_xml (subtitle_file(film), TestPaths::private_data() / "DKH_UT_EN20160601def.xml", ignore);
+
+ cl.run ();
}
diff --git a/test/test.cc b/test/test.cc
index 6c811221d..292b4e1d9 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -176,12 +176,15 @@ new_test_film (string name)
}
shared_ptr<Film>
-new_test_film2 (string name)
+new_test_film2 (string name, Cleanup* cleanup)
{
auto p = test_film_dir (name);
if (boost::filesystem::exists (p)) {
boost::filesystem::remove_all (p);
}
+ if (cleanup) {
+ cleanup->add (p);
+ }
auto film = make_shared<Film>(p);
film->set_dcp_content_type (DCPContentType::from_isdcf_name ("TST"));
@@ -811,3 +814,19 @@ operator<< (std::ostream&s, VideoFrameType f)
return s;
}
+
+void
+Cleanup::add (boost::filesystem::path path)
+{
+ _paths.push_back (path);
+}
+
+
+void
+Cleanup::run ()
+{
+ boost::system::error_code ec;
+ for (auto i: _paths) {
+ boost::filesystem::remove_all (i, ec);
+ }
+}
diff --git a/test/test.h b/test/test.h
index da00fe688..5a2246894 100644
--- a/test/test.h
+++ b/test/test.h
@@ -36,10 +36,27 @@ public:
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 void setup_test_config ();
extern std::shared_ptr<Film> new_test_film (std::string);
-extern std::shared_ptr<Film> new_test_film2 (std::string);
+extern std::shared_ptr<Film> new_test_film2 (std::string, 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);
@@ -57,6 +74,7 @@ void check_one_frame (boost::filesystem::path dcp, int64_t index, boost::filesys
extern boost::filesystem::path subtitle_file (std::shared_ptr<Film> film);
extern void make_random_file (boost::filesystem::path path, size_t size);
+
class LogSwitcher
{
public: