diff options
| author | Carl Hetherington <cth@carlh.net> | 2020-12-13 21:22:00 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2021-01-17 20:13:22 +0100 |
| commit | ea454d8c6eabe0dfa3e82b36e5813012cf93395c (patch) | |
| tree | 8c307f78eeee4a09a2a825d7788f7a29fb9a642f | |
| parent | 197b0139dc0765ef5cd67acf6770ef9037718235 (diff) | |
Throw an exception on making a DCP with no reels.
| -rw-r--r-- | src/cpl.cc | 4 | ||||
| -rw-r--r-- | src/exceptions.cc | 8 | ||||
| -rw-r--r-- | src/exceptions.h | 6 | ||||
| -rw-r--r-- | test/cpl_ratings_test.cc | 11 |
4 files changed, 28 insertions, 1 deletions
@@ -198,6 +198,10 @@ CPL::write_xml (boost::filesystem::path file, Standard standard, shared_ptr<cons auto reel_list = root->add_child ("ReelList"); + if (_reels.empty()) { + throw NoReelsError (); + } + bool first = true; for (auto i: _reels) { auto asset_list = i->write_to_cpl (reel_list, standard); diff --git a/src/exceptions.cc b/src/exceptions.cc index ebe8609a..37e699e6 100644 --- a/src/exceptions.cc +++ b/src/exceptions.cc @@ -169,3 +169,11 @@ UnknownChannelIdError::UnknownChannelIdError (std::string id) { } + + +NoReelsError::NoReelsError () + : runtime_error ("Cannot make a DCP when no reels have been added") +{ + +} + diff --git a/src/exceptions.h b/src/exceptions.h index b9bcfd37..76a66808 100644 --- a/src/exceptions.h +++ b/src/exceptions.h @@ -283,6 +283,12 @@ public: }; +class NoReelsError : public std::runtime_error +{ +public: + NoReelsError (); +}; + } #endif diff --git a/test/cpl_ratings_test.cc b/test/cpl_ratings_test.cc index 931359b4..1cb6394e 100644 --- a/test/cpl_ratings_test.cc +++ b/test/cpl_ratings_test.cc @@ -38,6 +38,7 @@ using std::list; using std::string; using std::vector; +using std::shared_ptr; BOOST_AUTO_TEST_CASE (cpl_ratings) { @@ -48,6 +49,9 @@ BOOST_AUTO_TEST_CASE (cpl_ratings) ratings.push_back (dcp::Rating("http://www.movielabs.com/md/ratings/GB/BBFC/1/12A%3C/Agency", "12A")); cpl.set_ratings (ratings); + shared_ptr<dcp::Reel> reel(new dcp::Reel()); + cpl.add (reel); + cpl.write_xml ("build/test/cpl_ratings.xml", dcp::SMPTE, std::shared_ptr<dcp::CertificateChain>()); list<string> ignore; @@ -81,7 +85,12 @@ BOOST_AUTO_TEST_CASE (cpl_ratings) " <Label>12A</Label>\n" " </Rating>\n" " </RatingList>\n" - " <ReelList/>\n" + " <ReelList>\n" + " <Reel>\n" + " <Id>urn:uuid:56a781ed-ace3-4cdf-8391-93b1bcea54eb</Id>\n" + " <AssetList/>\n" + " </Reel>\n" + " </ReelList>\n" "</CompositionPlaylist>\n", ignore ); |
