X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fsubrip_test.cc;h=84ad7f25d4148b87e4ae5471e06263769ef2e3a5;hb=fc56dc97103d00437843a31e1ef0c4915900ad1a;hp=d8c2d75de0da539c4d8a2fc66fe0c1aed63fe8bf;hpb=1b1bc528ee5ca1fee1bd33f9fb6f79cd551e3b33;p=dcpomatic.git diff --git a/test/subrip_test.cc b/test/subrip_test.cc index d8c2d75de..84ad7f25d 100644 --- a/test/subrip_test.cc +++ b/test/subrip_test.cc @@ -17,6 +17,10 @@ */ +/** @file test/subrip_test.cc + * @brief Various tests of the subrip code. + */ + #include #include #include "lib/subrip.h" @@ -121,7 +125,8 @@ BOOST_AUTO_TEST_CASE (subrip_content_test) /** Test parsing of full SubRip file content */ BOOST_AUTO_TEST_CASE (subrip_parse_test) { - shared_ptr content (new SubRipContent (shared_ptr (), "test/data/subrip.srt")); + shared_ptr film = new_test_film ("subrip_parse_test"); + shared_ptr content (new SubRipContent (film, "test/data/subrip.srt")); content->examine (shared_ptr ()); BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds ((3 * 60) + 56.471)); @@ -130,45 +135,45 @@ BOOST_AUTO_TEST_CASE (subrip_parse_test) vector::const_iterator i = s._subtitles.begin(); BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, DCPTime::from_seconds ((1 * 60) + 49.200)); - BOOST_CHECK_EQUAL (i->to, DCPTime::from_seconds ((1 * 60) + 52.351)); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 49.200)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((1 * 60) + 52.351)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "This is a subtitle, and it goes over two lines."); ++i; BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, DCPTime::from_seconds ((1 * 60) + 52.440)); - BOOST_CHECK_EQUAL (i->to, DCPTime::from_seconds ((1 * 60) + 54.351)); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 52.440)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((1 * 60) + 54.351)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "We have emboldened this"); BOOST_CHECK_EQUAL (i->pieces.front().bold, true); ++i; BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, DCPTime::from_seconds ((1 * 60) + 54.440)); - BOOST_CHECK_EQUAL (i->to, DCPTime::from_seconds ((1 * 60) + 56.590)); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 54.440)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((1 * 60) + 56.590)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "And italicised this."); BOOST_CHECK_EQUAL (i->pieces.front().italic, true); ++i; BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, DCPTime::from_seconds ((1 * 60) + 56.680)); - BOOST_CHECK_EQUAL (i->to, DCPTime::from_seconds ((1 * 60) + 58.955)); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((1 * 60) + 56.680)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((1 * 60) + 58.955)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "Shall I compare thee to a summers' day?"); ++i; BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, DCPTime::from_seconds ((2 * 60) + 0.840)); - BOOST_CHECK_EQUAL (i->to, DCPTime::from_seconds ((2 * 60) + 3.400)); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((2 * 60) + 0.840)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((2 * 60) + 3.400)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "Is this a dagger I see before me?"); ++i; BOOST_CHECK (i != s._subtitles.end ()); - BOOST_CHECK_EQUAL (i->from, DCPTime::from_seconds ((3 * 60) + 54.560)); - BOOST_CHECK_EQUAL (i->to, DCPTime::from_seconds ((3 * 60) + 56.471)); + BOOST_CHECK_EQUAL (i->period.from, ContentTime::from_seconds ((3 * 60) + 54.560)); + BOOST_CHECK_EQUAL (i->period.to, ContentTime::from_seconds ((3 * 60) + 56.471)); BOOST_CHECK_EQUAL (i->pieces.size(), 1); BOOST_CHECK_EQUAL (i->pieces.front().text, "Hello world."); @@ -179,18 +184,29 @@ BOOST_AUTO_TEST_CASE (subrip_parse_test) /** Test rendering of a SubRip subtitle */ BOOST_AUTO_TEST_CASE (subrip_render_test) { - shared_ptr content (new SubRipContent (shared_ptr (), "test/data/subrip.srt")); + shared_ptr film = new_test_film ("subrip_render_test"); + shared_ptr content (new SubRipContent (film, "test/data/subrip.srt")); content->examine (shared_ptr ()); BOOST_CHECK_EQUAL (content->full_length(), DCPTime::from_seconds ((3 * 60) + 56.471)); - shared_ptr film = new_test_film ("subrip_render_test"); - - shared_ptr decoder (new SubRipDecoder (film, content)); - shared_ptr dts = dynamic_pointer_cast (decoder->peek ()); + shared_ptr decoder (new SubRipDecoder (content)); + list cts = decoder->get_text_subtitles ( + ContentTimePeriod ( + ContentTime::from_seconds (109), ContentTime::from_seconds (110) + ), false + ); + BOOST_CHECK_EQUAL (cts.size(), 1); - shared_ptr image; - Position position; - render_subtitles (dts->subs, dcp::Size (1998, 1080), image, position); - write_image (image, "build/test/subrip_render_test.png"); + PositionImage image = render_subtitles (cts.front().subs, dcp::Size (1998, 1080)); + write_image (image.image, "build/test/subrip_render_test.png"); check_file ("build/test/subrip_render_test.png", "test/data/subrip_render_test.png"); } + +/** Test of reading a typical .srt */ +BOOST_AUTO_TEST_CASE (subrip_read_test) +{ + shared_ptr film = new_test_film ("subrip_read_test"); + boost::filesystem::path p = private_data / "sintel_en.srt"; + shared_ptr s (new SubRipContent (film, p)); + s->examine (shared_ptr ()); +}