Reduce the disk space needed when running tests. v2.15.124
authorCarl Hetherington <cth@carlh.net>
Tue, 2 Feb 2021 15:36:31 +0000 (16:36 +0100)
committerCarl Hetherington <cth@carlh.net>
Tue, 2 Feb 2021 15:36:31 +0000 (16:36 +0100)
test/atmos_test.cc
test/closed_caption_test.cc
test/content_test.cc
test/ffmpeg_encoder_test.cc
test/import_dcp_test.cc
test/silence_padding_test.cc
test/srt_subtitle_test.cc
test/ssa_subtitle_test.cc
test/test.cc
test/test.h

index 6689ee8d72e22d2c4cf39297e2bbb01755b54323..50b642c1f423ff43e151cdf1fde2359fc2300fe8 100644 (file)
@@ -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.
 
 
 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 ();
 }
 
index 31824b44393cf6d7f995db68da57e10bc28d722c..cc2dca930e8457ab9eb2efd07f5a4f9e3492b65f 100644 (file)
@@ -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.
 
 #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 ();
 }
index 0815e16c2be64f18185d388cdaf38178ff6dd502..cf34251f5d379206b5e4208a688b9cc74a8177b1 100644 (file)
@@ -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 ();
 }
 
 
index 7a967b2009e06b4e7c2317029a253619c6fff27d..aab3fd8ef1c20b2afa2b834b04ec4178ddbea722 100644 (file)
@@ -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.
 
 
 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"));
index 7729cfe5b4d2c21c635d1a455f8f6dd992552144..44f3c7d444d7008e98d42284a2204d90cff27758 100644 (file)
@@ -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.
 
 
 */
 
+
 /** @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"
 #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);
index 11c5bd0d1a17c7ca63cb365ed2e58717426b753b..d3382f30a3d2401d1fbdc9565ab547530cbd4a3d 100644 (file)
@@ -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 ();
 }
index d07d70ba06e8259fd26f297e42bfde1b9e573eaf..3fe9bc2d20792f5f29ba5089e3b3a9d369523864 100644 (file)
@@ -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 */
index 0756deed90aba2d1d6acf5b098e81e3dc5372a9a..c7e4c39a6e038341ea4e9cd4fa85f0957b1a894e 100644 (file)
@@ -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 ();
 }
index 6c811221d9a3de55d7ef03017cf602f9d0e7739c..292b4e1d9436b60365c6ad5e604a512f52cc108e 100644 (file)
@@ -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);
+       }
+}
index da00fe688d58b59eb4ad82a07bfe463ff9cbf68d..5a2246894992da9cfa71d0f6b9e575a24f8b8969 100644 (file)
@@ -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: