diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-11-30 16:20:10 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-12-01 09:21:18 +0100 |
| commit | efb1172f51bbe15cd1f90b25a032bbe858453f5f (patch) | |
| tree | 12f2cef67bed20866fe5b31dffcbb0a44efe6dae /test/srt_subtitle_test.cc | |
| parent | c8a60139112207c6620b1ccdfe4094728ae7ae67 (diff) | |
Add some failing tests.
Diffstat (limited to 'test/srt_subtitle_test.cc')
| -rw-r--r-- | test/srt_subtitle_test.cc | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/test/srt_subtitle_test.cc b/test/srt_subtitle_test.cc index 11b6b28b9..7caef5245 100644 --- a/test/srt_subtitle_test.cc +++ b/test/srt_subtitle_test.cc @@ -32,6 +32,8 @@ #include "lib/ratio.h" #include "lib/text_content.h" #include "test.h" +#include <dcp/smpte_subtitle_asset.h> +#include <dcp/subtitle_string.h> #include <boost/test/unit_test.hpp> #include <boost/algorithm/string.hpp> #include <list> @@ -205,6 +207,47 @@ BOOST_AUTO_TEST_CASE (srt_subtitle_test6) } +/** Test a case where a & in srt ended up in the SMPTE subtitle as &amp */ +BOOST_AUTO_TEST_CASE(srt_subtitle_entity) +{ + std::ofstream srt("build/test/srt_subtitle_entity.srt"); + srt << "1\n"; + srt << "00:00:01,000 -> 00:00:10,000\n"; + srt << "Hello & world\n"; + srt.close(); + + auto content = make_shared<StringTextFileContent>("build/test/srt_subtitle_entity.srt"); + auto film = new_test_film2("srt_subtitle_entity", { content }); + film->set_interop(false); + content->only_text()->set_use(true); + content->only_text()->set_burn(false); + make_and_verify_dcp ( + film, + { + dcp::VerificationNote::Code::MISSING_SUBTITLE_LANGUAGE, + dcp::VerificationNote::Code::INVALID_SUBTITLE_FIRST_TEXT_TIME, + dcp::VerificationNote::Code::MISSING_CPL_METADATA, + dcp::VerificationNote::Code::INVALID_SUBTITLE_DURATION, + dcp::VerificationNote::Code::INVALID_SUBTITLE_SPACING, + }); + + dcp::SMPTESubtitleAsset check(dcp_file(film, "sub_")); + auto subs = check.subtitles(); + BOOST_REQUIRE_EQUAL(subs.size(), 1U); + auto sub = std::dynamic_pointer_cast<const dcp::SubtitleString>(subs[0]); + BOOST_REQUIRE(sub); + /* libdcp::SubtitleAsset gets the text from the XML with get_content(), which + * resolves the 5 predefined entities & " < > ' so we shouldn't see any + * entity here. + */ + BOOST_CHECK_EQUAL(sub->text(), "Hello & world"); + + /* It should be escaped in the raw XML though */ + BOOST_REQUIRE(static_cast<bool>(check.raw_xml())); + BOOST_CHECK(check.raw_xml()->find("Hello & world") != string::npos); +} + + #if 0 /* XXX: this is disabled; there is some difference in font rendering between the test machine and others. |
