diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-03-24 01:28:16 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-03-24 13:27:31 +0100 |
| commit | 56fcbad9cac0972d4895ac03d935471da8673e0c (patch) | |
| tree | ec3cfbce807ddc1fea5c20769c077d0145ef932e | |
| parent | bc6ef3ae7644c256e2339366e5aa14c4fa4bbee4 (diff) | |
Add verify test to check for erroneous <EntryPoint> and <Duration>v1.8.132215-markers
tags inside <MainMarkers>
| -rw-r--r-- | src/verify.cc | 10 | ||||
| -rw-r--r-- | src/verify.h | 5 | ||||
| -rw-r--r-- | test/verify_test.cc | 49 |
3 files changed, 64 insertions, 0 deletions
diff --git a/src/verify.cc b/src/verify.cc index a0c329d0..bef05a16 100644 --- a/src/verify.cc +++ b/src/verify.cc @@ -1452,6 +1452,12 @@ dcp::verify ( for (auto const& i: reel->main_markers()->get()) { markers_seen.insert (i); } + if (reel->main_markers()->entry_point()) { + notes.push_back ({VerificationNote::Type::ERROR, VerificationNote::Code::UNEXPECTED_ENTRY_POINT}); + } + if (reel->main_markers()->duration()) { + notes.push_back ({VerificationNote::Type::ERROR, VerificationNote::Code::UNEXPECTED_DURATION}); + } } fewest_closed_captions = std::min (fewest_closed_captions, reel->closed_captions().size()); @@ -1763,6 +1769,10 @@ dcp::note_to_string (VerificationNote note) return "Some closed <Text> or <Image> nodes have different vertical alignments within a <Subtitle>."; case VerificationNote::Code::INCORRECT_CLOSED_CAPTION_ORDERING: return "Some closed captions are not listed in the order of their vertical position."; + case VerificationNote::Code::UNEXPECTED_ENTRY_POINT: + return "There is an <EntryPoint> node inside a <MainMarkers>."; + case VerificationNote::Code::UNEXPECTED_DURATION: + return "There is an <Duration> node inside a <MainMarkers>."; } return ""; diff --git a/src/verify.h b/src/verify.h index 424b29e7..3dd7d125 100644 --- a/src/verify.h +++ b/src/verify.h @@ -82,6 +82,7 @@ public: * - MISMATCHED: two things, which should be the same, are not. * - EMPTY: something, which should have a value, has no value. * - MISSING: something, which should be present, is not. + * - UNEXPECTED: something, which is present, should not be. * - FAILED: some part of the verification failed in some serious way. * * Comments should clarify meaning and also say which of the optional fields (e.g. file) @@ -392,6 +393,10 @@ public: MISMATCHED_CLOSED_CAPTION_VALIGN, /** Some closed captions are not listed in the XML in the order of their vertical position */ INCORRECT_CLOSED_CAPTION_ORDERING, + /** Some <MainMarkers> asset has an <EntryPoint> that should not be there */ + UNEXPECTED_ENTRY_POINT, + /** Some <MainMarkers> asset has an <Duration> that should not be there */ + UNEXPECTED_DURATION }; VerificationNote (Type type, Code code) diff --git a/test/verify_test.cc b/test/verify_test.cc index 8126c318..4b4aeea7 100644 --- a/test/verify_test.cc +++ b/test/verify_test.cc @@ -219,6 +219,23 @@ public: BOOST_REQUIRE (_content != old_content); } + void insert (string after, string line) + { + vector<string> lines; + boost::algorithm::split (lines, _content, boost::is_any_of("\r\n"), boost::token_compress_on); + auto old_content = _content; + _content = ""; + bool replaced = false; + for (auto i: lines) { + _content += i; + if (!replaced && i.find(after) != string::npos) { + _content += line; + replaced = true; + } + } + BOOST_REQUIRE (_content != old_content); + } + private: path _path; std::string _content; @@ -3233,3 +3250,35 @@ BOOST_AUTO_TEST_CASE (verify_threed_marked_as_twod) } + +BOOST_AUTO_TEST_CASE (verify_unexpected_things_in_main_markers) +{ + path dir = "build/test/verify_unexpected_things_in_main_markers"; + prepare_directory (dir); + auto dcp = make_simple (dir, 1, 24); + dcp->write_xml ( + dcp::String::compose("libdcp %1", dcp::version), + dcp::String::compose("libdcp %1", dcp::version), + dcp::LocalTime().as_string(), + "A Test DCP" + ); + + { + Editor e (find_cpl(dir)); + e.insert( + " <IntrinsicDuration>24</IntrinsicDuration>", + "<EntryPoint>0</EntryPoint><Duration>24</Duration>" + ); + } + + dcp::CPL cpl (find_cpl(dir)); + + check_verify_result ( + { dir }, + { + { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::MISMATCHED_CPL_HASHES, cpl.id(), canonical(find_cpl(dir)) }, + { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::UNEXPECTED_ENTRY_POINT }, + { dcp::VerificationNote::Type::ERROR, dcp::VerificationNote::Code::UNEXPECTED_DURATION }, + }); +} + |
